From 11ce26d70589719324087cfee9cf21971046833a Mon Sep 17 00:00:00 2001 From: drewstone Date: Fri, 2 Aug 2024 09:58:26 -0600 Subject: [PATCH] Services integration / removing old unused pallets (#702) * feat: Jobs v2 Milestone 1 (#616) * feat: pallet-services (#624) * feat: Jobs v2 Milestone 1 (#616) * add: pallet-services template * feat: pallet-services functions * adding tests * add more tests * working on service requests * service reqs * add: create service instances * feat: submit job calls and job result * add more tests * add more tests * feat: Jobs v2 Milestone 1 (#616) * add services precompile (cp from jobs precompile) * add `ServiceProviderPrefrences` * update the precompile * call into EVM * call into EVM * calling into EVM * feat: Jobs v2 Milestone 1 (#616) * Working on the demo * Making progress on Pallet => EVM * start using ethabi * validate job inputs using EVM * Address PR Reviews and issues * Fix pallet-services * feat: Add fees to the EVM hooks (#640) * remove unused imports * working on EVM fees from traits * add `CustomEVMCurrencyAdapter` * make txs free for pallet-services * Update runtime * feat: Job Result Verification (#641) * feat: auxiliary storages (#643) * feat: Jobs v2 Milestone 1 (#616) * feat: pallet-services (#624) * feat: Jobs v2 Milestone 1 (#616) * add: pallet-services template * feat: pallet-services functions * adding tests * add more tests * working on service requests * service reqs * add: create service instances * feat: submit job calls and job result * add more tests * add more tests * feat: Jobs v2 Milestone 1 (#616) * add services precompile (cp from jobs precompile) * add `ServiceProviderPrefrences` * update the precompile * call into EVM * call into EVM * calling into EVM * feat: Jobs v2 Milestone 1 (#616) * Working on the demo * Making progress on Pallet => EVM * start using ethabi * validate job inputs using EVM * Address PR Reviews and issues * Fix pallet-services * feat: Add fees to the EVM hooks (#640) * remove unused imports * working on EVM fees from traits * add `CustomEVMCurrencyAdapter` * make txs free for pallet-services * Update runtime * feat: Job Result Verification (#641) * fix namming * feat: Providers Profile * Squashed commit of the following: commit ed3bcceae0f8571b08e317455c2da41f744cd326 Author: shekohex Date: Fri May 10 21:19:15 2024 +0300 feat: Job Result Verification (#641) commit 3cc1b98998efd11536959603cb339e9c05e184ee Author: shekohex Date: Fri May 10 14:27:37 2024 +0300 feat: Add fees to the EVM hooks (#640) * remove unused imports * working on EVM fees from traits * add `CustomEVMCurrencyAdapter` * make txs free for pallet-services * Update runtime commit ae7c6b5e2a4398e06d0a3119ed1294bfec68d1c7 Author: Shady Khalifa Date: Wed May 8 14:49:15 2024 +0300 Fix pallet-services commit 16d42b323c816646f0dd29a9e810ce4a9d60774c Author: shekohex Date: Tue May 7 20:32:17 2024 +0300 feat: pallet-services (#624) * feat: Jobs v2 Milestone 1 (#616) * add: pallet-services template * feat: pallet-services functions * adding tests * add more tests * working on service requests * service reqs * add: create service instances * feat: submit job calls and job result * add more tests * add more tests * feat: Jobs v2 Milestone 1 (#616) * add services precompile (cp from jobs precompile) * add `ServiceProviderPrefrences` * update the precompile * call into EVM * call into EVM * calling into EVM * feat: Jobs v2 Milestone 1 (#616) * Working on the demo * Making progress on Pallet => EVM * start using ethabi * validate job inputs using EVM * Address PR Reviews and issues commit 49b690c252f18168c62658ec4f98f516f7a0efac Author: shekohex Date: Mon Apr 22 18:58:00 2024 +0200 feat: Jobs v2 Milestone 1 (#616) commit a93b343dd211ef8b9bd074c328fd693e065769c4 Author: 1xstj <106580853+1xstj@users.noreply.github.com> Date: Mon May 13 12:54:03 2024 +0100 Enable democracy / update srtool summary (#642) * release v0.6.7 * update democracy and setup srtool summary * fmt * cleanup * add CPU and OS to the gadgets * add user service storage * Update CGGMP21Hooks.sol * feat: Services Runtime API and RPCs (#647) * cp jobs runtime api to services runtime api * add services RPC * Update types * feat: Add Support for multi-sources to the gadgets and move constants to the runtime configuration (#651) * Update flakes * working on type constraints * add constants to the services pallet * allow for multi-sources to the gadgets * move pallet services impl into a new file * Pallet-services benchmarks (#657) * pallet-services benchmarks * update unused variables * update benchmarks to use no-std deps * generate weights * add weights to extrinsics * update codeowners * update flakes * Update tangle-subxt to jobs/v2 (#659) * Publish tangle-subxt to crates.io * hotfix: a workaround an issue with tangle-subxt codegen (#663) * Precompiles to verify Ecdsa signature (#669) * ecdsa-secp256k1 signature verifier precompile * add precompile to testnet runtime * add precompile to verify ecdsa-secp256r1 signature * add precompile to testnet runtime * update precompile address to 2071 * add precompile to verify ecdsa-stark signature * add precompile to testnet runtime * clippy fixes * Precompiles to verify Schnorr and Bls381 Signatures (#671) * add schnorr signature verifier precompiles * cargo fmt * add precompiles to testnet * add bl138 precompile * add precompile to testnet runtime * Cleanup and remove old v1 pallets (#673) * move frost from pallet-dkg * remove pallet-dkg * remove pallet-jobs * remove pallet-roles * remove jobs precompile * Precompiles to verify Ecdsa signature (#669) * ecdsa-secp256k1 signature verifier precompile * add precompile to testnet runtime * add precompile to verify ecdsa-secp256r1 signature * add precompile to testnet runtime * update precompile address to 2071 * add precompile to verify ecdsa-stark signature * add precompile to testnet runtime * clippy fixes * Precompiles to verify Schnorr and Bls381 Signatures (#671) * add schnorr signature verifier precompiles * cargo fmt * add precompiles to testnet * add bl138 precompile * add precompile to testnet runtime * update cargo deps * remove pallet-zksaas * remove examples * delete pallet-skaing * remove jobs, dkg and roles pallet from mainnet and testnet runtimes * compile testnet runtime with precompiles * Revert "delete pallet-skaing" This reverts commit 6f152af9aeb89fb401e906c8d914b072c0b880ad. * remove RolesHandler from staking-pallet * clippy fixes * update precompiles and add readme * update subxt metadata * update types * fix functions name * Remove all old roles/jobs/dkg/zksaas from the repo (#691) * Remove all old roles/jobs/dkg/zksaas from the repo * Update runtime scales * Update runtime.rs files * Export runtime fix * Update testnet runtime subxt * Fix * More fixes * Update tangle-subxt metadata (#692) * update subxt for testnet runtime * update rust bindings * add dumb_trait_bound to Field type * fix errors due to merge conflicts * Update subxt and tangle-subxt * add Evm Events during execution * add debug logs * export subxt_signer under tangle_subxt * Update subxt * fix #704 add indexes to pallets * clippy cleanup * final clippy fix --------- Co-authored-by: shekohex Co-authored-by: Salman Pathan Co-authored-by: 1xstj <106580853+1xstj@users.noreply.github.com> --- .gitmodules | 3 + Cargo.lock | 2263 +- Cargo.toml | 109 +- examples/README.md | 20 - examples/contracts/Cargo.toml | 21 - .../artifacts/VotableSigningRules.json | 1 - .../contracts/examples/deploy_contract.rs | 65 - examples/contracts/examples/sign_proposals.rs | 51 - .../contracts/examples/submit_proposal.rs | 271 - examples/jobs/Cargo.toml | 20 - examples/jobs/examples/key_rotation.rs | 237 - examples/profile/Cargo.toml | 19 - examples/profile/examples/create_profile.rs | 48 - flake.lock | 46 +- flake.nix | 15 +- forge/foundry.toml | 6 + forge/src/Jobs.sol | 85 - forge/src/Runtime.sol | 20 + forge/src/SigningRules.sol | 115 +- forge/src/cggmp21/CGGMP21Hooks.sol | 200 + forge/src/hooks/RegisterationHook.sol | 19 + forge/src/hooks/RequestHook.sol | 33 + forge/test/SigningRules.sol | 18 +- {pallets/dkg/frost => frost}/Cargo.toml | 0 .../frost => frost}/frost-ed25519/Cargo.toml | 0 .../frost => frost}/frost-ed25519/src/lib.rs | 0 .../frost-ed25519/src/types.rs | 0 .../frost => frost}/frost-ed448/Cargo.toml | 0 .../frost => frost}/frost-ed448/src/lib.rs | 0 .../frost => frost}/frost-ed448/src/types.rs | 0 .../dkg/frost => frost}/frost-p256/Cargo.toml | 0 .../dkg/frost => frost}/frost-p256/src/lib.rs | 0 .../frost => frost}/frost-p256/src/types.rs | 0 .../dkg/frost => frost}/frost-p384/Cargo.toml | 0 .../dkg/frost => frost}/frost-p384/src/lib.rs | 0 .../frost => frost}/frost-p384/src/types.rs | 0 .../frost-redjubjub/Cargo.toml | 0 .../frost-redjubjub/src/constants.rs | 0 .../frost-redjubjub/src/hash.rs | 0 .../frost-redjubjub/src/lib.rs | 0 .../frost-redjubjub/src/types.rs | 0 .../frost-ristretto255/Cargo.toml | 0 .../frost-ristretto255/src/lib.rs | 0 .../frost-ristretto255/src/types.rs | 0 .../frost-secp256k1/Cargo.toml | 0 .../frost-secp256k1/src/lib.rs | 0 .../frost-secp256k1/src/types.rs | 0 .../frost => frost}/frost-taproot/Cargo.toml | 0 .../frost => frost}/frost-taproot/src/lib.rs | 0 .../frost-taproot/src/types.rs | 0 {pallets/dkg/frost => frost}/src/challenge.rs | 0 .../dkg/frost => frost}/src/const_crc32.rs | 0 {pallets/dkg/frost => frost}/src/error.rs | 0 .../dkg/frost => frost}/src/identifier.rs | 0 {pallets/dkg/frost => frost}/src/keygen.rs | 0 {pallets/dkg/frost => frost}/src/keys.rs | 0 {pallets/dkg/frost => frost}/src/lib.rs | 0 {pallets/dkg/frost => frost}/src/round1.rs | 0 .../dkg/frost => frost}/src/scalar_mul.rs | 0 .../dkg/frost => frost}/src/serialization.rs | 0 {pallets/dkg/frost => frost}/src/signature.rs | 0 .../dkg/frost => frost}/src/signing_key.rs | 0 {pallets/dkg/frost => frost}/src/traits.rs | 0 {pallets/dkg/frost => frost}/src/util.rs | 0 .../dkg/frost => frost}/src/verifying_key.rs | 0 node/Cargo.toml | 2 +- node/src/chainspec/mainnet.rs | 14 +- node/src/chainspec/testnet.rs | 23 +- node/src/distributions/mainnet.rs | 2 +- node/src/mainnet_fixtures.rs | 17 +- node/src/rpc/mod.rs | 22 +- node/src/testnet_fixtures.rs | 13 +- pallets/dkg/Cargo.toml | 112 - pallets/dkg/src/benchmarking.rs | 14 - pallets/dkg/src/functions.rs | 252 - pallets/dkg/src/lib.rs | 263 - .../src/misbehavior/dfns_cggmp21/aux_only.rs | 238 - .../misbehavior/dfns_cggmp21/hashing_rng.rs | 81 - .../misbehavior/dfns_cggmp21/hex_or_bin.rs | 125 - .../src/misbehavior/dfns_cggmp21/integer.rs | 200 - .../src/misbehavior/dfns_cggmp21/keygen.rs | 264 - .../dkg/src/misbehavior/dfns_cggmp21/mod.rs | 136 - .../dkg/src/misbehavior/dfns_cggmp21/sign.rs | 15 - .../dkg/src/misbehavior/dfns_cggmp21/tests.rs | 982 - .../src/misbehavior/dfns_cggmp21/zk/mod.rs | 3 - .../dfns_cggmp21/zk/no_small_factor.rs | 298 - .../dfns_cggmp21/zk/paillier_blum_modulus.rs | 256 - .../zk/ring_pedersen_parameters.rs | 226 - pallets/dkg/src/misbehavior/mod.rs | 82 - .../dkg/src/misbehavior/zcash_frost/keygen.rs | 237 - .../dkg/src/misbehavior/zcash_frost/mod.rs | 142 - .../dkg/src/misbehavior/zcash_frost/sign.rs | 263 - pallets/dkg/src/mock.rs | 144 - .../dkg/src/signatures_schemes/bls12_381.rs | 37 - pallets/dkg/src/signatures_schemes/ecdsa.rs | 366 - pallets/dkg/src/signatures_schemes/mod.rs | 26 - .../src/signatures_schemes/schnorr_frost.rs | 158 - .../src/signatures_schemes/schnorr_sr25519.rs | 62 - pallets/dkg/src/tests.rs | 621 - pallets/dkg/src/types.rs | 72 - pallets/dkg/src/weights.rs | 55 - pallets/jobs/Cargo.toml | 98 - pallets/jobs/rpc/runtime-api/src/lib.rs | 96 - pallets/jobs/rpc/src/lib.rs | 311 - pallets/jobs/src/benchmarking.rs | 186 - pallets/jobs/src/functions.rs | 652 - pallets/jobs/src/impls.rs | 39 - pallets/jobs/src/lib.rs | 727 - pallets/jobs/src/mock.rs | 530 - pallets/jobs/src/mock_evm.rs | 237 - pallets/jobs/src/rpc.rs | 86 - pallets/jobs/src/tests.rs | 2049 - pallets/jobs/src/types.rs | 93 - pallets/jobs/src/weights.rs | 244 - .../src/tests/delegate.rs | 1 + pallets/roles/Cargo.toml | 78 - pallets/roles/README.md | 152 - pallets/roles/src/benchmarking.rs | 159 - pallets/roles/src/functions.rs | 575 - pallets/roles/src/impls.rs | 166 - pallets/roles/src/lib.rs | 708 - pallets/roles/src/mock.rs | 517 - pallets/roles/src/offences.rs | 70 - pallets/roles/src/profile.rs | 170 - pallets/roles/src/tests.rs | 623 - pallets/roles/src/types.rs | 100 - pallets/roles/src/weights.rs | 327 - pallets/services/Cargo.toml | 128 + pallets/{jobs => services}/rpc/Cargo.toml | 4 +- .../rpc/runtime-api/Cargo.toml | 2 +- pallets/services/rpc/runtime-api/src/lib.rs | 48 + pallets/services/rpc/src/lib.rs | 124 + pallets/services/src/benchmarking.rs | 303 + pallets/services/src/functions.rs | 324 + pallets/services/src/impls.rs | 81 + pallets/services/src/lib.rs | 983 + pallets/services/src/mock.rs | 540 + pallets/services/src/mock_evm.rs | 346 + pallets/services/src/rpc.rs | 45 + pallets/services/src/tests.rs | 628 + pallets/services/src/traits.rs | 33 + pallets/services/src/types.rs | 40 + pallets/services/src/weights.rs | 422 + pallets/staking/src/mock.rs | 32 - pallets/staking/src/pallet/mod.rs | 8 - pallets/zksaas/Cargo.toml | 62 - pallets/zksaas/src/functions.rs | 161 - pallets/zksaas/src/lib.rs | 140 - pallets/zksaas/src/mock.rs | 149 - pallets/zksaas/src/tests.rs | 315 - pallets/zksaas/src/types.rs | 66 - pallets/zksaas/src/weights.rs | 55 - precompiles/README.md | 62 + precompiles/batch/src/tests.rs | 2 +- precompiles/jobs/Cargo.toml | 95 - precompiles/jobs/Jobs.sol | 85 - .../jobs/examples/charge_fee_signing_rule.sol | 42 - .../jobs/examples/public_signing_rule.sol | 21 - .../whitelist_callers_signing_rule.sol | 48 - precompiles/jobs/src/lib.rs | 289 - precompiles/jobs/src/mock.rs | 392 - precompiles/jobs/src/tests.rs | 64 - precompiles/pallet-democracy/src/tests.rs | 12 +- precompiles/preimage/src/tests.rs | 2 +- precompiles/proxy/src/tests.rs | 2 +- precompiles/staking/src/lib.rs | 14 - precompiles/staking/src/mock.rs | 43 +- precompiles/staking/src/tests.rs | 17 +- .../utils/macro/src/precompile/attr.rs | 2 +- precompiles/utils/src/lib.rs | 2 +- .../verify-bls381-signature/Bls381.sol | 16 + .../verify-bls381-signature/Cargo.toml | 51 + .../verify-bls381-signature/src/lib.rs | 80 + .../verify-bls381-signature/src/mock.rs | 272 + .../verify-bls381-signature/src/tests.rs | 114 + .../Cargo.toml | 49 + .../EcdsaSecp256k1.sol | 16 + .../src/lib.rs | 94 + .../src/mock.rs | 272 + .../src/tests.rs | 106 + .../Cargo.toml | 50 + .../EcdsaSecp256r1.sol | 16 + .../src/lib.rs | 94 + .../src/mock.rs | 272 + .../src/tests.rs | 101 + .../verify-ecdsa-stark-signature/Cargo.toml | 56 + .../EcdsaStark.sol | 16 + .../verify-ecdsa-stark-signature/src/lib.rs | 132 + .../verify-ecdsa-stark-signature/src/mock.rs | 272 + .../verify-ecdsa-stark-signature/src/tests.rs | 101 + .../verify-schnorr-signatures/Cargo.toml | 70 + .../SchnorrSignatureVerifier.sol | 16 + .../verify-schnorr-signatures/src/lib.rs | 315 + .../verify-schnorr-signatures/src/mock.rs | 283 + .../verify-schnorr-signatures/src/tests.rs | 46 + primitives/Cargo.toml | 20 +- primitives/src/jobs/mod.rs | 411 - primitives/src/jobs/traits.rs | 165 - primitives/src/jobs/tss.rs | 213 - primitives/src/jobs/zksaas.rs | 167 - primitives/src/lib.rs | 7 +- primitives/src/misbehavior/dfns_cggmp21.rs | 107 - primitives/src/misbehavior/mod.rs | 76 - primitives/src/misbehavior/traits.rs | 33 - primitives/src/misbehavior/zcash_frost.rs | 44 - primitives/src/roles/mod.rs | 174 - primitives/src/roles/traits.rs | 96 - primitives/src/roles/tss.rs | 70 - primitives/src/roles/zksaas.rs | 56 - primitives/src/services/field.rs | 501 + primitives/src/services/mod.rs | 825 + runtime/mainnet/Cargo.toml | 234 +- runtime/mainnet/src/filters.rs | 7 +- runtime/mainnet/src/lib.rs | 333 +- runtime/testnet/Cargo.toml | 328 +- runtime/testnet/src/frontier_evm.rs | 54 +- runtime/testnet/src/lib.rs | 415 +- runtime/testnet/src/precompiles.rs | 85 +- runtime/testnet/src/tangle_services.rs | 149 + tangle-subxt/Cargo.toml | 14 +- .../metadata/tangle-mainnet-runtime.scale | Bin 253681 -> 191255 bytes .../metadata/tangle-testnet-runtime.scale | Bin 253681 -> 244107 bytes tangle-subxt/src/lib.rs | 6 +- tangle-subxt/src/tangle_mainnet_runtime.rs | 30937 ++++++---------- tangle-subxt/src/tangle_testnet_runtime.rs | 9954 ++--- tangle-subxt/src/test.rs | 182 - types/package.json | 1 + types/service-demo.ts | 279 + types/src/interfaces/augment-api-consts.ts | 253 +- types/src/interfaces/augment-api-errors.ts | 128 +- types/src/interfaces/augment-api-events.ts | 2176 +- types/src/interfaces/augment-api-query.ts | 2489 +- types/src/interfaces/augment-api-tx.ts | 4243 ++- types/src/interfaces/lookup.ts | 6823 ++-- types/src/interfaces/registry.ts | 37 +- types/src/interfaces/types-lookup.ts | 3217 +- types/src/metadata/metadata.json | 2 +- types/src/metadata/static-latest.ts | 2 +- types/src/metadata/static-type.ts | 3 - types/yarn.lock | 36 +- 240 files changed, 39974 insertions(+), 53023 deletions(-) delete mode 100644 examples/README.md delete mode 100644 examples/contracts/Cargo.toml delete mode 100644 examples/contracts/artifacts/VotableSigningRules.json delete mode 100644 examples/contracts/examples/deploy_contract.rs delete mode 100644 examples/contracts/examples/sign_proposals.rs delete mode 100644 examples/contracts/examples/submit_proposal.rs delete mode 100644 examples/jobs/Cargo.toml delete mode 100644 examples/jobs/examples/key_rotation.rs delete mode 100644 examples/profile/Cargo.toml delete mode 100644 examples/profile/examples/create_profile.rs delete mode 100644 forge/src/Jobs.sol create mode 100644 forge/src/Runtime.sol create mode 100644 forge/src/cggmp21/CGGMP21Hooks.sol create mode 100644 forge/src/hooks/RegisterationHook.sol create mode 100644 forge/src/hooks/RequestHook.sol rename {pallets/dkg/frost => frost}/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-ed25519/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-ed25519/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/frost-ed25519/src/types.rs (100%) rename {pallets/dkg/frost => frost}/frost-ed448/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-ed448/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/frost-ed448/src/types.rs (100%) rename {pallets/dkg/frost => frost}/frost-p256/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-p256/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/frost-p256/src/types.rs (100%) rename {pallets/dkg/frost => frost}/frost-p384/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-p384/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/frost-p384/src/types.rs (100%) rename {pallets/dkg/frost => frost}/frost-redjubjub/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-redjubjub/src/constants.rs (100%) rename {pallets/dkg/frost => frost}/frost-redjubjub/src/hash.rs (100%) rename {pallets/dkg/frost => frost}/frost-redjubjub/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/frost-redjubjub/src/types.rs (100%) rename {pallets/dkg/frost => frost}/frost-ristretto255/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-ristretto255/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/frost-ristretto255/src/types.rs (100%) rename {pallets/dkg/frost => frost}/frost-secp256k1/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-secp256k1/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/frost-secp256k1/src/types.rs (100%) rename {pallets/dkg/frost => frost}/frost-taproot/Cargo.toml (100%) rename {pallets/dkg/frost => frost}/frost-taproot/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/frost-taproot/src/types.rs (100%) rename {pallets/dkg/frost => frost}/src/challenge.rs (100%) rename {pallets/dkg/frost => frost}/src/const_crc32.rs (100%) rename {pallets/dkg/frost => frost}/src/error.rs (100%) rename {pallets/dkg/frost => frost}/src/identifier.rs (100%) rename {pallets/dkg/frost => frost}/src/keygen.rs (100%) rename {pallets/dkg/frost => frost}/src/keys.rs (100%) rename {pallets/dkg/frost => frost}/src/lib.rs (100%) rename {pallets/dkg/frost => frost}/src/round1.rs (100%) rename {pallets/dkg/frost => frost}/src/scalar_mul.rs (100%) rename {pallets/dkg/frost => frost}/src/serialization.rs (100%) rename {pallets/dkg/frost => frost}/src/signature.rs (100%) rename {pallets/dkg/frost => frost}/src/signing_key.rs (100%) rename {pallets/dkg/frost => frost}/src/traits.rs (100%) rename {pallets/dkg/frost => frost}/src/util.rs (100%) rename {pallets/dkg/frost => frost}/src/verifying_key.rs (100%) delete mode 100644 pallets/dkg/Cargo.toml delete mode 100644 pallets/dkg/src/benchmarking.rs delete mode 100644 pallets/dkg/src/functions.rs delete mode 100644 pallets/dkg/src/lib.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/aux_only.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/hashing_rng.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/hex_or_bin.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/integer.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/keygen.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/mod.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/sign.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/tests.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/zk/mod.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/zk/no_small_factor.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/zk/paillier_blum_modulus.rs delete mode 100644 pallets/dkg/src/misbehavior/dfns_cggmp21/zk/ring_pedersen_parameters.rs delete mode 100644 pallets/dkg/src/misbehavior/mod.rs delete mode 100644 pallets/dkg/src/misbehavior/zcash_frost/keygen.rs delete mode 100644 pallets/dkg/src/misbehavior/zcash_frost/mod.rs delete mode 100644 pallets/dkg/src/misbehavior/zcash_frost/sign.rs delete mode 100644 pallets/dkg/src/mock.rs delete mode 100644 pallets/dkg/src/signatures_schemes/bls12_381.rs delete mode 100644 pallets/dkg/src/signatures_schemes/ecdsa.rs delete mode 100644 pallets/dkg/src/signatures_schemes/mod.rs delete mode 100644 pallets/dkg/src/signatures_schemes/schnorr_frost.rs delete mode 100644 pallets/dkg/src/signatures_schemes/schnorr_sr25519.rs delete mode 100644 pallets/dkg/src/tests.rs delete mode 100644 pallets/dkg/src/types.rs delete mode 100644 pallets/dkg/src/weights.rs delete mode 100644 pallets/jobs/Cargo.toml delete mode 100644 pallets/jobs/rpc/runtime-api/src/lib.rs delete mode 100644 pallets/jobs/rpc/src/lib.rs delete mode 100644 pallets/jobs/src/benchmarking.rs delete mode 100644 pallets/jobs/src/functions.rs delete mode 100644 pallets/jobs/src/impls.rs delete mode 100644 pallets/jobs/src/lib.rs delete mode 100644 pallets/jobs/src/mock.rs delete mode 100644 pallets/jobs/src/mock_evm.rs delete mode 100644 pallets/jobs/src/rpc.rs delete mode 100644 pallets/jobs/src/tests.rs delete mode 100644 pallets/jobs/src/types.rs delete mode 100644 pallets/jobs/src/weights.rs delete mode 100644 pallets/roles/Cargo.toml delete mode 100644 pallets/roles/README.md delete mode 100644 pallets/roles/src/benchmarking.rs delete mode 100644 pallets/roles/src/functions.rs delete mode 100644 pallets/roles/src/impls.rs delete mode 100644 pallets/roles/src/lib.rs delete mode 100644 pallets/roles/src/mock.rs delete mode 100644 pallets/roles/src/offences.rs delete mode 100644 pallets/roles/src/profile.rs delete mode 100644 pallets/roles/src/tests.rs delete mode 100644 pallets/roles/src/types.rs delete mode 100644 pallets/roles/src/weights.rs create mode 100644 pallets/services/Cargo.toml rename pallets/{jobs => services}/rpc/Cargo.toml (84%) rename pallets/{jobs => services}/rpc/runtime-api/Cargo.toml (94%) create mode 100644 pallets/services/rpc/runtime-api/src/lib.rs create mode 100644 pallets/services/rpc/src/lib.rs create mode 100644 pallets/services/src/benchmarking.rs create mode 100644 pallets/services/src/functions.rs create mode 100644 pallets/services/src/impls.rs create mode 100644 pallets/services/src/lib.rs create mode 100644 pallets/services/src/mock.rs create mode 100644 pallets/services/src/mock_evm.rs create mode 100644 pallets/services/src/rpc.rs create mode 100644 pallets/services/src/tests.rs create mode 100644 pallets/services/src/traits.rs create mode 100644 pallets/services/src/types.rs create mode 100644 pallets/services/src/weights.rs delete mode 100644 pallets/zksaas/Cargo.toml delete mode 100644 pallets/zksaas/src/functions.rs delete mode 100644 pallets/zksaas/src/lib.rs delete mode 100644 pallets/zksaas/src/mock.rs delete mode 100644 pallets/zksaas/src/tests.rs delete mode 100644 pallets/zksaas/src/types.rs delete mode 100644 pallets/zksaas/src/weights.rs create mode 100644 precompiles/README.md delete mode 100644 precompiles/jobs/Cargo.toml delete mode 100644 precompiles/jobs/Jobs.sol delete mode 100644 precompiles/jobs/examples/charge_fee_signing_rule.sol delete mode 100644 precompiles/jobs/examples/public_signing_rule.sol delete mode 100644 precompiles/jobs/examples/whitelist_callers_signing_rule.sol delete mode 100644 precompiles/jobs/src/lib.rs delete mode 100644 precompiles/jobs/src/mock.rs delete mode 100644 precompiles/jobs/src/tests.rs create mode 100644 precompiles/verify-bls381-signature/Bls381.sol create mode 100644 precompiles/verify-bls381-signature/Cargo.toml create mode 100644 precompiles/verify-bls381-signature/src/lib.rs create mode 100644 precompiles/verify-bls381-signature/src/mock.rs create mode 100644 precompiles/verify-bls381-signature/src/tests.rs create mode 100644 precompiles/verify-ecdsa-secp256k1-signature/Cargo.toml create mode 100644 precompiles/verify-ecdsa-secp256k1-signature/EcdsaSecp256k1.sol create mode 100644 precompiles/verify-ecdsa-secp256k1-signature/src/lib.rs create mode 100644 precompiles/verify-ecdsa-secp256k1-signature/src/mock.rs create mode 100644 precompiles/verify-ecdsa-secp256k1-signature/src/tests.rs create mode 100644 precompiles/verify-ecdsa-secp256r1-signature/Cargo.toml create mode 100644 precompiles/verify-ecdsa-secp256r1-signature/EcdsaSecp256r1.sol create mode 100644 precompiles/verify-ecdsa-secp256r1-signature/src/lib.rs create mode 100644 precompiles/verify-ecdsa-secp256r1-signature/src/mock.rs create mode 100644 precompiles/verify-ecdsa-secp256r1-signature/src/tests.rs create mode 100644 precompiles/verify-ecdsa-stark-signature/Cargo.toml create mode 100644 precompiles/verify-ecdsa-stark-signature/EcdsaStark.sol create mode 100644 precompiles/verify-ecdsa-stark-signature/src/lib.rs create mode 100644 precompiles/verify-ecdsa-stark-signature/src/mock.rs create mode 100644 precompiles/verify-ecdsa-stark-signature/src/tests.rs create mode 100644 precompiles/verify-schnorr-signatures/Cargo.toml create mode 100644 precompiles/verify-schnorr-signatures/SchnorrSignatureVerifier.sol create mode 100644 precompiles/verify-schnorr-signatures/src/lib.rs create mode 100644 precompiles/verify-schnorr-signatures/src/mock.rs create mode 100644 precompiles/verify-schnorr-signatures/src/tests.rs delete mode 100644 primitives/src/jobs/mod.rs delete mode 100644 primitives/src/jobs/traits.rs delete mode 100644 primitives/src/jobs/tss.rs delete mode 100644 primitives/src/jobs/zksaas.rs delete mode 100644 primitives/src/misbehavior/dfns_cggmp21.rs delete mode 100644 primitives/src/misbehavior/mod.rs delete mode 100644 primitives/src/misbehavior/traits.rs delete mode 100644 primitives/src/misbehavior/zcash_frost.rs delete mode 100644 primitives/src/roles/mod.rs delete mode 100644 primitives/src/roles/traits.rs delete mode 100644 primitives/src/roles/tss.rs delete mode 100644 primitives/src/roles/zksaas.rs create mode 100644 primitives/src/services/field.rs create mode 100644 primitives/src/services/mod.rs create mode 100644 runtime/testnet/src/tangle_services.rs delete mode 100644 tangle-subxt/src/test.rs create mode 100644 types/service-demo.ts delete mode 100644 types/src/metadata/static-type.ts diff --git a/.gitmodules b/.gitmodules index 19485a1e0..0fbd34356 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "forge/lib/forge-std"] path = forge/lib/forge-std url = https://github.com/foundry-rs/forge-std +[submodule "forge/lib/openzeppelin-contracts"] + path = forge/lib/openzeppelin-contracts + url = https://github.com/OpenZeppelin/openzeppelin-contracts diff --git a/Cargo.lock b/Cargo.lock index 95493d7fe..dba9833a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -605,15 +605,6 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" -[[package]] -name = "arrayvec" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] - [[package]] name = "arrayvec" version = "0.7.4" @@ -679,42 +670,6 @@ dependencies = [ "futures-core", ] -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite 0.2.14", -] - -[[package]] -name = "async-executor" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-fs" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - [[package]] name = "async-io" version = "2.3.3" @@ -745,61 +700,6 @@ dependencies = [ "pin-project-lite 0.2.14", ] -[[package]] -name = "async-net" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" -dependencies = [ - "async-io", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-process" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" -dependencies = [ - "async-channel 2.3.1", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener 5.3.1", - "futures-lite", - "rustix 0.38.34", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-signal" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb3634b73397aa844481f814fad23bbf07fdb0eabec10f2eb95e58944b1ec32" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix 0.38.34", - "signal-hook-registry", - "slab", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.81" @@ -844,18 +744,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "atomic-take" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "auto_impl" version = "1.2.0" @@ -929,12 +817,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" -[[package]] -name = "base58" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" - [[package]] name = "base64" version = "0.13.1" @@ -947,12 +829,6 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - [[package]] name = "base64ct" version = "1.6.0" @@ -1105,16 +981,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "blake2-rfc" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" -dependencies = [ - "arrayvec 0.4.12", - "constant_time_eq 0.1.5", -] - [[package]] name = "blake2b_simd" version = "1.0.2" @@ -1122,7 +988,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "constant_time_eq 0.3.0", ] @@ -1133,7 +999,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "constant_time_eq 0.3.0", ] @@ -1144,7 +1010,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "cc", "cfg-if", "constant_time_eq 0.3.0", @@ -1175,19 +1041,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" -[[package]] -name = "blocking" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel 2.3.1", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - [[package]] name = "bls12_381_plus" version = "0.8.17" @@ -1312,20 +1165,6 @@ name = "bytemuck" version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] [[package]] name = "byteorder" @@ -1335,9 +1174,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "fca2be1d5c43812bae364ee3f30b3afcb7877cf59f4aeb94c66f313a41d2fac9" dependencies = [ "serde", ] @@ -1435,12 +1274,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cexpr" version = "0.6.0" @@ -1471,57 +1304,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "cggmp21" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abed25ad197376ac58cee22eb17fcff6a5c0daeff02dcf0dbc263515da557403" -dependencies = [ - "cggmp21-keygen", - "digest 0.10.7", - "futures 0.3.30", - "generic-ec", - "generic-ec-zkp", - "hex", - "key-share", - "paillier-zk", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "round-based", - "serde", - "serde_with 2.3.3", - "sha2 0.10.8", - "thiserror", - "udigest", -] - -[[package]] -name = "cggmp21-keygen" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a502901b03b7a77e31348435318ed5e0c01193322c145211d265e4b973f98e" -dependencies = [ - "digest 0.10.7", - "futures 0.3.30", - "generic-ec", - "generic-ec-zkp", - "hex", - "key-share", - "rand_core 0.6.4", - "round-based", - "serde", - "serde_with 2.3.3", - "sha2 0.10.8", - "thiserror", - "udigest", -] - [[package]] name = "chacha" version = "0.3.0" @@ -1566,7 +1348,6 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", - "serde", "wasm-bindgen", "windows-targets 0.52.6", ] @@ -1626,9 +1407,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.13" +version = "4.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" +checksum = "35723e6a11662c2afb578bcf0b88bf6ea8e21282a953428f240574fcc3a2b5b3" dependencies = [ "clap_builder", "clap_derive", @@ -1636,22 +1417,22 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.13" +version = "4.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" +checksum = "49eb96cbfa7cfa35017b7cd548c75b14c3118c98b423041d70562665e07fb0fa" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", "terminal_size", ] [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "5d029b67f89d30bbb547c89fd5161293c0aec155fc691d7924b64550662db93e" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -1753,16 +1534,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - [[package]] name = "comfy-table" version = "7.1.1" @@ -2365,38 +2136,14 @@ dependencies = [ "syn 2.0.72", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -2409,28 +2156,17 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", + "strsim", "syn 2.0.72", ] -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - [[package]] name = "darling_macro" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.20.10", + "darling_core", "quote", "syn 2.0.72", ] @@ -2499,15 +2235,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", - "serde", ] -[[package]] -name = "derivation-path" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" - [[package]] name = "derivative" version = "2.2.0" @@ -2541,17 +2270,6 @@ dependencies = [ "syn 2.0.72", ] -[[package]] -name = "derive-where" -version = "1.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - [[package]] name = "derive_more" version = "0.99.18" @@ -2691,7 +2409,7 @@ dependencies = [ "ark-serialize", "ark-std", "ark-transcript", - "arrayvec 0.7.4", + "arrayvec", "zeroize", ] @@ -2718,7 +2436,7 @@ dependencies = [ "regex", "syn 2.0.72", "termcolor", - "toml 0.8.19", + "toml 0.8.17", "walkdir", ] @@ -2734,12 +2452,6 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - [[package]] name = "dtoa" version = "1.0.9" @@ -2832,21 +2544,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ed25519-zebra" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" -dependencies = [ - "curve25519-dalek 4.1.3", - "ed25519", - "hashbrown 0.14.5", - "hex", - "rand_core 0.6.4", - "sha2 0.10.8", - "zeroize", -] - [[package]] name = "ed448-goldilocks-plus" version = "0.11.2" @@ -2867,12 +2564,24 @@ version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" dependencies = [ - "enum-ordinalize", + "enum-ordinalize 3.1.15", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "educe" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4bd92664bf78c4d3dba9b7cdafce6fa15b13ed3ed16175218196942e99168a8" +dependencies = [ + "enum-ordinalize 4.3.0", + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "either" version = "1.13.0" @@ -2999,6 +2708,26 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "enumflags2" version = "0.7.10" @@ -3045,7 +2774,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" dependencies = [ - "darling 0.20.10", + "darling", "proc-macro2", "quote", "syn 2.0.72", @@ -3278,7 +3007,7 @@ dependencies = [ "serde", "serde_json", "syn 2.0.72", - "toml 0.8.19", + "toml 0.8.17", "walkdir", ] @@ -3304,7 +3033,7 @@ version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "bytes", "cargo_metadata 0.18.1", "chrono", @@ -3389,7 +3118,7 @@ dependencies = [ "futures-timer", "futures-util", "hashers", - "http 0.2.12", + "http", "instant", "jsonwebtoken", "once_cell", @@ -3466,16 +3195,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "pin-project-lite 0.2.14", -] - [[package]] name = "event-listener" version = "5.3.1" @@ -3588,57 +3307,6 @@ dependencies = [ "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", ] -[[package]] -name = "examples-contracts" -version = "0.1.0" -dependencies = [ - "ethers", - "hex", - "parity-scale-codec 3.6.12", - "scale-info", - "serde_json", - "sp-core", - "sp-io", - "subxt", - "subxt-signer", - "tangle-crypto-primitives", - "tangle-subxt", - "tokio", -] - -[[package]] -name = "examples-jobs" -version = "0.1.0" -dependencies = [ - "ethers", - "hex", - "parity-scale-codec 3.6.12", - "scale-info", - "serde_json", - "sp-core", - "subxt", - "subxt-signer", - "tangle-crypto-primitives", - "tangle-subxt", - "tokio", -] - -[[package]] -name = "examples-profile" -version = "0.1.0" -dependencies = [ - "hex", - "parity-scale-codec 3.6.12", - "scale-info", - "sp-core", - "sp-io", - "subxt", - "subxt-signer", - "tangle-crypto-primitives", - "tangle-subxt", - "tokio", -] - [[package]] name = "exit-future" version = "0.2.0" @@ -3679,19 +3347,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" -[[package]] -name = "fast-paillier" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da6ffbfab3f6dc72b28f6f33dc76705c1a56b2c119680c936d239990beb5ae6" -dependencies = [ - "bytemuck", - "rand_core 0.6.4", - "rug", - "serde", - "thiserror", -] - [[package]] name = "faster-hex" version = "0.6.1" @@ -3821,7 +3476,7 @@ dependencies = [ "fp-storage", "futures 0.3.30", "hex", - "jsonrpsee 0.20.3", + "jsonrpsee", "libsecp256k1", "log", "pallet-evm", @@ -3866,7 +3521,7 @@ source = "git+https://github.com/paritytech/frontier.git?branch=polkadot-v1.7.0# dependencies = [ "ethereum", "ethereum-types 0.14.1", - "jsonrpsee 0.20.3", + "jsonrpsee", "rlp", "rustc-hex", "serde", @@ -3998,16 +3653,6 @@ dependencies = [ "scale-info", ] -[[package]] -name = "finito" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" -dependencies = [ - "futures-timer", - "pin-project", -] - [[package]] name = "fixed" version = "1.28.0" @@ -4352,17 +3997,6 @@ dependencies = [ "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", ] -[[package]] -name = "frame-metadata" -version = "15.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" -dependencies = [ - "cfg-if", - "parity-scale-codec 3.6.12", - "scale-info", -] - [[package]] name = "frame-metadata" version = "16.0.0" @@ -4400,7 +4034,7 @@ dependencies = [ "bitflags 1.3.2", "docify", "environmental", - "frame-metadata 16.0.0", + "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -4446,7 +4080,7 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "syn 2.0.72", ] @@ -4763,10 +4397,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand", "futures-core", - "futures-io", - "parking", "pin-project-lite 0.2.14", ] @@ -4882,10 +4513,10 @@ dependencies = [ "generic-ec-core", "generic-ec-curves", "hex", - "phantom-type 0.4.2", + "phantom-type", "rand_core 0.6.4", "serde", - "serde_with 2.3.3", + "serde_with", "subtle 2.6.1", "udigest", "zeroize", @@ -5036,16 +4667,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "gmp-mpfr-sys" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0205cd82059bc63b63cf516d714352a30c44f2c74da9961dfda2617ae6b5918" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "group" version = "0.13.0" @@ -5068,7 +4689,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 0.2.12", + "http", "indexmap 2.3.0", "slab", "tokio", @@ -5150,7 +4771,6 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash 0.8.11", "allocator-api2", - "serde", ] [[package]] @@ -5299,17 +4919,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http-body" version = "0.4.6" @@ -5317,7 +4926,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http 0.2.12", + "http", "pin-project-lite 0.2.14", ] @@ -5356,7 +4965,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 0.2.12", + "http", "http-body", "httparse", "httpdate", @@ -5376,13 +4985,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http 0.2.12", + "http", "hyper", "log", "rustls 0.21.12", - "rustls-native-certs 0.6.3", + "rustls-native-certs", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", ] [[package]] @@ -5557,12 +5166,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "indexmap-nostd" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" - [[package]] name = "inout" version = "0.1.3" @@ -5675,26 +5278,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - [[package]] name = "jobserver" version = "0.1.32" @@ -5719,79 +5302,12 @@ version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "affdc52f7596ccb2d7645231fc6163bb314630c989b64998f3699a28b4d5d4dc" dependencies = [ - "jsonrpsee-core 0.20.3", + "jsonrpsee-core", "jsonrpsee-proc-macros", "jsonrpsee-server", - "jsonrpsee-types 0.20.3", - "tokio", - "tracing", -] - -[[package]] -name = "jsonrpsee" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" -dependencies = [ - "jsonrpsee-client-transport 0.22.5", - "jsonrpsee-core 0.22.5", - "jsonrpsee-http-client", - "jsonrpsee-types 0.22.5", -] - -[[package]] -name = "jsonrpsee" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" -dependencies = [ - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", - "jsonrpsee-ws-client", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" -dependencies = [ - "futures-util", - "http 0.2.12", - "jsonrpsee-core 0.22.5", - "pin-project", - "rustls-native-certs 0.7.1", - "rustls-pki-types", - "soketto 0.7.1", - "thiserror", - "tokio", - "tokio-rustls 0.25.0", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" -dependencies = [ - "base64 0.22.1", - "futures-util", - "http 1.1.0", - "jsonrpsee-core 0.23.2", - "pin-project", - "rustls 0.23.12", - "rustls-pki-types", - "rustls-platform-verifier", - "soketto 0.8.0", - "thiserror", + "jsonrpsee-types", "tokio", - "tokio-rustls 0.26.0", - "tokio-util", "tracing", - "url", ] [[package]] @@ -5805,81 +5321,16 @@ dependencies = [ "beef", "futures-util", "hyper", - "jsonrpsee-types 0.20.3", + "jsonrpsee-types", "parking_lot 0.12.3", "rand 0.8.5", "rustc-hash", "serde", "serde_json", - "soketto 0.7.1", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257e1ec385e07b0255dde0b933f948b5c8b8c28d42afda9587c3a967b896d" -dependencies = [ - "anyhow", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "hyper", - "jsonrpsee-types 0.22.5", - "pin-project", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79712302e737d23ca0daa178e752c9334846b08321d439fd89af9a384f8c830b" -dependencies = [ - "anyhow", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "jsonrpsee-types 0.23.2", - "pin-project", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "jsonrpsee-http-client" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ccf93fc4a0bfe05d851d37d7c32b7f370fe94336b52a2f0efc5f1981895c2e5" -dependencies = [ - "async-trait", - "hyper", - "hyper-rustls", - "jsonrpsee-core 0.22.5", - "jsonrpsee-types 0.22.5", - "serde", - "serde_json", + "soketto", "thiserror", "tokio", - "tower", "tracing", - "url", ] [[package]] @@ -5902,14 +5353,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82c39a00449c9ef3f50b84fc00fc4acba20ef8f559f07902244abf4c15c5ab9c" dependencies = [ "futures-util", - "http 0.2.12", + "http", "hyper", - "jsonrpsee-core 0.20.3", - "jsonrpsee-types 0.20.3", + "jsonrpsee-core", + "jsonrpsee-types", "route-recognizer", "serde", "serde_json", - "soketto 0.7.1", + "soketto", "thiserror", "tokio", "tokio-stream", @@ -5932,45 +5383,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "jsonrpsee-types" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" -dependencies = [ - "beef", - "http 1.1.0", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "jsonrpsee-ws-client" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" -dependencies = [ - "http 1.1.0", - "jsonrpsee-client-transport 0.23.2", - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", - "url", -] - [[package]] name = "jsonwebtoken" version = "8.3.0" @@ -6023,21 +5435,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "key-share" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30237f93fc5cb18529644aa3d2adeec21ea19067ce6ebaef68889c9f183201cc" -dependencies = [ - "displaydoc", - "generic-ec", - "generic-ec-zkp", - "hex", - "serde", - "serde_with 2.3.3", - "thiserror", -] - [[package]] name = "keystream" version = "1.0.0" @@ -6273,7 +5670,7 @@ dependencies = [ "libp2p-identity", "libp2p-swarm", "log", - "lru 0.10.1", + "lru", "quick-protobuf", "quick-protobuf-codec", "smallvec", @@ -6305,7 +5702,7 @@ version = "0.43.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "asynchronous-codec", "bytes", "either", @@ -6535,7 +5932,7 @@ dependencies = [ "parking_lot 0.12.3", "quicksink", "rw-stream-sink", - "soketto 0.7.1", + "soketto", "url", "webpki-roots 0.22.6", ] @@ -6751,15 +6148,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "lru" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" -dependencies = [ - "hashbrown 0.14.5", -] - [[package]] name = "lru-cache" version = "0.1.2" @@ -6871,29 +6259,6 @@ dependencies = [ "syn 2.0.72", ] -[[package]] -name = "malachite-base" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c817c713ff9f16e06cfdc23baa3fecf1b71eaaac714816a98a560f4e350aa6" -dependencies = [ - "hashbrown 0.14.5", - "itertools 0.11.0", - "libm", - "ryu", -] - -[[package]] -name = "malachite-nz" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "603729facf62429736ac17a9fc9fe1bf7e0eb8bde3da3b18cc2b6153150464d5" -dependencies = [ - "itertools 0.11.0", - "libm", - "malachite-base", -] - [[package]] name = "match_cfg" version = "0.1.0" @@ -7012,7 +6377,7 @@ checksum = "f313fcff1d2a4bcaa2deeaa00bf7530d77d5f7bd0467a117dde2e29a75a7a17a" dependencies = [ "array-bytes 6.2.3", "blake3", - "frame-metadata 16.0.0", + "frame-metadata", "parity-scale-codec 3.6.12", "scale-decode", "scale-info", @@ -7070,7 +6435,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "bitflags 1.3.2", "blake2 0.10.6", "c2-chacha", @@ -7093,7 +6458,7 @@ name = "mmr-rpc" version = "28.0.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "jsonrpsee 0.20.3", + "jsonrpsee", "parity-scale-codec 3.6.12", "serde", "sp-api", @@ -7421,18 +6786,6 @@ dependencies = [ "libc", ] -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -7521,7 +6874,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "itoa", ] @@ -7684,7 +7037,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "auto_impl", "bytes", "ethereum-types 0.14.1", @@ -7781,22 +7134,6 @@ dependencies = [ "primeorder 0.13.6 (git+https://github.com/LIT-Protocol/elliptic-curves.git)", ] -[[package]] -name = "paillier-zk" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390990e7d2f9a189043a2ce042cce3107955046561d5a89ae717dfc31b9c1ca4" -dependencies = [ - "digest 0.10.7", - "fast-paillier", - "generic-ec", - "rand_core 0.6.4", - "rug", - "serde", - "serde_with 3.9.0", - "thiserror", -] - [[package]] name = "pairing" version = "0.23.0" @@ -8075,63 +7412,6 @@ dependencies = [ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", ] -[[package]] -name = "pallet-dkg" -version = "1.1.0" -dependencies = [ - "cggmp21", - "derivation-path", - "digest 0.10.7", - "ecdsa", - "elliptic-curve", - "frame-benchmarking", - "frame-support", - "frame-system", - "frost-core", - "frost-ed25519", - "frost-ed448", - "frost-p256", - "frost-p384", - "frost-ristretto255", - "frost-secp256k1", - "frost-taproot", - "generic-array 0.14.7", - "generic-ec", - "generic-ec-zkp", - "hex", - "k256", - "malachite-base", - "malachite-nz", - "p256", - "paillier-zk", - "pallet-balances", - "pallet-jobs", - "parity-scale-codec 3.6.12", - "paste", - "postcard", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "round-based", - "scale-info", - "serde", - "serde_with 3.9.0", - "serdect", - "sha2 0.10.8", - "slip-10", - "smallvec", - "snowbridge-milagro-bls", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", - "starknet-crypto", - "subtle 2.6.1", - "tangle-crypto-primitives", - "tangle-primitives", - "udigest", -] - [[package]] name = "pallet-dynamic-fee" version = "4.0.0-dev" @@ -8425,52 +7705,6 @@ dependencies = [ "fp-evm", ] -[[package]] -name = "pallet-evm-precompile-jobs" -version = "0.1.0" -dependencies = [ - "derive_more", - "ethereum", - "ethers", - "fp-account", - "fp-consensus", - "fp-dynamic-fee", - "fp-ethereum", - "fp-evm", - "fp-rpc", - "fp-self-contained", - "fp-storage", - "frame-support", - "frame-system", - "hex", - "hex-literal 0.4.1", - "libsecp256k1", - "log", - "num_enum 0.5.11", - "pallet-balances", - "pallet-base-fee", - "pallet-dynamic-fee", - "pallet-ethereum", - "pallet-evm", - "pallet-evm-chain-id", - "pallet-jobs", - "pallet-timestamp", - "parity-scale-codec 3.6.12", - "precompile-utils", - "rustc-hex", - "scale-info", - "serde", - "serde_json", - "sha3 0.10.8", - "smallvec", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", - "tangle-primitives", -] - [[package]] name = "pallet-evm-precompile-modexp" version = "2.0.0-dev" @@ -8611,6 +7845,140 @@ dependencies = [ "tangle-primitives", ] +[[package]] +name = "pallet-evm-precompile-verify-bls381-signature" +version = "0.1.0" +dependencies = [ + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "log", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec 3.6.12", + "precompile-utils", + "scale-info", + "serde", + "snowbridge-milagro-bls", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", +] + +[[package]] +name = "pallet-evm-precompile-verify-ecdsa-secp256k1-signature" +version = "0.1.0" +dependencies = [ + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "k256", + "log", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec 3.6.12", + "precompile-utils", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", +] + +[[package]] +name = "pallet-evm-precompile-verify-ecdsa-secp256r1-signature" +version = "0.1.0" +dependencies = [ + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "log", + "p256", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec 3.6.12", + "precompile-utils", + "rand_core 0.6.4", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", +] + +[[package]] +name = "pallet-evm-precompile-verify-ecdsa-stark-signature" +version = "0.1.0" +dependencies = [ + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "generic-ec", + "generic-ec-zkp", + "hex", + "hex-literal 0.4.1", + "log", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec 3.6.12", + "precompile-utils", + "rand_core 0.6.4", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", + "starknet-crypto", +] + +[[package]] +name = "pallet-evm-precompile-verify-schnorr-signatures" +version = "0.1.0" +dependencies = [ + "derive_more", + "elliptic-curve", + "fp-evm", + "frame-support", + "frame-system", + "frost-core", + "frost-ed25519", + "frost-ed448", + "frost-p256", + "frost-p384", + "frost-ristretto255", + "frost-secp256k1", + "frost-taproot", + "hex-literal 0.4.1", + "log", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec 3.6.12", + "precompile-utils", + "rand_core 0.6.4", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", +] + [[package]] name = "pallet-evm-precompile-vesting" version = "0.1.0" @@ -8794,79 +8162,6 @@ dependencies = [ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", ] -[[package]] -name = "pallet-jobs" -version = "1.1.0" -dependencies = [ - "ethereum", - "ethers", - "fp-account", - "fp-consensus", - "fp-dynamic-fee", - "fp-ethereum", - "fp-evm", - "fp-rpc", - "fp-self-contained", - "fp-storage", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "hex", - "hex-literal 0.4.1", - "libsecp256k1", - "pallet-balances", - "pallet-base-fee", - "pallet-dynamic-fee", - "pallet-ethereum", - "pallet-evm", - "pallet-evm-chain-id", - "pallet-roles", - "pallet-session", - "pallet-staking 28.0.0", - "pallet-timestamp", - "parity-scale-codec 3.6.12", - "scale-info", - "serde", - "serde_json", - "smallvec", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-staking", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", - "tangle-crypto-primitives", - "tangle-primitives", -] - -[[package]] -name = "pallet-jobs-rpc" -version = "1.1.0" -dependencies = [ - "jsonrpsee 0.20.3", - "pallet-jobs-rpc-runtime-api", - "parity-scale-codec 3.6.12", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-weights", - "tangle-primitives", -] - -[[package]] -name = "pallet-jobs-rpc-runtime-api" -version = "1.1.0" -dependencies = [ - "parity-scale-codec 3.6.12", - "sp-api", - "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", - "tangle-primitives", -] - [[package]] name = "pallet-message-queue" version = "31.0.0" @@ -8991,27 +8286,73 @@ dependencies = [ ] [[package]] -name = "pallet-roles" +name = "pallet-scheduler" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec 3.6.12", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", + "sp-weights", +] + +[[package]] +name = "pallet-services" version = "1.1.0" dependencies = [ + "ethabi 15.0.0", + "ethereum", + "ethers", + "fp-account", + "fp-consensus", + "fp-dynamic-fee", + "fp-ethereum", + "fp-evm", + "fp-rpc", + "fp-self-contained", + "fp-storage", "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", "hex", "hex-literal 0.4.1", + "itertools 0.12.1", + "libsecp256k1", "log", + "num_enum 0.5.11", "pallet-balances", - "pallet-jobs", + "pallet-base-fee", + "pallet-dynamic-fee", + "pallet-ethereum", + "pallet-evm", + "pallet-evm-chain-id", + "pallet-evm-precompile-blake2", + "pallet-evm-precompile-bn128", + "pallet-evm-precompile-curve25519", + "pallet-evm-precompile-ed25519", + "pallet-evm-precompile-modexp", + "pallet-evm-precompile-sha3fips", + "pallet-evm-precompile-simple", "pallet-session", "pallet-staking 28.0.0", "pallet-timestamp", "parity-scale-codec 3.6.12", + "precompile-utils", "scale-info", "serde", "serde_json", + "smallvec", "sp-core", "sp-io", + "sp-keystore", "sp-runtime", "sp-staking", "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", @@ -9020,21 +8361,30 @@ dependencies = [ ] [[package]] -name = "pallet-scheduler" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" +name = "pallet-services-rpc" +version = "1.1.0" dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", + "jsonrpsee", + "pallet-services-rpc-runtime-api", "parity-scale-codec 3.6.12", - "scale-info", - "sp-io", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", "sp-weights", + "tangle-primitives", +] + +[[package]] +name = "pallet-services-rpc-runtime-api" +version = "1.1.0" +dependencies = [ + "parity-scale-codec 3.6.12", + "sp-api", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", + "tangle-primitives", ] [[package]] @@ -9189,7 +8539,7 @@ name = "pallet-transaction-payment-rpc" version = "30.0.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "jsonrpsee 0.20.3", + "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec 3.6.12", "sp-api", @@ -9299,37 +8649,6 @@ dependencies = [ "staging-xcm-executor", ] -[[package]] -name = "pallet-zksaas" -version = "1.1.0" -dependencies = [ - "ark-bn254", - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-groth16", - "ark-relations", - "ark-serialize", - "ark-std", - "ethabi 15.0.0", - "frame-benchmarking", - "frame-support", - "frame-system", - "hex", - "log", - "pallet-balances", - "parity-scale-codec 3.6.12", - "scale-info", - "serde", - "smallvec", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", - "tangle-primitives", -] - [[package]] name = "parity-db" version = "0.4.13" @@ -9346,7 +8665,7 @@ dependencies = [ "memmap2 0.5.10", "parking_lot 0.12.3", "rand 0.8.5", - "siphasher 0.3.11", + "siphasher", "snap", "winapi", ] @@ -9357,7 +8676,7 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "bitvec 0.20.4", "byte-slice-cast", "impl-trait-for-tuples", @@ -9371,7 +8690,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "bitvec 1.0.1", "byte-slice-cast", "bytes", @@ -9615,22 +8934,13 @@ dependencies = [ "indexmap 2.3.0", ] -[[package]] -name = "phantom-type" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f710afd11c9711b04f97ab61bb9747d5a04562fdf0f9f44abc3de92490084982" -dependencies = [ - "educe", -] - [[package]] name = "phantom-type" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e68f5dc797c2a743e024e1c53215474598faf0408826a90249569ad7f47adeaa" dependencies = [ - "educe", + "educe 0.4.23", ] [[package]] @@ -9682,7 +8992,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" dependencies = [ - "siphasher 0.3.11", + "siphasher", ] [[package]] @@ -9691,7 +9001,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ - "siphasher 0.3.11", + "siphasher", ] [[package]] @@ -9732,17 +9042,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pkcs8" version = "0.10.2" @@ -10663,22 +9962,6 @@ dependencies = [ "yasna", ] -[[package]] -name = "reconnecting-jsonrpsee-ws-client" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06fa4f17e09edfc3131636082faaec633c7baa269396b4004040bc6c52f49f65" -dependencies = [ - "cfg_aliases 0.2.1", - "finito", - "futures 0.3.30", - "jsonrpsee 0.23.2", - "serde_json", - "thiserror", - "tokio", - "tracing", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -10837,7 +10120,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 0.2.12", + "http", "http-body", "hyper", "hyper-rustls", @@ -10849,14 +10132,14 @@ dependencies = [ "percent-encoding", "pin-project-lite 0.2.14", "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "system-configuration", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", @@ -10896,7 +10179,7 @@ dependencies = [ "ark-poly", "ark-serialize", "ark-std", - "arrayvec 0.7.4", + "arrayvec", "blake2 0.10.6", "common", "fflonk", @@ -11003,30 +10286,6 @@ dependencies = [ "librocksdb-sys", ] -[[package]] -name = "round-based" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3479f80b42725325d77c7336f47548d9ab97662f3f7ab495ded03c9d65f0962" -dependencies = [ - "futures-util", - "phantom-type 0.3.1", - "round-based-derive", - "thiserror", - "tracing", -] - -[[package]] -name = "round-based-derive" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c3f220fb17bab108a448f516ce4ec470584675233ab3a799915ba71295da32e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "route-recognizer" version = "0.3.1" @@ -11051,7 +10310,7 @@ dependencies = [ "client-evm-tracing", "ethereum-types 0.14.1", "futures 0.3.30", - "jsonrpsee 0.20.3", + "jsonrpsee", "rpc-core-types", "serde", "serde_json", @@ -11065,7 +10324,7 @@ dependencies = [ "client-evm-tracing", "ethereum-types 0.14.1", "futures 0.3.30", - "jsonrpsee 0.20.3", + "jsonrpsee", "rpc-core-types", "serde", "serde_json", @@ -11078,7 +10337,7 @@ dependencies = [ "ethereum", "ethereum-types 0.14.1", "fc-rpc-core", - "jsonrpsee 0.20.3", + "jsonrpsee", "serde", "serde_json", ] @@ -11106,7 +10365,7 @@ dependencies = [ "fp-rpc", "futures 0.3.30", "hex-literal 0.4.1", - "jsonrpsee 0.20.3", + "jsonrpsee", "rpc-core-debug", "rpc-core-types", "rpc-primitives-debug", @@ -11164,7 +10423,7 @@ dependencies = [ "fc-storage", "fp-rpc", "futures 0.3.30", - "jsonrpsee 0.20.3", + "jsonrpsee", "log", "rpc-core-trace", "rpc-core-types", @@ -11193,7 +10452,7 @@ dependencies = [ "ethereum-types 0.14.1", "fc-rpc", "frame-system", - "jsonrpsee 0.20.3", + "jsonrpsee", "rlp", "rpc-core-txpool", "rpc-primitives-txpool", @@ -11233,19 +10492,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "rug" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d157703b9f96e9be75c739e7030d1d81be377d882d93046670309381517772" -dependencies = [ - "az", - "gmp-mpfr-sys", - "libc", - "libm", - "serde", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -11332,66 +10578,24 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring 0.17.8", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring 0.17.8", - "rustls-pki-types", - "rustls-webpki 0.102.6", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls" -version = "0.23.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" -dependencies = [ - "log", - "once_cell", - "ring 0.17.8", - "rustls-pki-types", - "rustls-webpki 0.102.6", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework", + "log", + "ring 0.17.8", + "rustls-webpki", + "sct", ] [[package]] name = "rustls-native-certs" -version = "0.7.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", - "rustls-pemfile 2.1.2", - "rustls-pki-types", + "rustls-pemfile", "schannel", "security-framework", ] @@ -11405,49 +10609,6 @@ dependencies = [ "base64 0.21.7", ] -[[package]] -name = "rustls-pemfile" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" -dependencies = [ - "base64 0.22.1", - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" - -[[package]] -name = "rustls-platform-verifier" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93bda3f493b9abe5b93b3e7e3ecde0df292f2bd28c0296b90586ee0055ff5123" -dependencies = [ - "core-foundation", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls 0.23.12", - "rustls-native-certs 0.7.1", - "rustls-platform-verifier-android", - "rustls-webpki 0.102.6", - "security-framework", - "security-framework-sys", - "webpki-roots 0.26.3", - "winapi", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - [[package]] name = "rustls-webpki" version = "0.101.7" @@ -11458,34 +10619,12 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "rustls-webpki" -version = "0.102.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" -dependencies = [ - "ring 0.17.8", - "rustls-pki-types", - "untrusted 0.9.0", -] - [[package]] name = "rustversion" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" -[[package]] -name = "ruzstd" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" -dependencies = [ - "byteorder", - "derive_more", - "twox-hash", -] - [[package]] name = "rw-stream-sink" version = "0.3.0" @@ -11635,7 +10774,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "sp-genesis-builder", "sp-io", "sp-runtime", @@ -11829,7 +10968,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-slots", "sp-core", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "sp-inherents", "sp-keystore", "sp-runtime", @@ -11843,7 +10982,7 @@ version = "0.34.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ "futures 0.3.30", - "jsonrpsee 0.20.3", + "jsonrpsee", "sc-consensus-babe", "sc-consensus-epochs", "sc-rpc-api", @@ -11908,7 +11047,7 @@ dependencies = [ "sp-consensus", "sp-consensus-grandpa", "sp-core", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -11922,7 +11061,7 @@ source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot dependencies = [ "finality-grandpa", "futures 0.3.30", - "jsonrpsee 0.20.3", + "jsonrpsee", "log", "parity-scale-codec 3.6.12", "sc-client-api", @@ -12047,7 +11186,7 @@ version = "0.4.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ "array-bytes 4.2.0", - "arrayvec 0.7.4", + "arrayvec", "blake2 0.10.6", "bytes", "futures 0.3.30", @@ -12076,7 +11215,7 @@ version = "0.34.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ "array-bytes 6.2.3", - "async-channel 1.9.0", + "async-channel", "async-trait", "asynchronous-codec", "bytes", @@ -12118,7 +11257,7 @@ name = "sc-network-bitswap" version = "0.33.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "async-channel 1.9.0", + "async-channel", "cid", "futures 0.3.30", "libp2p-identity", @@ -12175,7 +11314,7 @@ version = "0.33.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ "array-bytes 6.2.3", - "async-channel 1.9.0", + "async-channel", "futures 0.3.30", "libp2p-identity", "log", @@ -12196,7 +11335,7 @@ version = "0.16.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ "array-bytes 6.2.3", - "async-channel 1.9.0", + "async-channel", "futures 0.3.30", "libp2p", "log", @@ -12215,7 +11354,7 @@ version = "0.33.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ "array-bytes 6.2.3", - "async-channel 1.9.0", + "async-channel", "async-trait", "fork-tree", "futures 0.3.30", @@ -12313,7 +11452,7 @@ version = "29.0.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ "futures 0.3.30", - "jsonrpsee 0.20.3", + "jsonrpsee", "log", "parity-scale-codec 3.6.12", "parking_lot 0.12.3", @@ -12344,7 +11483,7 @@ name = "sc-rpc-api" version = "0.33.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "jsonrpsee 0.20.3", + "jsonrpsee", "parity-scale-codec 3.6.12", "sc-chain-spec", "sc-mixnet", @@ -12364,8 +11503,8 @@ name = "sc-rpc-server" version = "11.0.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "http 0.2.12", - "jsonrpsee 0.20.3", + "http", + "jsonrpsee", "log", "serde_json", "substrate-prometheus-endpoint", @@ -12383,7 +11522,7 @@ dependencies = [ "futures 0.3.30", "futures-util", "hex", - "jsonrpsee 0.20.3", + "jsonrpsee", "log", "parity-scale-codec 3.6.12", "parking_lot 0.12.3", @@ -12414,7 +11553,7 @@ dependencies = [ "exit-future", "futures 0.3.30", "futures-timer", - "jsonrpsee 0.20.3", + "jsonrpsee", "log", "parity-scale-codec 3.6.12", "parking_lot 0.12.3", @@ -12515,7 +11654,7 @@ name = "sc-sync-state-rpc" version = "0.34.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "jsonrpsee 0.20.3", + "jsonrpsee", "parity-scale-codec 3.6.12", "sc-chain-spec", "sc-client-api", @@ -12545,7 +11684,7 @@ dependencies = [ "serde", "serde_json", "sp-core", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "sp-io", "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", ] @@ -12629,7 +11768,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "sp-runtime", "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", "sp-transaction-pool", @@ -12658,7 +11797,7 @@ name = "sc-utils" version = "14.0.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "async-channel 1.9.0", + "async-channel", "futures 0.3.30", "futures-timer", "lazy_static", @@ -12675,9 +11814,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e57b1e7f6b65ed1f04e79a85a57d755ad56d76fdf1e9bddcc9ae14f71fcdcf54" dependencies = [ "parity-scale-codec 3.6.12", - "scale-info", "scale-type-resolver", - "serde", ] [[package]] @@ -12688,53 +11825,11 @@ checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" dependencies = [ "derive_more", "parity-scale-codec 3.6.12", - "primitive-types 0.12.2", - "scale-bits", - "scale-decode-derive", - "scale-type-resolver", - "smallvec", -] - -[[package]] -name = "scale-decode-derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb22f574168103cdd3133b19281639ca65ad985e24612728f727339dcaf4021" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "scale-encode" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba0b9c48dc0eb20c60b083c29447c0c4617cb7c4a4c9fef72aa5c5bc539e15e" -dependencies = [ - "derive_more", - "parity-scale-codec 3.6.12", - "primitive-types 0.12.2", "scale-bits", - "scale-encode-derive", "scale-type-resolver", "smallvec", ] -[[package]] -name = "scale-encode-derive" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ab7e60e2d9c8d47105f44527b26f04418e5e624ffc034f6b4a86c0ba19c5bf" -dependencies = [ - "darling 0.14.4", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "scale-info" version = "2.11.3" @@ -12766,44 +11861,6 @@ name = "scale-type-resolver" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" -dependencies = [ - "scale-info", - "smallvec", -] - -[[package]] -name = "scale-typegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498d1aecf2ea61325d4511787c115791639c0fd21ef4f8e11e49dd09eff2bbac" -dependencies = [ - "proc-macro2", - "quote", - "scale-info", - "syn 2.0.72", - "thiserror", -] - -[[package]] -name = "scale-value" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab68da501822d2769c4c5823535f6104a6d4cd15f0d3eba3e647e725294ae22" -dependencies = [ - "base58", - "blake2 0.10.6", - "derive_more", - "either", - "frame-metadata 15.1.0", - "parity-scale-codec 3.6.12", - "scale-bits", - "scale-decode", - "scale-encode", - "scale-info", - "scale-type-resolver", - "serde", - "yap", -] [[package]] name = "schannel" @@ -12833,7 +11890,7 @@ checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ "aead", "arrayref", - "arrayvec 0.7.4", + "arrayvec", "curve25519-dalek 4.1.3", "getrandom_or_panic", "merlin", @@ -12936,7 +11993,6 @@ dependencies = [ "core-foundation", "core-foundation-sys", "libc", - "num-bigint 0.4.6", "security-framework-sys", ] @@ -13026,9 +12082,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.122" +version = "1.0.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" +checksum = "4ab380d7d9f22ef3f21ad3e6c1ebe8e4fc7a2000ccba2e4d71fc96f15b2cb609" dependencies = [ "itoa", "memchr", @@ -13062,26 +12118,9 @@ name = "serde_with" version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "base64 0.13.1", - "chrono", - "hex", - "indexmap 1.9.3", - "serde", - "serde_json", - "serde_with_macros 2.3.3", - "time", -] - -[[package]] -name = "serde_with" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" dependencies = [ "serde", - "serde_derive", - "serde_with_macros 3.9.0", + "serde_with_macros", ] [[package]] @@ -13090,19 +12129,7 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.20.10", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "serde_with_macros" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" -dependencies = [ - "darling 0.20.10", + "darling", "proc-macro2", "quote", "syn 2.0.72", @@ -13282,180 +12309,53 @@ dependencies = [ name = "siphasher" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - -[[package]] -name = "slices" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2086e458a369cdca838e9f6ed04b4cc2e3ce636d99abb80c9e2eada107749cf" -dependencies = [ - "faster-hex", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "slip-10" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f20f0918d675ab26ca9fa3e2c42548356f54b7a09fb4633313756522ddd59f75" -dependencies = [ - "generic-array 0.14.7", - "generic-ec", - "hmac 0.12.1", - "sha2 0.10.8", - "subtle 2.6.1", -] - -[[package]] -name = "slot-range-helper" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" -dependencies = [ - "enumn", - "parity-scale-codec 3.6.12", - "paste", - "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "smol" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" -dependencies = [ - "async-channel 2.3.1", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-net", - "async-process", - "blocking", - "futures-lite", -] - -[[package]] -name = "smoldot" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" -dependencies = [ - "arrayvec 0.7.4", - "async-lock", - "atomic-take", - "base64 0.21.7", - "bip39", - "blake2-rfc", - "bs58 0.5.1", - "chacha20", - "crossbeam-queue", - "derive_more", - "ed25519-zebra 4.0.3", - "either", - "event-listener 4.0.3", - "fnv", - "futures-lite", - "futures-util", - "hashbrown 0.14.5", - "hex", - "hmac 0.12.1", - "itertools 0.12.1", - "libm", - "libsecp256k1", - "merlin", - "no-std-net", - "nom", - "num-bigint 0.4.6", - "num-rational", - "num-traits", - "pbkdf2 0.12.2", - "pin-project", - "poly1305", - "rand 0.8.5", - "rand_chacha 0.3.1", - "ruzstd", - "schnorrkel", - "serde", - "serde_json", - "sha2 0.10.8", - "sha3 0.10.8", - "siphasher 1.0.1", - "slab", - "smallvec", - "soketto 0.7.1", - "twox-hash", - "wasmi", - "x25519-dalek 2.0.1", - "zeroize", +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", ] [[package]] -name = "smoldot-light" -version = "0.14.0" +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "slices" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" +checksum = "f2086e458a369cdca838e9f6ed04b4cc2e3ce636d99abb80c9e2eada107749cf" dependencies = [ - "async-channel 2.3.1", - "async-lock", - "base64 0.21.7", - "blake2-rfc", - "derive_more", - "either", - "event-listener 4.0.3", - "fnv", - "futures-channel", - "futures-lite", - "futures-util", - "hashbrown 0.14.5", - "hex", - "itertools 0.12.1", - "log", - "lru 0.12.4", - "no-std-net", - "parking_lot 0.12.3", - "pin-project", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "siphasher 1.0.1", - "slab", - "smol", - "smoldot", - "zeroize", + "faster-hex", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "slot-range-helper" +version = "7.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" +dependencies = [ + "enumn", + "parity-scale-codec 3.6.12", + "paste", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", ] +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + [[package]] name = "snap" version = "1.1.1" @@ -13533,28 +12433,13 @@ dependencies = [ "bytes", "flate2", "futures 0.3.30", - "http 0.2.12", + "http", "httparse", "log", "rand 0.8.5", "sha-1", ] -[[package]] -name = "soketto" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures 0.3.30", - "httparse", - "log", - "rand 0.8.5", - "sha1", -] - [[package]] name = "solang-parser" version = "0.3.3" @@ -13785,7 +12670,7 @@ dependencies = [ "bounded-collections 0.2.0", "bs58 0.5.1", "dyn-clonable", - "ed25519-zebra 3.1.0", + "ed25519-zebra", "futures 0.3.30", "hash-db", "hash256-std-hasher", @@ -13804,7 +12689,7 @@ dependencies = [ "secp256k1", "secrecy", "serde", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", @@ -13823,13 +12708,13 @@ name = "sp-core-hashing" version = "15.0.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", ] [[package]] name = "sp-crypto-ec-utils" version = "0.10.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -13859,27 +12744,13 @@ dependencies = [ "twox-hash", ] -[[package]] -name = "sp-crypto-hashing" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" -dependencies = [ - "blake2b_simd", - "byteorder", - "digest 0.10.7", - "sha2 0.10.8", - "sha3 0.10.8", - "twox-hash", -] - [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.0.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ "quote", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "syn 2.0.72", ] @@ -13905,7 +12776,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" dependencies = [ "proc-macro2", "quote", @@ -13926,7 +12797,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.25.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" dependencies = [ "environmental", "parity-scale-codec 3.6.12", @@ -13971,7 +12842,7 @@ dependencies = [ "rustversion", "secp256k1", "sp-core", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", "sp-keystore", "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", @@ -14019,7 +12890,7 @@ name = "sp-metadata-ir" version = "0.6.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "frame-metadata 16.0.0", + "frame-metadata", "parity-scale-codec 3.6.12", "scale-info", "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", @@ -14144,7 +13015,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -14176,7 +13047,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" dependencies = [ "Inflector", "expander", @@ -14252,7 +13123,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.0.0", + "sp-crypto-hashing", "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", "sp-runtime", "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0)", @@ -14269,7 +13140,7 @@ source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" [[package]] name = "sp-storage" @@ -14287,7 +13158,7 @@ dependencies = [ [[package]] name = "sp-storage" version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" dependencies = [ "impl-serde", "parity-scale-codec 3.6.12", @@ -14324,7 +13195,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" dependencies = [ "parity-scale-codec 3.6.12", "tracing", @@ -14424,7 +13295,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#776e95748901b50ff2833a7d27ea83fd91fbf9d1" +source = "git+https://github.com/paritytech/polkadot-sdk#7d0aa89653d5073081a949eca1de2ca2d42a9e98" dependencies = [ "impl-trait-for-tuples", "log", @@ -14751,7 +13622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ "bitflags 1.3.2", - "cfg_aliases 0.1.1", + "cfg_aliases", "libc", "parking_lot 0.11.2", "parking_lot_core 0.8.6", @@ -14765,7 +13636,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" dependencies = [ - "cfg_aliases 0.1.1", + "cfg_aliases", "memchr", "proc-macro2", "quote", @@ -14798,12 +13669,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -14896,7 +13761,7 @@ source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.30", - "jsonrpsee 0.20.3", + "jsonrpsee", "log", "parity-scale-codec 3.6.12", "sc-rpc-api", @@ -14925,7 +13790,7 @@ name = "substrate-state-trie-migration-rpc" version = "27.0.0" source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.7.0#851c824dc7a8e7e6db2d0c9fb29d232f2f45198a" dependencies = [ - "jsonrpsee 0.20.3", + "jsonrpsee", "parity-scale-codec 3.6.12", "sc-client-api", "sc-rpc-api", @@ -14956,7 +13821,7 @@ dependencies = [ "cargo_metadata 0.15.4", "console", "filetime", - "frame-metadata 16.0.0", + "frame-metadata", "merkleized-metadata", "parity-scale-codec 3.6.12", "parity-wasm", @@ -14968,7 +13833,7 @@ dependencies = [ "sp-version", "strum 0.24.1", "tempfile", - "toml 0.8.19", + "toml 0.8.17", "walkdir", "wasm-opt", ] @@ -14985,156 +13850,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "subxt" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a160cba1edbf3ec4fbbeaea3f1a185f70448116a6bccc8276bb39adb3b3053bd" -dependencies = [ - "async-trait", - "derive-where", - "either", - "frame-metadata 16.0.0", - "futures 0.3.30", - "hex", - "impl-serde", - "instant", - "jsonrpsee 0.22.5", - "parity-scale-codec 3.6.12", - "primitive-types 0.12.2", - "reconnecting-jsonrpsee-ws-client", - "scale-bits", - "scale-decode", - "scale-encode", - "scale-info", - "scale-value", - "serde", - "serde_json", - "sp-crypto-hashing 0.1.0", - "subxt-core", - "subxt-lightclient", - "subxt-macro", - "subxt-metadata", - "thiserror", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "subxt-codegen" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" -dependencies = [ - "frame-metadata 16.0.0", - "heck 0.5.0", - "hex", - "jsonrpsee 0.22.5", - "parity-scale-codec 3.6.12", - "proc-macro2", - "quote", - "scale-info", - "scale-typegen", - "subxt-metadata", - "syn 2.0.72", - "thiserror", - "tokio", -] - -[[package]] -name = "subxt-core" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f41eb2e2eea6ed45649508cc735f92c27f1fcfb15229e75f8270ea73177345" -dependencies = [ - "base58", - "blake2 0.10.6", - "derive-where", - "frame-metadata 16.0.0", - "hashbrown 0.14.5", - "hex", - "impl-serde", - "parity-scale-codec 3.6.12", - "primitive-types 0.12.2", - "scale-bits", - "scale-decode", - "scale-encode", - "scale-info", - "scale-value", - "serde", - "serde_json", - "sp-crypto-hashing 0.1.0", - "subxt-metadata", - "tracing", -] - -[[package]] -name = "subxt-lightclient" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" -dependencies = [ - "futures 0.3.30", - "futures-util", - "serde", - "serde_json", - "smoldot-light", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "subxt-macro" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c195f803d70687e409aba9be6c87115b5da8952cd83c4d13f2e043239818fcd" -dependencies = [ - "darling 0.20.10", - "parity-scale-codec 3.6.12", - "proc-macro-error", - "quote", - "scale-typegen", - "subxt-codegen", - "syn 2.0.72", -] - -[[package]] -name = "subxt-metadata" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738be5890fdeff899bbffff4d9c0f244fe2a952fb861301b937e3aa40ebb55da" -dependencies = [ - "frame-metadata 16.0.0", - "hashbrown 0.14.5", - "parity-scale-codec 3.6.12", - "scale-info", - "sp-crypto-hashing 0.1.0", -] - -[[package]] -name = "subxt-signer" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49888ae6ae90fe01b471193528eea5bd4ed52d8eecd2d13f4a2333b87388850" -dependencies = [ - "bip39", - "cfg-if", - "hex", - "hmac 0.12.1", - "parity-scale-codec 3.6.12", - "pbkdf2 0.12.2", - "regex", - "schnorrkel", - "secrecy", - "sha2 0.10.8", - "sp-crypto-hashing 0.1.0", - "subxt-core", - "zeroize", -] - [[package]] name = "svm-rs" version = "0.3.5" @@ -15158,7 +13873,7 @@ dependencies = [ [[package]] name = "sygma-access-segregator" version = "0.2.0" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "frame-benchmarking", "frame-support", @@ -15171,7 +13886,7 @@ dependencies = [ [[package]] name = "sygma-basic-feehandler" version = "0.3.0" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "frame-benchmarking", "frame-support", @@ -15188,7 +13903,7 @@ dependencies = [ [[package]] name = "sygma-bridge" version = "0.3.0" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "arrayref", "bounded-collections 0.1.9", @@ -15229,7 +13944,7 @@ dependencies = [ [[package]] name = "sygma-bridge-forwarder" version = "0.3.0" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "cumulus-pallet-xcm", "cumulus-primitives-core", @@ -15252,7 +13967,7 @@ dependencies = [ [[package]] name = "sygma-fee-handler-router" version = "0.3.0" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "frame-benchmarking", "frame-support", @@ -15271,7 +13986,7 @@ dependencies = [ [[package]] name = "sygma-percentage-feehandler" version = "0.3.0" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "frame-benchmarking", "frame-support", @@ -15288,9 +14003,9 @@ dependencies = [ [[package]] name = "sygma-rpc" version = "0.2.1" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ - "jsonrpsee 0.20.3", + "jsonrpsee", "parity-scale-codec 3.6.12", "sc-client-api", "sc-rpc", @@ -15305,7 +14020,7 @@ dependencies = [ [[package]] name = "sygma-runtime-api" version = "0.2.1" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "sp-api", "sygma-bridge", @@ -15315,7 +14030,7 @@ dependencies = [ [[package]] name = "sygma-traits" version = "0.2.0" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "ethabi 18.0.0", "frame-support", @@ -15330,7 +14045,7 @@ dependencies = [ [[package]] name = "sygma-xcm-bridge" version = "0.3.0" -source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#d1de050b55e5fbd1444a2dfa461efb7807e07fbb" +source = "git+https://github.com/sygmaprotocol/sygma-substrate-pallets?branch=release-polkadot-v1.7.0#056f79acab07689eb879b16f8d51cea257153d7d" dependencies = [ "cumulus-pallet-xcm", "cumulus-primitives-core", @@ -15451,12 +14166,12 @@ dependencies = [ "futures 0.3.30", "hex", "hex-literal 0.4.1", - "jsonrpsee 0.20.3", + "jsonrpsee", "log", "mmr-rpc", "pallet-airdrop-claims", "pallet-im-online", - "pallet-jobs-rpc", + "pallet-services-rpc", "pallet-transaction-payment", "pallet-transaction-payment-rpc", "parity-scale-codec 3.6.12", @@ -15550,6 +14265,7 @@ dependencies = [ "ark-groth16", "ark-serialize", "ark-std", + "educe 0.5.11", "ethabi 15.0.0", "frame-support", "frost-core", @@ -15597,7 +14313,6 @@ dependencies = [ "pallet-child-bounties", "pallet-collective", "pallet-democracy", - "pallet-dkg", "pallet-dynamic-fee", "pallet-election-provider-multi-phase", "pallet-elections-phragmen", @@ -15627,14 +14342,11 @@ dependencies = [ "pallet-im-online", "pallet-indices", "pallet-insecure-randomness-collective-flip", - "pallet-jobs", - "pallet-jobs-rpc-runtime-api", "pallet-multisig", "pallet-nomination-pools", "pallet-offences", "pallet-preimage", "pallet-proxy", - "pallet-roles", "pallet-scheduler", "pallet-session", "pallet-staking 28.0.0", @@ -15647,7 +14359,6 @@ dependencies = [ "pallet-tx-pause", "pallet-utility", "pallet-vesting", - "pallet-zksaas", "parity-scale-codec 3.6.12", "precompile-utils", "rpc-primitives-debug", @@ -15674,21 +14385,6 @@ dependencies = [ "tangle-primitives", ] -[[package]] -name = "tangle-subxt" -version = "1.1.0" -dependencies = [ - "hex", - "parity-scale-codec 3.6.12", - "scale-info", - "sp-core", - "sp-io", - "subxt", - "subxt-signer", - "tangle-crypto-primitives", - "tokio", -] - [[package]] name = "tangle-testnet-runtime" version = "1.1.0" @@ -15722,7 +14418,6 @@ dependencies = [ "pallet-child-bounties", "pallet-collective", "pallet-democracy", - "pallet-dkg", "pallet-dynamic-fee", "pallet-election-provider-multi-phase", "pallet-elections-phragmen", @@ -15738,7 +14433,6 @@ dependencies = [ "pallet-evm-precompile-democracy", "pallet-evm-precompile-dispatch", "pallet-evm-precompile-ed25519", - "pallet-evm-precompile-jobs", "pallet-evm-precompile-modexp", "pallet-evm-precompile-preimage", "pallet-evm-precompile-proxy", @@ -15746,6 +14440,11 @@ dependencies = [ "pallet-evm-precompile-sha3fips", "pallet-evm-precompile-simple", "pallet-evm-precompile-staking", + "pallet-evm-precompile-verify-bls381-signature", + "pallet-evm-precompile-verify-ecdsa-secp256k1-signature", + "pallet-evm-precompile-verify-ecdsa-secp256r1-signature", + "pallet-evm-precompile-verify-ecdsa-stark-signature", + "pallet-evm-precompile-verify-schnorr-signatures", "pallet-evm-precompile-vesting", "pallet-evm-precompileset-assets-erc20", "pallet-grandpa", @@ -15754,16 +14453,15 @@ dependencies = [ "pallet-im-online", "pallet-indices", "pallet-insecure-randomness-collective-flip", - "pallet-jobs", - "pallet-jobs-rpc-runtime-api", "pallet-multi-asset-delegation", "pallet-multisig", "pallet-nomination-pools", "pallet-offences", "pallet-preimage", "pallet-proxy", - "pallet-roles", "pallet-scheduler", + "pallet-services", + "pallet-services-rpc-runtime-api", "pallet-session", "pallet-staking 28.0.0", "pallet-staking-reward-curve", @@ -15775,7 +14473,6 @@ dependencies = [ "pallet-tx-pause", "pallet-utility", "pallet-vesting", - "pallet-zksaas", "parity-scale-codec 3.6.12", "polkadot-parachain-primitives", "precompile-utils", @@ -16037,28 +14734,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" -dependencies = [ - "rustls 0.23.12", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-stream" version = "0.1.15" @@ -16081,7 +14756,7 @@ dependencies = [ "log", "rustls 0.21.12", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "tungstenite", "webpki-roots 0.25.4", ] @@ -16111,14 +14786,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "7a44eede9b727419af8095cb2d72fab15487a541f54647ad4414b34096ee4631" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.20", + "toml_edit 0.22.18", ] [[package]] @@ -16154,15 +14829,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "1490595c74d930da779e944f5ba2ecdf538af67df1a9848cbd156af43c1b7cf0" dependencies = [ "indexmap 2.3.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow 0.6.16", ] [[package]] @@ -16190,7 +14865,7 @@ dependencies = [ "bytes", "futures-core", "futures-util", - "http 0.2.12", + "http", "http-body", "http-range-header", "pin-project-lite 0.2.14", @@ -16321,7 +14996,6 @@ dependencies = [ "sharded-slab", "smallvec", "thread_local", - "time", "tracing", "tracing-core", "tracing-log 0.2.0", @@ -16403,16 +15077,16 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.99" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "207aa50d36c4be8d8c6ea829478be44a372c6a77669937bb39c698e52f1491e8" +checksum = "b55265878356bdd85c9baa15859c87de93b2bf1f33acf752040a561e4a228f62" dependencies = [ "glob", "serde", "serde_derive", "serde_json", "termcolor", - "toml 0.8.19", + "toml 0.8.17", ] [[package]] @@ -16430,7 +15104,7 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 0.2.12", + "http", "httparse", "log", "rand 0.8.5", @@ -16775,9 +15449,9 @@ checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wasm-encoder" -version = "0.215.0" +version = "0.214.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb56df3e06b8e6b77e37d2969a50ba51281029a9aeb3855e76b7f49b6418847" +checksum = "ff694f02a8d7a50b6922b197ae03883fbf18cdb2ae9fbee7b6148456f5f44041" dependencies = [ "leb128", ] @@ -17077,37 +15751,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "wasmi" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" -dependencies = [ - "smallvec", - "spin 0.9.8", - "wasmi_arena", - "wasmi_core", - "wasmparser-nostd", -] - -[[package]] -name = "wasmi_arena" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" - -[[package]] -name = "wasmi_core" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" -dependencies = [ - "downcast-rs", - "libm", - "num-traits", - "paste", -] - [[package]] name = "wasmparser" version = "0.83.0" @@ -17124,15 +15767,6 @@ dependencies = [ "url", ] -[[package]] -name = "wasmparser-nostd" -version = "0.100.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" -dependencies = [ - "indexmap-nostd", -] - [[package]] name = "wasmtime" version = "8.0.1" @@ -17330,9 +15964,9 @@ dependencies = [ [[package]] name = "wast" -version = "215.0.0" +version = "214.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff1d00d893593249e60720be04a7c1f42f1c4dc3806a2869f4e66ab61eb54cb" +checksum = "694bcdb24c49c8709bd8713768b71301a11e823923eee355d530f1d8d0a7f8e9" dependencies = [ "bumpalo", "leb128", @@ -17343,9 +15977,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.215.0" +version = "1.214.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670bf4d9c8cf76ae242d70ded47c546525b6dafaa6871f9bcb065344bf2b4e3d" +checksum = "347249eb56773fa728df2656cfe3a8c19437ded61a922a0b5e0839d9790e278e" dependencies = [ "wast", ] @@ -17401,15 +16035,6 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" -[[package]] -name = "webpki-roots" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "which" version = "4.4.2" @@ -17756,9 +16381,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.18" +version = "0.6.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "b480ae9340fc261e6be3e95a1ba86d54ae3f9171132a73ce8d4bbaf68339507c" dependencies = [ "memchr", ] @@ -17879,12 +16504,6 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" -[[package]] -name = "yap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" - [[package]] name = "yasna" version = "0.5.2" diff --git a/Cargo.toml b/Cargo.toml index d970371e9..262ee6a56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,42 +6,43 @@ license = "Unlicense" homepage = "https://webb.tools" repository = "https://github.com/webb-tools/tangle" -exclude = [ - "examples" -] +exclude = ["examples"] [workspace] members = [ - "primitives", - "primitives/crypto", - "primitives/rpc/*", - "primitives/ext", - "client/evm-tracing", - "client/rpc/*", - "client/rpc-core/*", - "client/voter", - "node", - "runtime/testnet", - "runtime/mainnet", - "pallets/*", - "pallets/jobs/rpc", - "pallets/jobs/rpc/runtime-api", - "pallets/dkg/frost", - "pallets/dkg/frost/frost-*", - "precompiles/utils", - "precompiles/utils/macro", - "precompiles/utils/tests-external", - "precompiles/pallet-democracy", - "precompiles/batch", - "precompiles/call-permit", - "precompiles/proxy", - "precompiles/preimage", - "precompiles/jobs", - "precompiles/balances-erc20", - "precompiles/assets-erc20", - "tangle-subxt", - "examples/*", - "evm-tracer" + "primitives", + "primitives/crypto", + "primitives/rpc/*", + "primitives/ext", + "client/evm-tracing", + "client/rpc/*", + "client/rpc-core/*", + "client/voter", + "node", + "runtime/testnet", + "runtime/mainnet", + "pallets/*", + "pallets/services/rpc", + "pallets/services/rpc/runtime-api", + "frost", + "frost/frost-*", + "precompiles/utils", + "precompiles/utils/macro", + "precompiles/utils/tests-external", + "precompiles/pallet-democracy", + "precompiles/batch", + "precompiles/call-permit", + "precompiles/proxy", + "precompiles/preimage", + "precompiles/balances-erc20", + "precompiles/assets-erc20", + "precompiles/verify-ecdsa-secp256k1-signature", + "precompiles/verify-ecdsa-secp256r1-signature", + "precompiles/verify-ecdsa-stark-signature", + "precompiles/verify-schnorr-signatures", + "precompiles/verify-bls381-signature", +# "tangle-subxt", + "evm-tracer", ] resolver = "2" @@ -51,6 +52,7 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", b substrate-build-script-utils = "3.0.0" subtle = { version = "2.2", default-features = false } hex-literal = "0.4.1" +itertools = { version = "0.12.1", default-features = false } log = { version = "0.4.20", default-features = false } scale-info = { version = "2.9.0", default-features = false, features = ["derive"] } serde = { version = "1.0.197", default-features = false, features = ["derive"] } @@ -90,7 +92,7 @@ byteorder = { version = "1", default-features = false } schnorrkel = { version = "0.11.4", default-features = false } snowbridge-milagro-bls = { git = "https://github.com/Snowfork/milagro_bls", default-features = false, rev = "43a5d480ed6e3b83de4cf54888680d51604199e6" } primitive-types = { version = "0.12.2", default-features = false, features = ["scale-info", "serde_no_std"] } -fixed = {version = "1.23.0", default-features = false } +fixed = { version = "1.23.0", default-features = false } tangle-testnet-runtime = { package = "tangle-testnet-runtime", path = "runtime/testnet" } tangle-runtime = { package = "tangle-runtime", path = "runtime/mainnet" } @@ -113,27 +115,25 @@ ethabi = { version = "15.0.0", default-features = false } # Tangle Dependencies pallet-airdrop-claims = { path = "pallets/claims", default-features = false } -pallet-jobs = { path = "pallets/jobs", default-features = false } -pallet-roles = { path = "pallets/roles", default-features = false } -pallet-dkg = { path = "pallets/dkg", default-features = false } -pallet-zksaas = { path = "pallets/zksaas", default-features = false } -pallet-jobs-rpc-runtime-api = { path = "pallets/jobs/rpc/runtime-api", default-features = false } -pallet-jobs-rpc = { path = "pallets/jobs/rpc" } +pallet-services = { path = "pallets/services", default-features = false } +pallet-services-rpc-runtime-api = { path = "pallets/services/rpc/runtime-api", default-features = false } +pallet-services-rpc = { path = "pallets/services/rpc" } pallet-multi-asset-delegation = { path = "pallets/multi-asset-delegation", default-features = false } + k256 = { version = "0.13.0", default-features = false } p256 = { version = "0.13.0", default-features = false } ecdsa-core = { package = "ecdsa", version = "0.16.9", default-features = false } -starknet-crypto = { version = "0.6.1", default-features = false, features = ["signature-display","alloc"] } -frost-core = { path = "pallets/dkg/frost", default-features = false } -frost-ed25519 = { path = "pallets/dkg/frost/frost-ed25519", default-features = false } -frost-ed448 = { path = "pallets/dkg/frost/frost-ed448", default-features = false } -frost-ristretto255 = { path = "pallets/dkg/frost/frost-ristretto255", default-features = false } -frost-secp256k1 = { path = "pallets/dkg/frost/frost-secp256k1", default-features = false } -frost-p256 = { path = "pallets/dkg/frost/frost-p256", default-features = false } -frost-p384 = { path = "pallets/dkg/frost/frost-p384", default-features = false } -frost-redjubjub = { path = "pallets/dkg/frost/frost-redjubjub", default-features = false } -frost-taproot = { path = "pallets/dkg/frost/frost-taproot", default-features = false } +starknet-crypto = { version = "0.6.1", default-features = false, features = ["signature-display", "alloc"] } +frost-core = { path = "frost", default-features = false } +frost-ed25519 = { path = "frost/frost-ed25519", default-features = false } +frost-ed448 = { path = "frost/frost-ed448", default-features = false } +frost-ristretto255 = { path = "frost/frost-ristretto255", default-features = false } +frost-secp256k1 = { path = "frost/frost-secp256k1", default-features = false } +frost-p256 = { path = "frost/frost-p256", default-features = false } +frost-p384 = { path = "frost/frost-p384", default-features = false } +frost-redjubjub = { path = "frost/frost-redjubjub", default-features = false } +frost-taproot = { path = "frost/frost-taproot", default-features = false } # Substrate dependencies sp-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.7.0", default-features = false } @@ -306,8 +306,12 @@ pallet-evm-precompile-proxy = { path = "precompiles/proxy", default-features = f pallet-evm-precompile-preimage = { path = "precompiles/preimage", default-features = false } pallet-evm-precompile-registry = { path = "precompiles/precompile-registry", default-features = false } pallet-evm-precompile-staking = { path = "precompiles/staking", default-features = false } -pallet-evm-precompile-jobs = { path = "precompiles/jobs", default-features = false } pallet-evm-precompile-vesting = { path = "precompiles/vesting", default-features = false } +pallet-evm-precompile-verify-ecdsa-secp256k1-signature = { path = "precompiles/verify-ecdsa-secp256k1-signature", default-features = false } +pallet-evm-precompile-verify-ecdsa-secp256r1-signature = { path = "precompiles/verify-ecdsa-secp256r1-signature", default-features = false } +pallet-evm-precompile-verify-ecdsa-stark-signature = { path = "precompiles/verify-ecdsa-stark-signature", default-features = false } +pallet-evm-precompile-verify-schnorr-signatures = { path = "precompiles/verify-schnorr-signatures", default-features = false } +pallet-evm-precompile-verify-bls381-signature = { path = "precompiles/verify-bls381-signature", default-features = false } # EVM & Ethereum # (wasm) @@ -329,8 +333,7 @@ tangle-primitives = { path = "primitives", default-features = false } tangle-crypto-primitives = { path = "primitives/crypto", default-features = false } pallet-staking = { path = "pallets/staking", default-features = false } pallet-staking-reward-curve = { path = "pallets/staking/reward-curve", default-features = false } - -webb = { git = "https://github.com/webb-tools/webb-rs.git", default-features = false , branch = "salman/polkadot-v1.7.0"} +webb = { git = "https://github.com/webb-tools/webb-rs.git", default-features = false, branch = "salman/polkadot-v1.7.0" } primitives-ext = { path = "primitives/ext", default-features = false } diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index 4d34d38d4..000000000 --- a/examples/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Examples - -You can run this examples to trigger Job pallet events for local development. - -- Run Local Tangle network -```bash -./scripts/run-standalone-local.sh --clean -``` -- Create profile -```bash -cargo run --package examples-profile --example create_profile -``` -- Deploy Contract -```bash -cargo run --package examples-contracts --example deploy_contract -``` -- Submit Proposal -```bash -cargo run --package examples-contracts --example submit_proposal -``` diff --git a/examples/contracts/Cargo.toml b/examples/contracts/Cargo.toml deleted file mode 100644 index ea7739096..000000000 --- a/examples/contracts/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "examples-contracts" -version = "0.1.0" -authors = { workspace = true } -edition = "2021" -license = "GPL-3.0-only" -repository = { workspace = true } - -[dev-dependencies] -subxt-signer = { version = "0.37.0", default-features = false, features = ["subxt", "sr25519"] } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.7.0" } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.7.0" } -tokio = { version = "1.32.0", features = ["full"] } -tangle-crypto-primitives = { path = "../../primitives/crypto"} -tangle-subxt = { path = "../../tangle-subxt" } -hex = {workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -subxt = { version = "0.37.0" } -serde_json = { workspace = true } -ethers = "2.0.13" diff --git a/examples/contracts/artifacts/VotableSigningRules.json b/examples/contracts/artifacts/VotableSigningRules.json deleted file mode 100644 index 576258364..000000000 --- a/examples/contracts/artifacts/VotableSigningRules.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"function","name":"MAX_VOTERS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"_proposals","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"_status","type":"uint8","internalType":"enum ProposalStatus"},{"name":"_yesVotes","type":"uint256","internalType":"uint256"},{"name":"_yesVotesTotal","type":"uint8","internalType":"uint8"},{"name":"_proposedBlock","type":"uint40","internalType":"uint40"}],"stateMutability":"view"},{"type":"function","name":"adminSetForwarder","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"forwarder","type":"address","internalType":"address"},{"name":"valid","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"admins","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"calculatePhase2JobHash","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"expiry","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getProposalState","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum ProposalStatus"}],"stateMutability":"view"},{"type":"function","name":"getProposalYesVotes","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getProposalYesVotesTotal","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"_threshold","type":"uint8","internalType":"uint8"},{"name":"_useDemocracy","type":"bool","internalType":"bool"},{"name":"_voters","type":"address[]","internalType":"address[]"},{"name":"_expiry","type":"uint64","internalType":"uint64"},{"name":"_ttl","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialized","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidForwarder","inputs":[{"name":"","type":"uint64","internalType":"uint64"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"refreshVoters","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitGovernanceProposal","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"threshold","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"ttl","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"useDemocracy","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"useValidators","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"voteProposal","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"voters","inputs":[{"name":"","type":"uint64","internalType":"uint64"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"FailedHandlerExecution","inputs":[{"name":"lowLevelData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ProposalEvent","inputs":[{"name":"status","type":"uint8","indexed":false,"internalType":"enum ProposalStatus"},{"name":"phase1JobId","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"phase2JobHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ProposalVote","inputs":[{"name":"status","type":"uint8","indexed":false,"internalType":"enum ProposalStatus"},{"name":"phase1JobId","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"phase2JobHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b506115808061001f6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80635b9a5eb7116100ad578063db56b93411610071578063db56b93414610359578063eea22ba21461036c578063f2e2af941461037f578063f768b74d146103d1578063f8d4858d146103fa57600080fd5b80635b9a5eb7146102ac57806368217337146102cf5780636a30ed1c146102e25780638a9a20931461030b578063a9b62d8d1461033657600080fd5b80631b35b0cc116100f45780631b35b0cc146101f0578063217d75ab146102165780633718acf8146102575780633ceed69214610282578063426c58631461029957600080fd5b806307ff4197146101315780630a704f481461016957806311f8dec614610199578063158ef93e146101ce57806319bddc61146101db575b600080fd5b61015461013f36600461100b565b60076020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61018c61017736600461102d565b60009081526008602052604090205460ff1690565b604051610160919061107e565b6101bc6101a736600461100b565b60036020526000908152604090205460ff1681565b60405160ff9091168152602001610160565b6009546101549060ff1681565b6101ee6101e936600461100b565b61040d565b005b6101bc6101fe36600461102d565b60009081526008602052604090206002015460ff1690565b61023f61022436600461100b565b6004602052600090815260409020546001600160401b031681565b6040516001600160401b039091168152602001610160565b6101546102653660046110a3565b600060208181529281526040808220909352908152205460ff1681565b61028b61010081565b604051908152602001610160565b6101ee6102a736600461111c565b61045c565b6101546102ba36600461100b565b60066020526000908152604090205460ff1681565b6101ee6102dd3660046111d1565b6104bc565b61023f6102f036600461100b565b6005602052600090815260409020546001600160401b031681565b61031e6103193660046112d9565b610641565b6040516001600160a01b039091168152602001610160565b61028b61034436600461102d565b60009081526008602052604090206001015490565b6101ee610367366004611303565b610679565b61028b61037a36600461111c565b6106fa565b6103c161038d36600461102d565b60086020526000908152604090208054600182015460029092015460ff9182169291811690610100900464ffffffffff1684565b6040516101609493929190611346565b61031e6103df36600461100b565b6001602052600090815260409020546001600160a01b031681565b6101ee61040836600461111c565b61072e565b6001600160401b03811660009081526001602052604090205481906001600160a01b031633146104585760405162461bcd60e51b815260040161044f90611379565b60405180910390fd5b5050565b6104668282610848565b6104b25760405162461bcd60e51b815260206004820152601860248201527f50726f706f73616c206d75737420626520766f7461626c650000000000000000604482015260640161044f565b61045882826108a4565b610100835111156105015760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920766f7465727360881b604482015260640161044f565b60095460ff161561054a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161044f565b60098054600160ff1991821681179092556001600160401b0388811660009081526003602090815260408083208054861660ff8d161790556006825280832080549095168a15151790945560048152838220805467ffffffffffffffff19908116898616179091556005825284832080549091169387169390931790925592905290208054336001600160a01b0319909116179055825115610615576001600160401b0386166000908152600260209081526040909120845161060f92860190610f75565b50610639565b6001600160401b0386166000908152600760205260409020805460ff191660011790555b505050505050565b6002602052816000526040600020818154811061065d57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6001600160401b03831660009081526001602052604090205483906001600160a01b031633146106bb5760405162461bcd60e51b815260040161044f90611379565b506001600160401b039092166000908152602081815260408083206001600160a01b03909416835292905220805491151560ff19909216919091179055565b6000828260405160200161070f9291906113de565b6040516020818303038152906040528051906020012090505b92915050565b600082826040516020016107439291906113de565b60408051601f1981840301815291905280516020909101209050600360008281526008602052604090205460ff16600481111561078257610782611046565b036107cf5760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d7573742068617665206265656e206578656375746564604482015260640161044f565b6001600160401b03831660009081526006602052604090205460ff166108435760405162461bcd60e51b8152602060048201526024808201527f50726f706f73616c206d75737420616c6c6f77207573696e6720676f7665726e604482015263616e636560e01b606482015260840161044f565b505050565b6000815160000361089b5760405162461bcd60e51b815260206004820152601d60248201527f4a6f622064657461696c73206d757374206265206e6f6e2d656d707479000000604482015260640161044f565b50600192915050565b600082826040516020016108b99291906113de565b60408051601f1981840301815291815281516020928301206000818152600890935291209091506002815460ff1660048111156108f8576108f8611046565b0361090e57610908848385610d01565b50505050565b600061091985610e3c565b825490915060019060ff16600481111561093557610935611046565b111561098f5760405162461bcd60e51b815260206004820152602360248201527f70726f706f73616c20616c72656164792065786563757465642f63616e63656c6044820152621b195960ea1b606482015260840161044f565b61099a858483610e8e565b156109df5760405162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e481d9bdd1959605a1b604482015260640161044f565b6000825460ff1660048111156109f7576109f7611046565b03610acd576040805160808101909152806001815260006020808301829052604080840183905264ffffffffff4316606090940193909352868252600890522081518154829060ff19166001836004811115610a5557610a55611046565b021790555060208201516001808301919091556040808401516002909301805460609095015164ffffffffff166101000265ffffffffffff1990951660ff9094169390931793909317909155905160008051602061152b83398151915291610ac09188908790611413565b60405180910390a1610b48565b6001600160401b038581166000908152600460205260409020546002840154911690610b0590610100900464ffffffffff1643611451565b64ffffffffff161115610b4857815460ff19166004908117835560405160008051602061152b83398151915291610b3f9188908790611413565b60405180910390a15b6004825460ff166004811115610b6057610b60611046565b14610c5557610b6f8582610eb8565b60018301805491909117905560028201805460ff16906000610b9083611464565b91906101000a81548160ff021916908360ff160217905550507f20ff4a81542c924d8f65d7ab8727f9e352b64f288a402ace0a5e7edb68c247db8260000160009054906101000a900460ff168685604051610bed93929190611413565b60405180910390a16001600160401b038516600090815260036020526040902054600283015460ff918216911610610c5557815460ff19166002908117835560405160008051602061152b83398151915291610c4c9188908790611413565b60405180910390a15b60008381526008602052604090208254815484929160ff1690829060ff19166001836004811115610c8857610c88611046565b02179055506001828101549082015560029182018054918301805460ff19811660ff9094169384178255915464ffffffffff61010091829004160265ffffffffffff19909216909217179055825460ff166004811115610cea57610cea611046565b03610cfa57610cfa858486610d01565b5050505050565b60008281526008602052604090206002815460ff166004811115610d2757610d27611046565b14610d745760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d75737420686176652050617373656420737461747573604482015260640161044f565b6001600160401b038085166000908152600460208181526040808420546005835281852054825193840183529483529051631075334160e01b815261081495631075334195610dcf95938216949116928b928a9291016114af565b600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050825460ff19166003908117845560405160008051602061152b8339815191529350610e2e925087908790611413565b60405180910390a150505050565b60003360143610801590610e7a57506001600160401b0383166000908152602081815260408083206001600160a01b038516845290915290205460ff165b156107285750505036601319013560601c90565b600082815260086020526040812060018101548290610ead8786610eb8565b161195945050505050565b60006001610ec68484610edb565b610ed09190611451565b6001901b9392505050565b6000805b6001600160401b038416600090815260026020526040902054811015610f6a576001600160401b038416600090815260026020526040902080546001600160a01b038516919083908110610f3557610f35611501565b6000918252602090912001546001600160a01b031603610f6257610f5a816001611517565b915050610728565b600101610edf565b506101009392505050565b828054828255906000526020600020908101928215610fca579160200282015b82811115610fca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610f95565b50610fd6929150610fda565b5090565b5b80821115610fd65760008155600101610fdb565b80356001600160401b038116811461100657600080fd5b919050565b60006020828403121561101d57600080fd5b61102682610fef565b9392505050565b60006020828403121561103f57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061107a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610728828461105c565b80356001600160a01b038116811461100657600080fd5b600080604083850312156110b657600080fd5b6110bf83610fef565b91506110cd6020840161108c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611114576111146110d6565b604052919050565b6000806040838503121561112f57600080fd5b61113883610fef565b91506020808401356001600160401b038082111561115557600080fd5b818601915086601f83011261116957600080fd5b81358181111561117b5761117b6110d6565b61118d601f8201601f191685016110ec565b915080825287848285010111156111a357600080fd5b80848401858401376000848284010152508093505050509250929050565b8035801515811461100657600080fd5b60008060008060008060c087890312156111ea57600080fd5b6111f387610fef565b955060208088013560ff8116811461120a57600080fd5b9550611218604089016111c1565b945060608801356001600160401b038082111561123457600080fd5b818a0191508a601f83011261124857600080fd5b81358181111561125a5761125a6110d6565b8060051b915061126b8483016110ec565b818152918301840191848101908d84111561128557600080fd5b938501935b838510156112aa5761129b8561108c565b8252938501939085019061128a565b8098505050505050506112bf60808801610fef565b91506112cd60a08801610fef565b90509295509295509295565b600080604083850312156112ec57600080fd5b6112f583610fef565b946020939093013593505050565b60008060006060848603121561131857600080fd5b61132184610fef565b925061132f6020850161108c565b915061133d604085016111c1565b90509250925092565b60808101611354828761105c565b84602083015260ff8416604083015264ffffffffff8316606083015295945050505050565b60208082526021908201527f4f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b60005b838110156113d55781810151838201526020016113bd565b50506000910152565b6001600160401b0360c01b8360c01b168152600082516114058160088501602087016113ba565b919091016008019392505050565b60608101611421828661105c565b6001600160401b0393909316602082015260400152919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107285761072861143b565b600060ff821660ff810361147a5761147a61143b565b60010192915050565b6000815180845261149b8160208601602086016113ba565b601f01601f19169290920160200192915050565b60006001600160401b038088168352808716602084015280861660408401525060a060608301526114e360a0830185611483565b82810360808401526114f58185611483565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b808201808211156107285761072861143b56fe1da747736e36d4b28919e58cfcb847754a7604d8afb51c6123b35214eee0b48ba26469706673582212205513ab92e5f3e7b9830a1c5dc0b06ceb3ed61b23ee9454b5437b8396b09ad52c64736f6c63430008190033","sourceMap":"230:513:25:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80635b9a5eb7116100ad578063db56b93411610071578063db56b93414610359578063eea22ba21461036c578063f2e2af941461037f578063f768b74d146103d1578063f8d4858d146103fa57600080fd5b80635b9a5eb7146102ac57806368217337146102cf5780636a30ed1c146102e25780638a9a20931461030b578063a9b62d8d1461033657600080fd5b80631b35b0cc116100f45780631b35b0cc146101f0578063217d75ab146102165780633718acf8146102575780633ceed69214610282578063426c58631461029957600080fd5b806307ff4197146101315780630a704f481461016957806311f8dec614610199578063158ef93e146101ce57806319bddc61146101db575b600080fd5b61015461013f36600461100b565b60076020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61018c61017736600461102d565b60009081526008602052604090205460ff1690565b604051610160919061107e565b6101bc6101a736600461100b565b60036020526000908152604090205460ff1681565b60405160ff9091168152602001610160565b6009546101549060ff1681565b6101ee6101e936600461100b565b61040d565b005b6101bc6101fe36600461102d565b60009081526008602052604090206002015460ff1690565b61023f61022436600461100b565b6004602052600090815260409020546001600160401b031681565b6040516001600160401b039091168152602001610160565b6101546102653660046110a3565b600060208181529281526040808220909352908152205460ff1681565b61028b61010081565b604051908152602001610160565b6101ee6102a736600461111c565b61045c565b6101546102ba36600461100b565b60066020526000908152604090205460ff1681565b6101ee6102dd3660046111d1565b6104bc565b61023f6102f036600461100b565b6005602052600090815260409020546001600160401b031681565b61031e6103193660046112d9565b610641565b6040516001600160a01b039091168152602001610160565b61028b61034436600461102d565b60009081526008602052604090206001015490565b6101ee610367366004611303565b610679565b61028b61037a36600461111c565b6106fa565b6103c161038d36600461102d565b60086020526000908152604090208054600182015460029092015460ff9182169291811690610100900464ffffffffff1684565b6040516101609493929190611346565b61031e6103df36600461100b565b6001602052600090815260409020546001600160a01b031681565b6101ee61040836600461111c565b61072e565b6001600160401b03811660009081526001602052604090205481906001600160a01b031633146104585760405162461bcd60e51b815260040161044f90611379565b60405180910390fd5b5050565b6104668282610848565b6104b25760405162461bcd60e51b815260206004820152601860248201527f50726f706f73616c206d75737420626520766f7461626c650000000000000000604482015260640161044f565b61045882826108a4565b610100835111156105015760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920766f7465727360881b604482015260640161044f565b60095460ff161561054a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161044f565b60098054600160ff1991821681179092556001600160401b0388811660009081526003602090815260408083208054861660ff8d161790556006825280832080549095168a15151790945560048152838220805467ffffffffffffffff19908116898616179091556005825284832080549091169387169390931790925592905290208054336001600160a01b0319909116179055825115610615576001600160401b0386166000908152600260209081526040909120845161060f92860190610f75565b50610639565b6001600160401b0386166000908152600760205260409020805460ff191660011790555b505050505050565b6002602052816000526040600020818154811061065d57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6001600160401b03831660009081526001602052604090205483906001600160a01b031633146106bb5760405162461bcd60e51b815260040161044f90611379565b506001600160401b039092166000908152602081815260408083206001600160a01b03909416835292905220805491151560ff19909216919091179055565b6000828260405160200161070f9291906113de565b6040516020818303038152906040528051906020012090505b92915050565b600082826040516020016107439291906113de565b60408051601f1981840301815291905280516020909101209050600360008281526008602052604090205460ff16600481111561078257610782611046565b036107cf5760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d7573742068617665206265656e206578656375746564604482015260640161044f565b6001600160401b03831660009081526006602052604090205460ff166108435760405162461bcd60e51b8152602060048201526024808201527f50726f706f73616c206d75737420616c6c6f77207573696e6720676f7665726e604482015263616e636560e01b606482015260840161044f565b505050565b6000815160000361089b5760405162461bcd60e51b815260206004820152601d60248201527f4a6f622064657461696c73206d757374206265206e6f6e2d656d707479000000604482015260640161044f565b50600192915050565b600082826040516020016108b99291906113de565b60408051601f1981840301815291815281516020928301206000818152600890935291209091506002815460ff1660048111156108f8576108f8611046565b0361090e57610908848385610d01565b50505050565b600061091985610e3c565b825490915060019060ff16600481111561093557610935611046565b111561098f5760405162461bcd60e51b815260206004820152602360248201527f70726f706f73616c20616c72656164792065786563757465642f63616e63656c6044820152621b195960ea1b606482015260840161044f565b61099a858483610e8e565b156109df5760405162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e481d9bdd1959605a1b604482015260640161044f565b6000825460ff1660048111156109f7576109f7611046565b03610acd576040805160808101909152806001815260006020808301829052604080840183905264ffffffffff4316606090940193909352868252600890522081518154829060ff19166001836004811115610a5557610a55611046565b021790555060208201516001808301919091556040808401516002909301805460609095015164ffffffffff166101000265ffffffffffff1990951660ff9094169390931793909317909155905160008051602061152b83398151915291610ac09188908790611413565b60405180910390a1610b48565b6001600160401b038581166000908152600460205260409020546002840154911690610b0590610100900464ffffffffff1643611451565b64ffffffffff161115610b4857815460ff19166004908117835560405160008051602061152b83398151915291610b3f9188908790611413565b60405180910390a15b6004825460ff166004811115610b6057610b60611046565b14610c5557610b6f8582610eb8565b60018301805491909117905560028201805460ff16906000610b9083611464565b91906101000a81548160ff021916908360ff160217905550507f20ff4a81542c924d8f65d7ab8727f9e352b64f288a402ace0a5e7edb68c247db8260000160009054906101000a900460ff168685604051610bed93929190611413565b60405180910390a16001600160401b038516600090815260036020526040902054600283015460ff918216911610610c5557815460ff19166002908117835560405160008051602061152b83398151915291610c4c9188908790611413565b60405180910390a15b60008381526008602052604090208254815484929160ff1690829060ff19166001836004811115610c8857610c88611046565b02179055506001828101549082015560029182018054918301805460ff19811660ff9094169384178255915464ffffffffff61010091829004160265ffffffffffff19909216909217179055825460ff166004811115610cea57610cea611046565b03610cfa57610cfa858486610d01565b5050505050565b60008281526008602052604090206002815460ff166004811115610d2757610d27611046565b14610d745760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d75737420686176652050617373656420737461747573604482015260640161044f565b6001600160401b038085166000908152600460208181526040808420546005835281852054825193840183529483529051631075334160e01b815261081495631075334195610dcf95938216949116928b928a9291016114af565b600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050825460ff19166003908117845560405160008051602061152b8339815191529350610e2e925087908790611413565b60405180910390a150505050565b60003360143610801590610e7a57506001600160401b0383166000908152602081815260408083206001600160a01b038516845290915290205460ff165b156107285750505036601319013560601c90565b600082815260086020526040812060018101548290610ead8786610eb8565b161195945050505050565b60006001610ec68484610edb565b610ed09190611451565b6001901b9392505050565b6000805b6001600160401b038416600090815260026020526040902054811015610f6a576001600160401b038416600090815260026020526040902080546001600160a01b038516919083908110610f3557610f35611501565b6000918252602090912001546001600160a01b031603610f6257610f5a816001611517565b915050610728565b600101610edf565b506101009392505050565b828054828255906000526020600020908101928215610fca579160200282015b82811115610fca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610f95565b50610fd6929150610fda565b5090565b5b80821115610fd65760008155600101610fdb565b80356001600160401b038116811461100657600080fd5b919050565b60006020828403121561101d57600080fd5b61102682610fef565b9392505050565b60006020828403121561103f57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061107a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610728828461105c565b80356001600160a01b038116811461100657600080fd5b600080604083850312156110b657600080fd5b6110bf83610fef565b91506110cd6020840161108c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611114576111146110d6565b604052919050565b6000806040838503121561112f57600080fd5b61113883610fef565b91506020808401356001600160401b038082111561115557600080fd5b818601915086601f83011261116957600080fd5b81358181111561117b5761117b6110d6565b61118d601f8201601f191685016110ec565b915080825287848285010111156111a357600080fd5b80848401858401376000848284010152508093505050509250929050565b8035801515811461100657600080fd5b60008060008060008060c087890312156111ea57600080fd5b6111f387610fef565b955060208088013560ff8116811461120a57600080fd5b9550611218604089016111c1565b945060608801356001600160401b038082111561123457600080fd5b818a0191508a601f83011261124857600080fd5b81358181111561125a5761125a6110d6565b8060051b915061126b8483016110ec565b818152918301840191848101908d84111561128557600080fd5b938501935b838510156112aa5761129b8561108c565b8252938501939085019061128a565b8098505050505050506112bf60808801610fef565b91506112cd60a08801610fef565b90509295509295509295565b600080604083850312156112ec57600080fd5b6112f583610fef565b946020939093013593505050565b60008060006060848603121561131857600080fd5b61132184610fef565b925061132f6020850161108c565b915061133d604085016111c1565b90509250925092565b60808101611354828761105c565b84602083015260ff8416604083015264ffffffffff8316606083015295945050505050565b60208082526021908201527f4f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b60005b838110156113d55781810151838201526020016113bd565b50506000910152565b6001600160401b0360c01b8360c01b168152600082516114058160088501602087016113ba565b919091016008019392505050565b60608101611421828661105c565b6001600160401b0393909316602082015260400152919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107285761072861143b565b600060ff821660ff810361147a5761147a61143b565b60010192915050565b6000815180845261149b8160208601602086016113ba565b601f01601f19169290920160200192915050565b60006001600160401b038088168352808716602084015280861660408401525060a060608301526114e360a0830185611483565b82810360808401526114f58185611483565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b808201808211156107285761072861143b56fe1da747736e36d4b28919e58cfcb847754a7604d8afb51c6123b35214eee0b48ba26469706673582212205513ab92e5f3e7b9830a1c5dc0b06ceb3ed61b23ee9454b5437b8396b09ad52c64736f6c63430008190033","sourceMap":"230:513:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:45:24;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;544:14:26;;537:22;519:41;;507:2;492:18;799:45:24;;;;;;;;10118:143;;;;;;:::i;:::-;10188:14;10221:25;;;:10;:25;;;;;:33;;;;10118:143;;;;;;;;:::i;612:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1531:4:26;1519:17;;;1501:36;;1489:2;1474:18;612:42:24;1359:184:26;960:23:24;;;;;;;;;2855:117;;;;;;:::i;:::-;;:::i;:::-;;10418:149;;;;;;:::i;:::-;10496:5;10520:25;;;:10;:25;;;;;:40;;;;;;10418:149;660:40;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;660:40:24;;;;;;-1:-1:-1;;;;;1710:31:26;;;1692:50;;1680:2;1665:18;660:40:24;1548:200:26;441:69:24;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1059:40;;1096:3;1059:40;;;;;2340:25:26;;;2328:2;2313:18;1059:40:24;2194:177:26;3932:435:24;;;;;;:::i;:::-;;:::i;749:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1752:956;;;;;;:::i;:::-;;:::i;706:37::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;706:37:24;;;563:43;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5615:32:26;;;5597:51;;5585:2;5570:18;563:43:24;5451:203:26;10267:141:24;;;;;;:::i;:::-;10340:7;10366:25;;;:10;:25;;;;;:35;;;;10267:141;3215:175;;;;;;:::i;:::-;;:::i;1551:195::-;;;;;;:::i;:::-;;:::i;907:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;516:41::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;516:41:24;;;3393:536;;;;;;:::i;:::-;;:::i;2855:117::-;-1:-1:-1;;;;;1464:10:24;;;;;;:6;:10;;;;;;2915:11;;-1:-1:-1;;;;;1464:10:24;1478;1464:24;1456:70;;;;-1:-1:-1;;;1456:70:24;;;;;;;:::i;:::-;;;;;;;;;2855:117;;:::o;3932:435::-;4062:49;4081:11;4094:16;4062:18;:49::i;:::-;4054:86;;;;-1:-1:-1;;;4054:86:24;;7238:2:26;4054:86:24;;;7220:21:26;7277:2;7257:18;;;7250:30;7316:26;7296:18;;;7289:54;7360:18;;4054:86:24;7036:348:26;4054:86:24;4318:45;4332:11;4345:16;4318:13;:45::i;1752:956::-;1096:3;1966:7;:14;:28;;1958:56;;;;-1:-1:-1;;;1958:56:24;;7591:2:26;1958:56:24;;;7573:21:26;7630:2;7610:18;;;7603:30;-1:-1:-1;;;7649:18:26;;;7642:45;7704:18;;1958:56:24;7389:339:26;1958:56:24;2032:11;;;;:20;2024:52;;;;-1:-1:-1;;;2024:52:24;;7935:2:26;2024:52:24;;;7917:21:26;7974:2;7954:18;;;7947:30;-1:-1:-1;;;7993:18:26;;;7986:49;8052:18;;2024:52:24;7733:343:26;2024:52:24;2086:11;:18;;2100:4;-1:-1:-1;;2086:18:24;;;;;;;;-1:-1:-1;;;;;2173:22:24;;;-1:-1:-1;2173:22:24;;;:9;:22;;;;;;;;:35;;;;2086:18;2173:35;;;;;2218:12;:25;;;;;:41;;;;;;;;;;;;2269:6;:19;;;;;:29;;-1:-1:-1;;2269:29:24;;;;;;;;;;2308:3;:16;;;;;:23;;;;;;;;;;;;;;;2341:19;;;;;:32;;2363:10;-1:-1:-1;;;;;;2341:32:24;;;;;;2440:14;;:18;2436:266;;-1:-1:-1;;;;;2474:19:24;;;;;;:6;:19;;;;;;;;:29;;;;;;;;:::i;:::-;;2436:266;;;-1:-1:-1;;;;;2617:26:24;;;;;;:13;:26;;;;;:33;;-1:-1:-1;;2617:33:24;2646:4;2617:33;;;2664:27;1752:956;;;;;;:::o;563:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;563:43:24;;-1:-1:-1;563:43:24;;-1:-1:-1;563:43:24:o;3215:175::-;-1:-1:-1;;;;;1464:10:24;;;;;;:6;:10;;;;;;3312:11;;-1:-1:-1;;;;;1464:10:24;1478;1464:24;1456:70;;;;-1:-1:-1;;;1456:70:24;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3335:29:24;;::::1;:16;:29:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;3335:40:24;;::::1;::::0;;;;;;:48;;;::::1;;-1:-1:-1::0;;3335:48:24;;::::1;::::0;;;::::1;::::0;;3215:175::o;1551:195::-;1655:7;1708:11;1721:16;1691:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1681:58;;;;;;1674:65;;1551:195;;;;;:::o;3393:536::-;3533:21;3584:11;3597:16;3567:47;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3567:47:24;;;;;;;;;3557:58;;3567:47;3557:58;;;;;-1:-1:-1;3670:23:24;3633:25;;;;:10;:25;;;;;:33;;;:60;;;;;;;;:::i;:::-;;3625:105;;;;-1:-1:-1;;;3625:105:24;;8945:2:26;3625:105:24;;;8927:21:26;;;8964:18;;;8957:30;9023:34;9003:18;;;8996:62;9075:18;;3625:105:24;8743:356:26;3625:105:24;-1:-1:-1;;;;;3748:25:24;;;;;;:12;:25;;;;;;;;3740:74;;;;-1:-1:-1;;;3740:74:24;;9306:2:26;3740:74:24;;;9288:21:26;9345:2;9325:18;;;9318:30;9384:34;9364:18;;;9357:62;-1:-1:-1;;;9435:18:26;;;9428:34;9479:19;;3740:74:24;9104:400:26;3740:74:24;3485:444;3393:536;;:::o;281:225:25:-;392:4;416:16;:23;443:1;416:28;408:70;;;;-1:-1:-1;;;408:70:25;;9711:2:26;408:70:25;;;9693:21:26;9750:2;9730:18;;;9723:30;9789:31;9769:18;;;9762:59;9838:18;;408:70:25;9509:353:26;408:70:25;-1:-1:-1;495:4:25;281:225;;;;:::o;5041:2262:24:-;5134:21;5185:11;5198:16;5168:47;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5168:47:24;;;;;;;;;5158:58;;5168:47;5158:58;;;;5226:25;5254;;;:10;:25;;;;;5158:58;;-1:-1:-1;5313:21:24;5293:16;;;;:41;;;;;;;;:::i;:::-;;5289:156;;5350:64;5368:11;5381:13;5396:16;5350;:64::i;:::-;5428:7;;5041:2262;;:::o;5289:156::-;5463:14;5480:23;5491:11;5480:10;:23::i;:::-;5535:16;;5463:40;;-1:-1:-1;5556:1:24;;5535:16;;5530:22;;;;;;;;:::i;:::-;:27;;5522:75;;;;-1:-1:-1;;;5522:75:24;;10069:2:26;5522:75:24;;;10051:21:26;10108:2;10088:18;;;10081:30;10147:34;10127:18;;;10120:62;-1:-1:-1;;;10198:18:26;;;10191:33;10241:19;;5522:75:24;9867:399:26;5522:75:24;5616:45;5626:11;5639:13;5654:6;5616:9;:45::i;:::-;5615:46;5607:80;;;;-1:-1:-1;;;5607:80:24;;10473:2:26;5607:80:24;;;10455:21:26;10512:2;10492:18;;;10485:30;-1:-1:-1;;;10531:18:26;;;10524:51;10592:18;;5607:80:24;10271:345:26;5607:80:24;5722:23;5702:16;;;;:43;;;;;;;;:::i;:::-;;5698:798;;5789:219;;;;;;;;;;5826:21;5789:219;;5877:1;5789:219;;;;;;;;;;;;;;;5956:12;5789:219;;;;;;;;;5761:25;;;:10;:25;;;:247;;;;:25;;-1:-1:-1;;5761:247:24;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;5761:247:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5761:247:24;;;;;;;;;;;;;;;;;;6028:64;;-1:-1:-1;;;;;;;;;;;6028:64:24;;;6065:11;;6078:13;;6028:64;:::i;:::-;;;;;;;;5698:798;;;-1:-1:-1;;;;;6162:19:24;;;;;;;:6;:19;;;;;;6135:23;;;;6162:19;;;6120:38;;6162:19;6135:23;;;;6120:12;:38;:::i;:::-;6113:68;;;6109:387;;;6355:43;;-1:-1:-1;;6355:43:24;6374:24;6355:43;;;;;6418:67;;-1:-1:-1;;;;;;;;;;;6418:67:24;;;6458:11;;6471:13;;6418:67;:::i;:::-;;;;;;;;6109:387;6530:24;6510:16;;;;:44;;;;;;;;:::i;:::-;;6506:600;;6613:30;6623:11;6636:6;6613:9;:30::i;:::-;6592:18;;;;;:51;;;;6570:74;;6658:23;;;:25;;;;;-1:-1:-1;6658:25:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;6746:58;6759:8;:16;;;;;;;;;;;;6777:11;6790:13;6746:58;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;6912:22:24;;;;;;:9;:22;;;;;;6885:23;;;;6912:22;;;;6885:23;;:49;6881:215;;6954:40;;-1:-1:-1;;6954:40:24;6973:21;6954:40;;;;;7017:64;;-1:-1:-1;;;;;;;;;;;7017:64:24;;;7054:11;;7067:13;;7017:64;:::i;:::-;;;;;;;;6881:215;7115:25;;;;:10;:25;;;;;:36;;;;7143:8;;7115:25;:36;;;:25;;-1:-1:-1;;7115:36:24;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;7115:36:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7115:36:24;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7115:36:24;;;;;;;;;7166:16;;;;:41;;;;;;;;:::i;:::-;;7162:135;;7223:63;7240:11;7253:13;7268:16;7223;:63::i;:::-;5124:2179;;;5041:2262;;:::o;7612:551::-;7731:25;7759;;;:10;:25;;;;;7822:21;7802:16;;;;:41;;;;;;;;:::i;:::-;;7794:86;;;;-1:-1:-1;;;7794:86:24;;11657:2:26;7794:86:24;;;11639:21:26;;;11676:18;;;11669:30;11735:34;11715:18;;;11708:62;11787:18;;7794:86:24;11455:356:26;7794:86:24;-1:-1:-1;;;;;7934:19:24;;;;;;;:6;:19;;;;;;;;;7955:3;:16;;;;;;8004:9;;;;;;;;;;7899:115;;-1:-1:-1;;;7899:115:24;;137:42:23;;7899:34:24;;:115;;7934:19;;;;7955:16;;;7941:11;;7986:16;;8004:9;7899:115;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8033:42:24;;-1:-1:-1;;8033:42:24;8052:23;8033:42;;;;;8090:66;;-1:-1:-1;;;;;;;;;;;8090:66:24;-1:-1:-1;8090:66:24;;-1:-1:-1;8129:11:24;;8142:13;;8090:66;:::i;:::-;;;;;;;;7721:442;7612:551;;;:::o;8883:337::-;8946:7;8982:10;9025:2;9006:8;:21;;;;:62;;-1:-1:-1;;;;;;9031:29:24;;:16;:29;;;;;;;;;;;-1:-1:-1;;;;;9031:37:24;;;;;;;;;;;;9006:62;9002:189;;;-1:-1:-1;;;9146:14:24;-1:-1:-1;;9142:23:24;9129:37;9125:2;9121:46;;8883:337::o;8623:254::-;8722:4;8766:25;;;:10;:25;;;;;8846:18;;;;8722:4;;8809:29;8819:11;8832:5;8809:9;:29::i;:::-;:56;8808:62;;8623:254;-1:-1:-1;;;;;8623:254:24:o;8463:154::-;8539:4;8608:1;8574:31;8586:11;8599:5;8574:11;:31::i;:::-;:35;;;;:::i;:::-;8567:1;8562:48;;;8463:154;-1:-1:-1;;;8463:154:24:o;8169:288::-;8248:4;;8264:160;-1:-1:-1;;;;;8285:19:24;;;;;;:6;:19;;;;;:26;8281:30;;8264:160;;;-1:-1:-1;;;;;8336:19:24;;;;;;:6;:19;;;;;:22;;-1:-1:-1;;;;;8336:31:24;;;:19;8356:1;;8336:22;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;8336:22:24;:31;8332:82;;8394:5;:1;8398;8394:5;:::i;:::-;8387:12;;;;;8332:82;8313:3;;8264:160;;;-1:-1:-1;1096:3:24;;8169:288;-1:-1:-1;;;8169:288:24:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:171:26;81:20;;-1:-1:-1;;;;;130:30:26;;120:41;;110:69;;175:1;172;165:12;110:69;14:171;;;:::o;190:184::-;248:6;301:2;289:9;280:7;276:23;272:32;269:52;;;317:1;314;307:12;269:52;340:28;358:9;340:28;:::i;:::-;330:38;190:184;-1:-1:-1;;;190:184:26:o;571:180::-;630:6;683:2;671:9;662:7;658:23;654:32;651:52;;;699:1;696;689:12;651:52;-1:-1:-1;722:23:26;;571:180;-1:-1:-1;571:180:26:o;756:127::-;817:10;812:3;808:20;805:1;798:31;848:4;845:1;838:15;872:4;869:1;862:15;888:242;974:1;967:5;964:12;954:143;;1019:10;1014:3;1010:20;1007:1;1000:31;1054:4;1051:1;1044:15;1082:4;1079:1;1072:15;954:143;1106:18;;888:242::o;1135:219::-;1287:2;1272:18;;1299:49;1276:9;1330:6;1299:49;:::i;1753:173::-;1821:20;;-1:-1:-1;;;;;1870:31:26;;1860:42;;1850:70;;1916:1;1913;1906:12;1931:258;1998:6;2006;2059:2;2047:9;2038:7;2034:23;2030:32;2027:52;;;2075:1;2072;2065:12;2027:52;2098:28;2116:9;2098:28;:::i;:::-;2088:38;;2145;2179:2;2168:9;2164:18;2145:38;:::i;:::-;2135:48;;1931:258;;;;;:::o;2376:127::-;2437:10;2432:3;2428:20;2425:1;2418:31;2468:4;2465:1;2458:15;2492:4;2489:1;2482:15;2508:275;2579:2;2573:9;2644:2;2625:13;;-1:-1:-1;;2621:27:26;2609:40;;-1:-1:-1;;;;;2664:34:26;;2700:22;;;2661:62;2658:88;;;2726:18;;:::i;:::-;2762:2;2755:22;2508:275;;-1:-1:-1;2508:275:26:o;2788:835::-;2864:6;2872;2925:2;2913:9;2904:7;2900:23;2896:32;2893:52;;;2941:1;2938;2931:12;2893:52;2964:28;2982:9;2964:28;:::i;:::-;2954:38;;3011:2;3064;3053:9;3049:18;3036:32;-1:-1:-1;;;;;3128:2:26;3120:6;3117:14;3114:34;;;3144:1;3141;3134:12;3114:34;3182:6;3171:9;3167:22;3157:32;;3227:7;3220:4;3216:2;3212:13;3208:27;3198:55;;3249:1;3246;3239:12;3198:55;3285:2;3272:16;3307:2;3303;3300:10;3297:36;;;3313:18;;:::i;:::-;3355:53;3398:2;3379:13;;-1:-1:-1;;3375:27:26;3371:36;;3355:53;:::i;:::-;3342:66;;3431:2;3424:5;3417:17;3471:7;3466:2;3461;3457;3453:11;3449:20;3446:33;3443:53;;;3492:1;3489;3482:12;3443:53;3547:2;3542;3538;3534:11;3529:2;3522:5;3518:14;3505:45;3591:1;3586:2;3581;3574:5;3570:14;3566:23;3559:34;;3612:5;3602:15;;;;;2788:835;;;;;:::o;3628:160::-;3693:20;;3749:13;;3742:21;3732:32;;3722:60;;3778:1;3775;3768:12;3793:1396;3914:6;3922;3930;3938;3946;3954;4007:3;3995:9;3986:7;3982:23;3978:33;3975:53;;;4024:1;4021;4014:12;3975:53;4047:28;4065:9;4047:28;:::i;:::-;4037:38;;4094:2;4146;4135:9;4131:18;4118:32;4190:4;4183:5;4179:16;4172:5;4169:27;4159:55;;4210:1;4207;4200:12;4159:55;4233:5;-1:-1:-1;4257:35:26;4288:2;4273:18;;4257:35;:::i;:::-;4247:45;;4343:2;4332:9;4328:18;4315:32;-1:-1:-1;;;;;4407:2:26;4399:6;4396:14;4393:34;;;4423:1;4420;4413:12;4393:34;4461:6;4450:9;4446:22;4436:32;;4506:7;4499:4;4495:2;4491:13;4487:27;4477:55;;4528:1;4525;4518:12;4477:55;4564:2;4551:16;4586:2;4582;4579:10;4576:36;;;4592:18;;:::i;:::-;4638:2;4635:1;4631:10;4621:20;;4661:28;4685:2;4681;4677:11;4661:28;:::i;:::-;4723:15;;;4793:11;;;4789:20;;;4754:12;;;;4821:19;;;4818:39;;;4853:1;4850;4843:12;4818:39;4877:11;;;;4897:148;4913:6;4908:3;4905:15;4897:148;;;4979:23;4998:3;4979:23;:::i;:::-;4967:36;;4930:12;;;;5023;;;;4897:148;;;5064:5;5054:15;;;;;;;;5088:38;5121:3;5110:9;5106:19;5088:38;:::i;:::-;5078:48;;5145:38;5178:3;5167:9;5163:19;5145:38;:::i;:::-;5135:48;;3793:1396;;;;;;;;:::o;5194:252::-;5261:6;5269;5322:2;5310:9;5301:7;5297:23;5293:32;5290:52;;;5338:1;5335;5328:12;5290:52;5361:28;5379:9;5361:28;:::i;:::-;5351:38;5436:2;5421:18;;;;5408:32;;-1:-1:-1;;;5194:252:26:o;5659:326::-;5732:6;5740;5748;5801:2;5789:9;5780:7;5776:23;5772:32;5769:52;;;5817:1;5814;5807:12;5769:52;5840:28;5858:9;5840:28;:::i;:::-;5830:38;;5887;5921:2;5910:9;5906:18;5887:38;:::i;:::-;5877:48;;5944:35;5975:2;5964:9;5960:18;5944:35;:::i;:::-;5934:45;;5659:326;;;;;:::o;6172:457::-;6402:3;6387:19;;6415:49;6391:9;6446:6;6415:49;:::i;:::-;6500:6;6495:2;6484:9;6480:18;6473:34;6555:4;6547:6;6543:17;6538:2;6527:9;6523:18;6516:45;6609:12;6601:6;6597:25;6592:2;6581:9;6577:18;6570:53;6172:457;;;;;;;:::o;6634:397::-;6836:2;6818:21;;;6875:2;6855:18;;;6848:30;6914:34;6909:2;6894:18;;6887:62;-1:-1:-1;;;6980:2:26;6965:18;;6958:31;7021:3;7006:19;;6634:397::o;8081:250::-;8166:1;8176:113;8190:6;8187:1;8184:13;8176:113;;;8266:11;;;8260:18;8247:11;;;8240:39;8212:2;8205:10;8176:113;;;-1:-1:-1;;8323:1:26;8305:16;;8298:27;8081:250::o;8336:402::-;-1:-1:-1;;;;;8547:3:26;8543:28;8534:6;8529:3;8525:16;8521:51;8516:3;8509:64;8491:3;8602:6;8596:13;8618:74;8685:6;8681:1;8676:3;8672:11;8665:4;8657:6;8653:17;8618:74;:::i;:::-;8712:16;;;;8730:1;8708:24;;8336:402;-1:-1:-1;;;8336:402:26:o;10621:384::-;10827:2;10812:18;;10839:49;10816:9;10870:6;10839:49;:::i;:::-;-1:-1:-1;;;;;10924:31:26;;;;10919:2;10904:18;;10897:59;10987:2;10972:18;10965:34;10621:384;;-1:-1:-1;10621:384:26:o;11010:127::-;11071:10;11066:3;11062:20;11059:1;11052:31;11102:4;11099:1;11092:15;11126:4;11123:1;11116:15;11142:128;11209:9;;;11230:11;;;11227:37;;;11244:18;;:::i;11275:175::-;11312:3;11356:4;11349:5;11345:16;11385:4;11376:7;11373:17;11370:43;;11393:18;;:::i;:::-;11442:1;11429:15;;11275:175;-1:-1:-1;;11275:175:26:o;11816:270::-;11857:3;11895:5;11889:12;11922:6;11917:3;11910:19;11938:76;12007:6;12000:4;11995:3;11991:14;11984:4;11977:5;11973:16;11938:76;:::i;:::-;12068:2;12047:15;-1:-1:-1;;12043:29:26;12034:39;;;;12075:4;12030:50;;11816:270;-1:-1:-1;;11816:270:26:o;12091:651::-;12325:4;-1:-1:-1;;;;;12411:2:26;12403:6;12399:15;12388:9;12381:34;12463:2;12455:6;12451:15;12446:2;12435:9;12431:18;12424:43;12515:2;12507:6;12503:15;12498:2;12487:9;12483:18;12476:43;;12555:3;12550:2;12539:9;12535:18;12528:31;12582:45;12622:3;12611:9;12607:19;12599:6;12582:45;:::i;:::-;12676:9;12668:6;12664:22;12658:3;12647:9;12643:19;12636:51;12704:32;12729:6;12721;12704:32;:::i;:::-;12696:40;12091:651;-1:-1:-1;;;;;;;;12091:651:26:o;12747:127::-;12808:10;12803:3;12799:20;12796:1;12789:31;12839:4;12836:1;12829:15;12863:4;12860:1;12853:15;12879:125;12944:9;;;12965:10;;;12962:36;;;12978:18;;:::i","linkReferences":{}},"methodIdentifiers":{"MAX_VOTERS()":"3ceed692","_proposals(bytes32)":"f2e2af94","adminSetForwarder(uint64,address,bool)":"db56b934","admins(uint64)":"f768b74d","calculatePhase2JobHash(uint64,bytes)":"eea22ba2","expiry(uint64)":"217d75ab","getProposalState(bytes32)":"0a704f48","getProposalYesVotes(bytes32)":"a9b62d8d","getProposalYesVotesTotal(bytes32)":"1b35b0cc","initialize(uint64,uint8,bool,address[],uint64,uint64)":"68217337","initialized()":"158ef93e","isValidForwarder(uint64,address)":"3718acf8","refreshVoters(uint64)":"19bddc61","submitGovernanceProposal(uint64,bytes)":"f8d4858d","threshold(uint64)":"11f8dec6","ttl(uint64)":"6a30ed1c","useDemocracy(uint64)":"5b9a5eb7","useValidators(uint64)":"07ff4197","voteProposal(uint64,bytes)":"426c5863","voters(uint64,uint256)":"8a9a2093"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"lowLevelData\",\"type\":\"bytes\"}],\"name\":\"FailedHandlerExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ProposalStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"ProposalEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ProposalStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"ProposalVote\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_VOTERS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_proposals\",\"outputs\":[{\"internalType\":\"enum ProposalStatus\",\"name\":\"_status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_yesVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_yesVotesTotal\",\"type\":\"uint8\"},{\"internalType\":\"uint40\",\"name\":\"_proposedBlock\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"adminSetForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"admins\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"calculatePhase2JobHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"expiry\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalState\",\"outputs\":[{\"internalType\":\"enum ProposalStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalYesVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalYesVotesTotal\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_threshold\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"_useDemocracy\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"_voters\",\"type\":\"address[]\"},{\"internalType\":\"uint64\",\"name\":\"_expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_ttl\",\"type\":\"uint64\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"}],\"name\":\"refreshVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"submitGovernanceProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"threshold\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"ttl\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"useDemocracy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"useValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"voteProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voters\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"adminSetForwarder(uint64,address,bool)\":{\"params\":{\"forwarder\":\"Forwarder address to be added.\",\"valid\":\"Decision for the specific forwarder.\"}},\"refreshVoters(uint64)\":{\"params\":{\"phase1JobId\":\"ID of the proposal to refresh voters for.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adminSetForwarder(uint64,address,bool)\":{\"notice\":\"Set a forwarder to be used.Only callable by an address that currently has the admin role.\"},\"getProposalState(bytes32)\":{\"notice\":\"--------------------------------------------------------------------------------------- /// -------------------------------------- Helpers ---------------------------------------- /// --------------------------------------------------------------------------------------- ///\"},\"refreshVoters(uint64)\":{\"notice\":\"Refresh the list of voters for a proposal w/ validators\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/SigningRules.sol\":\"VotableSigningRules\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0xf513292ab066e6017db48ca749c1e63a44dfc5cba0326fc65c718f96e029d361\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02d715ae2898f1fabd08133f80e6a7a3b87a2796ca5d23d1cb3fed9f4367f34c\",\"dweb:/ipfs/QmfESqa4j3PQAvvdfrnDQ1xUH1TnVCfvZYHsAEDK8z4X4k\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0x9cc29c28f49d0b7f7b2f1aa32d8273f8a087bf62eb3fb22d893df824052c25ef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42dcb36cb10b878a0d5b20ce3a4a3ba4f51f44d7731a66ac1133c699bc80b31b\",\"dweb:/ipfs/QmY6q7SaHQMLBb3rS6xZdArPaXoskWeqF6oJwUeZ3gKLZj\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0x62bed173cb126f6d5006706cf249bac8a2d51bfa18f773f314784ff18adc622d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5acc33dddbf2492e37dc32e89cd56ce917272d303a6874805f3a5768a6bfbf54\",\"dweb:/ipfs/QmTsgFhcpUf16gAVazUXU3WspgX8nHke2hzVCvoqS25WEp\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678\",\"dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0xc8a57915ace96f5b6a85b57e57690fc038cad9034a3dc368c11828a3707c61ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa880a1a6e5d94005dcf4811b4c0df8d9c06407017ae111bd351483e2b76a72d\",\"dweb:/ipfs/QmcxkEE58gE1vDcZofTr8QpvdjXjgR72yYg7o4vTPSLCsy\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3b4bb409a156dee9ce261458117fe9f81080ca844a8a26c07c857c46d155effe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5792c69fe24bdc063a14e08fe68275007fdb1e5e7e343840a77938cb7e95a64e\",\"dweb:/ipfs/QmcAMhaurUwzhytJFYix4vRNeZeV8g27b8LnV3t7dvYtiK\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0x30d73c4fea34a791ad7334dd701df60fbb565c643556aadd6621e49e48895d1f\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://be9cf80e55eff0f49ad0ab3c44214e56a3e53b5ecafe311a521f5472fa4bbf59\",\"dweb:/ipfs/QmQHrZZoscvkfKSD2m6jhktrh8ieSLV2fg9DHGDHJiBkjT\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"lib/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"lib/forge-std/src/interfaces/IERC20.sol\":{\"keccak256\":\"0x4cab887298790f908c27de107e4e2907ca5413aee482ef776f8d2f353c5ef947\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb715e0c4a2bdbe432bb624501506041f06e878e0b72675aebba30ad2c2b72e7\",\"dweb:/ipfs/QmWhhLSvkxS2NrukJJHqFY8gDVE5r9rD4PfHvR24pwdKv9\"]},\"lib/forge-std/src/interfaces/IERC721.sol\":{\"keccak256\":\"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f\",\"dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/mocks/MockERC20.sol\":{\"keccak256\":\"0xadbdfc6639edec00ba94bb1133a0fd8de31ccafe45c2ef5df9b3ca61b60b559b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc766f01bccf669abac8cc7b2096cc1352a66471ca3772ae61b1801dedc4ed4f\",\"dweb:/ipfs/QmNigaPj1LYkP7Z5xr4ijkUxr2K66fDGeoifG3WoM9ruyw\"]},\"lib/forge-std/src/mocks/MockERC721.sol\":{\"keccak256\":\"0x3293dcbb7acd28df553c954e4e39e288bf10aab7ecda8d50ef21b4f4a91a28d9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9eb374daf6df34f4392f8926f1fddbce9f22c423066aeaefdfbe77395f77967b\",\"dweb:/ipfs/QmWR81zBJRX2uyRjveGzikYPj6ZwKppWsU49YEQXTLWUsN\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"src/Jobs.sol\":{\"keccak256\":\"0x3c8c4de2daa16ed74bd516ca4d2386041f400d2e0f8b9b48043af942b6f35f57\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://d24466b1816336ad3bc0233a08229fc858b6bb4647c2915e1445b0c6f8566665\",\"dweb:/ipfs/QmduZq8bLaQxJNqGSd6vVVtpSXWbgHz425XgcrxJD26mXn\"]},\"src/SigningRules.sol\":{\"keccak256\":\"0xef3f157ac147e7adc91ad9bfdcb004b460c678ec26ad4a283e348931960c48cd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://426077ece33956ad051028653d4c5c4fe060c53c89b3731517ccd1f0e4d65407\",\"dweb:/ipfs/QmVsFdMcQvUVFRio87GCXSbXTUAdfh9B86rgUZQqRU2RkA\"]},\"test/SigningRules.sol\":{\"keccak256\":\"0x4f425f70ea658855d134a6d867938f0ae6751d67dad4c36949899e65e851a6e1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://25961b4a46f8f0aafd178fdff297fd7715bbd87967ff123082a9e8704c1cfdb2\",\"dweb:/ipfs/QmXs3cLtoJTqZhYnw2siEmH4D8EoJz3YxVZSECK4gK7dpY\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"lowLevelData","type":"bytes","indexed":false}],"type":"event","name":"FailedHandlerExecution","anonymous":false},{"inputs":[{"internalType":"enum ProposalStatus","name":"status","type":"uint8","indexed":false},{"internalType":"uint64","name":"phase1JobId","type":"uint64","indexed":false},{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32","indexed":false}],"type":"event","name":"ProposalEvent","anonymous":false},{"inputs":[{"internalType":"enum ProposalStatus","name":"status","type":"uint8","indexed":false},{"internalType":"uint64","name":"phase1JobId","type":"uint64","indexed":false},{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32","indexed":false}],"type":"event","name":"ProposalVote","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_VOTERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"_proposals","outputs":[{"internalType":"enum ProposalStatus","name":"_status","type":"uint8"},{"internalType":"uint256","name":"_yesVotes","type":"uint256"},{"internalType":"uint8","name":"_yesVotesTotal","type":"uint8"},{"internalType":"uint40","name":"_proposedBlock","type":"uint40"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"address","name":"forwarder","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"adminSetForwarder"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"pure","type":"function","name":"calculatePhase2JobHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"expiry","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalState","outputs":[{"internalType":"enum ProposalStatus","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalYesVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalYesVotesTotal","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"uint8","name":"_threshold","type":"uint8"},{"internalType":"bool","name":"_useDemocracy","type":"bool"},{"internalType":"address[]","name":"_voters","type":"address[]"},{"internalType":"uint64","name":"_expiry","type":"uint64"},{"internalType":"uint64","name":"_ttl","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"isValidForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"refreshVoters"},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"submitGovernanceProposal"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"threshold","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"ttl","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"useDemocracy","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"useValidators","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"voteProposal"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"voters","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"adminSetForwarder(uint64,address,bool)":{"params":{"forwarder":"Forwarder address to be added.","valid":"Decision for the specific forwarder."}},"refreshVoters(uint64)":{"params":{"phase1JobId":"ID of the proposal to refresh voters for."}}},"version":1},"userdoc":{"kind":"user","methods":{"adminSetForwarder(uint64,address,bool)":{"notice":"Set a forwarder to be used.Only callable by an address that currently has the admin role."},"getProposalState(bytes32)":{"notice":"--------------------------------------------------------------------------------------- /// -------------------------------------- Helpers ---------------------------------------- /// --------------------------------------------------------------------------------------- ///"},"refreshVoters(uint64)":{"notice":"Refresh the list of voters for a proposal w/ validators"}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/SigningRules.sol":"VotableSigningRules"},"evmVersion":"paris","libraries":{}},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c","urls":["bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224","dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0xf513292ab066e6017db48ca749c1e63a44dfc5cba0326fc65c718f96e029d361","urls":["bzz-raw://02d715ae2898f1fabd08133f80e6a7a3b87a2796ca5d23d1cb3fed9f4367f34c","dweb:/ipfs/QmfESqa4j3PQAvvdfrnDQ1xUH1TnVCfvZYHsAEDK8z4X4k"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0x9cc29c28f49d0b7f7b2f1aa32d8273f8a087bf62eb3fb22d893df824052c25ef","urls":["bzz-raw://42dcb36cb10b878a0d5b20ce3a4a3ba4f51f44d7731a66ac1133c699bc80b31b","dweb:/ipfs/QmY6q7SaHQMLBb3rS6xZdArPaXoskWeqF6oJwUeZ3gKLZj"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7","urls":["bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2","dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6","urls":["bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d","dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0x62bed173cb126f6d5006706cf249bac8a2d51bfa18f773f314784ff18adc622d","urls":["bzz-raw://5acc33dddbf2492e37dc32e89cd56ce917272d303a6874805f3a5768a6bfbf54","dweb:/ipfs/QmTsgFhcpUf16gAVazUXU3WspgX8nHke2hzVCvoqS25WEp"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3","urls":["bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678","dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0xc8a57915ace96f5b6a85b57e57690fc038cad9034a3dc368c11828a3707c61ab","urls":["bzz-raw://fa880a1a6e5d94005dcf4811b4c0df8d9c06407017ae111bd351483e2b76a72d","dweb:/ipfs/QmcxkEE58gE1vDcZofTr8QpvdjXjgR72yYg7o4vTPSLCsy"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0","urls":["bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61","dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3b4bb409a156dee9ce261458117fe9f81080ca844a8a26c07c857c46d155effe","urls":["bzz-raw://5792c69fe24bdc063a14e08fe68275007fdb1e5e7e343840a77938cb7e95a64e","dweb:/ipfs/QmcAMhaurUwzhytJFYix4vRNeZeV8g27b8LnV3t7dvYtiK"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0x30d73c4fea34a791ad7334dd701df60fbb565c643556aadd6621e49e48895d1f","urls":["bzz-raw://be9cf80e55eff0f49ad0ab3c44214e56a3e53b5ecafe311a521f5472fa4bbf59","dweb:/ipfs/QmQHrZZoscvkfKSD2m6jhktrh8ieSLV2fg9DHGDHJiBkjT"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba","urls":["bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70","dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea","urls":["bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973","dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC165.sol":{"keccak256":"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600","urls":["bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc","dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC20.sol":{"keccak256":"0x4cab887298790f908c27de107e4e2907ca5413aee482ef776f8d2f353c5ef947","urls":["bzz-raw://bb715e0c4a2bdbe432bb624501506041f06e878e0b72675aebba30ad2c2b72e7","dweb:/ipfs/QmWhhLSvkxS2NrukJJHqFY8gDVE5r9rD4PfHvR24pwdKv9"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC721.sol":{"keccak256":"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15","urls":["bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f","dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/mocks/MockERC20.sol":{"keccak256":"0xadbdfc6639edec00ba94bb1133a0fd8de31ccafe45c2ef5df9b3ca61b60b559b","urls":["bzz-raw://bc766f01bccf669abac8cc7b2096cc1352a66471ca3772ae61b1801dedc4ed4f","dweb:/ipfs/QmNigaPj1LYkP7Z5xr4ijkUxr2K66fDGeoifG3WoM9ruyw"],"license":"MIT"},"lib/forge-std/src/mocks/MockERC721.sol":{"keccak256":"0x3293dcbb7acd28df553c954e4e39e288bf10aab7ecda8d50ef21b4f4a91a28d9","urls":["bzz-raw://9eb374daf6df34f4392f8926f1fddbce9f22c423066aeaefdfbe77395f77967b","dweb:/ipfs/QmWR81zBJRX2uyRjveGzikYPj6ZwKppWsU49YEQXTLWUsN"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381","urls":["bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae","dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq"],"license":"MIT"},"src/Jobs.sol":{"keccak256":"0x3c8c4de2daa16ed74bd516ca4d2386041f400d2e0f8b9b48043af942b6f35f57","urls":["bzz-raw://d24466b1816336ad3bc0233a08229fc858b6bb4647c2915e1445b0c6f8566665","dweb:/ipfs/QmduZq8bLaQxJNqGSd6vVVtpSXWbgHz425XgcrxJD26mXn"],"license":"GPL-3.0-only"},"src/SigningRules.sol":{"keccak256":"0xef3f157ac147e7adc91ad9bfdcb004b460c678ec26ad4a283e348931960c48cd","urls":["bzz-raw://426077ece33956ad051028653d4c5c4fe060c53c89b3731517ccd1f0e4d65407","dweb:/ipfs/QmVsFdMcQvUVFRio87GCXSbXTUAdfh9B86rgUZQqRU2RkA"],"license":"UNLICENSED"},"test/SigningRules.sol":{"keccak256":"0x4f425f70ea658855d134a6d867938f0ae6751d67dad4c36949899e65e851a6e1","urls":["bzz-raw://25961b4a46f8f0aafd178fdff297fd7715bbd87967ff123082a9e8704c1cfdb2","dweb:/ipfs/QmXs3cLtoJTqZhYnw2siEmH4D8EoJz3YxVZSECK4gK7dpY"],"license":"UNLICENSED"}},"version":1},"id":25} \ No newline at end of file diff --git a/examples/contracts/examples/deploy_contract.rs b/examples/contracts/examples/deploy_contract.rs deleted file mode 100644 index ce6eb8e0e..000000000 --- a/examples/contracts/examples/deploy_contract.rs +++ /dev/null @@ -1,65 +0,0 @@ -use serde_json::Value; -use sp_core::{H256, U256}; -use tangle_subxt::subxt::OnlineClient; -use tangle_subxt::subxt::{utils::H160, PolkadotConfig}; -use tangle_subxt::tangle_testnet_runtime; -use tangle_subxt::tangle_testnet_runtime::api::runtime_types::primitive_types::U256 as WebbU256; - -use crate::tangle_testnet_runtime::api as TangleApi; -use std::fs; -use std::str::FromStr; -use tangle_subxt::tangle_testnet_runtime::api::runtime_types::tangle_testnet_runtime::RuntimeCall; - -fn get_signing_rules_abi() -> (Value, Value) { - let mut data: Value = serde_json::from_str( - &fs::read_to_string("examples/contracts/artifacts/VotableSigningRules.json").unwrap(), - ) - .unwrap(); - let abi = data["abi"].take(); - let bytecode = data["bytecode"]["object"].take(); - (abi, bytecode) -} - -#[tokio::main] -async fn main() -> Result<(), String> { - let subxt_client = OnlineClient::::new().await.unwrap(); - let alice = subxt_signer::sr25519::dev::alice(); - - // Deploy simple contract. - let (_abi, bytecode) = get_signing_rules_abi(); - let stripped_bytecode = bytecode.as_str().unwrap().trim_start_matches("0x"); - let decoded = hex::decode(stripped_bytecode).unwrap(); - let create2_call = RuntimeCall::EVM(TangleApi::evm::Call::create2 { - source: H160::from_str("0x8efcaf2c4ebbf88bf07f3bb44a2869c4c675ad7a").unwrap(), - init: decoded, - salt: H256::from([0u8; 32]), - value: WebbU256([0u64; 4]), - gas_limit: 10000000u64, - max_fee_per_gas: WebbU256(U256::from_big_endian(1000000u64.to_be_bytes().as_slice()).0), - max_priority_fee_per_gas: None, - nonce: None, - access_list: vec![], - }); - let sudo_create2_call = TangleApi::tx().sudo().sudo(create2_call); - let result = subxt_client - .tx() - .sign_and_submit_then_watch_default(&sudo_create2_call, &alice) - .await - .unwrap() - .wait_for_finalized() - .await - .unwrap(); - - let rresult = result.wait_for_success().await.unwrap(); - let deployed_contract = rresult.find_first::().unwrap(); - - let _contract_address = match deployed_contract { - Some(contract) => { - println!("Contract {:?} deployed at : {:?}", contract.address, result.block_hash()); - contract.address - }, - None => return Err("Contract failed to deploy".to_string()), - }; - - Ok(()) -} diff --git a/examples/contracts/examples/sign_proposals.rs b/examples/contracts/examples/sign_proposals.rs deleted file mode 100644 index 7097621e4..000000000 --- a/examples/contracts/examples/sign_proposals.rs +++ /dev/null @@ -1,51 +0,0 @@ -use crate::tangle_testnet_runtime::api::runtime_types::{ - bounded_collections::bounded_vec::BoundedVec, - tangle_primitives::{jobs, roles}, -}; - -use sp_core::Pair; - -use tangle_subxt::subxt::OnlineClient; -use tangle_subxt::subxt::PolkadotConfig; -use tangle_subxt::tangle_testnet_runtime; - -#[tokio::main] -async fn main() -> Result<(), String> { - let subxt_client = OnlineClient::::new().await.unwrap(); - let alice = subxt_signer::sr25519::dev::alice(); - // Dks signing key - let dkg_key = sp_core::ecdsa::Pair::from_seed(&[3u8; 32]); - let dkg_pubkey = dkg_key.public(); - - let proposal_data = b"phase2"; - let proposal_data_hash = sp_core::hashing::keccak_256(proposal_data); - let dkg_signature = dkg_key.sign_prehashed(&proposal_data_hash); - let dkg_phase_two_result = jobs::JobResult::DKGPhaseTwo(jobs::tss::DKGTSSSignatureResult { - signature_scheme: jobs::tss::DigitalSignatureScheme::EcdsaSecp256k1, - signature: BoundedVec(dkg_signature.0[..64].to_vec()), - derivation_path: None, - data: BoundedVec(proposal_data_hash.to_vec()), - verifying_key: BoundedVec(dkg_pubkey.0.to_vec()), - chain_code: None, - __ignore: Default::default(), - }); - - // Phase 2 Job Id - let phase2_job_id = 1u64; - let job_result_tx = tangle_testnet_runtime::api::tx().jobs().submit_job_result( - roles::RoleType::Tss(roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - phase2_job_id, - dkg_phase_two_result, - ); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&job_result_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - Ok(()) -} diff --git a/examples/contracts/examples/submit_proposal.rs b/examples/contracts/examples/submit_proposal.rs deleted file mode 100644 index 5b46b9a48..000000000 --- a/examples/contracts/examples/submit_proposal.rs +++ /dev/null @@ -1,271 +0,0 @@ -use std::fs; -use std::sync::Arc; -use std::time::Duration; - -use crate::tangle_testnet_runtime::api::runtime_types::pallet_roles::profile::Record; -use crate::tangle_testnet_runtime::api::{ - self as TangleApi, - runtime_types::{ - bounded_collections::bounded_vec::BoundedVec, - tangle_primitives::{jobs, roles}, - }, -}; -use ethers::contract::{abigen, FunctionCall}; -use ethers::middleware::Middleware; -use ethers::middleware::SignerMiddleware; -use ethers::providers::{Http, Provider}; -use ethers::signers::LocalWallet; -use ethers::signers::Signer as EthSigner; -use ethers::types::{Address, Bytes}; -use serde_json::Value; -use sp_core::{Pair, H256, U256}; -use std::str::FromStr; -use tangle_subxt::subxt::OnlineClient; -use tangle_subxt::subxt::{tx::Signer, utils::AccountId32, utils::H160, PolkadotConfig}; -use tangle_subxt::tangle_testnet_runtime; -use tangle_subxt::tangle_testnet_runtime::api::runtime_types::primitive_types::U256 as WebbU256; -use tangle_subxt::tangle_testnet_runtime::api::runtime_types::tangle_testnet_runtime::RuntimeCall; -use tokio::time::sleep; - -fn get_signing_rules_abi() -> (Value, Value) { - let mut data: Value = serde_json::from_str( - &fs::read_to_string("examples/contracts/artifacts/VotableSigningRules.json").unwrap(), - ) - .unwrap(); - let abi = data["abi"].take(); - let bytecode = data["bytecode"]["object"].take(); - (abi, bytecode) -} - -#[tokio::main] -async fn main() -> Result<(), String> { - let subxt_client = OnlineClient::::new().await.unwrap(); - let alice = subxt_signer::sr25519::dev::alice(); - let bob = subxt_signer::sr25519::dev::bob(); - let alice_account_id = - >::account_id(&alice); - let bob_account_id = - >::account_id(&bob); - let alice_role_key = sp_core::ecdsa::Pair::from_string("//Alice", None).unwrap(); - let bob_role_key = sp_core::ecdsa::Pair::from_string("//Bob", None).unwrap(); - - // Step 1: Create a profile for the validators. - - let profile = TangleApi::runtime_types::pallet_roles::profile::Profile::Shared( - TangleApi::runtime_types::pallet_roles::profile::SharedRestakeProfile { - records: BoundedVec(vec![Record { - amount: None, - role: roles::RoleType::Tss( - roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - ), - }]), - amount: 100 * 1_000_000_000, - }, - ); - let create_profile_tx = TangleApi::tx().roles().create_profile(profile, None); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&create_profile_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&create_profile_tx, &bob) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // Step 2: Deploy the contract. - - let (_abi, bytecode) = get_signing_rules_abi(); - let stripped_bytecode = bytecode.as_str().unwrap().trim_start_matches("0x"); - let decoded = hex::decode(stripped_bytecode).unwrap(); - let create2_call = RuntimeCall::EVM(TangleApi::evm::Call::create2 { - source: H160::from_str("0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b").unwrap(), - init: decoded, - salt: H256::from([0u8; 32]), - value: WebbU256([0u64; 4]), - gas_limit: 10000000u64, - max_fee_per_gas: WebbU256(U256::from_big_endian(1000000u64.to_be_bytes().as_slice()).0), - max_priority_fee_per_gas: None, - nonce: None, - access_list: vec![], - }); - let sudo_create2_call = TangleApi::tx().sudo().sudo(create2_call); - let result = subxt_client - .tx() - .sign_and_submit_then_watch_default(&sudo_create2_call, &alice) - .await - .unwrap() - .wait_for_finalized() - .await - .unwrap(); - - let rresult = result.wait_for_success().await.unwrap(); - let deployed_contract = rresult.find_first::().unwrap(); - - let contract_address = match deployed_contract { - Some(contract) => { - println!("Contract {:?} deployed at : {:?}", contract.address, result.block_hash()); - contract.address - }, - None => return Err("Contract failed to deploy".to_string()), - }; - - // Step 3: Submit a DKG phase one job request. - let dkg_phase_one = jobs::JobSubmission { - expiry: 1000u64, - ttl: 1000u64, - job_type: jobs::JobType::DKGTSSPhaseOne(jobs::tss::DKGTSSPhaseOneJobType { - participants: BoundedVec::(vec![ - alice_account_id.clone(), - bob_account_id.clone(), - ]), - threshold: 1u8, - permitted_caller: None, - role_type: roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - hd_wallet: false, - __ignore: Default::default(), - }), - fallback: jobs::FallbackOptions::Destroy, - }; - let jobs_tx = tangle_testnet_runtime::api::tx().jobs().submit_job(dkg_phase_one.clone()); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&jobs_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // Step 4: Submit the DKG phase one result. - let dkg_key = sp_core::ecdsa::Pair::from_seed(&[3u8; 32]); - let dkg_pubkey = dkg_key.public(); - let dkg_pubkey_hash = sp_core::hashing::keccak_256(dkg_pubkey.as_ref()); - let alice_signature = alice_role_key.sign_prehashed(&dkg_pubkey_hash); - let bob_signature = bob_role_key.sign_prehashed(&dkg_pubkey_hash); - let dkg_phase_one_result = jobs::JobResult::DKGPhaseOne(jobs::tss::DKGTSSKeySubmissionResult { - key: BoundedVec(dkg_pubkey.0.to_vec()), - participants: BoundedVec(vec![ - BoundedVec(alice_account_id.0.to_vec()), - BoundedVec(bob_account_id.0.to_vec()), - ]), - signature_scheme: jobs::tss::DigitalSignatureScheme::EcdsaSecp256k1, - signatures: BoundedVec(vec![ - BoundedVec(alice_signature.0.to_vec()), - BoundedVec(bob_signature.0.to_vec()), - ]), - threshold: 1, - chain_code: None, - __ignore: Default::default(), - }); - let job_result_tx = tangle_testnet_runtime::api::tx().jobs().submit_job_result( - roles::RoleType::Tss(roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - dkg_phase_one_result, - ); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&job_result_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // Step 5: Intitialize the signing rules contract. - abigen!(VotableSigningRules, "examples/contracts/artifacts/VotableSigningRules.json"); - let provider = Provider::::try_from("http://127.0.0.1:9944").unwrap(); - let client = Arc::new(provider.clone()); - let contract = VotableSigningRules::new(Address::from(contract_address), client); - let phase_1_job_id = 0u64; - let threshold = 2; - let use_democracy = false; - let voters = vec![ - H160::from_str("0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b").unwrap(), - H160::from_str("0x5D4ff00Bf77F97E93131a448379f7808D7373026").unwrap(), - H160::from_str("0xb65EA4E162188d199b14da8bc747F24042c36E2C").unwrap(), - ]; - let expiry = 5000; - let ttl = 5000; - let fn_call: FunctionCall<_, _, _> = - contract.initialize(phase_1_job_id, threshold, use_democracy, voters, expiry, ttl); - - let init_tx_call = RuntimeCall::EVM(TangleApi::evm::Call::call { - source: H160::from_str("0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b").unwrap(), - target: contract_address, - input: fn_call.calldata().unwrap().to_vec(), - value: WebbU256([0u64; 4]), - gas_limit: 10000000u64, - max_fee_per_gas: WebbU256(U256::from_big_endian(1000000u64.to_be_bytes().as_slice()).0), - max_priority_fee_per_gas: None, - nonce: None, - access_list: vec![], - }); - - let sudo_init_tx_call = TangleApi::tx().sudo().sudo(init_tx_call); - let result = subxt_client - .tx() - .sign_and_submit_then_watch_default(&sudo_init_tx_call, &alice) - .await - .unwrap() - .wait_for_finalized() - .await - .unwrap(); - - println!("Contract initialized at : {:?}", result.block_hash()); - - // Step 6: Vote on the proposal to submit the phase 2 job. - let phase_2_job_details: Bytes = b"phase2".into(); - let vote_proposal_fn_call: FunctionCall<_, _, _> = - contract.vote_proposal(phase_1_job_id, phase_2_job_details.clone()); - - let relayer_wallet1 = - LocalWallet::from_str("99b3c12287537e38c90a9219d4cb074a89a16e9cdb20bf85728ebd97c343e342") - .unwrap() - .with_chain_id(3799u32); - let relayer1_signer_client = SignerMiddleware::new(provider.clone(), relayer_wallet1); - let _result = relayer1_signer_client - .send_transaction(vote_proposal_fn_call.clone().tx, None) - .await - .unwrap(); - - sleep(Duration::from_secs(5)).await; - println!("Relayer 1 voted on proposal"); - - let relayer_wallet2 = - LocalWallet::from_str("e0a3bc1ac01e8d0653637f5b1a3561bef5281fada1e9258277c67d2ac654c060") - .unwrap() - .with_chain_id(3799u32); - let relayer2_signer_client = SignerMiddleware::new(provider.clone(), relayer_wallet2); - let _result = relayer2_signer_client - .send_transaction(vote_proposal_fn_call.clone().tx, None) - .await - .unwrap(); - - sleep(Duration::from_secs(5)).await; - println!("Relayer 2 voted on proposal"); - - let relayer_wallet3 = - LocalWallet::from_str("58ba5c1ceadfb2e7e36b267fe464f33e36371de03a5a5469a2e86a99e253a3ae") - .unwrap() - .with_chain_id(3799u32); - let relayer3_signer_client = SignerMiddleware::new(provider.clone(), relayer_wallet3); - let _result = relayer3_signer_client - .send_transaction(vote_proposal_fn_call.clone().tx, None) - .await - .unwrap(); - - sleep(Duration::from_secs(5)).await; - println!("Relayer 3 voted on proposal"); - - Ok(()) -} diff --git a/examples/jobs/Cargo.toml b/examples/jobs/Cargo.toml deleted file mode 100644 index 86273af02..000000000 --- a/examples/jobs/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "examples-jobs" -version = "0.1.0" -authors = { workspace = true } -edition = "2021" -license = "GPL-3.0-only" -repository = { workspace = true } - -[dev-dependencies] -subxt-signer = { version = "0.37.0", default-features = false, features = ["subxt", "sr25519"] } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.7.0" } -tokio = { version = "1.32.0", features = ["full"] } -tangle-crypto-primitives = { path = "../../primitives/crypto"} -tangle-subxt = { path = "../../tangle-subxt" } -hex = {workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -subxt = { version = "0.37.0" } -serde_json = { workspace = true } -ethers = "2.0.13" diff --git a/examples/jobs/examples/key_rotation.rs b/examples/jobs/examples/key_rotation.rs deleted file mode 100644 index 095aefa5d..000000000 --- a/examples/jobs/examples/key_rotation.rs +++ /dev/null @@ -1,237 +0,0 @@ -use crate::tangle_testnet_runtime::api::runtime_types::pallet_roles::profile::Record; -use crate::tangle_testnet_runtime::api::{ - self as TangleApi, - runtime_types::{ - bounded_collections::bounded_vec::BoundedVec, - tangle_primitives::{jobs, roles}, - }, -}; - -use sp_core::{ByteArray, Pair}; -use tangle_subxt::subxt::{utils::AccountId32, OnlineClient, PolkadotConfig}; -use tangle_subxt::tangle_testnet_runtime; - -#[tokio::main] -async fn main() -> Result<(), String> { - let subxt_client = OnlineClient::::new().await.unwrap(); - let alice = subxt_signer::sr25519::dev::alice(); - let bob = subxt_signer::sr25519::dev::bob(); - let alice_account_id = alice.public_key().to_account_id(); - let bob_account_id = bob.public_key().to_account_id(); - let alice_role_key = sp_core::ecdsa::Pair::from_string("//Alice", None).unwrap(); - let bob_role_key = sp_core::ecdsa::Pair::from_string("//Bob", None).unwrap(); - - // Step 1: Create a profile for the validators. - - let profile = TangleApi::runtime_types::pallet_roles::profile::Profile::Shared( - TangleApi::runtime_types::pallet_roles::profile::SharedRestakeProfile { - records: BoundedVec(vec![Record { - amount: None, - role: roles::RoleType::Tss( - roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - ), - }]), - amount: 100 * 1_000_000_000, - }, - ); - let create_profile_tx = TangleApi::tx().roles().create_profile(profile, None); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&create_profile_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&create_profile_tx, &bob) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // Step 2: Submit a DKG phase one job request. - let dkg_phase_one = jobs::JobSubmission { - expiry: 1000u64, - ttl: 1000u64, - job_type: jobs::JobType::DKGTSSPhaseOne(jobs::tss::DKGTSSPhaseOneJobType { - participants: BoundedVec::(vec![ - alice_account_id.clone(), - bob_account_id.clone(), - ]), - threshold: 1u8, - permitted_caller: None, - role_type: roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - hd_wallet: false, - __ignore: Default::default(), - }), - fallback: jobs::FallbackOptions::Destroy, - }; - let jobs_tx = tangle_testnet_runtime::api::tx().jobs().submit_job(dkg_phase_one.clone()); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&jobs_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // Step 3: Submit the DKG phase one result. - let dkg_key = sp_core::ecdsa::Pair::from_seed(&[3u8; 32]); - let dkg_pubkey = dkg_key.public(); - - let dkg_pubkey_hash = sp_core::hashing::keccak_256(dkg_pubkey.as_ref()); - let alice_signature = alice_role_key.sign_prehashed(&dkg_pubkey_hash); - let bob_signature = bob_role_key.sign_prehashed(&dkg_pubkey_hash); - let dkg_phase_one_result = jobs::JobResult::DKGPhaseOne(jobs::tss::DKGTSSKeySubmissionResult { - key: BoundedVec(dkg_pubkey.0.to_vec()), - participants: BoundedVec(vec![ - BoundedVec(alice_account_id.0.to_vec()), - BoundedVec(bob_account_id.0.to_vec()), - ]), - signature_scheme: jobs::tss::DigitalSignatureScheme::EcdsaSecp256k1, - signatures: BoundedVec(vec![ - BoundedVec(alice_signature.0.to_vec()), - BoundedVec(bob_signature.0.to_vec()), - ]), - threshold: 1, - chain_code: None, - __ignore: Default::default(), - }); - let job_result_tx = tangle_testnet_runtime::api::tx().jobs().submit_job_result( - roles::RoleType::Tss(roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - dkg_phase_one_result, - ); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&job_result_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // In order to rotate we need to submita Phase 1 job request - let dkg_phase_one = jobs::JobSubmission { - expiry: 1000u64, - ttl: 1000u64, - job_type: jobs::JobType::DKGTSSPhaseOne(jobs::tss::DKGTSSPhaseOneJobType { - participants: BoundedVec::(vec![ - alice_account_id.clone(), - bob_account_id.clone(), - ]), - threshold: 1u8, - permitted_caller: None, - role_type: roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - hd_wallet: false, - __ignore: Default::default(), - }), - fallback: jobs::FallbackOptions::Destroy, - }; - let jobs_tx = tangle_testnet_runtime::api::tx().jobs().submit_job(dkg_phase_one.clone()); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&jobs_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - let new_dkg_key = sp_core::ecdsa::Pair::from_seed(&[4u8; 32]); - let new_dkg_pubkey = new_dkg_key.public(); - let new_dkg_pubkey_hash = sp_core::hashing::keccak_256(new_dkg_pubkey.as_ref()); - let alice_signature = alice_role_key.sign_prehashed(&new_dkg_pubkey_hash); - let bob_signature = bob_role_key.sign_prehashed(&new_dkg_pubkey_hash); - - // Sign new dkg key by current dkg key. - let msg_hash = sp_core::hashing::keccak_256(new_dkg_pubkey.to_raw_vec().as_slice()); - let dkg_signature = dkg_key.sign_prehashed(&msg_hash); - - let dkg_phase_one_result = jobs::JobResult::DKGPhaseOne(jobs::tss::DKGTSSKeySubmissionResult { - key: BoundedVec(new_dkg_pubkey.0.to_vec()), - participants: BoundedVec(vec![ - BoundedVec(alice_account_id.0.to_vec()), - BoundedVec(bob_account_id.0.to_vec()), - ]), - signature_scheme: jobs::tss::DigitalSignatureScheme::EcdsaSecp256k1, - signatures: BoundedVec(vec![ - BoundedVec(alice_signature.0.to_vec()), - BoundedVec(bob_signature.0.to_vec()), - ]), - threshold: 1, - chain_code: None, - __ignore: Default::default(), - }); - let job_result_tx = tangle_testnet_runtime::api::tx().jobs().submit_job_result( - roles::RoleType::Tss(roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 1, - dkg_phase_one_result, - ); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&job_result_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // Step4 Submit Dkg phase 4 job request - let dkg_phase_four_job = jobs::JobSubmission { - expiry: 1000u64, - ttl: 1000u64, - job_type: jobs::JobType::DKGTSSPhaseFour(jobs::tss::DKGTSSPhaseFourJobType { - phase_one_id: 0, - new_phase_one_id: 1, - role_type: roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - }), - fallback: jobs::FallbackOptions::Destroy, - }; - - let dkg_phase_four_job_tx = - tangle_testnet_runtime::api::tx().jobs().submit_job(dkg_phase_four_job.clone()); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&dkg_phase_four_job_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // Step5 Submit Dkg phase 4 job result - let dkg_phase4_job_result = jobs::JobResult::DKGPhaseFour(jobs::tss::DKGTSSKeyRotationResult { - phase_one_id: 0, - new_phase_one_id: 1, - new_key: BoundedVec(new_dkg_pubkey.to_raw_vec()), - key: BoundedVec(dkg_pubkey.to_raw_vec()), - signature: BoundedVec(dkg_signature.0[..64].to_vec()), - signature_scheme: jobs::tss::DigitalSignatureScheme::EcdsaSecp256k1, - derivation_path: None, - chain_code: None, - __ignore: Default::default(), - }); - - let dkg_phase4_job_result_tx = tangle_testnet_runtime::api::tx().jobs().submit_job_result( - roles::RoleType::Tss(roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 2, - dkg_phase4_job_result, - ); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&dkg_phase4_job_result_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - Ok(()) -} diff --git a/examples/profile/Cargo.toml b/examples/profile/Cargo.toml deleted file mode 100644 index 8e3e99ddc..000000000 --- a/examples/profile/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "examples-profile" -version = "0.1.0" -authors = { workspace = true } -edition = "2021" -license = "GPL-3.0-only" -repository = { workspace = true } - -[dev-dependencies] -subxt-signer = { version = "0.37.0", default-features = false, features = ["subxt", "sr25519"] } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.7.0" } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.7.0" } -tokio = { version = "1.32.0", features = ["full"] } -tangle-crypto-primitives = { path = "../../primitives/crypto"} -tangle-subxt = { path = "../../tangle-subxt" } -hex = {workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -subxt = { version = "0.37.0" } diff --git a/examples/profile/examples/create_profile.rs b/examples/profile/examples/create_profile.rs deleted file mode 100644 index a382d0694..000000000 --- a/examples/profile/examples/create_profile.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::tangle_testnet_runtime::api::runtime_types::pallet_roles::profile::Record; -use crate::tangle_testnet_runtime::api::{ - self as TangleApi, - runtime_types::{bounded_collections::bounded_vec::BoundedVec, tangle_primitives::roles}, -}; -use tangle_subxt::subxt::OnlineClient; -use tangle_subxt::subxt::PolkadotConfig; -use tangle_subxt::tangle_testnet_runtime; - -#[tokio::main] -async fn main() -> Result<(), String> { - let subxt_client = OnlineClient::::new().await.unwrap(); - let alice = subxt_signer::sr25519::dev::alice(); - let bob = subxt_signer::sr25519::dev::bob(); - - // Create a profile for the validators. - let profile = TangleApi::runtime_types::pallet_roles::profile::Profile::Shared( - TangleApi::runtime_types::pallet_roles::profile::SharedRestakeProfile { - records: BoundedVec(vec![Record { - amount: None, - role: roles::RoleType::Tss( - roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - ), - }]), - amount: 100 * 1_000_000_000, - }, - ); - let create_profile_tx = TangleApi::tx().roles().create_profile(profile, None); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&create_profile_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&create_profile_tx, &bob) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - Ok(()) -} diff --git a/flake.lock b/flake.lock index b498bd702..5051bfa0a 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1701680307, - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -18,13 +18,37 @@ "type": "github" } }, + "foundry": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1719997877, + "narHash": "sha256-/Edw+w0PiGgxwnCeJycM0VgH4HtlCi91v1d8xbi+REE=", + "owner": "shazow", + "repo": "foundry.nix", + "rev": "02febba4f1cf0606d790acdb24adcf7a64afb4e1", + "type": "github" + }, + "original": { + "owner": "shazow", + "ref": "monthly", + "repo": "foundry.nix", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1701626906, - "narHash": "sha256-ugr1QyzzwNk505ICE4VMQzonHQ9QS5W33xF2FXzFQ00=", + "lastModified": 1722141560, + "narHash": "sha256-Ul3rIdesWaiW56PS/Ak3UlJdkwBrD4UcagCmXZR9Z7Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0c6d8c783336a59f4c59d4a6daed6ab269c4b361", + "rev": "038fb464fcfa79b4f08131b07f2d8c9a6bcc4160", "type": "github" }, "original": { @@ -37,25 +61,23 @@ "root": { "inputs": { "flake-utils": "flake-utils", + "foundry": "foundry", "nixpkgs": "nixpkgs", "rust-overlay": "rust-overlay" } }, "rust-overlay": { "inputs": { - "flake-utils": [ - "flake-utils" - ], "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1701742626, - "narHash": "sha256-ASuWURoeuV7xKZEVSCJsdHidrgprJexNkFWU/cfZ5LE=", + "lastModified": 1722391647, + "narHash": "sha256-JTi7l1oxnatF1uX/gnGMlRnyFMtylRw4MqhCUdoN2K4=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "1f48c08cae1b2c4d5f201a77abfe31fc3b95a4cf", + "rev": "0fd4a5d2098faa516a9b83022aec7db766cd1de8", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index f3bf13e62..e1398f53b 100644 --- a/flake.nix +++ b/flake.nix @@ -11,12 +11,20 @@ flake-utils.follows = "flake-utils"; }; }; + # EVM dev tools + foundry = { + url = "github:shazow/foundry.nix/monthly"; + inputs = { + nixpkgs.follows = "nixpkgs"; + flake-utils.follows = "flake-utils"; + }; + }; }; - outputs = { self, nixpkgs, rust-overlay, flake-utils }: + outputs = { self, nixpkgs, rust-overlay, foundry, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let - overlays = [ (import rust-overlay) ]; + overlays = [ (import rust-overlay) foundry.overlay ]; pkgs = import nixpkgs { inherit system overlays; }; @@ -49,6 +57,7 @@ pkgs.nodePackages.yarn # Finally the toolchain toolchain + pkgs.foundry-bin ]; packages = [ pkgs.taplo @@ -57,7 +66,7 @@ # Environment variables RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library"; # Needed for running DKG Node. - LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.gmp pkgs.openssl ]; + LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.gmp pkgs.openssl pkgs.libclang pkgs.stdenv.cc.cc ]; }; }); } diff --git a/forge/foundry.toml b/forge/foundry.toml index e883058fb..5d9b9e1b5 100644 --- a/forge/foundry.toml +++ b/forge/foundry.toml @@ -3,4 +3,10 @@ src = "src" out = "out" libs = ["lib"] +remappings = [ + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", + "forge-std/=lib/forge-std/src/", +] + # See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/forge/src/Jobs.sol b/forge/src/Jobs.sol deleted file mode 100644 index d406ddc44..000000000 --- a/forge/src/Jobs.sol +++ /dev/null @@ -1,85 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -/// @dev The Jobs contract's address. -address constant JOBS_ADDRESS = 0x0000000000000000000000000000000000000814; - -/// @dev The Jobs contract's instance. -Jobs constant JOBS_CONTRACT = Jobs(JOBS_ADDRESS); - -/// @author Webb Inc -/// @title Pallet Jobs Interface -/// @title The interface through which solidity contracts will interact with the jobs pallet -/// @custom:address 0x0000000000000000000000000000000000000814 -interface Jobs { - - /// Submit a DKG phase one job - /// @custom:selector - /// - /// @notice Submits a job for the first phase of the Distributed Key Generation (DKG) process. - /// - /// @param expiry The expiration timestamp for the submitted job. - /// @param ttl The time-to-live for the submitted job. - /// @param participants An array of Ethereum addresses representing participants in the DKG. - /// @param threshold The minimum number of participants required for the DKG to succeed. - /// @param roleType The role type identifier. - /// @param permittedCaller The Ethereum address of the permitted caller initiating the job submission. - /// @param hdWallet A boolean indicating whether the job is for an HD wallet. - /// - /// @dev This function initiates the first phase of a DKG process, allowing participants to collaborate - /// in generating cryptographic keys. The submitted job includes information such as the expiration time, - /// the list of participants, the threshold for successful completion, and the permitted caller's address. - /// It is crucial for the caller to ensure that the specified parameters align with the intended DKG process. - /// - function submitDkgPhaseOneJob( - uint64 expiry, - uint64 ttl, - address[] memory participants, - uint8 threshold, - uint16 roleType, - address permittedCaller, - bool hdWallet - ) external; - - /// @custom:selector - /// - /// @notice Submits a job for the second phase of the Distributed Key Generation (DKG) process. - /// - /// @param expiry The expiration timestamp for the submitted job. - /// @param ttl The time-to-live for the submitted job. - /// @param phaseOneId The identifier of the corresponding phase one DKG job. - /// @param submission The byte array containing the data submission for the DKG phase two. - /// @param derivationPath The byte array containing the derivation path for the DKG phase two. - /// - /// @dev This function initiates the second phase of a Distributed Key Generation process, building upon - /// the results of a prior phase one submission. The submitted job includes an expiration time, the identifier - /// of the phase one DKG job, and the byte array representing the participant's data contribution for phase two. - /// It is important for the caller to ensure that the provided parameters align with the ongoing DKG process. - /// - function submitDkgPhaseTwoJob( - uint64 expiry, - uint64 ttl, - uint64 phaseOneId, - bytes memory submission, - bytes memory derivationPath - ) external; - - /// @custom:selector - /// - /// @notice Sets a new permitted caller for a specific job type identified by the given key and job ID. - /// - /// @param roleType An identifier specifying the role type to update the permitted caller for. - /// @param jobId The unique identifier of the job for which the permitted caller is being updated. - /// @param newPermittedCaller The Ethereum address of the new permitted caller. - /// - /// @dev This function provides flexibility in managing permitted callers for different job types. - /// The caller can specify the job key, job ID, and the new Ethereum address that will be granted permission - /// to initiate the specified job. It is important for the caller to ensure that the provided parameters - /// align with the ongoing processes and permissions within the contract. - /// - function setPermittedCaller( - uint16 roleType, - uint32 jobId, - address newPermittedCaller - ) external; -} diff --git a/forge/src/Runtime.sol b/forge/src/Runtime.sol new file mode 100644 index 000000000..0c921aa14 --- /dev/null +++ b/forge/src/Runtime.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.3; + +/// @dev A Contract that is inherited by all runtime hooks. +contract Runtime { + /// @dev address(keccak256(pallet_services::Config::PalletId::to_account_id())[0:20]) + address constant RUNTIME_ADDRESS = 0x6D6F646c70792F73657276730000000000000000; + /// @dev Only allow the runtime to call this function. + + modifier onlyRuntime() { + require(msg.sender == RUNTIME_ADDRESS, "AccessControl: Only Runtime"); + _; + } + + /// @dev Get the runtime address. + /// @return The address of the runtime. + function getRuntimeAddress() public pure returns (address) { + return RUNTIME_ADDRESS; + } +} diff --git a/forge/src/SigningRules.sol b/forge/src/SigningRules.sol index c623bc1d7..40002ef95 100644 --- a/forge/src/SigningRules.sol +++ b/forge/src/SigningRules.sol @@ -2,54 +2,49 @@ pragma solidity ^0.8.13; import "forge-std/console.sol"; -import { JOBS_CONTRACT } from "./Jobs.sol"; - -enum ProposalStatus {Inactive, Active, Passed, Executed, Cancelled} +// import {JOBS_CONTRACT} from "./Jobs.sol"; + +enum ProposalStatus { + Inactive, + Active, + Passed, + Executed, + Cancelled +} struct Proposal { ProposalStatus _status; - uint256 _yesVotes; // bitmap, 256 maximum votes - uint8 _yesVotesTotal; - uint40 _proposedBlock; // 1099511627775 maximum block + uint256 _yesVotes; // bitmap, 256 maximum votes + uint8 _yesVotesTotal; + uint40 _proposedBlock; // 1099511627775 maximum block } abstract contract SigningRules { - mapping (uint64 => mapping (address => bool)) public isValidForwarder; - mapping (uint64 => address) public admins; - mapping (uint64 => address[]) public voters; - mapping (uint64 => uint8) public threshold; - mapping (uint64 => uint64) public expiry; - mapping (uint64 => uint64) public ttl; - mapping (uint64 => bool) public useDemocracy; - mapping (uint64 => bool) public useValidators; + mapping(uint64 => mapping(address => bool)) public isValidForwarder; + mapping(uint64 => address) public admins; + mapping(uint64 => address[]) public voters; + mapping(uint64 => uint8) public threshold; + mapping(uint64 => uint64) public expiry; + mapping(uint64 => uint64) public ttl; + mapping(uint64 => bool) public useDemocracy; + mapping(uint64 => bool) public useValidators; // keccak256(proposalId, phase2JobHash) => Proposal mapping(bytes32 => Proposal) public _proposals; bool public initialized; // Limit voter number because proposal can fit only so much votes - uint256 constant public MAX_VOTERS = 256; + uint256 public constant MAX_VOTERS = 256; - event ProposalEvent( - ProposalStatus status, - uint64 phase1JobId, - bytes32 phase2JobHash - ); - event ProposalVote( - ProposalStatus status, - uint64 phase1JobId, - bytes32 phase2JobHash - ); - event FailedHandlerExecution( - bytes lowLevelData - ); + event ProposalEvent(ProposalStatus status, uint64 phase1JobId, bytes32 phase2JobHash); + event ProposalVote(ProposalStatus status, uint64 phase1JobId, bytes32 phase2JobHash); + event FailedHandlerExecution(bytes lowLevelData); modifier onlyAdmin(uint64 id) { require(admins[id] == msg.sender, "Only admin can call this function"); _; } - function calculatePhase2JobHash(uint64 phase1JobId, bytes memory phase2JobDetails) public pure returns (bytes32) { return keccak256(abi.encodePacked(phase1JobId, phase2JobDetails)); } @@ -97,22 +92,22 @@ abstract contract SigningRules { isValidForwarder[phase1JobId][forwarder] = valid; } - function submitGovernanceProposal(uint64 phase1JobId, bytes memory phase2JobDetails) public { - // Validate the governance proposal + function submitGovernanceProposal(uint64 phase1JobId, bytes memory phase2JobDetails) public { + // Validate the governance proposal bytes32 phase2JobHash = keccak256(abi.encodePacked(phase1JobId, phase2JobDetails)); require(_proposals[phase2JobHash]._status != ProposalStatus.Executed, "Proposal must have been executed"); require(useDemocracy[phase1JobId], "Proposal must allow using governance"); - // Submit the proposal to governance pallet + // Submit the proposal to governance pallet _submitToDemocracyPallet(phase1JobId, phase2JobDetails); - } + } - function voteProposal(uint64 phase1JobId, bytes memory phase2JobDetails) public { - // Validate the job/details are AUP - require(_isVotableProposal(phase1JobId, phase2JobDetails), "Proposal must be votable"); - // Check that we have received enough votes for the anchor update proposal. + function voteProposal(uint64 phase1JobId, bytes memory phase2JobDetails) public { + // Validate the job/details are AUP + require(_isVotableProposal(phase1JobId, phase2JobDetails), "Proposal must be votable"); + // Check that we have received enough votes for the anchor update proposal. // Execute the proposal happens in `_voteProposal` if this vote tips the balance. - _voteProposal(phase1JobId, phase2JobDetails ); - } + _voteProposal(phase1JobId, phase2JobDetails); + } /// --------------------------------------------------------------------------------------- /// /// ------------------------------------- Internals --------------------------------------- /// @@ -127,21 +122,21 @@ abstract contract SigningRules { bytes32 phase2JobHash = keccak256(abi.encodePacked(phase1JobId, phase2JobDetails)); Proposal storage proposal = _proposals[phase2JobHash]; if (proposal._status == ProposalStatus.Passed) { - _executeProposal( phase1JobId, phase2JobHash, phase2JobDetails ); + _executeProposal(phase1JobId, phase2JobHash, phase2JobDetails); return; } - + address sender = _msgSender(phase1JobId); - - require(uint(proposal._status) <= 1, "proposal already executed/cancelled"); + + require(uint256(proposal._status) <= 1, "proposal already executed/cancelled"); require(!_hasVoted(phase1JobId, phase2JobHash, sender), "relayer already voted"); if (proposal._status == ProposalStatus.Inactive) { _proposals[phase2JobHash] = Proposal({ - _status : ProposalStatus.Active, - _yesVotes : 0, - _yesVotesTotal : 0, - _proposedBlock : uint40(block.number) // Overflow is desired. + _status: ProposalStatus.Active, + _yesVotes: 0, + _yesVotesTotal: 0, + _proposedBlock: uint40(block.number) // Overflow is desired. }); emit ProposalEvent(ProposalStatus.Active, phase1JobId, phase2JobHash); @@ -168,7 +163,7 @@ abstract contract SigningRules { _proposals[phase2JobHash] = proposal; if (proposal._status == ProposalStatus.Passed) { - _executeProposal(phase1JobId, phase2JobHash, phase2JobDetails ); + _executeProposal(phase1JobId, phase2JobHash, phase2JobDetails); } } @@ -180,15 +175,17 @@ abstract contract SigningRules { function _executeProposal(uint64 phase1JobId, bytes32 phase2JobHash, bytes memory phase2JobDetails) internal { Proposal storage proposal = _proposals[phase2JobHash]; require(proposal._status == ProposalStatus.Passed, "Proposal must have Passed status"); - - JOBS_CONTRACT.submitDkgPhaseTwoJob(expiry[phase1JobId], ttl[phase1JobId], phase1JobId, phase2JobDetails, bytes("")); - + + // JOBS_CONTRACT.submitDkgPhaseTwoJob( + // expiry[phase1JobId], ttl[phase1JobId], phase1JobId, phase2JobDetails, bytes("") + // ); + proposal._status = ProposalStatus.Executed; emit ProposalEvent(ProposalStatus.Executed, phase1JobId, phase2JobHash); } - function _voterIndex(uint64 phase1JobId, address voter) internal view returns (uint) { - for (uint i = 0; i < voters[phase1JobId].length; i++) { + function _voterIndex(uint64 phase1JobId, address voter) internal view returns (uint256) { + for (uint256 i = 0; i < voters[phase1JobId].length; i++) { if (voters[phase1JobId][i] == voter) { return i + 1; } @@ -196,13 +193,13 @@ abstract contract SigningRules { return MAX_VOTERS; } - function _voterBit(uint64 phase1JobId, address voter) internal view returns(uint) { - return uint(1) << (_voterIndex(phase1JobId, voter) - 1); + function _voterBit(uint64 phase1JobId, address voter) internal view returns (uint256) { + return uint256(1) << (_voterIndex(phase1JobId, voter) - 1); } - function _hasVoted(uint64 phase1JobId, bytes32 phase2JobHash, address voter) internal view returns(bool) { + function _hasVoted(uint64 phase1JobId, bytes32 phase2JobHash, address voter) internal view returns (bool) { Proposal storage proposal = _proposals[phase2JobHash]; - return (_voterBit(phase1JobId, voter) & uint(proposal._yesVotes)) > 0; + return (_voterBit(phase1JobId, voter) & uint256(proposal._yesVotes)) > 0; } function _msgSender(uint64 phase1JobId) internal view returns (address) { @@ -234,8 +231,8 @@ abstract contract SigningRules { function getProposalYesVotes(bytes32 phase2JobHash) public view returns (uint256) { return _proposals[phase2JobHash]._yesVotes; } - + function getProposalYesVotesTotal(bytes32 phase2JobHash) public view returns (uint8) { return _proposals[phase2JobHash]._yesVotesTotal; } -} \ No newline at end of file +} diff --git a/forge/src/cggmp21/CGGMP21Hooks.sol b/forge/src/cggmp21/CGGMP21Hooks.sol new file mode 100644 index 000000000..5b6d6feb7 --- /dev/null +++ b/forge/src/cggmp21/CGGMP21Hooks.sol @@ -0,0 +1,200 @@ +// SPDX-License-Identifier: GPL-3.0-only +// DO NOT USE THIS IN PRODUCTION, IT IS JUST FOR TESTING. +pragma solidity >=0.8.3; + +import "../hooks/RegisterationHook.sol"; +import "../hooks/RequestHook.sol"; +// import "../JobResultVerifier.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + +contract CGGMP21RegistrationHook is RegistrationHook { + /// A Simple List of all Participants Ecdsa Public Keys + struct Participant { + address addr; + bytes publicKey; + } + + Participant[] public participants; + + error InvalidRegistrationInputs(); + + function onRegister(bytes calldata participant, bytes calldata registrationInputs) + public + payable + override + onlyRuntime + { + // The inputs are empty, we don't need them. + if (registrationInputs.length != 0) { + revert InvalidRegistrationInputs(); + } + address addr = address(uint160(uint256(keccak256(participant)))); + // add the participant to the list + participants.push(Participant(addr, participant)); + } +} + +contract CGGMP21RequestHook is RequestHook { + uint8 constant KEYGEN_JOB = 0; + uint8 constant SIGNING_JOB = 1; + + struct Service { + /// The id of the service + uint64 id; + /// The public keys of participants of the service + bytes[] participants; + } + + // Keygens + // A mapping of serviceId -> JobCallId -> DKG Threshold + mapping(uint64 => mapping(uint64 => uint8)) public keygens; + + // A mapping of serviceId to Service + mapping(uint64 => Service) public services; + + error InvalidRequestInputs(); + error InvalidDKGThreshold(); + error KeygenJobNotFound(); + error InvalidJob(); + + /// Stores the list of services that are requested + function onRequest(uint64 serviceId, bytes[] calldata participants, bytes calldata requestInputs) + public + payable + override + onlyRuntime + { + // The requestInputs are empty, we don't need them. + if (requestInputs.length != 0) { + revert InvalidRequestInputs(); + } + // initialize the service + Service memory service; + // set the id of the service + service.id = serviceId; + // set the participants of the service + service.participants = participants; + // store the service + services[serviceId] = service; + } + + function onJobCall(uint64 serviceId, uint8 job, uint64 jobCallId, bytes calldata inputs) + public + payable + override + onlyRuntime + { + // Job 0 is the Keygen Job + if (job == KEYGEN_JOB) { + // The inputs are the DKG threshold + (uint8 t) = abi.decode(inputs, (uint8)); + uint256 n = services[serviceId].participants.length; + // verify the DKG threshold is valid + if (t == 0 || t > n) { + revert InvalidDKGThreshold(); + } + // set the DKG threshold of the service + keygens[serviceId][jobCallId] = t; + } else if (job == SIGNING_JOB) { + // inputs are keygenJobCallId and message hash (32 bytes) + (uint64 keygenJobCallId, bytes32 message) = abi.decode(inputs, (uint64, bytes32)); + // verify the keygen job exists + if (keygens[serviceId][keygenJobCallId] == 0) { + revert KeygenJobNotFound(); + } + } else { + revert InvalidJob(); + } + } +} + +// contract CGGMP21JobResultVerifier is JobResultVerifier { +// uint8 constant KEYGEN_JOB = 0; +// uint8 constant SIGNING_JOB = 1; + +// struct Keygen { +// uint64 jobCallId; +// uint8 t; +// bytes publicKey; +// } + +// // A mapping of serviceId & JobCallId to Keygen +// mapping(uint64 => mapping(uint64 => Keygen)) public keygens; + +// /// @dev Errors +// /// @dev InvalidJob The job is invalid +// error InvalidJob(); +// /// @dev InvalidPublicKey The public key is invalid +// error InvalidPublicKey(); +// /// @dev InvalidDKGThreshold The DKG threshold is invalid +// error InvalidDKGThreshold(); +// /// @dev InvalidKeygenResult The keygen result is invalid +// error InvalidKeygenResult(); +// /// @dev InvalidSignature The signature is invalid +// error InvalidSignature(); +// /// @dev InvalidSigner The signer is invalid +// error InvalidSigner(); + +// function verify( +// uint64 serviceId, +// uint8 jobIndex, +// uint64 jobCallId, +// bytes calldata participant, +// bytes calldata inputs, +// bytes calldata outputs +// ) public override onlyRuntime { +// if (jobIndex == KEYGEN_JOB) { +// verifyKeygen(serviceId, jobCallId, inputs, outputs); +// } else if (jobIndex == SIGNING_JOB) { +// verifySigning(serviceId, jobCallId, inputs, outputs); +// } else { +// revert InvalidJob(); +// } +// } + +// function verifyKeygen(uint64 serviceId, uint64 jobCallId, bytes calldata inputs, bytes calldata outputs) internal { +// // The inputs are the DKG threshold +// (uint8 t) = abi.decode(inputs, (uint8)); +// // The outputs are the public key +// bytes memory publicKey = outputs[0:33]; +// // verify the public key is valid Ecdsa public key in the compressed format. +// if (publicKey.length != 33) { +// revert InvalidPublicKey(); +// } +// // verify the DKG threshold is valid +// if (t == 0) { +// revert InvalidDKGThreshold(); +// } +// // store the keygen +// keygens[serviceId][jobCallId] = Keygen(jobCallId, t, outputs); +// } + +// function verifySigning(uint64 serviceId, uint64 jobCallId, bytes calldata inputs, bytes calldata outputs) +// internal +// view +// { +// // The inputs are the keygen result id (which is jobCallId) and the message hash. +// (uint64 keygenJobCallId, bytes32 message) = abi.decode(inputs, (uint64, bytes32)); +// // The outputs are the signature +// bytes memory signature = outputs[0:65]; +// // verify the signature is valid +// if (signature.length != 65) { +// revert InvalidSignature(); +// } + +// // get the keygen result +// Keygen memory keygen = keygens[serviceId][keygenJobCallId]; +// // verify the keygen result exists +// if (keygen.jobCallId != keygenJobCallId) { +// revert InvalidKeygenResult(); +// } +// // recover the public key from the signature +// address signer = ECDSA.recover(message, signature); +// // convert the public key to address format +// address keygenAddr = address(uint160(uint256(keccak256(keygen.publicKey)))); +// // verify the public key is valid +// if (signer != keygenAddr) { +// revert InvalidSigner(); +// } +// } +// } diff --git a/forge/src/hooks/RegisterationHook.sol b/forge/src/hooks/RegisterationHook.sol new file mode 100644 index 000000000..10a8320ee --- /dev/null +++ b/forge/src/hooks/RegisterationHook.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.3; + +import "../Runtime.sol"; + +/// @dev Created by the service blueprint designer (gadget developer) +contract RegistrationHook is Runtime { + /// @dev A Hook that gets called by the runtime when an Operator tries to register on this blueprint. + /// @param registrationInputs The inputs that the Operator provided during the registration. + /// + /// Unless this function reverts, the Operator will be registered on this blueprint. + /// @custom:hook + function onRegister(bytes calldata participant, bytes calldata registrationInputs) + public + payable + virtual + onlyRuntime + {} +} diff --git a/forge/src/hooks/RequestHook.sol b/forge/src/hooks/RequestHook.sol new file mode 100644 index 000000000..483c51d2f --- /dev/null +++ b/forge/src/hooks/RequestHook.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.3; + +import "../Runtime.sol"; + +/// @dev Created by the service blueprint designer (gadget developer) +contract RequestHook is Runtime { + /// @dev A Hook that gets called by the runtime when a User tries to request a service. + /// @param requestInputs The inputs that the user provided during the service request. + /// + /// Unless this function reverts, the service will be created using this blueprint. + /// @custom:hook + function onRequest(uint64 serviceId, bytes[] calldata participants, bytes calldata requestInputs) + public + payable + virtual + onlyRuntime + {} + + /// @dev A Hook that gets called by the runtime when a User call a job on a the service. + /// @param serviceId The id of the service. + /// @param job The index of the job. + /// @param jobCallId The id of the job call. + /// @param inputs The inputs that the user provided during the job call. + /// + /// Unless this function reverts, the job will be executed using this service. + function onJobCall(uint64 serviceId, uint8 job, uint64 jobCallId, bytes calldata inputs) + public + payable + virtual + onlyRuntime + {} +} diff --git a/forge/test/SigningRules.sol b/forge/test/SigningRules.sol index 69815e925..aa7a92dfa 100644 --- a/forge/test/SigningRules.sol +++ b/forge/test/SigningRules.sol @@ -4,20 +4,24 @@ pragma solidity ^0.8.13; import "forge-std/Test.sol"; import "forge-std/console.sol"; import "../src/SigningRules.sol"; -import { Proposal, ProposalStatus } from "../src/SigningRules.sol"; - +import {Proposal, ProposalStatus} from "../src/SigningRules.sol"; contract VotableSigningRules is SigningRules { - function _isVotableProposal(uint64 phase1JobId, bytes memory phase2JobDetails) override pure internal returns (bool) { + function _isVotableProposal(uint64 phase1JobId, bytes memory phase2JobDetails) + internal + pure + override + returns (bool) + { require(phase2JobDetails.length != 0, "Job details must be non-empty"); return true; } - function _refreshVoters(uint64 phase1JobId) override internal { + function _refreshVoters(uint64 phase1JobId) internal override { // Do nothing } - function _submitToDemocracyPallet(uint64 phase1JobId, bytes memory phase2JobDetails) override internal { + function _submitToDemocracyPallet(uint64 phase1JobId, bytes memory phase2JobDetails) internal override { // Do nothing } } @@ -105,7 +109,7 @@ contract SigningRulesTest is Test { voters[1] = vm.addr(2); uint40 expiry = 10; uint64 ttl = 10; - uint nowBlockNumber = block.number; + uint256 nowBlockNumber = block.number; bytes32 phase2JobHash = rules.calculatePhase2JobHash(phase1JobId, phase2JobDetails); rules.initialize(phase1JobId, threshold, useDemocracy, voters, expiry, ttl); @@ -132,7 +136,7 @@ contract SigningRulesTest is Test { uint40 expiry = 1000; uint64 ttl = 1000; rules.initialize(phase1JobId, threshold, useDemocracy, voters, expiry, ttl); - + rules.adminSetForwarder(phase1JobId, vm.addr(100), true); assertTrue(rules.isValidForwarder(phase1JobId, vm.addr(100))); assertFalse(rules.isValidForwarder(phase1JobId, vm.addr(101))); diff --git a/pallets/dkg/frost/Cargo.toml b/frost/Cargo.toml similarity index 100% rename from pallets/dkg/frost/Cargo.toml rename to frost/Cargo.toml diff --git a/pallets/dkg/frost/frost-ed25519/Cargo.toml b/frost/frost-ed25519/Cargo.toml similarity index 100% rename from pallets/dkg/frost/frost-ed25519/Cargo.toml rename to frost/frost-ed25519/Cargo.toml diff --git a/pallets/dkg/frost/frost-ed25519/src/lib.rs b/frost/frost-ed25519/src/lib.rs similarity index 100% rename from pallets/dkg/frost/frost-ed25519/src/lib.rs rename to frost/frost-ed25519/src/lib.rs diff --git a/pallets/dkg/frost/frost-ed25519/src/types.rs b/frost/frost-ed25519/src/types.rs similarity index 100% rename from pallets/dkg/frost/frost-ed25519/src/types.rs rename to frost/frost-ed25519/src/types.rs diff --git a/pallets/dkg/frost/frost-ed448/Cargo.toml b/frost/frost-ed448/Cargo.toml similarity index 100% rename from pallets/dkg/frost/frost-ed448/Cargo.toml rename to frost/frost-ed448/Cargo.toml diff --git a/pallets/dkg/frost/frost-ed448/src/lib.rs b/frost/frost-ed448/src/lib.rs similarity index 100% rename from pallets/dkg/frost/frost-ed448/src/lib.rs rename to frost/frost-ed448/src/lib.rs diff --git a/pallets/dkg/frost/frost-ed448/src/types.rs b/frost/frost-ed448/src/types.rs similarity index 100% rename from pallets/dkg/frost/frost-ed448/src/types.rs rename to frost/frost-ed448/src/types.rs diff --git a/pallets/dkg/frost/frost-p256/Cargo.toml b/frost/frost-p256/Cargo.toml similarity index 100% rename from pallets/dkg/frost/frost-p256/Cargo.toml rename to frost/frost-p256/Cargo.toml diff --git a/pallets/dkg/frost/frost-p256/src/lib.rs b/frost/frost-p256/src/lib.rs similarity index 100% rename from pallets/dkg/frost/frost-p256/src/lib.rs rename to frost/frost-p256/src/lib.rs diff --git a/pallets/dkg/frost/frost-p256/src/types.rs b/frost/frost-p256/src/types.rs similarity index 100% rename from pallets/dkg/frost/frost-p256/src/types.rs rename to frost/frost-p256/src/types.rs diff --git a/pallets/dkg/frost/frost-p384/Cargo.toml b/frost/frost-p384/Cargo.toml similarity index 100% rename from pallets/dkg/frost/frost-p384/Cargo.toml rename to frost/frost-p384/Cargo.toml diff --git a/pallets/dkg/frost/frost-p384/src/lib.rs b/frost/frost-p384/src/lib.rs similarity index 100% rename from pallets/dkg/frost/frost-p384/src/lib.rs rename to frost/frost-p384/src/lib.rs diff --git a/pallets/dkg/frost/frost-p384/src/types.rs b/frost/frost-p384/src/types.rs similarity index 100% rename from pallets/dkg/frost/frost-p384/src/types.rs rename to frost/frost-p384/src/types.rs diff --git a/pallets/dkg/frost/frost-redjubjub/Cargo.toml b/frost/frost-redjubjub/Cargo.toml similarity index 100% rename from pallets/dkg/frost/frost-redjubjub/Cargo.toml rename to frost/frost-redjubjub/Cargo.toml diff --git a/pallets/dkg/frost/frost-redjubjub/src/constants.rs b/frost/frost-redjubjub/src/constants.rs similarity index 100% rename from pallets/dkg/frost/frost-redjubjub/src/constants.rs rename to frost/frost-redjubjub/src/constants.rs diff --git a/pallets/dkg/frost/frost-redjubjub/src/hash.rs b/frost/frost-redjubjub/src/hash.rs similarity index 100% rename from pallets/dkg/frost/frost-redjubjub/src/hash.rs rename to frost/frost-redjubjub/src/hash.rs diff --git a/pallets/dkg/frost/frost-redjubjub/src/lib.rs b/frost/frost-redjubjub/src/lib.rs similarity index 100% rename from pallets/dkg/frost/frost-redjubjub/src/lib.rs rename to frost/frost-redjubjub/src/lib.rs diff --git a/pallets/dkg/frost/frost-redjubjub/src/types.rs b/frost/frost-redjubjub/src/types.rs similarity index 100% rename from pallets/dkg/frost/frost-redjubjub/src/types.rs rename to frost/frost-redjubjub/src/types.rs diff --git a/pallets/dkg/frost/frost-ristretto255/Cargo.toml b/frost/frost-ristretto255/Cargo.toml similarity index 100% rename from pallets/dkg/frost/frost-ristretto255/Cargo.toml rename to frost/frost-ristretto255/Cargo.toml diff --git a/pallets/dkg/frost/frost-ristretto255/src/lib.rs b/frost/frost-ristretto255/src/lib.rs similarity index 100% rename from pallets/dkg/frost/frost-ristretto255/src/lib.rs rename to frost/frost-ristretto255/src/lib.rs diff --git a/pallets/dkg/frost/frost-ristretto255/src/types.rs b/frost/frost-ristretto255/src/types.rs similarity index 100% rename from pallets/dkg/frost/frost-ristretto255/src/types.rs rename to frost/frost-ristretto255/src/types.rs diff --git a/pallets/dkg/frost/frost-secp256k1/Cargo.toml b/frost/frost-secp256k1/Cargo.toml similarity index 100% rename from pallets/dkg/frost/frost-secp256k1/Cargo.toml rename to frost/frost-secp256k1/Cargo.toml diff --git a/pallets/dkg/frost/frost-secp256k1/src/lib.rs b/frost/frost-secp256k1/src/lib.rs similarity index 100% rename from pallets/dkg/frost/frost-secp256k1/src/lib.rs rename to frost/frost-secp256k1/src/lib.rs diff --git a/pallets/dkg/frost/frost-secp256k1/src/types.rs b/frost/frost-secp256k1/src/types.rs similarity index 100% rename from pallets/dkg/frost/frost-secp256k1/src/types.rs rename to frost/frost-secp256k1/src/types.rs diff --git a/pallets/dkg/frost/frost-taproot/Cargo.toml b/frost/frost-taproot/Cargo.toml similarity index 100% rename from pallets/dkg/frost/frost-taproot/Cargo.toml rename to frost/frost-taproot/Cargo.toml diff --git a/pallets/dkg/frost/frost-taproot/src/lib.rs b/frost/frost-taproot/src/lib.rs similarity index 100% rename from pallets/dkg/frost/frost-taproot/src/lib.rs rename to frost/frost-taproot/src/lib.rs diff --git a/pallets/dkg/frost/frost-taproot/src/types.rs b/frost/frost-taproot/src/types.rs similarity index 100% rename from pallets/dkg/frost/frost-taproot/src/types.rs rename to frost/frost-taproot/src/types.rs diff --git a/pallets/dkg/frost/src/challenge.rs b/frost/src/challenge.rs similarity index 100% rename from pallets/dkg/frost/src/challenge.rs rename to frost/src/challenge.rs diff --git a/pallets/dkg/frost/src/const_crc32.rs b/frost/src/const_crc32.rs similarity index 100% rename from pallets/dkg/frost/src/const_crc32.rs rename to frost/src/const_crc32.rs diff --git a/pallets/dkg/frost/src/error.rs b/frost/src/error.rs similarity index 100% rename from pallets/dkg/frost/src/error.rs rename to frost/src/error.rs diff --git a/pallets/dkg/frost/src/identifier.rs b/frost/src/identifier.rs similarity index 100% rename from pallets/dkg/frost/src/identifier.rs rename to frost/src/identifier.rs diff --git a/pallets/dkg/frost/src/keygen.rs b/frost/src/keygen.rs similarity index 100% rename from pallets/dkg/frost/src/keygen.rs rename to frost/src/keygen.rs diff --git a/pallets/dkg/frost/src/keys.rs b/frost/src/keys.rs similarity index 100% rename from pallets/dkg/frost/src/keys.rs rename to frost/src/keys.rs diff --git a/pallets/dkg/frost/src/lib.rs b/frost/src/lib.rs similarity index 100% rename from pallets/dkg/frost/src/lib.rs rename to frost/src/lib.rs diff --git a/pallets/dkg/frost/src/round1.rs b/frost/src/round1.rs similarity index 100% rename from pallets/dkg/frost/src/round1.rs rename to frost/src/round1.rs diff --git a/pallets/dkg/frost/src/scalar_mul.rs b/frost/src/scalar_mul.rs similarity index 100% rename from pallets/dkg/frost/src/scalar_mul.rs rename to frost/src/scalar_mul.rs diff --git a/pallets/dkg/frost/src/serialization.rs b/frost/src/serialization.rs similarity index 100% rename from pallets/dkg/frost/src/serialization.rs rename to frost/src/serialization.rs diff --git a/pallets/dkg/frost/src/signature.rs b/frost/src/signature.rs similarity index 100% rename from pallets/dkg/frost/src/signature.rs rename to frost/src/signature.rs diff --git a/pallets/dkg/frost/src/signing_key.rs b/frost/src/signing_key.rs similarity index 100% rename from pallets/dkg/frost/src/signing_key.rs rename to frost/src/signing_key.rs diff --git a/pallets/dkg/frost/src/traits.rs b/frost/src/traits.rs similarity index 100% rename from pallets/dkg/frost/src/traits.rs rename to frost/src/traits.rs diff --git a/pallets/dkg/frost/src/util.rs b/frost/src/util.rs similarity index 100% rename from pallets/dkg/frost/src/util.rs rename to frost/src/util.rs diff --git a/pallets/dkg/frost/src/verifying_key.rs b/frost/src/verifying_key.rs similarity index 100% rename from pallets/dkg/frost/src/verifying_key.rs rename to frost/src/verifying_key.rs diff --git a/node/Cargo.toml b/node/Cargo.toml index 799a08106..3be0c67d7 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -65,7 +65,7 @@ sp-session = { workspace = true, features = ["default"] } sp-state-machine = { workspace = true, features = ["default"] } sp-timestamp = { workspace = true, features = ["default"] } sp-transaction-pool = { workspace = true, features = ["default"] } -pallet-jobs-rpc = { workspace = true } +pallet-services-rpc = { workspace = true } frame-metadata-hash-extension = { workspace = true, default-features = true } pallet-airdrop-claims = { workspace = true } diff --git a/node/src/chainspec/mainnet.rs b/node/src/chainspec/mainnet.rs index 5b288affa..28a082c59 100644 --- a/node/src/chainspec/mainnet.rs +++ b/node/src/chainspec/mainnet.rs @@ -39,7 +39,7 @@ use tangle_primitives::types::{BlockNumber, Signature}; use tangle_runtime::EVMConfig; use tangle_runtime::{ AccountId, BabeConfig, Balance, BalancesConfig, ClaimsConfig, CouncilConfig, EVMChainIdConfig, - ImOnlineConfig, MaxVestingSchedules, Perbill, RoleKeyId, RuntimeGenesisConfig, SessionConfig, + ImOnlineConfig, MaxVestingSchedules, Perbill, RuntimeGenesisConfig, SessionConfig, StakerStatus, StakingConfig, SudoConfig, SystemConfig, TreasuryPalletId, VestingConfig, UNIT, WASM_BINARY, }; @@ -65,15 +65,12 @@ where } /// Generate an babe authority key. -pub fn authority_keys_from_seed( - stash: &str, -) -> (AccountId, BabeId, GrandpaId, ImOnlineId, RoleKeyId) { +pub fn authority_keys_from_seed(stash: &str) -> (AccountId, BabeId, GrandpaId, ImOnlineId) { ( get_account_id_from_seed::(stash), get_from_seed::(stash), get_from_seed::(stash), get_from_seed::(stash), - get_from_seed::(stash), ) } @@ -85,9 +82,8 @@ fn generate_session_keys( babe: BabeId, grandpa: GrandpaId, im_online: ImOnlineId, - role: RoleKeyId, ) -> tangle_runtime::opaque::SessionKeys { - tangle_runtime::opaque::SessionKeys { babe, grandpa, im_online, role } + tangle_runtime::opaque::SessionKeys { babe, grandpa, im_online } } pub fn local_mainnet_config(chain_id: u64) -> Result { @@ -209,7 +205,7 @@ pub fn tangle_mainnet_config(chain_id: u64) -> Result { /// Configure initial storage state for FRAME modules. #[allow(clippy::too_many_arguments)] fn mainnet_genesis( - initial_authorities: Vec<(AccountId, BabeId, GrandpaId, ImOnlineId, RoleKeyId)>, + initial_authorities: Vec<(AccountId, BabeId, GrandpaId, ImOnlineId)>, endowed_accounts: Vec<(AccountId, Balance)>, root_key: AccountId, chain_id: u64, @@ -257,7 +253,7 @@ fn mainnet_genesis( ( x.0.clone(), x.0.clone(), - generate_session_keys(x.1.clone(), x.2.clone(), x.3.clone(), x.4.clone()), + generate_session_keys(x.1.clone(), x.2.clone(), x.3.clone()), ) }) .collect::>(), diff --git a/node/src/chainspec/testnet.rs b/node/src/chainspec/testnet.rs index 16eb0e9b9..43fd5f5ba 100644 --- a/node/src/chainspec/testnet.rs +++ b/node/src/chainspec/testnet.rs @@ -26,7 +26,7 @@ use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use sc_consensus_grandpa::AuthorityId as GrandpaId; use sc_service::ChainType; use sp_consensus_babe::AuthorityId as BabeId; -use sp_core::{ecdsa, ed25519, sr25519, Pair, Public, H160, U256}; +use sp_core::{ed25519, sr25519, Pair, Public, H160, U256}; use sp_runtime::traits::AccountIdConversion; use sp_runtime::{ traits::{IdentifyAccount, Verify}, @@ -39,9 +39,9 @@ use tangle_primitives::{ }; use tangle_testnet_runtime::{ AccountId, BabeConfig, Balance, BalancesConfig, ClaimsConfig, CouncilConfig, EVMChainIdConfig, - EVMConfig, ImOnlineConfig, MaxVestingSchedules, Perbill, Precompiles, RoleKeyId, - RuntimeGenesisConfig, SessionConfig, StakerStatus, StakingConfig, SudoConfig, SystemConfig, - TreasuryPalletId, VestingConfig, UNIT, WASM_BINARY, + EVMConfig, ImOnlineConfig, MaxVestingSchedules, Perbill, Precompiles, RuntimeGenesisConfig, + SessionConfig, StakerStatus, StakingConfig, SudoConfig, SystemConfig, TreasuryPalletId, + VestingConfig, UNIT, WASM_BINARY, }; /// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. @@ -67,27 +67,23 @@ where } /// Generate an babe authority key. -pub fn authority_keys_from_seed( - stash: &str, -) -> (AccountId, BabeId, GrandpaId, ImOnlineId, RoleKeyId) { +pub fn authority_keys_from_seed(stash: &str) -> (AccountId, BabeId, GrandpaId, ImOnlineId) { ( get_account_id_from_seed::(stash), get_from_seed::(stash), get_from_seed::(stash), get_from_seed::(stash), - get_from_seed::(stash), ) } /// Generate authority keys for benchmarking. /// This is used for the `--chain dev` command. -pub fn authority_keys_for_dev(id: u8) -> (AccountId, BabeId, GrandpaId, ImOnlineId, RoleKeyId) { +pub fn authority_keys_for_dev(id: u8) -> (AccountId, BabeId, GrandpaId, ImOnlineId) { ( AccountPublic::from(sr25519::Public::from_raw([id; 32])).into_account(), BabeId::from(sr25519::Public::from_raw([id; 32])), GrandpaId::from(ed25519::Public::from_raw([id; 32])), ImOnlineId::from(sr25519::Public::from_raw([id; 32])), - RoleKeyId::from(ecdsa::Public::from_raw([id; 33])), ) } /// Generate the session keys from individual elements. @@ -98,9 +94,8 @@ fn generate_session_keys( babe: BabeId, grandpa: GrandpaId, im_online: ImOnlineId, - role: RoleKeyId, ) -> tangle_testnet_runtime::opaque::SessionKeys { - tangle_testnet_runtime::opaque::SessionKeys { babe, grandpa, im_online, role } + tangle_testnet_runtime::opaque::SessionKeys { babe, grandpa, im_online } } pub fn local_benchmarking_config(chain_id: u64) -> Result { @@ -278,7 +273,7 @@ pub fn tangle_testnet_config(chain_id: u64) -> Result { /// Configure initial storage state for FRAME modules. #[allow(clippy::too_many_arguments)] fn testnet_genesis( - initial_authorities: Vec<(AccountId, BabeId, GrandpaId, ImOnlineId, RoleKeyId)>, + initial_authorities: Vec<(AccountId, BabeId, GrandpaId, ImOnlineId)>, endowed_accounts: Vec<(AccountId, Balance)>, root_key: AccountId, chain_id: u64, @@ -335,7 +330,7 @@ fn testnet_genesis( ( x.0.clone(), x.0.clone(), - generate_session_keys(x.1.clone(), x.2.clone(), x.3.clone(), x.4.clone()), + generate_session_keys(x.1.clone(), x.2.clone(), x.3.clone()), ) }) .collect::>(), diff --git a/node/src/distributions/mainnet.rs b/node/src/distributions/mainnet.rs index c27bbde1e..4e9be632d 100644 --- a/node/src/distributions/mainnet.rs +++ b/node/src/distributions/mainnet.rs @@ -272,7 +272,7 @@ pub fn get_initial_endowed_accounts( endowed_accounts.push((root_account, 5000 * UNIT)); // root key gets 5000 tokens for transactions let initial_authorities = get_initial_authorities(); - for (acco, _, _, _, _) in initial_authorities.iter() { + for (acco, _, _, _) in initial_authorities.iter() { endowed_accounts.push((acco.clone(), 100 * UNIT)); } diff --git a/node/src/mainnet_fixtures.rs b/node/src/mainnet_fixtures.rs index b92b3bcb5..d46b8c165 100644 --- a/node/src/mainnet_fixtures.rs +++ b/node/src/mainnet_fixtures.rs @@ -20,7 +20,6 @@ use sc_consensus_grandpa::AuthorityId as GrandpaId; use sc_network::config::MultiaddrWithPeerId; use sp_consensus_babe::AuthorityId as BabeId; use sp_core::crypto::UncheckedInto; -use tangle_crypto_primitives::crypto::AuthorityId as RoleKeyId; use tangle_runtime::AccountId; /// Mainnet root key @@ -53,7 +52,7 @@ pub fn get_bootnodes() -> Vec { } /// Tangle runtime initial authorities -pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineId, RoleKeyId)> { +pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineId)> { vec![ // tangle 1 ( @@ -64,8 +63,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["1261548c9de1476e4e8e06e9dddd543ebbd7504ae502ac91a0eb8b6037334372"] .unchecked_into(), - hex!["02320ab70b215ed1d37748d2aadae924ddb1e6042598ae9c2479684f0913cc15ae"] - .unchecked_into(), ), // tangle 2 ( @@ -76,8 +73,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["7c04e33631ff7ae0a453827c82c4b69179e72612f982c4d9b45393f25b4f5f48"] .unchecked_into(), - hex!["026fa903a87d7e0e262e5c70d6dffecca3f5262f05096a1c5bcd477e8ea63813ad"] - .unchecked_into(), ), // tangle 3 ( @@ -88,8 +83,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["7842e1623d6a19cd267ad9b926ddb81a27c6aedc4cab58e99cd0ac3e2a53a762"] .unchecked_into(), - hex!["02c876f99aa4361e7e81eb96ff325833452efb6eed6ae43abfbbed4106ac556829"] - .unchecked_into(), ), // tangle 4 ( @@ -100,8 +93,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["c0fc962bcbc623e343d0dddf9915f9c269dced366283e76e6302612d5172281d"] .unchecked_into(), - hex!["03d1198468f5ba4f67d155a576d5b2b2823265616b7669000eab08bca538d8c34c"] - .unchecked_into(), ), // tangle 5 ( @@ -112,8 +103,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["cebebb5bf58a2a989bf8827d7360f04057835e42141162bfa17f3d12dde96a59"] .unchecked_into(), - hex!["02596bcb7dfc93455d1e7bf93aa874d481590b37af0d43598506f9ed8609086ba0"] - .unchecked_into(), ), // snowflake ( @@ -124,8 +113,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["12fd766a9916d23c125c8b2f61b3fb9d68ecaa0dea2c4119aa5d1980dbe0c442"] .unchecked_into(), - hex!["03ace29a9b62f4aee605b74a7b44624b9d96570cd70aa5d4d6f771d5824889038b"] - .unchecked_into(), ), // trident ( @@ -136,8 +123,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["7c623a93a6691ecc211ea709f8eb606e2c9af5ac413b2cab88e54c2d4391872a"] .unchecked_into(), - hex!["020acb5833e9cace29f9f94feaff71ecd854bc79c0646ef7c2a46700313b9e83c7"] - .unchecked_into(), ), ] } diff --git a/node/src/rpc/mod.rs b/node/src/rpc/mod.rs index 3773f8c2b..2c774997a 100644 --- a/node/src/rpc/mod.rs +++ b/node/src/rpc/mod.rs @@ -38,14 +38,12 @@ use sp_keystore::KeystorePtr; use sp_runtime::traits::Block as BlockT; use tangle_primitives::Block; use tangle_runtime::BlockNumber; + // Runtime #[cfg(not(feature = "testnet"))] use tangle_runtime::{AccountId, Balance, Hash, Index}; #[cfg(feature = "testnet")] -use tangle_testnet_runtime::{ - AccountId, Balance, Hash, Index, MaxAdditionalParamsLen, MaxDataLen, MaxKeyLen, - MaxParticipants, MaxProofLen, MaxSignatureLen, MaxSubmissionLen, -}; +use tangle_testnet_runtime::{AccountId, Balance, Hash, Index}; pub mod eth; pub mod tracing; @@ -119,17 +117,7 @@ where C::Api: substrate_frame_rpc_system::AccountNonceApi, C::Api: sp_block_builder::BlockBuilder, C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, - C::Api: pallet_jobs_rpc::JobsRuntimeApi< - Block, - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, + C::Api: pallet_services_rpc::ServicesRuntimeApi, C::Api: fp_rpc::ConvertTransactionRuntimeApi, C::Api: fp_rpc::EthereumRuntimeRPCApi, C::Api: rpc_primitives_debug::DebugRuntimeApi, @@ -149,7 +137,7 @@ where B::State: sc_client_api::backend::StateBackend, CIDP: sp_inherents::CreateInherentDataProviders + Send + Sync + 'static, { - use pallet_jobs_rpc::{JobsApiServer, JobsClient}; + use pallet_services_rpc::{ServicesApiServer, ServicesClient}; use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; use sc_consensus_babe_rpc::{Babe, BabeApiServer}; use sc_consensus_grandpa_rpc::{Grandpa, GrandpaApiServer}; @@ -171,7 +159,7 @@ where io.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; io.merge(TransactionPayment::new(client.clone()).into_rpc())?; - io.merge(JobsClient::new(client.clone()).into_rpc())?; + io.merge(ServicesClient::new(client.clone()).into_rpc())?; io.merge( Babe::new(client.clone(), babe_worker_handle.clone(), keystore, select_chain, deny_unsafe) diff --git a/node/src/testnet_fixtures.rs b/node/src/testnet_fixtures.rs index c3eabe42f..cf9f0604e 100644 --- a/node/src/testnet_fixtures.rs +++ b/node/src/testnet_fixtures.rs @@ -20,7 +20,6 @@ use sc_consensus_grandpa::AuthorityId as GrandpaId; use sc_network::config::MultiaddrWithPeerId; use sp_consensus_babe::AuthorityId as BabeId; use sp_core::crypto::UncheckedInto; -use tangle_crypto_primitives::crypto::AuthorityId as RoleKeyId; use tangle_testnet_runtime::AccountId; /// Testnet root key @@ -50,7 +49,7 @@ pub fn get_bootnodes() -> Vec { } /// Tangle testnet authorities -pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineId, RoleKeyId)> { +pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineId)> { vec![ // tangle-testnet 1 ( @@ -61,8 +60,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["2c7d0dbc639d8d52d02e9e03b6dd19b50f44a6a491ca75c9ebd6a1a29782e743"] .unchecked_into(), - hex!["02a1af3c93d94e9b658a9aaa994bfa3fc156c9d38c60872d3dd33f63cd7aa12a6b"] - .unchecked_into(), ), // tangle-testnet 2 ( @@ -73,8 +70,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["ecb58b3d1eaaad8ef42c27e183e41830628ca5fee5bb06cdf13883e57c4a0770"] .unchecked_into(), - hex!["0305c8dd5a251ed604350f50a993edc9baa66fb72b56091346316dd94052a068fa"] - .unchecked_into(), ), // tangle-testnet 3 ( @@ -85,8 +80,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["2ef4f718a407e0b4d86913a989f749b7edfe836bae1d726b07f9c419ad94c42c"] .unchecked_into(), - hex!["02825faaf113b15b28dfdfe52eeee66554fe2892825e146d20ac49dd7c37d6e793"] - .unchecked_into(), ), // tangle-testnet 4 ( @@ -97,8 +90,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["dc8be4d69084d5bb8a6a0cd48c4d3ab82def85e996b87c63176b49f70c028c35"] .unchecked_into(), - hex!["02745849fbb4cf0f1f9f310cf67740431fd4cd1b4292bb1a3efeb93956e612e75f"] - .unchecked_into(), ), // tangle-testnet 5 ( @@ -109,8 +100,6 @@ pub fn get_initial_authorities() -> Vec<(AccountId, BabeId, GrandpaId, ImOnlineI .unchecked_into(), hex!["363e33c500396cc52ef58924a005227eed67801bd376ca886fd6432ba7070711"] .unchecked_into(), - hex!["03dd29b916c41662207e2e5b7dd7c5c7054681bef8897bd4f0634b9075463159ca"] - .unchecked_into(), ), ] } diff --git a/pallets/dkg/Cargo.toml b/pallets/dkg/Cargo.toml deleted file mode 100644 index 9088f2847..000000000 --- a/pallets/dkg/Cargo.toml +++ /dev/null @@ -1,112 +0,0 @@ -[package] -name = "pallet-dkg" -version = { workspace = true } -authors = { workspace = true } -edition = { workspace = true } -homepage = { workspace = true } -license = { workspace = true } -repository = { workspace = true } - -[dependencies] -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -serde = { workspace = true, default-features = false, features = ["derive"] } -serde_with = { workspace = true, default-features = false, features = ["macros"] } -serdect = { workspace = true, features = ["alloc"] } -sp-core = { workspace = true } -sp-io = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -subtle = { workspace = true } -tangle-crypto-primitives = { workspace = true, default-features = false } -tangle-primitives = { workspace = true, default-features = false } -rand_core = { workspace = true, default-features = false } -rand_chacha = { workspace = true, default-features = false } - -# Pallets -pallet-jobs = { workspace = true } - -# dfns/CGGMP21 specific dependencies -malachite-base = { workspace = true, default-features = false } -malachite-nz = { workspace = true, default-features = false } -hex = { workspace = true, default-features = false, features = ["serde"] } -postcard = { workspace = true, default-features = false } -sha2 = { workspace = true, default-features = false } -digest = { workspace = true, default-features = false } -udigest = { workspace = true, features = ["derive"] } -generic-ec = { workspace = true, default-features = false, features = ["serde", "udigest", "curve-secp256k1", "curve-secp256r1", "curve-stark"] } -generic-ec-zkp = { workspace = true, default-features = false, features = ["serde", "udigest", "alloc"] } -starknet-crypto = { workspace = true, default-features = false } -k256 = { workspace = true, default-features = false, features = ["hash2curve", "alloc", "ecdsa"] } -p256 = { workspace = true, default-features = false, features = ["hash2curve", "alloc", "ecdsa"] } -slip-10 = { version = "0.2", default-features = false, features = ["all-curves"] } -ecdsa-core = { workspace = true, default-features = false } -generic-array = { version = "0.14.7", default-features = false } -derivation-path = { workspace = true, default-features = false } - -# FROST specific dependencies -frost-core = { workspace = true, default-features = false } -frost-ed25519 = { workspace = true, default-features = false } -elliptic-curve = { version = "0.13", features = ["hash2curve"], default-features = false } -frost-ed448 = { workspace = true, default-features = false } -frost-ristretto255 = { workspace = true, default-features = false } -frost-secp256k1 = { workspace = true, default-features = false } -frost-taproot = { workspace = true, default-features = false } -frost-p256 = { workspace = true, default-features = false } -frost-p384 = { workspace = true, default-features = false } -snowbridge-milagro-bls = { workspace = true, default-features = false } - -[dev-dependencies] -pallet-balances = { workspace = true } -postcard = { workspace = true, default-features = false, features = ["alloc"] } -smallvec = { workspace = true } -sp-keystore = { workspace = true } -dfns-cggmp21 = { workspace = true, default-features = false, features = ["curve-secp256k1", "curve-secp256r1", "curve-stark"] } -round-based = { workspace = true, features = ["derive"] } -paillier-zk = { workspace = true, features = ["serde"] } -rand_core = { workspace = true } -frost-core = { workspace = true } -paste = { workspace = true } - -[features] -default = ["std"] -std = [ - "parity-scale-codec/std", - "scale-info/std", - "sp-runtime/std", - "frame-support/std", - "frame-system/std", - "sp-core/std", - "sp-std/std", - "tangle-primitives/std", - "tangle-crypto-primitives/std", - "pallet-balances/std", - "sp-io/std", - "sp-keystore/std", - "pallet-jobs/std", - - "frost-core/std", - "frost-ed25519/std", - "elliptic-curve/std", - "frost-ed448/std", - "frost-ristretto255/std", - "frost-secp256k1/std", - "frost-taproot/std", - "frost-p256/std", - "frost-p384/std", - # "frost-redjubjub/std", - "snowbridge-milagro-bls/std", - "starknet-crypto/std", -] -serde = [] -try-runtime = ["frame-support/try-runtime"] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", -] diff --git a/pallets/dkg/src/benchmarking.rs b/pallets/dkg/src/benchmarking.rs deleted file mode 100644 index aae560f67..000000000 --- a/pallets/dkg/src/benchmarking.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::{Call, Config, Pallet}; -use frame_benchmarking::{account, benchmarks, impl_benchmark_test_suite}; -use frame_system::RawOrigin; - -benchmarks! { -// Benchmark submit_job function -set_fee { - let caller: T::AccountId = account("caller", 0, 0); -}: _(RawOrigin::Signed(caller.clone()), Default::default()) - -} - -// Define the module and associated types for the benchmarks -impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Runtime,); diff --git a/pallets/dkg/src/functions.rs b/pallets/dkg/src/functions.rs deleted file mode 100644 index ed358631c..000000000 --- a/pallets/dkg/src/functions.rs +++ /dev/null @@ -1,252 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use self::signatures_schemes::{ - bls12_381::verify_bls12_381_signature, - ecdsa::{ - verify_generated_dkg_key_ecdsa, verify_secp256k1_ecdsa_signature, - verify_secp256r1_ecdsa_signature, verify_stark_ecdsa_signature, - }, - schnorr_frost::verify_dkg_signature_schnorr_frost, - schnorr_sr25519::verify_schnorr_sr25519_signature, -}; -use super::*; -use crate::types::BalanceOf; -use frame_support::{pallet_prelude::DispatchResult, sp_runtime::Saturating}; -use frame_system::pallet_prelude::BlockNumberFor; -use scale_info::prelude::vec::Vec; -use sp_core::Get; -use tangle_primitives::jobs::*; - -impl Pallet { - /// Calculates the fee for a given job submission based on the provided fee information. - /// - /// The fee calculation considers both the base fee and an additional fee per validator, - /// depending on the job type. - /// - /// # Arguments - /// - /// * `job` - A reference to the job submission containing information about the account, job - /// type, and block number. - /// - /// # Returns - /// - /// Returns the calculated fee as a `BalanceOf` type. - #[allow(clippy::type_complexity)] - pub fn job_to_fee( - job: &JobSubmission< - T::AccountId, - BlockNumberFor, - T::MaxParticipants, - T::MaxSubmissionLen, - T::MaxAdditionalParamsLen, - >, - ) -> BalanceOf { - let fee_info = FeeInfo::::get(); - // charge the base fee + per validator fee - if job.job_type.is_phase_one() { - let validator_count = - job.job_type.clone().get_participants().expect("checked_above").len(); - let validator_fee = fee_info.dkg_validator_fee * (validator_count as u32).into(); - let storage_fee = fee_info.storage_fee_per_byte * T::MaxKeyLen::get().into(); - validator_fee.saturating_add(fee_info.base_fee).saturating_add(storage_fee) - } else { - let storage_fee = fee_info.storage_fee_per_byte * T::MaxSignatureLen::get().into(); - fee_info - .base_fee - .saturating_add(fee_info.sig_validator_fee) - .saturating_add(storage_fee) - } - } - - pub fn calculate_result_extension_fee( - result: Vec, - _extension_time: BlockNumberFor, - ) -> BalanceOf { - let fee_info = FeeInfo::::get(); - let storage_fee = fee_info.storage_fee_per_byte * (result.len() as u32).into(); - fee_info.storage_fee_per_block * storage_fee - } - - /// Verifies a given job verification information and dispatches to specific verification logic - /// based on the job type. - /// - /// # Arguments - /// - /// * `data` - The job verification information, which could be of different types such as DKG - /// or others. - /// - /// # Returns - /// - /// Returns a `DispatchResult` indicating whether the verification was successful or encountered - /// an error. - #[allow(clippy::type_complexity)] - pub fn verify( - data: JobResult< - T::MaxParticipants, - T::MaxKeyLen, - T::MaxSignatureLen, - T::MaxDataLen, - T::MaxProofLen, - T::MaxAdditionalParamsLen, - >, - ) -> DispatchResult { - match data { - JobResult::DKGPhaseOne(info) => Self::verify_generated_dkg_key(info), - JobResult::DKGPhaseTwo(info) => Self::verify_dkg_signature(info), - JobResult::DKGPhaseThree(_) => Ok(()), - JobResult::DKGPhaseFour(info) => Self::verify_dkg_key_rotation(info), - _ => Err(Error::::InvalidJobType.into()), // this should never happen - } - } - - /// Verifies a generated DKG (Distributed Key Generation) key based on the provided DKG result. - /// - /// The verification process depends on the key type specified in the DKG result. - /// It dispatches the verification to the appropriate function for the specified key type (ECDSA - /// or Schnorr). - /// - /// # Arguments - /// - /// * `data` - The DKG result containing participants, keys, and signatures. - /// - /// # Returns - /// - /// Returns a `DispatchResult` indicating whether the DKG key verification was successful - /// or encountered an error. - fn verify_generated_dkg_key( - data: DKGTSSKeySubmissionResult, - ) -> DispatchResult { - verify_generated_dkg_key_ecdsa::(data) - } - - /// Verifies a DKG (Distributed Key Generation) signature based on the provided DKG signature - /// result. - /// - /// The verification process depends on the key type specified in the DKG signature result. - /// It dispatches the verification to the appropriate function for the specified key type (ECDSA - /// or Schnorr). - /// - /// # Arguments - /// - /// * `data` - The DKG signature result containing the message data, signature, signing key, and - /// key type. - fn verify_dkg_signature( - data: DKGTSSSignatureResult< - T::MaxDataLen, - T::MaxKeyLen, - T::MaxSignatureLen, - T::MaxAdditionalParamsLen, - >, - ) -> DispatchResult { - match data.signature_scheme { - DigitalSignatureScheme::EcdsaSecp256k1 => verify_secp256k1_ecdsa_signature::( - &data.data, - &data.signature, - &data.verifying_key, - &data.derivation_path, - data.chain_code, - ), - DigitalSignatureScheme::EcdsaSecp256r1 => verify_secp256r1_ecdsa_signature::( - &data.data, - &data.signature, - &data.verifying_key, - &data.derivation_path, - data.chain_code, - ), - DigitalSignatureScheme::EcdsaStark => verify_stark_ecdsa_signature::( - &data.data, - &data.signature, - &data.verifying_key, - &data.derivation_path, - data.chain_code, - ), - DigitalSignatureScheme::SchnorrSr25519 => verify_schnorr_sr25519_signature::( - &data.data, - &data.signature, - &data.verifying_key, - ), - DigitalSignatureScheme::Bls381 => { - verify_bls12_381_signature::(&data.data, &data.signature, &data.verifying_key) - }, - DigitalSignatureScheme::SchnorrEd25519 - | DigitalSignatureScheme::SchnorrEd448 - | DigitalSignatureScheme::SchnorrP256 - | DigitalSignatureScheme::SchnorrP384 - | DigitalSignatureScheme::SchnorrSecp256k1 - | DigitalSignatureScheme::SchnorrTaproot - | DigitalSignatureScheme::SchnorrRistretto255 => verify_dkg_signature_schnorr_frost::( - data.signature_scheme, - &data.data, - &data.signature, - &data.verifying_key, - ), - } - } - - /// Verifies a DKG Key Rotation. - /// - /// The verification process depends on the key type specified in the DKG result. - /// It dispatches the verification to the appropriate function for the specified key type (ECDSA - /// or Schnorr). - /// - /// # Arguments - /// - /// * `data` - The DKG result containing current key, new key and signature. - /// - /// # Returns - /// - /// Returns a `DispatchResult` indicating whether the key rotation verification was successful - /// or encountered an error. - fn verify_dkg_key_rotation( - res: DKGTSSKeyRotationResult, - ) -> DispatchResult { - let emit_event = |data: DKGTSSKeyRotationResult< - T::MaxKeyLen, - T::MaxSignatureLen, - T::MaxAdditionalParamsLen, - >| { - Self::deposit_event(Event::KeyRotated { - from_job_id: data.phase_one_id, - to_job_id: data.new_phase_one_id, - signature: data.signature.to_vec(), - }); - - Ok(()) - }; - - let data = res.new_key.to_vec().try_into().unwrap_or_default(); - let signature = res.signature.clone(); - let verifying_key = res.key.clone(); - let signature_scheme = res.signature_scheme.clone(); - let derivation_path = res.derivation_path.clone(); - let chain_code = res.chain_code; - let sig_result_data: DKGTSSSignatureResult< - T::MaxDataLen, - T::MaxKeyLen, - T::MaxSignatureLen, - T::MaxAdditionalParamsLen, - > = DKGTSSSignatureResult { - data, - signature, - verifying_key, - signature_scheme, - derivation_path, - chain_code, - }; - - Self::verify_dkg_signature(sig_result_data).and_then(|_| emit_event(res)) - } -} diff --git a/pallets/dkg/src/lib.rs b/pallets/dkg/src/lib.rs deleted file mode 100644 index 173416ab7..000000000 --- a/pallets/dkg/src/lib.rs +++ /dev/null @@ -1,263 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -#![allow(mixed_script_confusables, non_snake_case)] -#![cfg_attr(not(feature = "std"), no_std)] -//! # Pallet-DKG -//! -//! A Substrate pallet for verifying submitted results and misbehaviors -//! of Distributed Key Generation (DKG) protocols. -//! -//! This pallet provides functionality to verify the results of a DKG process. It includes methods -//! to verify DKG signatures, recover ECDSA public keys, and ensure the validity of the generated -//! DKG key. - -extern crate alloc; - -pub use pallet::*; - -mod functions; -mod misbehavior; -pub mod signatures_schemes; -pub mod types; -mod weights; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[cfg(feature = "runtime-benchmarks")] -mod benchmarking; - -#[frame_support::pallet] -pub mod pallet { - use crate::{types::FeeInfoOf, weights::WeightInfo}; - use frame_support::{ - dispatch::DispatchResultWithPostInfo, - pallet_prelude::*, - traits::{Get, ReservableCurrency}, - }; - use frame_system::pallet_prelude::*; - use scale_info::prelude::fmt::Debug; - use sp_std::prelude::*; - use tangle_primitives::jobs::JobId; - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - /// Because this pallet emits events, it depends on the runtime's definition of an event. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// The currency mechanism. - type Currency: ReservableCurrency; - - /// The origin which may set filter. - type UpdateOrigin: EnsureOrigin; - - /// The maximum participants allowed in a job - type MaxParticipants: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of job result submission - type MaxSubmissionLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of a signature - type MaxSignatureLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of data to be signed - type MaxDataLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of validator key allowed - type MaxKeyLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of proof allowed - type MaxProofLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of additional parameters - type MaxAdditionalParamsLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// Weight info for pallet - type WeightInfo: WeightInfo; - } - - #[pallet::pallet] - pub struct Pallet(_); - - #[pallet::storage] - #[pallet::getter(fn fee_info)] - pub type FeeInfo = StorageValue<_, FeeInfoOf, ValueQuery>; - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// Fee has been updated to the new value - FeeUpdated(FeeInfoOf), - /// A DKG has been rotated. - KeyRotated { from_job_id: JobId, to_job_id: JobId, signature: Vec }, - } - - // Errors inform users that something went wrong. - #[pallet::error] - pub enum Error { - /// Cannot retreive signers from the signature - CannotRetreiveSigner, - /// Not enough signers for threshold - NotEnoughSigners, - /// The signers have signed different data - InvalidSignatureData, - /// No participants found - NoParticipantsFound, - /// No signatures found - NoSignaturesFound, - /// Unexpected job type - InvalidJobType, - /// Duplicate signature found in submission - DuplicateSignature, - /// Invalid signature submitted - InvalidSignature, - /// Invalid signature scheme - InvalidSignatureScheme, - /// Invalid signature deserialization - InvalidSignatureDeserialization, - /// Invalid verifying key submitted - InvalidVerifyingKey, - /// Invalid verifying key deserialization - InvalidVerifyingKeyDeserialization, - /// Signed with a different key - SigningKeyMismatch, - /// Invalid participant public key - InvalidParticipantPublicKey, - /// Invalid BLS public key - InvalidBlsPublicKey, - /// Invalid Misbehavior Role type. - InvalidRoleType, - /// Invalid Justification type. - InvalidJustification, - /// Could not deserialize the round message. - MalformedRoundMessage, - /// Signed Round Message not signed by the offender. - NotSignedByOffender, - /// The submitted decommitment is valid. - /// - /// This error is returned when the decommitment is valid - /// but the caller claims it is invalid! - ValidDecommitment, - /// The submitted decommitment data size is valid. - /// - /// This error is returned when the decommitment data size is valid - /// but the caller claims it is invalid! - ValidDataSize, - /// The submitted messages passed Feldman verification. - /// - /// This error is returned when the messages passed Feldman verification - /// but the caller claims it is invalid! - ValidFeldmanVerification, - /// The submitted Schnorr Proof is valid. - /// - /// This error is returned when the decommitment and its - /// Schnorr are valid. but the caller - /// claims it is invalid. - ValidSchnorrProof, - /// The submitted ring pedersen parameters are valid. - /// - /// This error is returned when the ring pedersen parameters are valid - /// but the caller claims it is invalid. - ValidRingPedersenParameters, - /// The submitted Mod Proof is valid. - /// - /// This error is returned when the Mod Proof is valid - /// but the caller claims it is invalid. - ValidModProof, - /// ------------------------------------------------------------ /// - /// FROST ERRORS /// - /// ------------------------------------------------------------ /// - /// Valid FROST signature share - ValidFrostSignatureShare, - /// Invalid FROST message serialization - InvalidFrostMessageSerialization, - /// Invalid FROST message deserialization - InvalidFrostMessageDeserialization, - /// Invalid identifier deserialization - InvalidIdentifierDeserialization, - /// Valid FROST signature error for a misbehavior report - ValidFrostSignature, - /// Unknown identifier - UnknownIdentifier, - /// Duplicate identifier - DuplicateIdentifier, - /// Incorrect number of identifiers - IncorrectNumberOfIdentifiers, - /// Identifier derivation not supported - IdentifierDerivationNotSupported, - /// Malformed signature - MalformedFrostSignature, - /// Invalid FROST signature - InvalidFrostSignature, - /// Invalid FROST signature share - InvalidFrostSignatureShare, - /// Invalid FROST signature scheme - InvalidFrostSignatureScheme, - /// Malformed FROST verifying key - MalformedFrostVerifyingKey, - /// Malformed FROST signing key - MalformedFrostSigningKey, - /// Missing FROST commitment - MissingFrostCommitment, - /// Invalid FROST commitment - IdentityCommitment, - /// FROST Field scalar error - FrostFieldError, - /// FROST Group element error - FrostGroupError, - /// Field element error - FieldElementError, - /// Invalid public key error - InvalidPublicKey, - /// Invalid message - InvalidMessage, - /// Malformed Stark signature - MalformedStarkSignature, - } - - #[pallet::call] - impl Pallet { - /// Set the fee information for the pallet. - /// - /// This extrinsic allows the designated origin to update the fee information, which - /// includes parameters such as the base fee and the fee per validator. It updates the - /// storage with the provided `FeeInfo` and emits an event indicating that the fee has been - /// updated. - /// - /// # Arguments - /// - /// * `origin` - The origin that is permitted to set the fee. It should be authorized by - /// `UpdateOrigin`. - /// * `fee_info` - The new fee information to be set for the pallet. - #[pallet::call_index(0)] - #[pallet::weight(T::WeightInfo::set_fee())] - pub fn set_fee(origin: OriginFor, fee_info: FeeInfoOf) -> DispatchResultWithPostInfo { - T::UpdateOrigin::ensure_origin(origin)?; - - // Update storage. - >::put(fee_info.clone()); - - // Emit an event. - Self::deposit_event(Event::FeeUpdated(fee_info)); - Ok(().into()) - } - } -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/aux_only.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/aux_only.rs deleted file mode 100644 index 344194c23..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/aux_only.rs +++ /dev/null @@ -1,238 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::*; -use digest::Digest; -use frame_support::ensure; -use sp_core::RuntimeDebug; -use sp_io::hashing::keccak_256; -use sp_runtime::DispatchResult; -use sp_std::prelude::*; -use tangle_primitives::misbehavior::{ - dfns_cggmp21::{InvalidProofReason, AUX_GEN_EID}, - MisbehaviorSubmission, SignedRoundMessage, -}; - -use super::{ - xor_array, - zk::{ - no_small_factor::non_interactive as π_fac, paillier_blum_modulus as π_mod, - ring_pedersen_parameters as π_prm, - }, - DefaultDigest, Integer, SECURITY_BYTES, -}; - -#[derive(udigest::Digestable)] -#[udigest(tag = "dfns.cggmp21.aux_gen.tag")] -pub enum Tag<'a> { - /// Tag that includes the prover index - Indexed { - party_index: u16, - #[udigest(as_bytes)] - sid: &'a [u8], - }, -} - -/// Message from round 1 -#[derive(Clone, RuntimeDebug, serde::Deserialize, udigest::Digestable)] -#[udigest(tag = "dfns.cggmp21.aux_gen.round1")] -#[udigest(bound = "")] -#[serde(bound = "")] -pub struct MsgRound1 { - /// $V_i$ - #[udigest(as_bytes)] - pub commitment: digest::Output, -} -/// Message from round 2 -#[derive(Clone, RuntimeDebug, serde::Deserialize, udigest::Digestable)] -#[udigest(tag = "dfns.cggmp21.aux_gen.round2")] -#[udigest(bound = "")] -#[serde(bound = "")] -#[allow(non_snake_case)] -pub struct MsgRound2 { - /// $N_i$ - #[udigest(with = super::integer::encoding::integer)] - #[serde(with = "super::integer::serde")] - pub N: Integer, - /// $s_i$ - #[udigest(with = super::integer::encoding::integer)] - #[serde(with = "super::integer::serde")] - pub s: Integer, - /// $t_i$ - #[udigest(with = super::integer::encoding::integer)] - #[serde(with = "super::integer::serde")] - pub t: Integer, - /// $\hat \psi_i$ - pub params_proof: super::zk::ring_pedersen_parameters::Proof, - /// $\rho_i$ - #[serde(with = "hex")] - #[udigest(as_bytes)] - pub rho_bytes: [u8; SECURITY_BYTES], - /// $u_i$ - #[serde(with = "hex")] - #[udigest(as_bytes)] - pub decommit: [u8; SECURITY_BYTES], -} - -/// Unicast message of round 3, sent to each participant -#[derive(Clone, serde::Serialize, serde::Deserialize)] -pub struct MsgRound3 { - /// $\psi_i$ - // this should be L::M instead, but no rustc support yet - pub mod_proof: (π_mod::Commitment, π_mod::Proof), - /// $\phi_i^j$ - pub fac_proof: π_fac::Proof, -} - -/// Given a KeyRefresh Round1 and Round2 messages, verify the misbehavior and return the result. -pub fn invalid_decommitment( - data: &MisbehaviorSubmission, - round1: &SignedRoundMessage, - round2: &SignedRoundMessage, -) -> DispatchResult { - Pallet::::ensure_signed_by_offender(round1, data.offender)?; - Pallet::::ensure_signed_by_offender(round2, data.offender)?; - ensure!(round1.sender == round2.sender, Error::::InvalidJustification); - - let job_id_bytes = data.job_id.to_be_bytes(); - let mix = keccak_256(AUX_GEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let tag = udigest::Tag::::new_structured(Tag::Indexed { - party_index: round1.sender, - sid: &eid_bytes[..], - }); - - let round1_msg = postcard::from_bytes::>(&round1.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - let round2_msg = postcard::from_bytes::(&round2.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - let hash_commit = tag.digest(round2_msg); - - ensure!(round1_msg.commitment != hash_commit, Error::::ValidDecommitment); - // Slash the offender! - // TODO: add slashing logic - Ok(()) -} - -/// Given a KeyRefresh Round2 message, verify the misbehavior and return the result. -pub fn invalid_ring_pedersen_parameters( - data: &MisbehaviorSubmission, - round2: &SignedRoundMessage, -) -> DispatchResult { - Pallet::::ensure_signed_by_offender(round2, data.offender)?; - let i = round2.sender; - let job_id_bytes = data.job_id.to_be_bytes(); - let mix = keccak_256(AUX_GEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let parties_shared_state = DefaultDigest::new_with_prefix(DefaultDigest::digest(eid_bytes)); - let round2_msg = postcard::from_bytes::(&round2.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - if !super::validate_public_paillier_key_size(&round2_msg.N) { - // Slash the offender! - // TODO: add slashing logic - } - - let data = π_prm::Data { N: &round2_msg.N, s: &round2_msg.s, t: &round2_msg.t }; - let proof = π_prm::verify( - parties_shared_state.clone().chain_update(i.to_be_bytes()), - data, - &round2_msg.params_proof, - ); - - ensure!(proof.is_err(), Error::::ValidRingPedersenParameters); - - // Slash the offender! - // TODO: add slashing logic - Ok(()) -} - -pub fn invalid_mod_proof( - data: &MisbehaviorSubmission, - parties_including_offender: &[[u8; 33]], - reason: &InvalidProofReason, - round2: &[SignedRoundMessage], - round3: &SignedRoundMessage, -) -> DispatchResult { - let i = round3.sender; - let n = parties_including_offender.len() as u16; - Pallet::::ensure_signed_by_offender(round3, data.offender)?; - ensure!(round2.len() == usize::from(n), Error::::InvalidJustification); - round2 - .iter() - .zip(parties_including_offender) - .try_for_each(|(r, p)| Pallet::::ensure_signed_by(r, *p))?; - - let decomm = round2.get(usize::from(i)).ok_or(Error::::InvalidJustification)?; - // double-check - Pallet::::ensure_signed_by_offender(decomm, data.offender)?; - - let job_id_bytes = data.job_id.to_be_bytes(); - let mix = keccak_256(AUX_GEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let parties_shared_state = DefaultDigest::new_with_prefix(DefaultDigest::digest(eid_bytes)); - - let round2_msgs = round2 - .iter() - .map(|r| { - postcard::from_bytes::(&r.message) - .map_err(|_| Error::::MalformedRoundMessage) - }) - .collect::, _>>()?; - let round2_msg = round2_msgs.get(usize::from(i)).ok_or(Error::::InvalidJustification)?; - - // rho in paper, collective random bytes - let rho_bytes = round2_msgs.iter().map(|d| &d.rho_bytes).fold([0u8; SECURITY_BYTES], xor_array); - - let round3_msg = postcard::from_bytes::(&round3.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - let data = π_mod::Data { n: round2_msg.N.clone() }; - let (commitment, proof) = &round3_msg.mod_proof; - - let invalid_proof = match reason { - InvalidProofReason::ModulusIsPrime => π_mod::verify_n_is_prime(&data), - InvalidProofReason::ModulusIsEven => π_mod::verify_n_is_even(&data), - InvalidProofReason::IncorrectNthRoot(i) => π_mod::verify_incorrect_nth_root( - usize::from(*i), - parties_shared_state - .clone() - .chain_update(i.to_be_bytes()) - .chain_update(rho_bytes), - &data, - proof, - commitment, - ), - InvalidProofReason::IncorrectFourthRoot(i) => π_mod::verify_incorrect_fourth_root( - usize::from(*i), - parties_shared_state - .clone() - .chain_update(i.to_be_bytes()) - .chain_update(rho_bytes), - &data, - proof, - commitment, - ), - _ => return Err(Error::::InvalidJustification.into()), - }; - - ensure!(!invalid_proof, Error::::ValidModProof); - - // Slash the offender! - // TODO: add slashing logic - Ok(()) -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/hashing_rng.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/hashing_rng.rs deleted file mode 100644 index 84ff2b8a3..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/hashing_rng.rs +++ /dev/null @@ -1,81 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use digest::Digest; -/// Pseudo-random generateur that obtains values by hashing the provided values -/// salted with an internal counter. The counter is prepended to conserve -/// entropy. -/// -/// Useful when you want to deterministically but securely generate elliptic -/// curve points and scalars from some data -/// -/// Having u64 counter means that the period of the sequence is 2^64 times -/// `Digest::OutputSize` bytes -pub struct HashRng { - hasher: F, - counter: u64, - buffer: digest::Output, - offset: usize, -} - -impl HashRng { - /// Create RNG from a function that will update and finalize a digest. Use it like this: - /// ```ignore - /// HashRng::new(|d| d.chain_update("my_values").finalize()) - /// ``` - pub fn new(hasher: F) -> Self - where - F: Fn(D) -> digest::Output, - { - let d: D = D::new().chain_update(0u64.to_le_bytes()); - let buffer: digest::Output = hasher(d); - HashRng { hasher, counter: 1, offset: 0, buffer } - } -} - -impl rand_core::RngCore for HashRng -where - D: Digest, - F: Fn(D) -> digest::Output, -{ - fn next_u32(&mut self) -> u32 { - const SIZE: usize = core::mem::size_of::(); - // NOTE: careful with SIZE usage, otherwise it panics - if self.offset + SIZE > self.buffer.len() { - self.buffer = (self.hasher)(D::new().chain_update(self.counter.to_le_bytes())); - self.counter = self.counter.wrapping_add(1); - self.offset = 0; - } - let bytes = &self.buffer[self.offset..self.offset + SIZE]; - self.offset += SIZE; - #[allow(clippy::expect_used)] - let bytes: [u8; SIZE] = bytes.try_into().expect("Size mismatch"); - u32::from_le_bytes(bytes) - } - - fn next_u64(&mut self) -> u64 { - rand_core::impls::next_u64_via_u32(self) - } - - fn fill_bytes(&mut self, dest: &mut [u8]) { - rand_core::impls::fill_bytes_via_next(self, dest) - } - - fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core::Error> { - self.fill_bytes(dest); - Ok(()) - } -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/hex_or_bin.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/hex_or_bin.rs deleted file mode 100644 index 2dd35b8d4..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/hex_or_bin.rs +++ /dev/null @@ -1,125 +0,0 @@ -/// (De)serializes byte arrays as hex-string for human-readable formats (like -/// json) or as raw bytes otherwise -/// -/// # Motivation -/// We want byte arrays to be serialized as bytes for binary formats, to keep -/// size of serialized data minimal. For that purpose, [`serde_with::Bytes`] -/// should suffice. However, serializing data as bytes on human-readable formats -/// (like json) is not efficient nor is it human-readable: bytes are serialized -/// as list of integers. Hex encoding is preferred for such formats as it's more -/// compact and readable. -/// -/// # Private API -/// `HexOrBin` is shared between several crates in the project, however we do not -/// publicly expose it. Although it works perfectly fine in our case, it may not -/// work well sometimes due to limitations. -/// -/// # Limitations -/// * Only works with byte arrays that have staticly-known size. `Array::default()` -/// should return `Array` filled with zeroes -/// * Using `HexOrBin` compiles, but deseralization basically always fails except for -/// deserializing empty arrays -/// * Only defined for arrays that implement [`Default`] trait. Note that `[u8; N]` -/// implements this trait only for limited amount of `N`. -pub struct HexOrBin; - -impl serde_with::SerializeAs for HexOrBin -where - T: AsRef<[u8]>, -{ - fn serialize_as(source: &T, serializer: S) -> Result - where - S: serde::Serializer, - { - if serializer.is_human_readable() { - serializer.serialize_str(&hex::encode(source)) - } else { - serializer.serialize_bytes(source.as_ref()) - } - } -} - -impl<'de, T> serde_with::DeserializeAs<'de, T> for HexOrBin -where - T: Default + AsMut<[u8]>, -{ - fn deserialize_as(deserializer: D) -> Result - where - D: serde::Deserializer<'de>, - { - struct Visitor { - expect_hex: bool, - out: T, - _ph: core::marker::PhantomData, - } - impl<'de, T> serde::de::Visitor<'de> for Visitor - where - T: AsMut<[u8]>, - { - type Value = T; - - fn expecting(&self, formatter: &mut core::fmt::Formatter) -> core::fmt::Result { - if self.expect_hex { - formatter.write_str("hex-encoded byte string") - } else { - formatter.write_str("byte string") - } - } - - fn visit_bytes(mut self, v: &[u8]) -> Result - where - E: serde::de::Error, - { - if self.expect_hex { - return Err(E::invalid_value( - serde::de::Unexpected::Bytes(v), - &"expected hex-encoded bytes", - )); - } - let out_len = self.out.as_mut().len(); - if out_len != v.len() { - return Err(E::invalid_length(v.len(), &ExpectedLen(out_len))); - } - self.out.as_mut().copy_from_slice(v); - Ok(self.out) - } - - fn visit_str(mut self, v: &str) -> Result - where - E: serde::de::Error, - { - if !self.expect_hex { - return Err(E::invalid_value( - serde::de::Unexpected::Str(v), - &"expected raw bytes", - )); - } - - hex::decode_to_slice(v, self.out.as_mut()).map_err(E::custom)?; - - Ok(self.out) - } - } - - if deserializer.is_human_readable() { - deserializer.deserialize_str(Visitor { - expect_hex: true, - out: Default::default(), - _ph: Default::default(), - }) - } else { - deserializer.deserialize_bytes(Visitor { - expect_hex: false, - out: Default::default(), - _ph: Default::default(), - }) - } - } -} - -struct ExpectedLen(usize); -impl serde::de::Expected for ExpectedLen { - fn fmt(&self, formatter: &mut core::fmt::Formatter) -> core::fmt::Result { - write!(formatter, "{}", self.0) - } -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/integer.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/integer.rs deleted file mode 100644 index b1fd2cd65..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/integer.rs +++ /dev/null @@ -1,200 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use malachite_base::num::conversion::traits::FromStringBase; -use parity_scale_codec::alloc::vec; -use parity_scale_codec::{Decode, Encode}; -use scale_info::TypeInfo; -use sp_core::RuntimeDebug; -use sp_std::prelude::*; - -#[cfg(not(feature = "std"))] -use ::alloc::string::{String, ToString}; - -#[derive(Clone, RuntimeDebug, ::serde::Deserialize, ::serde::Serialize)] -pub struct RugInteger { - radix: i32, - value: String, -} - -impl RugInteger { - /// Create a new `RugInteger` from a utf8 bytes and a radix. - pub fn from_utf8_and_radix(v: &[u8], radix: i32) -> Result { - let value = core::str::from_utf8(v).map(|x| x.to_string())?; - Ok(Self { radix, value }) - } - - /// Convert `RugInteger` to a `Vec`. - pub fn to_vec(&self) -> Vec { - if self.value == "0" || self.value.is_empty() { - return Vec::new(); - } - let mut x = self.value.clone(); - // fix odd length - if x.len() % 2 != 0 { - // add a leading zero - x.insert(0, '0'); - } - let mut out = vec![0; x.len() / 2]; - hex::decode_to_slice(x, &mut out).unwrap(); - out - } -} - -impl<'a> From<&'a malachite_nz::integer::Integer> for RugInteger { - fn from(x: &'a malachite_nz::integer::Integer) -> Self { - use malachite_base::num::{ - conversion::traits::ToStringBase, logic::traits::SignificantBits, - }; - let radix = if x.significant_bits() <= 32 { 10 } else { 16 }; - let value = x.to_string_base(radix as _); - Self { radix, value } - } -} - -impl From for RugInteger { - fn from(x: malachite_nz::integer::Integer) -> Self { - Self::from(&x) - } -} - -#[derive(RuntimeDebug, Default, Encode, Decode, TypeInfo)] -pub struct MalachiteIntegerError; - -impl core::fmt::Display for MalachiteIntegerError { - fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { - write!(f, "Could not convert from RugInteger to MalachiteInteger") - } -} - -impl TryFrom for malachite_nz::integer::Integer { - type Error = MalachiteIntegerError; - fn try_from(x: RugInteger) -> Result { - if x.radix < 2 || x.radix > 36 { - return Err(MalachiteIntegerError); - } - let radix = x.radix as _; - let value = x.value; - malachite_nz::integer::Integer::from_string_base(radix, &value).ok_or(MalachiteIntegerError) - } -} - -/// Unambiguous encoding for different types for which it was not defined -pub mod encoding { - pub fn integer( - x: &malachite_nz::integer::Integer, - encoder: udigest::encoding::EncodeValue, - ) { - let v = super::RugInteger::from(x); - encoder.encode_leaf().chain(v.to_vec()); - } - - pub fn integers_list( - list: &[malachite_nz::integer::Integer], - encoder: udigest::encoding::EncodeValue, - ) { - let mut encoder = encoder.encode_list(); - for x in list { - integer(x, encoder.add_item()) - } - } -} - -#[allow(unused)] -pub mod serde { - use ::serde::{Deserialize, Deserializer, Serialize, Serializer}; - - pub fn serialize( - x: &malachite_nz::integer::Integer, - serializer: S, - ) -> Result { - let v = super::RugInteger::from(x); - v.serialize(serializer) - } - - pub fn deserialize<'de, D: Deserializer<'de>>( - deserializer: D, - ) -> Result { - let v = super::RugInteger::deserialize(deserializer)?; - v.try_into().map_err(serde::de::Error::custom) - } -} - -#[allow(unused)] -pub mod serde_list { - use crate::misbehavior::dfns_cggmp21::M; - #[cfg(not(feature = "std"))] - use ::alloc::vec::Vec; - use ::serde::{Deserialize, Deserializer, Serialize, Serializer}; - use sp_runtime::DeserializeOwned; - - #[serde_with::serde_as] - #[derive(Serialize, Deserialize)] - struct FixedLengthArray(#[serde_as(as = "[_; N]")] [T; N]) - where - T: Serialize + DeserializeOwned; - - pub fn serialize( - list: &[malachite_nz::integer::Integer], - serializer: S, - ) -> Result { - let out: [super::RugInteger; M] = list - .iter() - .map(super::RugInteger::from) - .collect::>() - .try_into() - .map_err(|_| serde::ser::Error::custom("Invalid integer list length"))?; - out.serialize(serializer) - } - - pub fn deserialize<'de, D: Deserializer<'de>>( - deserializer: D, - ) -> Result<[malachite_nz::integer::Integer; M], D::Error> { - FixedLengthArray::::deserialize(deserializer)? - .0 - .into_iter() - .map(|x| x.try_into().map_err(serde::de::Error::custom)) - .collect::, _>>()? - .try_into() - .map_err(|_| serde::de::Error::custom("Invalid integer list length")) - } -} - -#[allow(unused)] -pub mod serde_vec { - #[cfg(not(feature = "std"))] - use ::alloc::vec::Vec; - use ::serde::{Deserialize, Deserializer, Serialize, Serializer}; - - pub fn serialize( - list: &[malachite_nz::integer::Integer], - serializer: S, - ) -> Result { - list.iter() - .map(super::RugInteger::from) - .collect::>() - .serialize(serializer) - } - - pub fn deserialize<'de, D: Deserializer<'de>>( - deserializer: D, - ) -> Result, D::Error> { - Vec::::deserialize(deserializer)? - .into_iter() - .map(|x| x.try_into().map_err(serde::de::Error::custom)) - .collect() - } -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/keygen.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/keygen.rs deleted file mode 100644 index 44852ffbf..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/keygen.rs +++ /dev/null @@ -1,264 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::*; -use digest::Digest; -use frame_support::ensure; -use generic_ec::{curves::Secp256k1, Curve, Point, Scalar}; -use generic_ec_zkp::{polynomial::Polynomial, schnorr_pok}; -use sp_core::RuntimeDebug; -use sp_io::hashing::keccak_256; -use sp_runtime::DispatchResult; -use sp_std::prelude::*; - -use tangle_primitives::misbehavior::{ - dfns_cggmp21::KEYGEN_EID, MisbehaviorSubmission, SignedRoundMessage, -}; - -use super::{hashing_rng::HashRng, xor_array, DefaultDigest, SECURITY_BYTES}; - -#[derive(udigest::Digestable)] -#[udigest(tag = "dfns.cggmp21.keygen.threshold.tag")] -pub enum Tag<'a> { - /// Tag that includes the prover index - Indexed { - party_index: u16, - #[udigest(as_bytes)] - sid: &'a [u8], - }, -} - -#[derive(Clone)] -pub struct Rid([u8; N]); - -impl AsRef<[u8]> for Rid { - fn as_ref(&self) -> &[u8] { - &self.0 - } -} - -impl AsMut<[u8]> for Rid { - fn as_mut(&mut self) -> &mut [u8] { - &mut self.0 - } -} - -impl Default for Rid { - fn default() -> Self { - Self([0u8; N]) - } -} - -impl hex::FromHex for Rid -where - [u8; N]: hex::FromHex, -{ - type Error = <[u8; N] as hex::FromHex>::Error; - fn from_hex>(hex: T) -> Result { - hex::FromHex::from_hex(hex).map(Self) - } -} - -/// Message from round 1 -#[derive(Clone, RuntimeDebug, serde::Deserialize, udigest::Digestable)] -#[serde(bound = "")] -#[udigest(bound = "")] -#[udigest(tag = "dfns.cggmp21.keygen.threshold.round1")] -pub struct MsgRound1 { - /// $V_i$ - #[udigest(as_bytes)] - pub commitment: digest::Output, -} - -/// Message from round 2 broadcasted to everyone -#[serde_with::serde_as] -#[derive(Clone, serde::Deserialize, udigest::Digestable)] -#[serde(bound = "")] -#[udigest(bound = "")] -#[udigest(tag = "dfns.cggmp21.keygen.threshold.round1")] -#[allow(non_snake_case)] -pub struct MsgRound2Broad { - /// `rid_i` - #[serde_as(as = "super::hex_or_bin::HexOrBin")] - #[udigest(as_bytes)] - pub rid: Rid<{ SECURITY_BYTES }>, - /// $\vec S_i$ - pub F: Polynomial>, - /// $A_i$ - pub sch_commit: schnorr_pok::Commit, - /// $u_i$ - #[serde(with = "hex::serde")] - #[udigest(as_bytes)] - pub decommit: [u8; SECURITY_BYTES], -} - -/// Message from round 2 unicasted to each party -#[derive(Clone, RuntimeDebug, serde::Deserialize)] -#[serde(bound = "")] -pub struct MsgRound2Uni { - /// $\sigma_{i,j}$ - pub sigma: Scalar, -} -/// Message from round 3 -#[derive(Clone, serde::Deserialize)] -#[serde(bound = "")] -pub struct MsgRound3 { - /// $\psi_i$ - pub sch_proof: schnorr_pok::Proof, -} - -/// Given a Keygen Round1 and Round2a messages, verify the misbehavior and return the result. -pub fn invalid_decommitment( - data: &MisbehaviorSubmission, - round1: &SignedRoundMessage, - round2a: &SignedRoundMessage, -) -> DispatchResult { - Pallet::::ensure_signed_by_offender(round1, data.offender)?; - Pallet::::ensure_signed_by_offender(round2a, data.offender)?; - ensure!(round1.sender == round2a.sender, Error::::InvalidJustification); - - let job_id_bytes = data.job_id.to_be_bytes(); - let mix = keccak_256(KEYGEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let tag = udigest::Tag::::new_structured(Tag::Indexed { - party_index: round1.sender, - sid: &eid_bytes[..], - }); - - let round1_msg = postcard::from_bytes::>(&round1.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - let round2_msg = postcard::from_bytes::>(&round2a.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - let hash_commit = tag.digest(round2_msg); - - ensure!(round1_msg.commitment != hash_commit, Error::::ValidDecommitment); - // Slash the offender! - // TODO: add slashing logic - Ok(()) -} - -/// Given a Keygen t and Round2a messages, verify the misbehavior and return the result. -pub fn invalid_data_size( - data: &MisbehaviorSubmission, - t: u16, - round2a: &SignedRoundMessage, -) -> DispatchResult { - Pallet::::ensure_signed_by_offender(round2a, data.offender)?; - - let round2a_msg = postcard::from_bytes::>(&round2a.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - ensure!(round2a_msg.F.degree() + 1 != usize::from(t), Error::::ValidDataSize); - // Slash the offender! - // TODO: add slashing logic - Ok(()) -} - -/// Given a Keygen Round2a and Round2b messages, verify the misbehavior and return the result. -pub fn feldman( - data: &MisbehaviorSubmission, - round2a: &SignedRoundMessage, - round2b: &SignedRoundMessage, -) -> DispatchResult { - Pallet::::ensure_signed_by_offender(round2a, data.offender)?; - Pallet::::ensure_signed_by_offender(round2b, data.offender)?; - ensure!(round2a.sender == round2b.sender, Error::::InvalidJustification); - let i = round2a.sender; - - let round2a_msg = postcard::from_bytes::>(&round2a.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - let round2b_msg = postcard::from_bytes::>(&round2b.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - let lhs = round2a_msg.F.value::<_, generic_ec::Point<_>>(&Scalar::from(i + 1)); - let rhs = generic_ec::Point::generator() * round2b_msg.sigma; - let feldman_verification = lhs != rhs; - ensure!(feldman_verification, Error::::ValidFeldmanVerification); - // Slash the offender! - // TODO: add slashing logic - Ok(()) -} - -pub fn schnorr_proof( - data: &MisbehaviorSubmission, - parties_including_offender: &[[u8; 33]], - round2a: &[SignedRoundMessage], - round3: &SignedRoundMessage, -) -> DispatchResult { - let i = round3.sender; - let n = parties_including_offender.len() as u16; - Pallet::::ensure_signed_by_offender(round3, data.offender)?; - ensure!(round2a.len() == usize::from(n), Error::::InvalidJustification); - round2a - .iter() - .zip(parties_including_offender) - .try_for_each(|(r, p)| Pallet::::ensure_signed_by(r, *p))?; - - let decomm = round2a.get(usize::from(i)).ok_or(Error::::InvalidJustification)?; - // double-check - Pallet::::ensure_signed_by_offender(decomm, data.offender)?; - - let job_id_bytes = data.job_id.to_be_bytes(); - let mix = keccak_256(KEYGEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - - let round3_msg = postcard::from_bytes::>(&round3.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - let round2a_msgs = round2a - .iter() - .map(|r| { - postcard::from_bytes::>(&r.message) - .map_err(|_| Error::::MalformedRoundMessage) - }) - .collect::, _>>()?; - let round2a_msg = round2a_msgs.get(usize::from(i)).ok_or(Error::::InvalidJustification)?; - - let rid = round2a_msgs.iter().map(|d| &d.rid).fold([0u8; SECURITY_BYTES], xor_array); - - let polynomial_sum = round2a_msgs.iter().map(|d| &d.F).sum::>>(); - - let ys = (0..n) - .map(|l| polynomial_sum.value(&Scalar::from(l + 1))) - .collect::>>(); - - let challenge = { - let hash = |d: DefaultDigest| { - d.chain_update(&eid_bytes) - .chain_update(i.to_be_bytes()) - .chain_update(rid.as_slice()) - .chain_update(ys[usize::from(i)].to_bytes(true)) // y_i - .chain_update(round2a_msg.sch_commit.0.to_bytes(false)) // h - .finalize() - }; - let mut rng = HashRng::new(hash); - Scalar::random(&mut rng) - }; - let challenge = schnorr_pok::Challenge { nonce: challenge }; - - let proof = - round3_msg - .sch_proof - .verify(&round2a_msg.sch_commit, &challenge, &ys[usize::from(i)]); - - ensure!(proof.is_err(), Error::::ValidSchnorrProof); - - // TODO: add slashing logic - // Slash the offender! - Ok(()) -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/mod.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/mod.rs deleted file mode 100644 index 83a885c22..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/mod.rs +++ /dev/null @@ -1,136 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use sp_runtime::DispatchResult; -use tangle_primitives::misbehavior::{ - dfns_cggmp21::{DfnsCGGMP21Justification, KeyRefreshAborted, KeygenAborted, SigningAborted}, - MisbehaviorSubmission, -}; - -use crate::*; - -pub mod aux_only; -mod hashing_rng; -mod hex_or_bin; -mod integer; -pub mod keygen; -pub mod sign; -mod zk; - -#[cfg(test)] -mod tests; - -pub type DefaultDigest = sha2::Sha256; -pub use malachite_nz::integer::Integer; - -/// Hardcoded value for parameter $m$ of security level -/// -/// Currently, [security parameter $m$](SecurityLevel::M) is hardcoded to this constant. We're going -/// to fix that once `feature(generic_const_exprs)` is stable. -pub const M: usize = 128; -pub const SECURITY_BITS: usize = 384; -pub const SECURITY_BYTES: usize = SECURITY_BITS / 8; - -impl Pallet { - /// Verifies a given a misbehavior justification and dispatches to specific verification logic - pub fn verify_dfns_cggmp21_misbehavior( - data: &MisbehaviorSubmission, - justification: &DfnsCGGMP21Justification, - ) -> DispatchResult { - match justification { - DfnsCGGMP21Justification::Keygen { participants, t, reason } => { - Self::verify_dfns_cggmp21_keygen_misbehavior(data, participants, *t, reason) - }, - DfnsCGGMP21Justification::KeyRefresh { participants, t, reason } => { - Self::verify_dfns_cggmp21_key_refresh_misbehavior(data, participants, *t, reason) - }, - DfnsCGGMP21Justification::Signing { participants, t, reason } => { - Self::verify_dfns_cggmp21_signing_misbehavior(data, participants, *t, reason) - }, - } - } - - /// given a keygen misbehavior justification, verify the misbehavior and return a dispatch - /// result - pub fn verify_dfns_cggmp21_keygen_misbehavior( - data: &MisbehaviorSubmission, - participants: &[[u8; 33]], - t: u16, - reason: &KeygenAborted, - ) -> DispatchResult { - match reason { - KeygenAborted::InvalidDecommitment { round1, round2a } => { - keygen::invalid_decommitment::(data, round1, round2a) - }, - KeygenAborted::InvalidDataSize { round2a } => { - keygen::invalid_data_size::(data, t, round2a) - }, - KeygenAborted::FeldmanVerificationFailed { round2a, round2b } => { - keygen::feldman::(data, round2a, round2b) - }, - KeygenAborted::InvalidSchnorrProof { round2a, round3 } => { - keygen::schnorr_proof::(data, participants, round2a, round3) - }, - } - } - - /// given a key refresh misbehavior justification, verify the misbehavior and return a dispatch - /// result - pub fn verify_dfns_cggmp21_key_refresh_misbehavior( - data: &MisbehaviorSubmission, - participants: &[[u8; 33]], - _t: u16, - reason: &KeyRefreshAborted, - ) -> DispatchResult { - match reason { - KeyRefreshAborted::InvalidDecommitment { round1, round2 } => { - aux_only::invalid_decommitment::(data, round1, round2) - }, - KeyRefreshAborted::InvalidRingPedersenParameters { round2 } => { - aux_only::invalid_ring_pedersen_parameters::(data, round2) - }, - KeyRefreshAborted::InvalidModProof { round2, round3, reason } => { - aux_only::invalid_mod_proof::(data, participants, reason, round2, round3) - }, - _ => unimplemented!(), - } - } - /// given a signing misbehavior justification, verify the misbehavior and return a dispatch - /// result - pub fn verify_dfns_cggmp21_signing_misbehavior( - _data: &MisbehaviorSubmission, - _participants: &[[u8; 33]], - _t: u16, - _reason: &SigningAborted, - ) -> DispatchResult { - unimplemented!() - } -} - -/// Checks that public paillier key meets security level constraints -pub fn validate_public_paillier_key_size(n: &Integer) -> bool { - use malachite_base::num::logic::traits::SignificantBits; - n.significant_bits() >= 8 * (SECURITY_BITS as u64) - 1 -} - -pub fn xor_array(mut a: A, b: B) -> A -where - A: AsMut<[u8]>, - B: AsRef<[u8]>, -{ - a.as_mut().iter_mut().zip(b.as_ref()).for_each(|(a_i, b_i)| *a_i ^= *b_i); - a -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/sign.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/sign.rs deleted file mode 100644 index 98c9b3533..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/sign.rs +++ /dev/null @@ -1,15 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/tests.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/tests.rs deleted file mode 100644 index 7f79b4e2b..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/tests.rs +++ /dev/null @@ -1,982 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -#![allow(non_snake_case)] - -use crate::{ - misbehavior::dfns_cggmp21::{xor_array, zk::ring_pedersen_parameters::original as π_prm}, - mock::*, -}; - -use dfns_cggmp21::{ - generic_ec::Point, - key_refresh::msg::aux_only, - keygen, - security_level::{KeygenSecurityLevel, SecurityLevel, SecurityLevel128}, - PregeneratedPrimes, -}; -use digest::Digest; -use frame_support::{assert_err, assert_ok}; -use generic_ec::{curves::Secp256k1, Scalar, SecretScalar}; -use generic_ec_zkp::{polynomial::Polynomial, schnorr_pok}; -use paillier_zk::{fast_paillier::utils, rug::Complete, Integer, IntegerExt}; -use pallet_dkg::{ - misbehavior::dfns_cggmp21::{aux_only as _aux_only, keygen as _keygen, DefaultDigest}, - Error, -}; -use parity_scale_codec::Encode; -use rand_chacha::rand_core::{RngCore, SeedableRng}; -use sp_core::{ecdsa, keccak_256}; -use sp_io::crypto::{ecdsa_generate, ecdsa_sign_prehashed}; -use tangle_primitives::{ - misbehavior::{ - dfns_cggmp21::{ - DfnsCGGMP21Justification, KeyRefreshAborted, KeygenAborted, AUX_GEN_EID, KEYGEN_EID, - }, - DKGTSSJustification, MisbehaviorJustification, MisbehaviorSubmission, SignedRoundMessage, - }, - roles::{RoleType, ThresholdSignatureRoleType}, -}; - -fn pub_key() -> ecdsa::Public { - ecdsa_generate(tangle_crypto_primitives::ROLE_KEY_TYPE, None) -} - -fn sign(key: ecdsa::Public, msg: &[u8]) -> Vec { - let hash = keccak_256(msg); - let signature: ecdsa::Signature = - ecdsa_sign_prehashed(tangle_crypto_primitives::ROLE_KEY_TYPE, &key, &hash).unwrap(); - signature.encode() -} - -fn sign_round_msg( - key: ecdsa::Public, - sender: u16, - msg: &M, -) -> SignedRoundMessage { - let msg_bytes = postcard::to_allocvec(msg).unwrap(); - let sender_bytes = sender.to_be_bytes(); - let msg_to_sign = [&sender_bytes[..], &msg_bytes[..]].concat(); - let signature = sign(key, &msg_to_sign); - SignedRoundMessage { sender, message: msg_bytes, signature } -} - -// *** Keygen *** - -#[test] -fn submit_keygen_decommitment_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let t = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let job_id_bytes = job_id.to_be_bytes(); - let mix = keccak_256(KEYGEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let rng = &mut rand_chacha::ChaChaRng::from_seed(mix); - let tag = udigest::Tag::::new_structured(_keygen::Tag::Indexed { - party_index: i, - sid: &eid_bytes[..], - }); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let (_r, h) = schnorr_pok::prover_commits_ephemeral_secret::(rng); - - let f = Polynomial::>::sample(rng, usize::from(t) - 1); - let F = &f * &Point::generator(); - let my_decommitment: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid, - F, - sch_commit: h, - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - }; - let hash_commit = tag.digest(&my_decommitment); - - let my_commitment: keygen::msg::threshold::MsgRound1 = - keygen::msg::threshold::MsgRound1 { commitment: hash_commit }; - - let round1_signed_msg = sign_round_msg(offender, i, &my_commitment); - let round2a_signed_msg = sign_round_msg(offender, i, &my_decommitment); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::Keygen { - participants: participants.iter().map(|p| p.0).collect(), - t, - reason: KeygenAborted::InvalidDecommitment { - round1: round1_signed_msg, - round2a: round2a_signed_msg, - }, - }, - )), - }; - - assert_err!( - DKG::verify_misbehavior(submission), - crate::Error::::ValidDecommitment - ); - }); -} - -#[test] -fn submit_keygen_invalid_decommitment_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let t = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let job_id_bytes = job_id.to_be_bytes(); - let mix = keccak_256(KEYGEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let rng = &mut rand_chacha::ChaChaRng::from_seed(mix); - let tag = udigest::Tag::::new_structured(_keygen::Tag::Indexed { - party_index: i, - sid: &eid_bytes[..], - }); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let (_r, h) = schnorr_pok::prover_commits_ephemeral_secret::(rng); - - let f = Polynomial::>::sample(rng, usize::from(t) - 1); - let F = &f * &Point::generator(); - let my_decommitment: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid: rid.clone(), - F: F.clone(), - sch_commit: h.clone(), - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - }; - let hash_commit = tag.digest(my_decommitment); - - let my_commitment: keygen::msg::threshold::MsgRound1 = - keygen::msg::threshold::MsgRound1 { commitment: hash_commit }; - - // invalid decommitment - let my_decommitment2: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid, - F, - sch_commit: h, - decommit: Default::default(), - }; - - let round1_signed_msg = sign_round_msg(offender, i, &my_commitment); - let round2a_signed_msg = sign_round_msg(offender, i, &my_decommitment2); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::Keygen { - participants: participants.iter().map(|p| p.0).collect(), - t, - reason: KeygenAborted::InvalidDecommitment { - round1: round1_signed_msg, - round2a: round2a_signed_msg, - }, - }, - )), - }; - - assert_ok!(DKG::verify_misbehavior(submission)); - }); -} - -#[test] -fn submit_keygen_decommitment_data_size_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let t = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let rng = &mut rand_chacha::ChaChaRng::from_seed([42; 32]); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let (_r, h) = schnorr_pok::prover_commits_ephemeral_secret::(rng); - - let f = Polynomial::>::sample(rng, usize::from(t) - 1); - let F = &f * &Point::generator(); - let my_decommitment: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid, - F, - sch_commit: h, - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - }; - let round2a_signed_msg = sign_round_msg(offender, i, &my_decommitment); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::Keygen { - participants: participants.iter().map(|p| p.0).collect(), - t, - reason: KeygenAborted::InvalidDataSize { round2a: round2a_signed_msg }, - }, - )), - }; - - assert_err!(DKG::verify_misbehavior(submission), Error::::ValidDataSize); - }); -} - -#[test] -fn submit_keygen_invalid_decommitment_data_size_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let t = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let rng = &mut rand_chacha::ChaChaRng::from_seed([42; 32]); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let (_r, h) = schnorr_pok::prover_commits_ephemeral_secret::(rng); - - let f = Polynomial::>::sample(rng, usize::from(t) - 1); - let F = &f * &Point::generator(); - let my_decommitment: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid, - F, - sch_commit: h, - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - }; - let round2a_signed_msg = sign_round_msg(offender, i, &my_decommitment); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::Keygen { - participants: participants.iter().map(|p| p.0).collect(), - t: t + 1, - reason: KeygenAborted::InvalidDataSize { round2a: round2a_signed_msg }, - }, - )), - }; - - assert_ok!(DKG::verify_misbehavior(submission)); - }); -} - -#[test] -fn submit_keygen_feldman_verification_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let t = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let rng = &mut rand_chacha::ChaChaRng::from_seed([42; 32]); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let (_r, h) = schnorr_pok::prover_commits_ephemeral_secret::(rng); - - let f = Polynomial::>::sample(rng, usize::from(t) - 1); - let F = &f * &Point::generator(); - let my_decommitment: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid, - F, - sch_commit: h, - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - }; - - let my_sigma: keygen::msg::threshold::MsgRound2Uni = - keygen::msg::threshold::MsgRound2Uni { - sigma: { - let x = Scalar::from(i + 1); - f.value(&x) - }, - }; - - let round2a_signed_msg = sign_round_msg(offender, i, &my_decommitment); - let round2b_signed_msg = sign_round_msg(offender, i, &my_sigma); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::Keygen { - participants: participants.iter().map(|p| p.0).collect(), - t, - reason: KeygenAborted::FeldmanVerificationFailed { - round2a: round2a_signed_msg, - round2b: round2b_signed_msg, - }, - }, - )), - }; - - assert_err!( - DKG::verify_misbehavior(submission), - crate::Error::::ValidFeldmanVerification - ); - }); -} - -#[test] -fn submit_keygen_invalid_feldman_verification_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let t = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let rng = &mut rand_chacha::ChaChaRng::from_seed([42; 32]); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let (_r, h) = schnorr_pok::prover_commits_ephemeral_secret::(rng); - - let f = Polynomial::>::sample(rng, usize::from(t) - 1); - let F = &f * &Point::generator(); - let my_decommitment: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid, - F, - sch_commit: h, - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - }; - - let my_sigma: keygen::msg::threshold::MsgRound2Uni = - keygen::msg::threshold::MsgRound2Uni { - sigma: { - // invalid value - let x = Scalar::from(i + 1 + 5); - f.value(&x) - }, - }; - - let round2a_signed_msg = sign_round_msg(offender, i, &my_decommitment); - let round2b_signed_msg = sign_round_msg(offender, i, &my_sigma); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::Keygen { - participants: participants.iter().map(|p| p.0).collect(), - t, - reason: KeygenAborted::FeldmanVerificationFailed { - round2a: round2a_signed_msg, - round2b: round2b_signed_msg, - }, - }, - )), - }; - - assert_ok!(DKG::verify_misbehavior(submission)); - }); -} - -#[test] -fn submit_keygen_schnorr_proof_verification_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let n = participants.len() as u16; - let t = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let job_id_bytes = job_id.to_be_bytes(); - let mix = keccak_256(KEYGEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let rng = &mut rand_chacha::ChaChaRng::from_seed(mix); - - let fp = (0..n) - .map(|_| Polynomial::>::sample(rng, usize::from(t) - 1)) - .collect::>(); - let round2a_msgs = (0..n) - .map(|j| { - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - let (r, h) = schnorr_pok::prover_commits_ephemeral_secret::(rng); - let f = &fp[usize::from(j)]; - let F = f * &Point::generator(); - let my_decommitment: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid, - F, - sch_commit: h, - decommit: { - let mut nonce = - ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - }; - (r, my_decommitment) - }) - .collect::>(); - - let sigmas = (0..n) - .map(|j| { - let f = &fp[usize::from(j)]; - f.value(&Scalar::from(i + 1)) - }) - .collect::>>(); - debug_assert_eq!(sigmas.len(), usize::from(n)); - - let (r, my_decommitment) = &round2a_msgs[usize::from(i)]; - - let rid = round2a_msgs - .iter() - .map(|(_, d)| &d.rid) - .fold(::Rid::default(), xor_array); - - let polynomial_sum = - round2a_msgs.iter().map(|(_, d)| &d.F).sum::>>(); - - let ys = (0..n) - .map(|l| polynomial_sum.value(&Scalar::from(l + 1))) - .collect::>>(); - - let mut sigma: Scalar = sigmas.iter().sum(); - let sigma = SecretScalar::new(&mut sigma); - debug_assert_eq!(Point::generator() * &sigma, ys[usize::from(i)]); - - let challenge = { - let hash = |d: DefaultDigest| { - d.chain_update(&eid_bytes) - .chain_update(i.to_be_bytes()) - .chain_update(rid.as_ref()) - .chain_update(ys[usize::from(i)].to_bytes(true)) // y_i - .chain_update(my_decommitment.sch_commit.0.to_bytes(false)) // h - .finalize() - }; - let mut rng = paillier_zk::rng::HashRng::new(hash); - Scalar::random(&mut rng) - }; - let challenge = schnorr_pok::Challenge { nonce: challenge }; - - let z = schnorr_pok::prove(r, &challenge, sigma); - - let round3_msg = keygen::msg::threshold::MsgRound3 { sch_proof: z }; - let round3_signed_msg = sign_round_msg(offender, i, &round3_msg); - - let signed_round2a_msgs = (0..n) - .zip(participants.iter()) - .zip(round2a_msgs.iter()) - .map(|((i, key), (_, msg))| sign_round_msg(*key, i, msg)) - .collect::>(); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::Keygen { - participants: participants.iter().map(|p| p.0).collect(), - t, - reason: KeygenAborted::InvalidSchnorrProof { - round2a: signed_round2a_msgs, - round3: round3_signed_msg, - }, - }, - )), - }; - - assert_err!( - DKG::verify_misbehavior(submission), - crate::Error::::ValidSchnorrProof - ); - }); -} - -#[test] -fn submit_keygen_invalid_schnorr_proof_verification_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let n = participants.len() as u16; - let t = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let job_id_bytes = job_id.to_be_bytes(); - let mix = keccak_256(KEYGEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let rng = &mut rand_chacha::ChaChaRng::from_seed(mix); - - let fp = (0..n) - .map(|_| Polynomial::>::sample(rng, usize::from(t) - 1)) - .collect::>(); - let round2a_msgs = (0..n) - .map(|j| { - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - let (r, h) = schnorr_pok::prover_commits_ephemeral_secret::(rng); - let f = &fp[usize::from(j)]; - let F = f * &Point::generator(); - let my_decommitment: keygen::msg::threshold::MsgRound2Broad<_, SecurityLevel128> = - keygen::msg::threshold::MsgRound2Broad { - rid, - F, - sch_commit: h, - decommit: { - let mut nonce = - ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - }; - (r, my_decommitment) - }) - .collect::>(); - - let sigmas = (0..n) - .map(|j| { - let f = &fp[usize::from(j)]; - f.value(&Scalar::from(i + 1)) - }) - .collect::>>(); - debug_assert_eq!(sigmas.len(), usize::from(n)); - - let (r, my_decommitment) = &round2a_msgs[usize::from(i)]; - - let rid = round2a_msgs - .iter() - .map(|(_, d)| &d.rid) - .fold(::Rid::default(), xor_array); - - let polynomial_sum = - round2a_msgs.iter().map(|(_, d)| &d.F).sum::>>(); - - let ys = (0..n) - .map(|l| polynomial_sum.value(&Scalar::from(l + 1))) - .collect::>>(); - - let mut sigma: Scalar = sigmas.iter().sum(); - let sigma = SecretScalar::new(&mut sigma); - debug_assert_eq!(Point::generator() * &sigma, ys[usize::from(i)]); - - let challenge = { - let hash = |d: DefaultDigest| { - d.chain_update(&eid_bytes) - // commented intuentially to make the proof invalid - // .chain_update(i.to_be_bytes()) - .chain_update(rid.as_ref()) - .chain_update(ys[usize::from(i)].to_bytes(true)) // y_i - .chain_update(my_decommitment.sch_commit.0.to_bytes(false)) // h - .finalize() - }; - let mut rng = paillier_zk::rng::HashRng::new(hash); - Scalar::random(&mut rng) - }; - let challenge = schnorr_pok::Challenge { nonce: challenge }; - - let z = schnorr_pok::prove(r, &challenge, sigma); - - let round3_msg = keygen::msg::threshold::MsgRound3 { sch_proof: z }; - let round3_signed_msg = sign_round_msg(offender, i, &round3_msg); - - let signed_round2a_msgs = (0..n) - .zip(participants.iter()) - .zip(round2a_msgs.iter()) - .map(|((i, key), (_, msg))| sign_round_msg(*key, i, msg)) - .collect::>(); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::Keygen { - participants: participants.iter().map(|p| p.0).collect(), - t, - reason: KeygenAborted::InvalidSchnorrProof { - round2a: signed_round2a_msgs, - round3: round3_signed_msg, - }, - }, - )), - }; - - assert_ok!(DKG::verify_misbehavior(submission)); - }); -} - -// *** Key Refresh *** - -#[test] -fn submit_key_refresh_decommitment_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let threshold = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let job_id_bytes = job_id.to_be_bytes(); - let mix = keccak_256(AUX_GEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let rng = &mut rand_chacha::ChaChaRng::from_seed(mix); - let tag = udigest::Tag::::new_structured(_aux_only::Tag::Indexed { - party_index: i, - sid: &eid_bytes[..], - }); - - let mut bigint = [0u8; 32]; - rng.fill_bytes(&mut bigint); - - let N = paillier_zk::Integer::from_digits(&bigint, paillier_zk::rug::integer::Order::Msf); - rng.fill_bytes(&mut bigint); - let s = paillier_zk::Integer::from_digits(&bigint, paillier_zk::rug::integer::Order::Msf); - rng.fill_bytes(&mut bigint); - let t = paillier_zk::Integer::from_digits(&bigint, paillier_zk::rug::integer::Order::Msf); - - #[serde_with::serde_as] - #[derive(Clone, serde::Serialize, serde::Deserialize)] - pub struct Proof { - #[serde_as(as = "[_; M]")] - pub commitment: [paillier_zk::Integer; M], - #[serde_as(as = "[_; M]")] - pub zs: [paillier_zk::Integer; M], - } - - let mock_proof: Proof<{ ::M }> = Proof { - commitment: [paillier_zk::Integer::ZERO; ::M], - zs: [paillier_zk::Integer::ZERO; ::M], - }; - - let mock_proof_bytes = postcard::to_allocvec(&mock_proof).unwrap(); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let my_decommitment: aux_only::MsgRound2 = aux_only::MsgRound2 { - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - N, - s, - t, - params_proof: postcard::from_bytes(&mock_proof_bytes).unwrap(), - rho_bytes: { - let mut rho = ::Rid::default(); - rng.fill_bytes(rho.as_mut()); - rho - }, - }; - let hash_commit = tag.digest(&my_decommitment); - - let my_commitment: aux_only::MsgRound1 = - aux_only::MsgRound1 { commitment: hash_commit }; - - let round1_signed_msg = sign_round_msg(offender, i, &my_commitment); - let round2_signed_msg = sign_round_msg(offender, i, &my_decommitment); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::KeyRefresh { - participants: participants.iter().map(|p| p.0).collect(), - t: threshold, - reason: KeyRefreshAborted::InvalidDecommitment { - round1: round1_signed_msg, - round2: round2_signed_msg, - }, - }, - )), - }; - - assert_err!( - DKG::verify_misbehavior(submission), - crate::Error::::ValidDecommitment - ); - }); -} - -#[test] -fn submit_key_refresh_invalid_decommitment_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let threshold = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let mix = keccak_256(AUX_GEN_EID); - let rng = &mut rand_chacha::ChaChaRng::from_seed(mix); - - let N = paillier_zk::Integer::ZERO; - let s = paillier_zk::Integer::ZERO; - let t = paillier_zk::Integer::ZERO; - - #[serde_with::serde_as] - #[derive(Clone, serde::Serialize, serde::Deserialize)] - pub struct Proof { - #[serde_as(as = "[_; M]")] - pub commitment: [paillier_zk::Integer; M], - #[serde_as(as = "[_; M]")] - pub zs: [paillier_zk::Integer; M], - } - - let mock_proof: Proof<{ ::M }> = Proof { - commitment: [paillier_zk::Integer::ZERO; ::M], - zs: [paillier_zk::Integer::ZERO; ::M], - }; - - let mock_proof_bytes = postcard::to_allocvec(&mock_proof).unwrap(); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let my_decommitment: aux_only::MsgRound2 = aux_only::MsgRound2 { - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - N, - s, - t, - params_proof: postcard::from_bytes(&mock_proof_bytes).unwrap(), - rho_bytes: { - let mut rho = ::Rid::default(); - rng.fill_bytes(rho.as_mut()); - rho - }, - }; - let hash_commit = Default::default(); - - let my_commitment: aux_only::MsgRound1 = - aux_only::MsgRound1 { commitment: hash_commit }; - - let round1_signed_msg = sign_round_msg(offender, i, &my_commitment); - let round2_signed_msg = sign_round_msg(offender, i, &my_decommitment); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::KeyRefresh { - participants: participants.iter().map(|p| p.0).collect(), - t: threshold, - reason: KeyRefreshAborted::InvalidDecommitment { - round1: round1_signed_msg, - round2: round2_signed_msg, - }, - }, - )), - }; - - assert_ok!(DKG::verify_misbehavior(submission)); - }); -} - -#[test] -fn submit_key_refresh_ring_pedersen_parameters_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let threshold = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let job_id_bytes = job_id.to_be_bytes(); - let mix = keccak_256(AUX_GEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let rng = &mut rand_chacha::ChaChaRng::from_seed(mix); - - let parties_shared_state = DefaultDigest::new_with_prefix(DefaultDigest::digest(eid_bytes)); - let (p, q) = PregeneratedPrimes::::generate(rng).split(); - let N = (&p * &q).complete(); - let phi_N = (&p - 1u8).complete() * (&q - 1u8).complete(); - - let r = Integer::gen_invertible(&N, rng); - let lambda = phi_N.random_below_ref(&mut utils::external_rand(rng)).into(); - let t = r.square().modulo(&N); - let s = t.pow_mod_ref(&lambda, &N).unwrap().into(); - - let hat_psi = π_prm::prove::<{ ::M }, _, _>( - parties_shared_state.clone().chain_update(i.to_be_bytes()), - rng, - π_prm::Data { N: &N, s: &s, t: &t }, - &phi_N, - &lambda, - ) - .unwrap(); - - let params_proof = postcard::from_bytes(&postcard::to_allocvec(&hat_psi).unwrap()).unwrap(); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let my_decommitment: aux_only::MsgRound2 = aux_only::MsgRound2 { - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - N, - s, - t, - params_proof, - rho_bytes: { - let mut rho = ::Rid::default(); - rng.fill_bytes(rho.as_mut()); - rho - }, - }; - let round2_signed_msg = sign_round_msg(offender, i, &my_decommitment); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::KeyRefresh { - participants: participants.iter().map(|p| p.0).collect(), - t: threshold, - reason: KeyRefreshAborted::InvalidRingPedersenParameters { - round2: round2_signed_msg, - }, - }, - )), - }; - - assert_err!( - DKG::verify_misbehavior(submission), - crate::Error::::ValidRingPedersenParameters - ); - }); -} - -#[test] -fn submit_key_refresh_invalid_ring_pedersen_parameters_should_work() { - new_test_ext().execute_with(|| { - let i = 2_u16; - let participants = (0..5).map(|_| pub_key()).collect::>(); - let threshold = 3_u16; - let offender = participants[usize::from(i)]; - let job_id = 1_u64; - let job_id_bytes = job_id.to_be_bytes(); - let mix = keccak_256(AUX_GEN_EID); - let eid_bytes = [&job_id_bytes[..], &mix[..]].concat(); - let rng = &mut rand_chacha::ChaChaRng::from_seed(mix); - - let parties_shared_state = DefaultDigest::new_with_prefix(DefaultDigest::digest(eid_bytes)); - let p = Integer::from(11u8); - let q = Integer::from(13u8); - let N = (&p * &q).complete(); - let phi_N = (&p - 1u8).complete() * (&q - 1u8).complete(); - - let r = Integer::gen_invertible(&N, rng); - let lambda = phi_N.random_below_ref(&mut utils::external_rand(rng)).into(); - let t = r.square().modulo(&N); - let s = t.pow_mod_ref(&lambda, &N).unwrap().into(); - - let hat_psi = π_prm::prove::<{ ::M }, _, _>( - parties_shared_state.clone().chain_update(i.to_be_bytes()), - rng, - π_prm::Data { N: &N, s: &s, t: &t }, - &phi_N, - &lambda, - ) - .unwrap(); - - let params_proof = postcard::from_bytes(&postcard::to_allocvec(&hat_psi).unwrap()).unwrap(); - - let mut rid = ::Rid::default(); - rng.fill_bytes(rid.as_mut()); - - let my_decommitment: aux_only::MsgRound2 = aux_only::MsgRound2 { - decommit: { - let mut nonce = ::Rid::default(); - rng.fill_bytes(nonce.as_mut()); - nonce - }, - N, - s, - t, - params_proof, - rho_bytes: { - let mut rho = ::Rid::default(); - rng.fill_bytes(rho.as_mut()); - rho - }, - }; - let round2_signed_msg = sign_round_msg(offender, i, &my_decommitment); - - let submission = MisbehaviorSubmission { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - offender: offender.0, - job_id, - justification: MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - DfnsCGGMP21Justification::KeyRefresh { - participants: participants.iter().map(|p| p.0).collect(), - t: threshold, - reason: KeyRefreshAborted::InvalidRingPedersenParameters { - round2: round2_signed_msg, - }, - }, - )), - }; - - assert_ok!(DKG::verify_misbehavior(submission)); - }); -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/mod.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/mod.rs deleted file mode 100644 index 07d588cd9..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod no_small_factor; -pub mod paillier_blum_modulus; -pub mod ring_pedersen_parameters; diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/no_small_factor.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/no_small_factor.rs deleted file mode 100644 index ee6334755..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/no_small_factor.rs +++ /dev/null @@ -1,298 +0,0 @@ -#![allow(unused)] -//! ZK-proof for factoring of a RSA modulus. Called Пfac or Rfac in the CGGMP21 -//! paper. -//! -//! ## Description -//! -//! A party P has a modulus `N = pq`. P wants to prove to a verifier V that p -//! and q are sufficiently large without disclosing p or q, with p and q each no -//! larger than `sqrt(N) * 2^l`, or equivalently no smaller than `sqrt(N) / -//! 2^l` -use crate::misbehavior::dfns_cggmp21::{integer, Integer}; - -use malachite_base::num::arithmetic::traits::{Mod, ModPow, UnsignedAbs}; -use serde::{Deserialize, Serialize}; -use sp_core::RuntimeDebug; - -use super::paillier_blum_modulus::random_naturals_less_than; - -/// Security parameters for proof. Choosing the values is a tradeoff between -/// speed and chance of rejecting a valid proof or accepting an invalid proof -#[derive(RuntimeDebug, Clone, Serialize, Deserialize)] -pub struct SecurityParams { - /// l in paper, security parameter for bit size of plaintext: it needs to - /// differ from sqrt(n) not more than by 2^l - pub l: usize, - /// Epsilon in paper, slackness parameter - pub epsilon: usize, - /// q in paper. Security parameter for challenge - #[serde(with = "integer::serde")] - pub q: Integer, -} - -/// Public data that both parties know -#[derive(Debug, Clone, Copy)] -pub struct Data<'a> { - /// N0 - rsa modulus - pub n: &'a Integer, - /// A number close to square root of n - pub n_root: &'a Integer, -} - -/// Private data of prover -#[derive(Debug, Clone, Copy)] -pub struct PrivateData<'a> { - pub p: &'a Integer, - pub q: &'a Integer, -} - -/// Prover's data accompanying the commitment. Kept as state between rounds in -/// the interactive protocol. -#[derive(RuntimeDebug, Clone, Serialize, Deserialize)] -pub struct PrivateCommitment { - #[serde(with = "integer::serde")] - pub alpha: Integer, - #[serde(with = "integer::serde")] - pub beta: Integer, - #[serde(with = "integer::serde")] - pub mu: Integer, - #[serde(with = "integer::serde")] - pub nu: Integer, - #[serde(with = "integer::serde")] - pub r: Integer, - #[serde(with = "integer::serde")] - pub x: Integer, - #[serde(with = "integer::serde")] - pub y: Integer, -} - -/// Prover's first message, obtained by [`interactive::commit`] -#[derive(RuntimeDebug, Clone, Serialize, Deserialize)] -pub struct Commitment { - #[serde(with = "integer::serde")] - pub p: Integer, - #[serde(with = "integer::serde")] - pub q: Integer, - #[serde(with = "integer::serde")] - pub a: Integer, - #[serde(with = "integer::serde")] - pub b: Integer, - #[serde(with = "integer::serde")] - pub t: Integer, - #[serde(with = "integer::serde")] - pub sigma: Integer, -} - -/// Verifier's challenge to prover. Can be obtained deterministically by -/// [`non_interactive::challenge`] or randomly by [`interactive::challenge`] -pub type Challenge = Integer; - -/// The ZK proof, computed by [`interactive::prove`] -#[derive(RuntimeDebug, Clone, Serialize, Deserialize)] -pub struct Proof { - #[serde(with = "integer::serde")] - pub z1: Integer, - #[serde(with = "integer::serde")] - pub z2: Integer, - #[serde(with = "integer::serde")] - pub w1: Integer, - #[serde(with = "integer::serde")] - pub w2: Integer, - #[serde(with = "integer::serde")] - pub v: Integer, -} - -/// Witness that proof is invalid -#[derive(Debug)] -pub struct InvalidProof; - -fn from_rng_pm(range: &Integer, rng: &mut R) -> Integer { - let range_twice = range.clone() << 1u32; - let x = random_naturals_less_than(rng, range_twice.clone().unsigned_abs()) - .next() - .unwrap(); - Integer::from(x) - range_twice -} - -fn is_in_pm(x: &Integer, range: &Integer) -> bool { - let minus_range = -range.clone(); - minus_range <= *x && x <= range -} - -/// Returns `Err(err)` if `assertion` is false -pub fn fail_if(err: E, assertion: bool) -> Result<(), E> { - if assertion { - Ok(()) - } else { - Err(err) - } -} - -/// Returns `Err(err)` if `lhs != rhs` -pub fn fail_if_ne(err: E, lhs: T, rhs: T) -> Result<(), E> { - if lhs == rhs { - Ok(()) - } else { - Err(err) - } -} - -fn combine(x: &Integer, l: &Integer, le: &Integer, r: &Integer, re: &Integer) -> Integer { - let l_to_le: Integer = - l.unsigned_abs_ref().mod_pow(le.unsigned_abs_ref(), x.unsigned_abs()).into(); - let r_to_re: Integer = - r.unsigned_abs_ref().mod_pow(re.unsigned_abs_ref(), x.unsigned_abs()).into(); - (l_to_le * r_to_re).mod_op(x) -} - -/// Auxiliary data known to both prover and verifier -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Aux { - /// ring-pedersen parameter - #[serde(with = "integer::serde")] - pub s: Integer, - /// ring-pedersen parameter - #[serde(with = "integer::serde")] - pub t: Integer, - /// N^ in paper - #[serde(with = "integer::serde")] - pub rsa_modulo: Integer, -} - -impl Aux { - /// Returns `s^x t^y mod rsa_modulo` - pub fn combine(&self, x: &Integer, y: &Integer) -> Integer { - combine(&self.rsa_modulo, &self.s, x, &self.t, y) - } - - /// Returns `x^e mod rsa_modulo` - pub fn pow_mod(&self, x: &Integer, e: &Integer) -> Integer { - x.unsigned_abs_ref() - .mod_pow(e.unsigned_abs_ref(), self.rsa_modulo.clone().unsigned_abs()) - .into() - } -} - -/// Interactive version of the proof -pub mod interactive { - use malachite_base::num::arithmetic::traits::Mod; - use rand_core::RngCore; - - use super::{ - combine, fail_if, fail_if_ne, Aux, Challenge, Commitment, Data, InvalidProof, Proof, - SecurityParams, - }; - - use crate::misbehavior::dfns_cggmp21::Integer; - - /// Generate random challenge - /// - /// `security` parameter is used to generate challenge in correct range - pub fn challenge(security: &SecurityParams, rng: &mut R) -> Challenge { - super::from_rng_pm(&security.q, rng) - } - - /// Verify the proof - pub fn verify( - aux: &Aux, - data: Data, - commitment: &Commitment, - security: &SecurityParams, - challenge: &Challenge, - proof: &Proof, - ) -> Result<(), InvalidProof> { - // check 1 - { - let lhs = aux.combine(&proof.z1, &proof.w1); - let p_to_e = aux.pow_mod(&commitment.p, challenge); - let rhs = (&commitment.a * p_to_e).mod_op(&aux.rsa_modulo); - fail_if_ne(InvalidProof, lhs, rhs)?; - } - // check 2 - { - let lhs = aux.combine(&proof.z2, &proof.w2); - let q_to_e = aux.pow_mod(&commitment.q, challenge); - let rhs = (&commitment.b * q_to_e).mod_op(&aux.rsa_modulo); - fail_if_ne(InvalidProof, lhs, rhs)?; - } - // check 3 - { - let r = aux.combine(data.n, &commitment.sigma); - let q_to_z1 = aux.pow_mod(&commitment.q, &proof.z1); - let t_to_v = aux.pow_mod(&aux.t, &proof.v); - let lhs = (q_to_z1 * t_to_v).mod_op(&aux.rsa_modulo); - let rhs = combine(&aux.rsa_modulo, &commitment.t, &Integer::from(1), &r, challenge); - fail_if_ne(InvalidProof, lhs, rhs)?; - } - let range = (Integer::from(1) << (security.l + security.epsilon)) * data.n_root; - // range check for z1 - fail_if(InvalidProof, super::is_in_pm(&proof.z1, &range))?; - // range check for z2 - fail_if(InvalidProof, super::is_in_pm(&proof.z2, &range))?; - - Ok(()) - } -} - -/// Non-interactive version of the proof -pub mod non_interactive { - use digest::{typenum::U32, Digest}; - use sp_core::RuntimeDebug; - - use super::InvalidProof; - pub use super::{Aux, Challenge, Data, PrivateData, SecurityParams}; - use crate::misbehavior::dfns_cggmp21::{hashing_rng::HashRng, integer::RugInteger}; - - /// The ZK proof, computed by [`prove`] - #[derive(RuntimeDebug, Clone, serde::Serialize, serde::Deserialize)] - pub struct Proof { - commitment: super::Commitment, - proof: super::Proof, - } - - /// Deterministically compute challenge based on prior known values in protocol - pub fn challenge( - shared_state: D, - aux: &Aux, - data: Data, - commitment: &super::Commitment, - security: &SecurityParams, - ) -> Challenge - where - D: Digest, - { - let shared_state = shared_state.finalize(); - let hash = |d: D| { - d.chain_update(&shared_state) - .chain_update(RugInteger::from(&aux.s).to_vec()) - .chain_update(RugInteger::from(&aux.t).to_vec()) - .chain_update(RugInteger::from(&aux.rsa_modulo).to_vec()) - .chain_update(RugInteger::from(data.n).to_vec()) - .chain_update(RugInteger::from(data.n_root).to_vec()) - .chain_update(RugInteger::from(&commitment.p).to_vec()) - .chain_update(RugInteger::from(&commitment.q).to_vec()) - .chain_update(RugInteger::from(&commitment.a).to_vec()) - .chain_update(RugInteger::from(&commitment.b).to_vec()) - .chain_update(RugInteger::from(&commitment.t).to_vec()) - .chain_update(RugInteger::from(&commitment.sigma).to_vec()) - .finalize() - }; - let mut rng = HashRng::new(hash); - super::interactive::challenge(security, &mut rng) - } - - /// Verify the proof, deriving challenge independently from same data - pub fn verify( - shared_state: D, - aux: &Aux, - data: Data, - security: &SecurityParams, - proof: &Proof, - ) -> Result<(), InvalidProof> - where - D: Digest, - { - let challenge = challenge(shared_state, aux, data, &proof.commitment, security); - super::interactive::verify(aux, data, &proof.commitment, security, &challenge, &proof.proof) - } -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/paillier_blum_modulus.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/paillier_blum_modulus.rs deleted file mode 100644 index db424f904..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/paillier_blum_modulus.rs +++ /dev/null @@ -1,256 +0,0 @@ -//! ZK-proof of Paillier-Blum modulus. Called Пmod or Rmod in the CGGMP21 paper. -//! -//! ## Description -//! A party P has a modulus `N = pq`, with p and q being Blum primes, and -//! `gcd(N, phi(N)) = 1`. P wants to prove that those equalities about N hold, -//! without disclosing p and q. - -#[cfg(not(feature = "std"))] -use ::alloc::vec::Vec; - -use crate::misbehavior::dfns_cggmp21::{ - hashing_rng::HashRng, - integer::{self, RugInteger}, - Integer, M, -}; - -use digest::Digest; -use malachite_base::num::{ - arithmetic::traits::{ - CeilingLogBase2, Mod, ModPow, ModPowerOf2Assign, Parity, ShrRound, UnsignedAbs, - }, - basic::{integers::PrimitiveInt, traits::Zero}, - conversion::traits::ExactFrom, -}; -use malachite_nz::{natural::Natural, platform::Limb}; -use rand_core::RngCore; -use serde::{Deserialize, Serialize}; -use sp_core::RuntimeDebug; - -/// Public data that both parties know: the Paillier-Blum modulus -#[derive(RuntimeDebug, Clone, serde::Serialize, serde::Deserialize)] -pub struct Data { - /// N - #[serde(with = "integer::serde")] - pub n: Integer, -} - -/// Prover's first message, obtained by [`interactive::commit`] -#[derive(RuntimeDebug, Clone, serde::Serialize, serde::Deserialize)] -pub struct Commitment { - #[serde(with = "integer::serde")] - pub w: Integer, -} - -/// A part of proof. Having enough of those guarantees security -#[derive(RuntimeDebug, Clone, Serialize, Deserialize)] -pub struct ProofPoint { - #[serde(with = "integer::serde")] - pub x: Integer, - pub a: bool, - pub b: bool, - #[serde(with = "integer::serde")] - pub z: Integer, -} - -/// The ZK proof. -/// Consists of M proofs for each challenge -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Proof { - #[serde(with = "serde_with::As::<[serde_with::Same; M]>")] - pub points: [ProofPoint; M], -} - -/// Verify that `n` is prime. -pub fn verify_n_is_prime(data: &Data) -> bool { - // N should not be prime. - // TODO: check if this is correct. - todo!("check if N = {} is prime or not.", data.n) -} - -pub fn verify_n_is_even(data: &Data) -> bool { - data.n.even() -} - -pub fn verify_incorrect_nth_root( - i: usize, - shared_state: D, - data: &Data, - proof: &Proof, - commitment: &Commitment, -) -> bool -where - D: Digest, -{ - // bounds check - if i >= M { - return false; - } - let ys = challenge_up_to(i, shared_state, data, commitment); - let n = data.n.unsigned_abs_ref(); - let point = &proof.points[i]; - let y = &ys[i]; - point.z.unsigned_abs_ref().mod_pow(n, n).ne(y) -} - -pub fn verify_incorrect_fourth_root( - i: usize, - shared_state: D, - data: &Data, - proof: &Proof, - commitment: &Commitment, -) -> bool -where - D: Digest, -{ - // bounds check - if i >= M { - return false; - } - let ys = challenge_up_to(i, shared_state, data, commitment); - let n = data.n.unsigned_abs_ref(); - let point = &proof.points[i]; - let y = ys[i].clone(); - let y = if point.a { &data.n - y } else { y }; - let y = if point.b { (y * &commitment.w).mod_op(&data.n) } else { y }; - point.x.unsigned_abs_ref().mod_pow(&Natural::from(4u32), n).ne(&y) -} - -/// Deterministically compute challenge based on prior known values in protocol -pub fn challenge_up_to( - i: usize, - shared_state: D, - Data { ref n }: &Data, - commitment: &Commitment, -) -> Vec -where - D: Digest, -{ - let shared_state = shared_state.finalize(); - let hash = |d: D| { - d.chain_update(&shared_state) - .chain_update(RugInteger::from(n).to_vec()) - .chain_update(RugInteger::from(&commitment.w).to_vec()) - .finalize() - }; - let mut rng = HashRng::new(hash); - random_naturals_less_than(&mut rng, n.unsigned_abs()) - .take(i) - .map(Integer::from) - .collect::>() -} - -/// Uniformly generates random [`Natural`]s less than a positive limit. -#[derive(Debug)] -pub struct RandomNaturalsLessThan<'a, R: RngCore> { - bits: u64, - limit: Natural, - rng: &'a mut R, -} - -impl<'a, R: RngCore> Iterator for RandomNaturalsLessThan<'a, R> { - type Item = Natural; - - fn next(&mut self) -> Option { - loop { - let x = get_random_natural_with_up_to_bits(&mut self.rng, self.bits); - if x < self.limit { - return Some(x); - } - } - } -} - -/// Uniformly generates random [`Natural`]s less than a positive `limit`. -/// -/// $$ -/// P(x) = \\begin{cases} -/// \frac{1}{\\ell} & \text{if} \\quad x < \\ell, \\\\ -/// 0 & \\text{otherwise}. -/// \\end{cases} -/// $$ -/// where $\ell$ is `limit`. -/// -/// The output length is infinite. -/// -/// # Expected complexity per iteration -/// $T(n) = O(n)$ -/// -/// $M(n) = O(n)$ -/// -/// where $T$ is time, $M$ is additional memory, and $n$ is `limit.significant_bits()`. -/// -/// # Panics -/// Panics if `limit` is 0. -pub fn random_naturals_less_than( - rng: &mut R, - limit: Natural, -) -> RandomNaturalsLessThan<'_, R> { - assert_ne!(limit, 0); - RandomNaturalsLessThan { bits: limit.ceiling_log_base_2(), limit, rng } -} - -/// Generates a random [`Natural`] with a given maximum bit length. -/// -/// The [`Natural`] is chosen uniformly from $[0, 2^b)$; [`Natural`]s with bit lengths smaller than -/// the maximum may also be generated. -/// -/// $$ -/// P(n) = \\begin{cases} -/// \frac{1}{2^b} & \text{if} \\quad 0 \\leq n < 2^b, \\\\ -/// 0 & \\text{otherwise}. -/// \\end{cases} -/// $$ -/// -/// # Expected complexity -/// $T(n) = O(n)$ -/// -/// $M(n) = O(n)$ -/// -/// where $T$ is time, $M$ is additional memory, and `n` is `bits`. -pub fn get_random_natural_with_up_to_bits(rng: &mut R, bits: u64) -> Natural { - if bits == 0 { - return Natural::ZERO; - } - let l = usize::exact_from( - bits.shr_round(Limb::LOG_WIDTH, malachite_base::rounding_modes::RoundingMode::Ceiling) - .0, - ); - let mut xs = Vec::with_capacity(l); - - for _ in 0..l { - xs.push(rng.next_u32()); - } - limbs_slice_mod_power_of_2_in_place(&mut xs, bits); - Natural::from_owned_limbs_asc(xs) -} - -// Interpreting a slice of `Limb`s as the limbs (in ascending order) of a `Natural`, writes the -// limbs of the `Natural` mod two raised to `pow` to the input slice. Equivalently, retains only the -// least-significant `pow` bits. If the upper limbs of the input slice are no longer needed, they -// are set to zero. -// -// # Worst-case complexity -// Constant time and additional memory. -// -// This is equivalent to `mpz_tdiv_r_2exp` from `mpz/tdiv_r_2exp.c`, GMP 6.2.1, where `in` is -// non-negative, `res == in`, and instead of possibly being truncated, the high limbs of `res` are -// possibly filled with zeros. -fn limbs_slice_mod_power_of_2_in_place(xs: &mut [Limb], pow: u64) { - if pow == 0 { - malachite_base::slices::slice_set_zero(xs); - return; - } - let new_size = usize::exact_from( - pow.shr_round(Limb::LOG_WIDTH, malachite_base::rounding_modes::RoundingMode::Ceiling) - .0, - ); - if new_size > xs.len() { - return; - } - malachite_base::slices::slice_set_zero(&mut xs[new_size..]); - let leftover_bits = pow & Limb::WIDTH_MASK; - if leftover_bits != 0 { - xs[new_size - 1].mod_power_of_2_assign(leftover_bits); - } -} diff --git a/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/ring_pedersen_parameters.rs b/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/ring_pedersen_parameters.rs deleted file mode 100644 index 0b066b10b..000000000 --- a/pallets/dkg/src/misbehavior/dfns_cggmp21/zk/ring_pedersen_parameters.rs +++ /dev/null @@ -1,226 +0,0 @@ -//! Пprm or Rprm in the paper. Proof that s ⋮ t modulo N. Non-interactive -//! version only. -use crate::misbehavior::dfns_cggmp21::{integer, integer::RugInteger, Integer, M}; -use digest::{typenum::U32, Digest}; -use malachite_base::num::arithmetic::traits::{Mod, ModPow, UnsignedAbs}; -use rand_core::{RngCore, SeedableRng}; -use sp_core::RuntimeDebug; - -struct Challenge { - es: [bool; M], -} - -/// Data to construct proof about -#[derive(Clone, Copy)] -pub struct Data<'a> { - pub N: &'a Integer, - pub s: &'a Integer, - pub t: &'a Integer, -} - -/// The ZK proof. Computed by [`prove`]. -/// -/// Parameter `M` is security level. The probability of an adversary generating -/// a correct proof for incorrect data is $2^{-M}$. You can use M defined here -/// as [`SECURITY`] -#[derive(Clone, RuntimeDebug, serde::Deserialize, udigest::Digestable)] -pub struct Proof { - #[serde(with = "integer::serde_list")] - #[udigest(with = integer::encoding::integers_list)] - pub commitment: [Integer; M], - #[serde(with = "integer::serde_list")] - #[udigest(with = integer::encoding::integers_list)] - pub zs: [Integer; M], -} - -fn derive_challenge(shared_state: D, data: Data, commitment: &[Integer; M]) -> Challenge -where - D: Digest, -{ - let mut digest = shared_state - .chain_update(RugInteger::from(data.N).to_vec()) - .chain_update(RugInteger::from(data.s).to_vec()) - .chain_update(RugInteger::from(data.t).to_vec()); - for a in commitment.iter() { - digest.update(RugInteger::from(a).to_vec()); - } - let seed = digest.finalize(); - let mut rng = rand_chacha::ChaCha20Rng::from_seed(seed.into()); - - // generate bools by hand since we don't have rand - let mut es = [false; M]; - let mut current = rng.next_u32(); - let mut bits_generated = 0; - for e_ref in es.iter_mut() { - if bits_generated == 32 { - current = rng.next_u32(); - bits_generated = 0; - } - *e_ref = (current & 1) == 1; - current >>= 1; - } - Challenge { es } -} - -/// Verify the proof. Derives determenistic challenge based on `shared_state` -/// and `data`. -pub fn verify(shared_state: D, data: Data, proof: &Proof) -> Result<(), InvalidProof> -where - D: Digest, -{ - let challenge = derive_challenge(shared_state, data, &proof.commitment); - for ((z, a), e) in proof.zs.iter().zip(&proof.commitment).zip(&challenge.es) { - let lhs: Integer = data - .t - .unsigned_abs_ref() - .mod_pow(z.unsigned_abs(), data.N.unsigned_abs_ref()) - .into(); - if *e { - let rhs = (data.s * a).mod_op(data.N); - if lhs != rhs { - return Err(InvalidProof); - } - } else if lhs != *a { - return Err(InvalidProof); - } - } - Ok(()) -} - -/// Witness that proof is invalid -#[derive(Debug)] -pub struct InvalidProof; - -#[cfg(test)] -pub mod original { - use digest::{typenum::U32, Digest}; - use paillier_zk::{fast_paillier::utils, rug, Integer}; - use rand_core::{RngCore, SeedableRng}; - use serde::{Deserialize, Serialize}; - use serde_with::serde_as; - - /// Data to construct proof about - #[derive(Clone, Copy)] - pub struct Data<'a> { - pub N: &'a Integer, - pub s: &'a Integer, - pub t: &'a Integer, - } - - struct Challenge { - es: [bool; M], - } - - /// The ZK proof. Computed by [`prove`]. - /// - /// Parameter `M` is security level. The probability of an adversary generating - /// a correct proof for incorrect data is $2^{-M}$. You can use M defined here - /// as [`SECURITY`] - #[serde_as] - #[derive(Clone, Serialize, Deserialize, udigest::Digestable)] - pub struct Proof { - #[serde_as(as = "[_; M]")] - #[udigest(with = encoding::integers_list)] - pub commitment: [Integer; M], - #[serde_as(as = "[_; M]")] - #[udigest(with = encoding::integers_list)] - pub zs: [Integer; M], - } - fn derive_challenge( - shared_state: D, - data: Data, - commitment: &[Integer; M], - ) -> Challenge - where - D: Digest, - { - let order = rug::integer::Order::Msf; - let mut digest = shared_state - .chain_update(data.N.to_digits(order)) - .chain_update(data.s.to_digits(order)) - .chain_update(data.t.to_digits(order)); - for a in commitment.iter() { - digest.update(a.to_digits(order)); - } - let seed = digest.finalize(); - let mut rng = rand_chacha::ChaCha20Rng::from_seed(seed.into()); - - // generate bools by hand since we don't have rand - let mut es = [false; M]; - let mut current = rng.next_u32(); - let mut bits_generated = 0; - for e_ref in es.iter_mut() { - if bits_generated == 32 { - current = rng.next_u32(); - bits_generated = 0; - } - *e_ref = (current & 1) == 1; - current >>= 1; - } - Challenge { es } - } - - /// Compute the proof for the given data, producing random commitment and - /// deriving deterministic challenge based on `shared_state` and `data` - /// - /// - `phi` - $φ(N) = (p-1)(q-1)$ - /// - `lambda` - λ such that $s = t^λ$ - pub fn prove( - shared_state: D, - rng: &mut R, - data: Data, - phi: &Integer, - lambda: &Integer, - ) -> Result, ()> - where - D: Digest, - R: RngCore, - { - let private_commitment = - [(); M].map(|()| phi.random_below_ref(&mut utils::external_rand(rng)).into()); - let commitment = private_commitment - .clone() - .map(|a| data.t.pow_mod_ref(&a, data.N).map(|r| r.into())); - // TODO: since array::try_map is not stable yet, we have to be hacky here - let commitment = if commitment.iter().any(Option::is_none) { - return Err(()); - } else { - // We made sure that every item in the array is `Some(_)` - #[allow(clippy::unwrap_used)] - commitment.map(Option::unwrap) - }; - - let challenge: Challenge = derive_challenge(shared_state, data, &commitment); - - let mut zs = private_commitment; - for (z_ref, e) in zs.iter_mut().zip(&challenge.es) { - if *e { - *z_ref += lambda; - z_ref.modulo_mut(phi); - } - } - Ok(Proof { commitment, zs }) - } - - /// Unambiguous encoding for different types for which it was not defined - pub mod encoding { - use paillier_zk::rug; - - pub fn integer( - x: &rug::Integer, - encoder: udigest::encoding::EncodeValue, - ) { - encoder.encode_leaf().chain(x.to_digits(rug::integer::Order::Msf)); - } - - pub fn integers_list( - list: &[rug::Integer], - encoder: udigest::encoding::EncodeValue, - ) { - let mut encoder = encoder.encode_list(); - for x in list { - integer(x, encoder.add_item()) - } - } - } -} diff --git a/pallets/dkg/src/misbehavior/mod.rs b/pallets/dkg/src/misbehavior/mod.rs deleted file mode 100644 index b9f98f4ec..000000000 --- a/pallets/dkg/src/misbehavior/mod.rs +++ /dev/null @@ -1,82 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use super::*; -use frame_support::{ensure, pallet_prelude::DispatchResult}; -use signatures_schemes::ecdsa::recover_ecdsa_pub_key_compressed; -use tangle_primitives::{ - misbehavior::{ - DKGTSSJustification, MisbehaviorJustification, MisbehaviorSubmission, SignedRoundMessage, - }, - roles::RoleType, -}; - -pub mod dfns_cggmp21; -pub mod zcash_frost; - -impl Pallet { - /// Verifies a given a misbehavior report and dispatches to specific verification logic - /// based on the round. - /// - /// # Arguments - /// - /// * `data` - The misbehavior report, which could be of different types depending on the - /// round. - /// - /// # Returns - /// - /// Returns a `DispatchResult` indicating whether the verification was successful or encountered - /// an error. - pub fn verify_misbehavior(data: MisbehaviorSubmission) -> DispatchResult { - ensure!(matches!(data.role_type, RoleType::Tss(_)), Error::::InvalidRoleType); - - ensure!( - matches!(data.justification, MisbehaviorJustification::DKGTSS(_)), - Error::::InvalidJustification, - ); - - match data.justification { - MisbehaviorJustification::DKGTSS(DKGTSSJustification::DfnsCGGMP21( - ref justification, - )) => Self::verify_dfns_cggmp21_misbehavior(&data, justification), - MisbehaviorJustification::DKGTSS(DKGTSSJustification::ZCashFrost( - ref justification, - )) => Self::verify_zcash_frost_misbehavior(&data, justification), - MisbehaviorJustification::ZkSaaS(_) => Err(Error::::InvalidJustification.into()), - } - } - - /// Given a [`SignedRoundMessage`] ensure that the message is signed by the given offender. - pub fn ensure_signed_by_offender( - signed_message: &SignedRoundMessage, - offender: [u8; 33], - ) -> DispatchResult { - Self::ensure_signed_by(signed_message, offender) - } - - /// Given a [`SignedRoundMessage`] ensure that the message is signed by the given signer - pub fn ensure_signed_by( - signed_message: &SignedRoundMessage, - expected_signer: [u8; 33], - ) -> DispatchResult { - let final_message = - [&signed_message.sender.to_be_bytes()[..], signed_message.message.as_slice()].concat(); - let signer = recover_ecdsa_pub_key_compressed(&final_message, &signed_message.signature) - .map_err(|_| Error::::InvalidSignature)?; - ensure!(signer == expected_signer, Error::::NotSignedByOffender); - Ok(()) - } -} diff --git a/pallets/dkg/src/misbehavior/zcash_frost/keygen.rs b/pallets/dkg/src/misbehavior/zcash_frost/keygen.rs deleted file mode 100644 index 2277070de..000000000 --- a/pallets/dkg/src/misbehavior/zcash_frost/keygen.rs +++ /dev/null @@ -1,237 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::*; - -use frost_ed25519::Ed25519Sha512; -use frost_ed448::Ed448Shake256; -use frost_p256::P256Sha256; -use frost_p384::P384Sha384; -use frost_ristretto255::Ristretto255Sha512; -use frost_secp256k1::Secp256K1Sha256; -use sp_runtime::DispatchResult; -use sp_std::vec::Vec; - -use tangle_primitives::{ - misbehavior::{MisbehaviorSubmission, SignedRoundMessage}, - roles::ThresholdSignatureRoleType, -}; - -use frost_core::{ - identifier::Identifier, - keygen::{round1, round2}, - keys::{SecretShare, VerifiableSecretSharingCommitment}, - pok_challenge, - signature::Signature, - traits::{Ciphersuite, Group}, - Header, -}; - -use super::convert_error; - -/// Message from round 1 -#[derive(Clone, serde::Serialize, serde::Deserialize, udigest::Digestable)] -#[serde(bound = "")] -#[udigest(bound = "")] -#[udigest(tag = "zcash.frost.keygen.threshold.round1")] -pub struct MsgRound1 { - pub msg: Vec, -} -/// Message from round 2 -#[derive(Clone, serde::Serialize, serde::Deserialize, udigest::Digestable)] -#[serde(bound = "")] -#[udigest(bound = "")] -#[udigest(tag = "zcash.frost.keygen.threshold.round2")] -pub struct MsgRound2 { - pub msg: Vec, -} - -pub fn verify_invalid_schnorr_proof( - offender: u16, - round1: &MsgRound1, -) -> DispatchResult { - // Identifiers are indexed from 1 in the FROST protocol and - // the offender here is indexed from 0 out of the participants. - let identifier: Identifier = Identifier::try_from(offender + 1) - .map_err(|_| Error::::InvalidIdentifierDeserialization)?; - - let round1_package: round1::Package = - postcard::from_bytes(&round1.msg).map_err(|_| Error::::MalformedRoundMessage)?; - - if (verify_invalid_proof_of_knowledge::( - identifier, - &round1_package.commitment, - round1_package.proof_of_knowledge, - )?) - .is_some() - { - Ok(()) - } else { - Err(Error::::ValidSchnorrProof)? - } -} - -/// Verifies the proof of knowledge of the secret coefficients used to generate the -/// public secret sharing commitment. -pub fn verify_invalid_proof_of_knowledge( - identifier: Identifier, - commitment: &VerifiableSecretSharingCommitment, - proof_of_knowledge: Signature, -) -> Result>, Error> { - // Round 1, Step 5 - // - // > Upon receiving C⃗_ℓ, σ_ℓ from participants 1 ≤ ℓ ≤ n, ℓ ≠ i, participant - // > P_i verifies σ_ℓ = (R_ℓ, μ_ℓ), aborting on failure, by checking - // > R_ℓ ? ≟ g^{μ_ℓ} · φ^{-c_ℓ}_{ℓ0}, where c_ℓ = H(ℓ, Φ, φ_{ℓ0}, R_ℓ). - let ell = identifier; - let R_ell = proof_of_knowledge.R; - let mu_ell = proof_of_knowledge.z; - let phi_ell0 = commitment.verifying_key().map_err(|_| Error::::MissingFrostCommitment)?; - let c_ell = pok_challenge::(ell, &phi_ell0, &R_ell) - .ok_or(Error::::InvalidFrostSignatureScheme)?; - // Check if the proof is valid, otherwise return the offender - if R_ell != ::generator() * mu_ell - phi_ell0.element * c_ell.0 { - Ok(Some(ell)) - } else { - // Valid schnorr proof should return `None` - Ok(None) - } -} - -pub fn schnorr_proof( - role: ThresholdSignatureRoleType, - data: &MisbehaviorSubmission, - parties_including_offender: &[[u8; 33]], - round1: &SignedRoundMessage, -) -> DispatchResult { - let offender = data.offender; - let index: u16 = parties_including_offender - .iter() - .position(|&p| p == offender) - .ok_or(Error::::UnknownIdentifier)? as u16; - Pallet::::ensure_signed_by_offender(round1, data.offender)?; - - let round1_msg: MsgRound1 = postcard::from_bytes::(&round1.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - match role { - ThresholdSignatureRoleType::ZcashFrostP256 => { - verify_invalid_schnorr_proof::(index, &round1_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostP384 => { - verify_invalid_schnorr_proof::(index, &round1_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostSecp256k1 => { - verify_invalid_schnorr_proof::(index, &round1_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostRistretto255 => { - verify_invalid_schnorr_proof::(index, &round1_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostEd25519 => { - verify_invalid_schnorr_proof::(index, &round1_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostEd448 => { - verify_invalid_schnorr_proof::(index, &round1_msg)? - }, - _ => Err(Error::::InvalidFrostSignatureScheme)?, - }; - - // TODO: add slashing logic - // Slash the offender! - Ok(()) -} - -pub fn verify_invalid_secret_share( - offender: u16, - round1: &MsgRound1, - round2: &MsgRound2, -) -> DispatchResult { - // Identifiers are indexed from 1 in the FROST protocol and - // the offender here is indexed from 0 out of the participants. - let identifier: Identifier = Identifier::try_from(offender + 1) - .map_err(|_| Error::::InvalidIdentifierDeserialization)?; - - let round1_package: round1::Package = - postcard::from_bytes(&round1.msg).map_err(|_| Error::::MalformedRoundMessage)?; - - let round2_package: round2::Package = - postcard::from_bytes(&round2.msg).map_err(|_| Error::::MalformedRoundMessage)?; - - let commitment = round1_package.commitment; - let f_ell_i = round2_package.signing_share; - - // The verification is exactly the same as the regular SecretShare verification; - // however the required components are in different places. - // Build a temporary SecretShare so what we can call verify(). - let secret_share = SecretShare { - header: Header::default(), - identifier, - signing_share: f_ell_i, - commitment: commitment.clone(), - }; - - // Verify the share. We don't need the result. - let _ = secret_share.verify().map_err(convert_error::)?; - - Ok(()) -} - -pub fn invalid_secret_share( - role: ThresholdSignatureRoleType, - data: &MisbehaviorSubmission, - parties_including_offender: &[[u8; 33]], - round1: &SignedRoundMessage, - round2: &SignedRoundMessage, -) -> DispatchResult { - let offender = data.offender; - let index: u16 = parties_including_offender - .iter() - .position(|&p| p == offender) - .ok_or(Error::::UnknownIdentifier)? as u16; - Pallet::::ensure_signed_by_offender(round1, data.offender)?; - - let round1_msg: MsgRound1 = postcard::from_bytes::(&round1.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - let round2_msg: MsgRound2 = postcard::from_bytes::(&round2.message) - .map_err(|_| Error::::MalformedRoundMessage)?; - - match role { - ThresholdSignatureRoleType::ZcashFrostP256 => { - verify_invalid_secret_share::(index, &round1_msg, &round2_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostP384 => { - verify_invalid_secret_share::(index, &round1_msg, &round2_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostSecp256k1 => { - verify_invalid_secret_share::(index, &round1_msg, &round2_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostRistretto255 => { - verify_invalid_secret_share::(index, &round1_msg, &round2_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostEd25519 => { - verify_invalid_secret_share::(index, &round1_msg, &round2_msg)? - }, - ThresholdSignatureRoleType::ZcashFrostEd448 => { - verify_invalid_secret_share::(index, &round1_msg, &round2_msg)? - }, - _ => Err(Error::::InvalidFrostSignatureScheme)?, - }; - - // TODO: add slashing logic - // Slash the offender! - Ok(()) -} diff --git a/pallets/dkg/src/misbehavior/zcash_frost/mod.rs b/pallets/dkg/src/misbehavior/zcash_frost/mod.rs deleted file mode 100644 index 3740d364f..000000000 --- a/pallets/dkg/src/misbehavior/zcash_frost/mod.rs +++ /dev/null @@ -1,142 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use sp_runtime::DispatchResult; - -use tangle_primitives::{ - misbehavior::{ - zcash_frost::{KeygenAborted, SigningAborted, ZCashFrostJustification}, - MisbehaviorSubmission, - }, - roles::{RoleType, ThresholdSignatureRoleType}, -}; - -use crate::{Config, Error, Pallet}; - -pub mod keygen; -pub mod sign; - -impl Pallet { - /// Verifies a given a misbehavior justification and dispatches to specific verification logic - pub fn verify_zcash_frost_misbehavior( - data: &MisbehaviorSubmission, - justification: &ZCashFrostJustification, - ) -> DispatchResult { - let role = validate_frost_role::(data.role_type)?; - match justification { - ZCashFrostJustification::Keygen { participants, t, reason } => { - Self::verify_zcash_frost_keygen_misbehavior(role, data, participants, *t, reason) - }, - ZCashFrostJustification::Signing { participants, t, reason } => { - Self::verify_zcash_frost_signing_misbehavior(role, data, participants, *t, reason) - }, - } - } - - /// given a keygen misbehavior justification, verify the misbehavior and return a dispatch - /// result - pub fn verify_zcash_frost_keygen_misbehavior( - role: ThresholdSignatureRoleType, - data: &MisbehaviorSubmission, - participants: &[[u8; 33]], - _t: u16, - reason: &KeygenAborted, - ) -> DispatchResult { - match reason { - KeygenAborted::InvalidProofOfKnowledge { round1 } => { - keygen::schnorr_proof::(role, data, participants, round1) - }, - KeygenAborted::InvalidSecretShare { round1, round2 } => { - keygen::invalid_secret_share::(role, data, participants, round1, round2) - }, - } - } - - /// given a signing misbehavior justification, verify the misbehavior and return a dispatch - /// result - pub fn verify_zcash_frost_signing_misbehavior( - role: ThresholdSignatureRoleType, - data: &MisbehaviorSubmission, - participants: &[[u8; 33]], - _t: u16, - reason: &SigningAborted, - ) -> DispatchResult { - // TODO: Fetch the phase one job result. It must exist for a valid - // TODO: signing misbehavior to have occurred (chicken before the egg). - let msg_to_sign = &[]; - let group_pubkey = &[]; - - match reason { - SigningAborted::InvalidSignatureShare { round1, round2 } => { - sign::invalid_signature_share::( - role, - data, - participants, - round1, - round2, - group_pubkey, - msg_to_sign, - ) - }, - } - } -} - -pub fn validate_frost_role( - role: RoleType, -) -> Result> { - match role { - RoleType::Tss(inner) => match inner { - ThresholdSignatureRoleType::ZcashFrostEd25519 - | ThresholdSignatureRoleType::ZcashFrostEd448 - | ThresholdSignatureRoleType::ZcashFrostP256 - | ThresholdSignatureRoleType::ZcashFrostP384 - | ThresholdSignatureRoleType::ZcashFrostRistretto255 - | ThresholdSignatureRoleType::ZcashFrostSecp256k1 => Ok(inner), - _ => Err(Error::::InvalidRoleType), - }, - _ => Err(Error::::InvalidRoleType), - } -} - -pub fn convert_error(err: frost_core::error::Error) -> Error { - match err { - frost_core::error::Error::Field(_field_err) => Error::::FrostFieldError, - frost_core::error::Error::Group(_group_err) => Error::::FrostGroupError, - frost_core::error::Error::SerializationError => { - Error::::InvalidFrostMessageSerialization - }, - frost_core::error::Error::DeserializationError => { - Error::::InvalidFrostMessageDeserialization - }, - frost_core::error::Error::IdentifierDerivationNotSupported => { - Error::::IdentifierDerivationNotSupported - }, - frost_core::error::Error::MalformedSignature => Error::::MalformedFrostSignature, - frost_core::error::Error::InvalidSignature => Error::::InvalidFrostSignature, - frost_core::error::Error::MalformedVerifyingKey => Error::::MalformedFrostVerifyingKey, - frost_core::error::Error::MalformedSigningKey => Error::::MalformedFrostSigningKey, - frost_core::error::Error::MissingCommitment => Error::::MissingFrostCommitment, - frost_core::error::Error::InvalidSignatureShare => Error::::InvalidFrostSignatureShare, - frost_core::error::Error::DuplicatedIdentifier => Error::::DuplicateIdentifier, - frost_core::error::Error::UnknownIdentifier => Error::::UnknownIdentifier, - frost_core::error::Error::IncorrectNumberOfIdentifiers => { - Error::::IncorrectNumberOfIdentifiers - }, - frost_core::error::Error::IdentityCommitment => Error::::IdentityCommitment, - _ => Error::::InvalidSignatureData, - } -} diff --git a/pallets/dkg/src/misbehavior/zcash_frost/sign.rs b/pallets/dkg/src/misbehavior/zcash_frost/sign.rs deleted file mode 100644 index 50fb5d91b..000000000 --- a/pallets/dkg/src/misbehavior/zcash_frost/sign.rs +++ /dev/null @@ -1,263 +0,0 @@ -use crate::misbehavior::zcash_frost::convert_error; -use alloc::collections::BTreeMap; -use core::fmt::Debug; -use frame_support::{ensure, pallet_prelude::DispatchResult}; -use frost_core::{ - compute_binding_factor_list, compute_group_commitment, derive_interpolating_value, - identifier::Identifier, - keys::VerifyingShare, - round1::SigningCommitments, - signature::{Signature, SignatureShare}, - traits::{Ciphersuite, Field, Group}, - verifying_key::VerifyingKey, - BindingFactorList, SigningPackage, -}; -use frost_ed25519::Ed25519Sha512; -use frost_ed448::Ed448Shake256; -use frost_p256::P256Sha256; -use frost_p384::P384Sha384; -use frost_ristretto255::Ristretto255Sha512; -use frost_secp256k1::Secp256K1Sha256; -use sp_std::vec::Vec; -use tangle_primitives::{ - misbehavior::{MisbehaviorSubmission, SignedRoundMessage}, - roles::ThresholdSignatureRoleType, -}; - -use crate::{Config, Error, Pallet}; - -/// Message from round 1 -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, udigest::Digestable)] -#[serde(bound = "")] -#[udigest(bound = "")] -#[udigest(tag = "zcash.frost.sign.threshold.round1")] -pub struct MsgRound1 { - pub msg: Vec, -} - -/// Message from round 2 -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, udigest::Digestable)] -#[serde(bound = "")] -#[udigest(bound = "")] -#[udigest(tag = "zcash.frost.sign.threshold.round2")] -pub struct MsgRound2 { - pub msg: Vec, -} - -pub fn verify_invalid_signature_share( - sender: u16, - round1_msgs: &[MsgRound1], - round2_msgs: &[MsgRound2], - offender_pubkey: &[u8], - group_pubkey: &[u8], - msg_to_sign: &[u8], -) -> DispatchResult { - // Identifier in FROST protocol who is the offender - let offender_identifier: Identifier = - Identifier::try_from(sender).map_err(|_| Error::::InvalidIdentifierDeserialization)?; - - // The verifying key of the group (the group's joint public key) - let ser = ::Serialization::try_from(group_pubkey.to_vec()) - .map_err(|_| Error::::InvalidFrostMessageDeserialization)?; - let verifying_key = VerifyingKey::deserialize(ser) - .map_err(|_| Error::::InvalidFrostMessageDeserialization)?; - - // Deserialize the round 1 signing commitments. Assumes the round 1 messages are in order. - // TODO: Check if the signed messages should be parsed without assuming order. - let round1_signing_commitments: BTreeMap, SigningCommitments> = round1_msgs - .iter() - .enumerate() - .map(|(party_inx, msg)| { - let participant_identifier = Identifier::::try_from((party_inx + 1) as u16) - .expect("Failed to convert party index to identifier"); - let msg = SigningCommitments::::deserialize(&msg.msg) - .unwrap_or_else(|_| panic!("Failed to deserialize round 1 signing commitments")); - (participant_identifier, msg) - }) - .collect(); - - // Create the signing package from the round 1 signing commitments and the message to sign. - let signing_package = SigningPackage::::new(round1_signing_commitments.clone(), msg_to_sign); - - // Encodes the signing commitment list produced in round one as part of generating - // [`BindingFactor`], the binding factor. - let binding_factor_list: BindingFactorList = - compute_binding_factor_list(&signing_package, &verifying_key, &[]); - - // Compute the group commitment from signing commitments produced in round one. - let group_commitment = compute_group_commitment(&signing_package, &binding_factor_list) - .map_err(convert_error::)?; - - // TODO: Check if the signed messages should be parsed without assuming order. - let signature_shares: BTreeMap, SignatureShare> = round2_msgs - .iter() - .enumerate() - .map(|(party_inx, msg)| { - let participant_identifier = Identifier::::try_from((party_inx + 1) as u16) - .expect("Failed to convert party index to identifier"); - let ser = - <::Field as Field>::Serialization::try_from(msg.msg.clone()) - .unwrap_or_else(|_| panic!("Failed to deserialize round 2 signature share")); - let sig_share = SignatureShare::::deserialize(ser) - .unwrap_or_else(|_| panic!("Failed to deserialize round 2 signature share")); - (participant_identifier, sig_share) - }) - .collect(); - - // The verifying share of the offender. - let ser = ::Serialization::try_from(offender_pubkey.to_vec()) - .map_err(|_| Error::::InvalidFrostMessageDeserialization)?; - let verifying_share = VerifyingShare::deserialize(ser) - .map_err(|_| Error::::InvalidFrostMessageDeserialization)?; - - // The aggregation of the signature shares by summing them up, resulting in - // a plain Schnorr signature. - // - // Implements [`aggregate`] from the spec. - // - // [`aggregate`]: https://www.ietf.org/archive/id/draft-irtf-cfrg-frost-14.html#section-5.3 - let mut z = <::Field>::zero(); - - for signature_share in signature_shares.values() { - z = z + signature_share.share; - } - - let signature = Signature { R: group_commitment.0, z }; - - // Verify the aggregate signature - let verification_result = verifying_key.verify(&signing_package.message, &signature); - - ensure!(verification_result.is_ok(), Error::::ValidFrostSignature); - - // Compute the per-message challenge. - let challenge = frost_core::challenge::(&group_commitment.0, &verifying_key, msg_to_sign); - - // Compute Lagrange coefficient. - let lambda_i = derive_interpolating_value(&offender_identifier, &signing_package) - .map_err(convert_error::)?; - - let binding_factor = binding_factor_list - .get(&offender_identifier) - .ok_or(Error::::UnknownIdentifier)?; - - let R_share = round1_signing_commitments - .get(&offender_identifier) - .ok_or(Error::::InvalidParticipantPublicKey)? - .to_group_commitment_share(binding_factor); - - let offending_signature_share: &SignatureShare = signature_shares - .get(&offender_identifier) - .ok_or(Error::::UnknownIdentifier)?; - - // Verify that the offending signature share is invalid - if offending_signature_share - .verify(offender_identifier, &R_share, &verifying_share, lambda_i, &challenge) - .is_ok() - { - Err(Error::::ValidFrostSignatureShare)? - } - - Ok(()) -} - -pub fn invalid_signature_share( - role: ThresholdSignatureRoleType, - data: &MisbehaviorSubmission, - participants: &[[u8; 33]], - round1: &[SignedRoundMessage], - round2: &[SignedRoundMessage], - group_pubkey: &[u8], - msg_to_sign: &[u8], -) -> DispatchResult { - let offender = data.offender; - let index = participants - .iter() - .position(|&p| p == offender) - .ok_or(Error::::UnknownIdentifier)?; - Pallet::::ensure_signed_by_offender(&round1[index], data.offender)?; - Pallet::::ensure_signed_by_offender(&round2[index], data.offender)?; - - let round1_msgs: Vec = round1 - .iter() - .map(|msg| { - postcard::from_bytes::(&msg.message) - .map_err(|_| Error::::MalformedRoundMessage) - }) - .collect::, Error>>()?; - - let round2_msgs: Vec = round2 - .iter() - .map(|msg| { - postcard::from_bytes::(&msg.message) - .map_err(|_| Error::::MalformedRoundMessage) - }) - .collect::, Error>>()?; - - match role { - ThresholdSignatureRoleType::ZcashFrostP256 => { - verify_invalid_signature_share::( - index as u16, - &round1_msgs, - &round2_msgs, - &offender, - group_pubkey, - msg_to_sign, - )? - }, - ThresholdSignatureRoleType::ZcashFrostP384 => { - verify_invalid_signature_share::( - index as u16, - &round1_msgs, - &round2_msgs, - &offender, - group_pubkey, - msg_to_sign, - )? - }, - ThresholdSignatureRoleType::ZcashFrostSecp256k1 => { - verify_invalid_signature_share::( - index as u16, - &round1_msgs, - &round2_msgs, - &offender, - group_pubkey, - msg_to_sign, - )? - }, - ThresholdSignatureRoleType::ZcashFrostRistretto255 => { - verify_invalid_signature_share::( - index as u16, - &round1_msgs, - &round2_msgs, - &offender, - group_pubkey, - msg_to_sign, - )? - }, - ThresholdSignatureRoleType::ZcashFrostEd25519 => { - verify_invalid_signature_share::( - index as u16, - &round1_msgs, - &round2_msgs, - &offender, - group_pubkey, - msg_to_sign, - )? - }, - ThresholdSignatureRoleType::ZcashFrostEd448 => { - verify_invalid_signature_share::( - index as u16, - &round1_msgs, - &round2_msgs, - &offender, - group_pubkey, - msg_to_sign, - )? - }, - _ => Err(Error::::InvalidFrostSignatureScheme)?, - }; - - // Slash the offender! - // TODO: add slashing logic - Ok(()) -} diff --git a/pallets/dkg/src/mock.rs b/pallets/dkg/src/mock.rs deleted file mode 100644 index a0432e1d8..000000000 --- a/pallets/dkg/src/mock.rs +++ /dev/null @@ -1,144 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -pub use crate as pallet_dkg; - -use frame_support::{ - construct_runtime, parameter_types, - traits::{ConstU128, ConstU32, ConstU64, Everything}, -}; -use frame_system::EnsureSigned; -use scale_info::TypeInfo; -use sp_core::H256; -use sp_keystore::{testing::MemoryKeystore, KeystoreExt, KeystorePtr}; -use sp_runtime::{testing::Header, traits::IdentityLookup, BuildStorage}; -use std::{sync::Arc, vec}; - -pub type AccountId = u64; -pub type Balance = u128; - -impl frame_system::Config for Runtime { - type RuntimeOrigin = RuntimeOrigin; - type Nonce = u64; - type RuntimeCall = RuntimeCall; - type Hash = H256; - type Hashing = ::sp_runtime::traits::BlakeTwo256; - type AccountId = AccountId; - type Block = Block; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type BlockWeights = (); - type BlockLength = (); - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type DbWeight = (); - type BaseCallFilter = Everything; - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type RuntimeTask = (); - type MaxConsumers = ConstU32<16>; -} - -impl pallet_balances::Config for Runtime { - type Balance = Balance; - type DustRemoval = (); - type RuntimeEvent = RuntimeEvent; - type ExistentialDeposit = ConstU128<1>; - type AccountStore = System; - type MaxLocks = (); - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = (); - type WeightInfo = (); - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = (); - type FreezeIdentifier = (); - type MaxFreezes = (); -} - -frame_support::ord_parameter_types! { - pub const One: AccountId = 1; -} - -parameter_types! { - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxParticipants: u32 = 10; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSubmissionLen: u32 = 32; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxKeyLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxDataLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSignatureLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxProofLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxAdditionalParamsLen: u32 = 256; -} - -impl pallet_dkg::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = EnsureSigned; - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - -pub type Block = sp_runtime::generic::Block; -pub type UncheckedExtrinsic = sp_runtime::generic::UncheckedExtrinsic; - -construct_runtime!( - pub enum Runtime - { - System: frame_system, - Balances: pallet_balances, - DKG: pallet_dkg, - } -); - -pub struct ExtBuilder; - -impl Default for ExtBuilder { - fn default() -> Self { - ExtBuilder - } -} - -// This function basically just builds a genesis storage key/value store according to -// our desired mockup. -pub fn new_test_ext() -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); - // We use default for brevity, but you can configure as desired if needed. - pallet_balances::GenesisConfig:: { balances: vec![(10, 100), (20, 100)] } - .assimilate_storage(&mut t) - .unwrap(); - let mut ext = sp_io::TestExternalities::new(t); - // set to block 1 to test events - ext.execute_with(|| System::set_block_number(1)); - ext.register_extension(KeystoreExt(Arc::new(MemoryKeystore::new()) as KeystorePtr)); - ext -} diff --git a/pallets/dkg/src/signatures_schemes/bls12_381.rs b/pallets/dkg/src/signatures_schemes/bls12_381.rs deleted file mode 100644 index 41f3e51e5..000000000 --- a/pallets/dkg/src/signatures_schemes/bls12_381.rs +++ /dev/null @@ -1,37 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use frame_support::{ensure, pallet_prelude::DispatchResult}; -use sp_io::hashing::keccak_256; - -use crate::{Config, Error}; -/// Verifies the DKG signature result with the given public key, data and signature. -/// -/// The signature is verified using the BLS12-381 curve. -pub fn verify_bls12_381_signature( - msg: &[u8], - signature: &[u8], - expected_key: &[u8], -) -> DispatchResult { - let public_key = snowbridge_milagro_bls::PublicKey::from_uncompressed_bytes(expected_key) - .map_err(|_err| Error::::InvalidBlsPublicKey)?; - let signature = snowbridge_milagro_bls::Signature::from_bytes(signature) - .map_err(|_err| Error::::InvalidSignatureData)?; - let signed_data = keccak_256(msg); - - ensure!(signature.verify(&signed_data, &public_key), Error::::SigningKeyMismatch); - - Ok(()) -} diff --git a/pallets/dkg/src/signatures_schemes/ecdsa.rs b/pallets/dkg/src/signatures_schemes/ecdsa.rs deleted file mode 100644 index 37fedab06..000000000 --- a/pallets/dkg/src/signatures_schemes/ecdsa.rs +++ /dev/null @@ -1,366 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use crate::{signatures_schemes::to_slice_33, Config, Error}; -use core::str::FromStr; -use derivation_path::DerivationPath; -use ecdsa_core::signature::hazmat::PrehashVerifier; -use frame_support::{ensure, pallet_prelude::DispatchResult}; -use generic_ec::{ - coords::HasAffineX, - curves::{Secp256k1, Secp256r1, Stark}, - Curve, Point, Scalar, -}; -use sp_core::ecdsa; -use sp_io::{hashing::keccak_256, EcdsaVerifyError}; -use sp_runtime::BoundedVec; -use sp_std::vec::Vec; -use tangle_primitives::jobs::DKGTSSKeySubmissionResult; - -pub const ECDSA_SIGNATURE_LENGTH: usize = 65; - -/// Verifies the Secp256k1 DKG signature result by recovering the ECDSA public key from the provided -/// data and signature. -/// -/// This function checks whether the recovered public key matches the expected signing key, -/// ensuring the validity of the signature. -/// -/// # Arguments -/// -/// * `data` - The DKG signature result containing the message data and ECDSA signature. -/// * `signature` - The ECDSA signature to be verified. -/// * `expected_key` - The expected ECDSA public key. -/// * `derivation_path` - The derivation path used to derive the public key. -/// * `chain_code` - The chain code used to derive the public key. -pub fn verify_secp256k1_ecdsa_signature( - msg: &[u8], - signature: &[u8], - expected_key: &[u8], - derivation_path: &Option>, - chain_code: Option<[u8; 32]>, -) -> DispatchResult { - use k256::elliptic_curve::group::GroupEncoding; - let pub_key = match derivation_path.as_ref().zip(chain_code) { - Some((path, chain_code)) => { - derive_child_public_key::(expected_key, path, chain_code)? - }, - None => expected_key.to_vec(), - }; - - let pub_key_point = k256::AffinePoint::from_bytes(pub_key.as_slice().into()); - if pub_key_point.is_none().into() { - Err(Error::::InvalidPublicKey)?; - } - let verifying_key = k256::ecdsa::VerifyingKey::from_affine(pub_key_point.unwrap()) - .map_err(|_| Error::::InvalidPublicKey)?; - let signature = k256::ecdsa::Signature::from_slice(signature) - .map_err(|_| Error::::InvalidSignatureDeserialization)?; - - let message = keccak_256(msg); - - ensure!( - verifying_key.verify_prehash(&message, &signature).map(|_| signature).is_ok(), - Error::::InvalidSignature - ); - Ok(()) -} - -/// Verify the Secp256r1 DKG signature result by recovering the ECDSA public key from the provided -/// data and signature. -/// -/// This function checks whether the recovered public key matches the expected signing key, -/// ensuring the validity of the signature. -/// -/// # Arguments -/// -/// * `data` - The DKG signature result containing the message data and ECDSA signature. -/// * `signature` - The ECDSA signature to be verified. -/// * `expected_key` - The expected ECDSA public key. -pub fn verify_secp256r1_ecdsa_signature( - msg: &[u8], - signature: &[u8], - expected_key: &[u8], - derivation_path: &Option>, - chain_code: Option<[u8; 32]>, -) -> DispatchResult { - use p256::elliptic_curve::group::GroupEncoding; - let pub_key = match derivation_path.as_ref().zip(chain_code) { - Some((path, chain_code)) => { - derive_child_public_key::(expected_key, path, chain_code)? - }, - None => expected_key.to_vec(), - }; - - let pub_key_point = p256::AffinePoint::from_bytes(pub_key.as_slice().into()); - if pub_key_point.is_none().into() { - Err(Error::::InvalidPublicKey)?; - } - let verifying_key = p256::ecdsa::VerifyingKey::from_affine(pub_key_point.unwrap()) - .map_err(|_| Error::::InvalidPublicKey)?; - let signature = p256::ecdsa::Signature::from_slice(signature) - .map_err(|_| Error::::InvalidSignatureDeserialization)?; - - let message = keccak_256(msg); - - ensure!( - verifying_key.verify_prehash(&message, &signature).map(|_| signature).is_ok(), - Error::::InvalidSignature - ); - Ok(()) -} - -/// Verifies the Stark curve DKG signature result by recovering the ECDSA public key from the -/// provided data and signature. -/// -/// This function checks whether the recovered public key matches the expected signing key, -/// ensuring the validity of the signature. -/// -/// # Arguments -/// -/// * `data` - The DKG signature result containing the message data and ECDSA signature. -/// * `signature` - The ECDSA signature to be verified. -/// * `expected_key` - The expected ECDSA public key. -pub fn verify_stark_ecdsa_signature( - msg: &[u8], - signature: &[u8], - expected_key: &[u8], - derivation_path: &Option>, - chain_code: Option<[u8; 32]>, -) -> DispatchResult { - // The message should be pre-hashed uisng a 32-byte digest - if msg.len() != 32 { - Err(Error::::InvalidMessage)?; - } - - // The signature should be a 64-byte r and s pair - if signature.len() != 64 { - Err(Error::::MalformedStarkSignature)?; - } - - let parse_signature = |inp: &[u8]| -> Result<(Scalar, Scalar), Error> { - let r_bytes = &inp[0..inp.len() / 2]; - let s_bytes = &inp[inp.len() / 2..]; - let r = Scalar::from_be_bytes(r_bytes).map_err(|_| Error::::FieldElementError)?; - let s = Scalar::from_be_bytes(s_bytes).map_err(|_| Error::::FieldElementError)?; - - Ok((r, s)) - }; - - let (r, s) = parse_signature(signature)?; - let pub_key = match derivation_path.as_ref().zip(chain_code) { - Some((path, chain_code)) => { - derive_child_public_key::(expected_key, path, chain_code)? - }, - None => expected_key.to_vec(), - }; - let public_key_x: Scalar = Point::from_bytes(pub_key) - .map_err(|_| Error::::InvalidPublicKey)? - .x() - .ok_or(Error::::FieldElementError)? - .to_scalar(); - - let public_key = convert_stark_scalar::(&public_key_x)?; - let message = convert_stark_scalar::(&Scalar::::from_be_bytes_mod_order(msg))?; - let r = convert_stark_scalar::(&r)?; - let s = convert_stark_scalar::(&s)?; - - let result = starknet_crypto::verify(&public_key, &message, &r, &s) - .map_err(|_| Error::::InvalidSignature)?; - - ensure!(result, Error::::InvalidSignature); - Ok(()) -} - -pub fn convert_stark_scalar( - x: &Scalar, -) -> Result> { - let bytes = x.to_be_bytes(); - debug_assert_eq!(bytes.len(), 32); - let mut buffer = [0u8; 32]; - buffer.copy_from_slice(bytes.as_bytes()); - starknet_crypto::FieldElement::from_bytes_be(&buffer).map_err(|_| Error::::FieldElementError) -} - -pub fn derive_child_public_key( - master_pub_key: &[u8], - path: &[u8], - chain_code: [u8; 32], -) -> Result, Error> { - let point: Point = - Point::from_bytes(master_pub_key).map_err(|_| Error::::InvalidPublicKey)?; - let epub = slip_10::ExtendedPublicKey { public_key: point, chain_code }; - let derivation_path_str = core::str::from_utf8(path).unwrap_or("m"); - let path = DerivationPath::from_str(derivation_path_str).unwrap(); - - Ok(slip_10::try_derive_child_public_key_with_path( - &epub, - path.into_iter().map(|index| index.to_u32().try_into()), - ) - .map_err(|_| Error::::InvalidPublicKey)? - .public_key - .to_bytes(true) - .to_vec()) -} - -/// Recovers the ECDSA public key from a given message and signature. -/// -/// # Arguments -/// -/// * `data` - The message for which the signature is being verified. -/// * `signature` - The ECDSA signature to be verified. -/// -/// # Returns -/// -/// Returns a `Result` containing the recovered ECDSA public key as a `Vec` or an -/// `EcdsaVerifyError` if verification fails. -pub fn recover_ecdsa_pub_key(data: &[u8], signature: &[u8]) -> Result, EcdsaVerifyError> { - if signature.len() == ECDSA_SIGNATURE_LENGTH { - let mut sig = [0u8; ECDSA_SIGNATURE_LENGTH]; - sig[..ECDSA_SIGNATURE_LENGTH].copy_from_slice(signature); - - let hash = keccak_256(data); - - let pub_key = sp_io::crypto::secp256k1_ecdsa_recover(&sig, &hash)?; - return Ok(pub_key.to_vec()); - } - Err(EcdsaVerifyError::BadSignature) -} - -/// Recovers the ECDSA public key from a given message and signature. -/// -/// # Arguments -/// -/// * `data` - The message for which the signature is being verified. -/// * `signature` - The ECDSA signature to be verified. -/// -/// # Returns -/// -/// Returns a `Result` containing the recovered ECDSA public key as a `Vec` or an -/// `EcdsaVerifyError` if verification fails. -pub fn recover_ecdsa_pub_key_compressed( - data: &[u8], - signature: &[u8], -) -> Result, EcdsaVerifyError> { - if signature.len() == ECDSA_SIGNATURE_LENGTH { - let mut sig = [0u8; ECDSA_SIGNATURE_LENGTH]; - sig[..ECDSA_SIGNATURE_LENGTH].copy_from_slice(signature); - - let hash = keccak_256(data); - - let pub_key = sp_io::crypto::secp256k1_ecdsa_recover_compressed(&sig, &hash)?; - return Ok(pub_key.to_vec()); - } - Err(EcdsaVerifyError::BadSignature) -} - -/// Verifies the signer of a given message using a set of Secp256k1 ECDSA public keys. -/// -/// Given a vector of ECDSA public keys (`maybe_signers`), a message (`msg`), and an ECDSA -/// signature (`signature`), this function checks if any of the public keys in the set can be a -/// valid signer for the provided message and signature. -/// -/// # Arguments -/// -/// * `maybe_signers` - A vector of ECDSA public keys that may represent the potential signers. -/// * `msg` - The message for which the signature is being verified. -/// * `signature` - The ECDSA signature to be verified. -/// -/// # Returns -/// -/// Returns a tuple containing: -/// * An optional ECDSA public key (`Option`) representing the verified signer. It is -/// `None` if no valid signer is found. -/// * A boolean value (`bool`) indicating whether the verification was successful (`true`) or not -/// (`false`). -pub fn verify_signer_from_set_ecdsa( - maybe_signers: Vec, - msg: &[u8], - signature: &[u8], -) -> (Option, bool) { - let mut signer = None; - let recovered_result = recover_ecdsa_pub_key(msg, signature); - let res = if let Ok(data) = recovered_result { - let recovered = &data[..32]; - maybe_signers.iter().any(|x| { - if x.0[1..].to_vec() == recovered.to_vec() { - signer = Some(*x); - true - } else { - false - } - }) - } else { - false - }; - - (signer, res) -} - -/// Verifies the generated DKG key from a set of participants' Secp256k1 ECDSA keys and signatures. -/// -/// This function includes generating required signers, validating signatures, and ensuring a -/// sufficient number of unique signers are present. -/// -/// # Arguments -/// -/// * `data` - The DKG verification information containing participants, keys, and signatures. -/// -/// # Returns -/// -/// Returns a `DispatchResult` indicating whether the DKG key verification was successful or -/// encountered an error. -pub fn verify_generated_dkg_key_ecdsa( - data: DKGTSSKeySubmissionResult, -) -> DispatchResult { - // Ensure participants and signatures are not empty - ensure!(!data.participants.is_empty(), Error::::NoParticipantsFound); - ensure!(!data.signatures.is_empty(), Error::::NoSignaturesFound); - - // Generate the required ECDSA signers - let maybe_signers = data - .participants - .iter() - .map(|x| { - ecdsa::Public( - to_slice_33(x) - .unwrap_or_else(|| panic!("Failed to convert input to ecdsa public key")), - ) - }) - .collect::>(); - - ensure!(!maybe_signers.is_empty(), Error::::NoParticipantsFound); - - let mut known_signers: Vec = Default::default(); - - for signature in data.signatures { - // Ensure the required signer signature exists - let (maybe_authority, success) = - verify_signer_from_set_ecdsa(maybe_signers.clone(), &data.key, &signature); - - if success { - let authority = maybe_authority.ok_or(Error::::CannotRetreiveSigner)?; - - // Ensure no duplicate signatures - ensure!(!known_signers.contains(&authority), Error::::DuplicateSignature); - - known_signers.push(authority); - } - } - - // Ensure a sufficient number of unique signers are present - ensure!(known_signers.len() >= usize::from(data.threshold), Error::::NotEnoughSigners); - - Ok(()) -} diff --git a/pallets/dkg/src/signatures_schemes/mod.rs b/pallets/dkg/src/signatures_schemes/mod.rs deleted file mode 100644 index a8817bb34..000000000 --- a/pallets/dkg/src/signatures_schemes/mod.rs +++ /dev/null @@ -1,26 +0,0 @@ -pub mod bls12_381; -pub mod ecdsa; -pub mod schnorr_frost; -pub mod schnorr_sr25519; - -/// Utility function to create slice of fixed size -pub fn to_slice_33(val: &[u8]) -> Option<[u8; 33]> { - if val.len() == 33 { - let mut key = [0u8; 33]; - key[..33].copy_from_slice(val); - - return Some(key); - } - None -} - -/// Utility function to create slice of fixed size -pub fn to_slice_32(val: &[u8]) -> Option<[u8; 32]> { - if val.len() == 32 { - let mut key = [0u8; 32]; - key[..32].copy_from_slice(val); - - return Some(key); - } - None -} diff --git a/pallets/dkg/src/signatures_schemes/schnorr_frost.rs b/pallets/dkg/src/signatures_schemes/schnorr_frost.rs deleted file mode 100644 index ce7ff69be..000000000 --- a/pallets/dkg/src/signatures_schemes/schnorr_frost.rs +++ /dev/null @@ -1,158 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use frame_support::pallet_prelude::DispatchResult; -use frost_core::{signature::Signature, verifying_key::VerifyingKey}; -use frost_ed25519::Ed25519Sha512; -use frost_ed448::Ed448Shake256; -use frost_p256::P256Sha256; -use frost_p384::P384Sha384; -use frost_ristretto255::Ristretto255Sha512; -use frost_secp256k1::Secp256K1Sha256; -use frost_taproot::Secp256K1Taproot; -use tangle_primitives::jobs::DigitalSignatureScheme; - -use crate::{Config, Error}; - -/// Macro to verify a Schnorr signature using the specified signature scheme. -macro_rules! verify_signature { - ($impl_type:ty, $key:expr, $signature:expr, $msg:expr, $key_default:expr, $sig_default:expr) => {{ - let verifying_key: VerifyingKey<$impl_type> = - VerifyingKey::deserialize($key.try_into().unwrap_or($key_default)) - .map_err(|_| Error::::InvalidVerifyingKeyDeserialization)?; - let sig: Signature<$impl_type> = - Signature::deserialize($signature.try_into().unwrap_or($sig_default)) - .map_err(|_| Error::::InvalidSignatureDeserialization)?; - verifying_key.verify($msg, &sig).map_err(|_| Error::::InvalidSignature)? - }}; -} - -/// Verifies a Distributed Key Generation (DKG) signature using the Schnorr signature scheme. -/// -/// Utilizes the Schnorr signature algorithm to validate the authenticity of a signature -/// by comparing it against the original message data and the corresponding public key. -/// Supports multiple signature schemes based on the role type. -/// -/// # Arguments -/// -/// * `scheme` - The type that determines the signature scheme to be used for verification. -/// * `msg` - The message data that was signed. -/// * `signature` - The Schnorr signature to be verified. -/// * `key` - The public key associated with the signature. -pub fn verify_dkg_signature_schnorr_frost( - scheme: DigitalSignatureScheme, - msg: &[u8], - signature: &[u8], - key: &[u8], -) -> DispatchResult { - match scheme { - DigitalSignatureScheme::SchnorrEd25519 => { - verify_signature!(Ed25519Sha512, key, signature, msg, [0u8; 32], [0u8; 64]); - }, - DigitalSignatureScheme::SchnorrEd448 => { - verify_signature!(Ed448Shake256, key, signature, msg, [0u8; 57], [0u8; 114]); - }, - DigitalSignatureScheme::SchnorrP256 => { - verify_signature!(P256Sha256, key, signature, msg, [0u8; 33], [0u8; 65]); - }, - DigitalSignatureScheme::SchnorrP384 => { - verify_signature!(P384Sha384, key, signature, msg, [0u8; 49], [0u8; 97]); - }, - DigitalSignatureScheme::SchnorrRistretto255 => { - verify_signature!(Ristretto255Sha512, key, signature, msg, [0u8; 32], [0u8; 64]); - }, - DigitalSignatureScheme::SchnorrSecp256k1 => { - verify_signature!(Secp256K1Sha256, key, signature, msg, [0u8; 33], [0u8; 65]); - }, - DigitalSignatureScheme::SchnorrTaproot => { - verify_signature!(Secp256K1Taproot, key, signature, msg, [0u8; 33], [0u8; 65]); - }, - _ => return Err(Error::::InvalidSignature.into()), - }; - - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::mock::Runtime; - use frame_support::assert_ok; - use frost_core::{signing_key::SigningKey, verifying_key::VerifyingKey}; - - const MESSAGE: &[u8] = b"test message"; - - macro_rules! test_verify_dkg_signature { - ($sig_name:ident, $scheme:expr, $impl_type:ty, $msg:expr) => { - paste::item! { - #[test] - fn [< test_verify_signature_ $sig_name >] () { - let mut rng = rand_core::OsRng; - - let sk = SigningKey::<$impl_type>::new(&mut rng); - let vk = VerifyingKey::<$impl_type>::from(sk); - - // Generate the signature - let signature = sk.sign(&mut rng, $msg); - - // Verify the signature - assert!(vk.verify($msg, &signature).is_ok()); - - // Verify using the DKG signature verification function - assert_ok!(verify_dkg_signature_schnorr_frost::( - $scheme, - $msg, - &signature.serialize(), - &vk.serialize() - )); - } - } - }; - } - - test_verify_dkg_signature!( - secp256k1, - DigitalSignatureScheme::SchnorrSecp256k1, - Secp256K1Sha256, - MESSAGE - ); - - test_verify_dkg_signature!( - taproot, - DigitalSignatureScheme::SchnorrTaproot, - Secp256K1Taproot, - MESSAGE - ); - - test_verify_dkg_signature!( - ed25519, - DigitalSignatureScheme::SchnorrEd25519, - Ed25519Sha512, - MESSAGE - ); - - test_verify_dkg_signature!(ed448, DigitalSignatureScheme::SchnorrEd448, Ed448Shake256, MESSAGE); - - test_verify_dkg_signature!(p256, DigitalSignatureScheme::SchnorrP256, P256Sha256, MESSAGE); - - test_verify_dkg_signature!(p384, DigitalSignatureScheme::SchnorrP384, P384Sha384, MESSAGE); - - test_verify_dkg_signature!( - ristretto255, - DigitalSignatureScheme::SchnorrRistretto255, - Ristretto255Sha512, - MESSAGE - ); -} diff --git a/pallets/dkg/src/signatures_schemes/schnorr_sr25519.rs b/pallets/dkg/src/signatures_schemes/schnorr_sr25519.rs deleted file mode 100644 index 874fb1fd9..000000000 --- a/pallets/dkg/src/signatures_schemes/schnorr_sr25519.rs +++ /dev/null @@ -1,62 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use frame_support::pallet_prelude::DispatchResult; -use parity_scale_codec::Encode; -use sp_core::sr25519; -use sp_io::{crypto::sr25519_verify, hashing::keccak_256}; - -use crate::{Config, Error}; - -use super::to_slice_32; - -/// Verifies the DKG signature result for Schnorr signatures over sr25519. -/// -/// This function uses the Schnorr signature algorithm to verify the provided signature -/// based on the message data, signature, and signing key in the DKG signature result. -/// -/// # Arguments -/// -/// * `msg` - The message data that was signed. -/// * `signature` - The Schnorr signature to be verified. -/// * `key` - The public key associated with the signature. -pub fn verify_schnorr_sr25519_signature( - msg: &[u8], - signature: &[u8], - key: &[u8], -) -> DispatchResult { - // Convert the signature from bytes to sr25519::Signature - let signature: sr25519::Signature = - signature.try_into().map_err(|_| Error::::CannotRetreiveSigner)?; - - // Encode the message data and compute its keccak256 hash - let msg = msg.encode(); - let hash = keccak_256(&msg); - - // Verify the Schnorr signature using sr25519_verify - if !sr25519_verify( - &signature, - &hash, - &sr25519::Public( - to_slice_32(key) - .unwrap_or_else(|| panic!("Failed to convert input to sr25519 public key")), - ), - ) { - return Err(Error::::InvalidSignature.into()); - } - - Ok(()) -} diff --git a/pallets/dkg/src/tests.rs b/pallets/dkg/src/tests.rs deleted file mode 100644 index d57e58ade..000000000 --- a/pallets/dkg/src/tests.rs +++ /dev/null @@ -1,621 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::mock::*; - -use frame_support::{assert_noop, assert_ok}; -use generic_ec::{ - coords::{Coordinate, HasAffineXAndParity, Parity}, - curves::Stark, - Point, -}; -use p256::ecdsa::{signature::hazmat::PrehashSigner, SigningKey, VerifyingKey}; -use pallet_dkg::{types::FeeInfo, Error, Event, FeeInfo as FeeInfoStorage}; -use parity_scale_codec::Encode; -use rand_core::OsRng; -use sp_core::{crypto::ByteArray, ecdsa, keccak_256, sr25519}; -use sp_io::crypto::{ecdsa_generate, ecdsa_sign_prehashed, sr25519_generate, sr25519_sign}; -use starknet_crypto::FieldElement; -use tangle_primitives::jobs::{ - DKGTSSKeyRotationResult, DKGTSSKeySubmissionResult, DKGTSSSignatureResult, - DigitalSignatureScheme, JobResult, -}; - -fn mock_pub_key_secp256k1_ecdsa() -> ecdsa::Public { - ecdsa_generate(tangle_crypto_primitives::ROLE_KEY_TYPE, None) -} - -fn mock_pub_key_sr25519() -> sr25519::Public { - sr25519_generate(tangle_crypto_primitives::ROLE_KEY_TYPE, None) -} - -fn mock_signature_secp256k1_ecdsa(pub_key: ecdsa::Public, role_key: ecdsa::Public) -> Vec { - let msg = role_key.encode(); - let hash = keccak_256(&msg); - let signature: ecdsa::Signature = - ecdsa_sign_prehashed(tangle_crypto_primitives::ROLE_KEY_TYPE, &pub_key, &hash).unwrap(); - // sanity check - assert!( - sp_io::crypto::ecdsa_verify_prehashed(&signature, &hash, &pub_key), - "Invalid signature" - ); - signature.encode() -} - -fn mock_signature_sr25519(pub_key: sr25519::Public, role_key: sr25519::Public) -> Vec { - let msg = role_key.to_vec().encode(); - let hash = keccak_256(&msg); - let signature: sr25519::Signature = - sr25519_sign(tangle_crypto_primitives::ROLE_KEY_TYPE, &pub_key, &hash).unwrap(); - // sanity check - assert!(sp_io::crypto::sr25519_verify(&signature, &hash, &pub_key)); - signature.encode() -} - -#[test] -fn set_fees_works() { - new_test_ext().execute_with(|| { - let new_fee = FeeInfo { - base_fee: 10, - dkg_validator_fee: 5, - sig_validator_fee: 5, - refresh_validator_fee: 5, - storage_fee_per_byte: 1, - storage_fee_per_block: 0, - }; - - // Dispatch a signed extrinsic. - assert_ok!(DKG::set_fee(RuntimeOrigin::signed(1), new_fee.clone())); - - assert_eq!(FeeInfoStorage::::get(), new_fee); - }); -} - -#[test] -fn dkg_key_verification_works_for_bls() { - new_test_ext().execute_with(|| { - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::Bls381, - key: vec![].try_into().unwrap(), - chain_code: None, - participants: vec![].try_into().unwrap(), - signatures: vec![].try_into().unwrap(), - threshold: 2, - }; - - // Should fail for empty participants - assert_noop!( - DKG::verify(JobResult::DKGPhaseOne(job_to_verify)), - Error::::NoParticipantsFound - ); - - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::Bls381, - key: vec![].try_into().unwrap(), - chain_code: None, - participants: vec![mock_pub_key_secp256k1_ecdsa() - .as_mut() - .to_vec() - .try_into() - .unwrap()] - .try_into() - .unwrap(), - signatures: vec![].try_into().unwrap(), - threshold: 2, - }; - - // Should fail for empty keys/signatures - assert_noop!( - DKG::verify(JobResult::DKGPhaseOne(job_to_verify)), - Error::::NoSignaturesFound - ); - - let mut pub_key = mock_pub_key_secp256k1_ecdsa(); - let signature = mock_signature_secp256k1_ecdsa(pub_key, pub_key); - - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::Bls381, - key: vec![].try_into().unwrap(), - chain_code: None, - participants: vec![mock_pub_key_secp256k1_ecdsa() - .as_mut() - .to_vec() - .try_into() - .unwrap()] - .try_into() - .unwrap(), - signatures: vec![signature.clone().try_into().unwrap()].try_into().unwrap(), - threshold: 1, - }; - - // should fail for less than threshold - assert_noop!( - DKG::verify(JobResult::DKGPhaseOne(job_to_verify)), - Error::::NotEnoughSigners - ); - - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::Bls381, - key: pub_key.0.to_vec().try_into().unwrap(), - chain_code: None, - participants: vec![pub_key.as_mut().to_vec().try_into().unwrap()].try_into().unwrap(), - signatures: vec![ - signature.clone().try_into().unwrap(), - signature.clone().try_into().unwrap(), - ] - .try_into() - .unwrap(), - threshold: 1, - }; - - // should fail for duplicate signers - assert_noop!( - DKG::verify(JobResult::DKGPhaseOne(job_to_verify)), - Error::::DuplicateSignature - ); - - // works correctly when all params as expected - let mut participant_one = mock_pub_key_secp256k1_ecdsa(); - let mut participant_two = mock_pub_key_secp256k1_ecdsa(); - let signature_one = mock_signature_secp256k1_ecdsa(participant_one, participant_one); - let signature_two = mock_signature_secp256k1_ecdsa(participant_two, participant_one); - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::Bls381, - key: participant_one.to_raw_vec().try_into().unwrap(), - chain_code: None, - participants: vec![ - participant_one.as_mut().to_vec().try_into().unwrap(), - participant_two.as_mut().to_vec().try_into().unwrap(), - ] - .try_into() - .unwrap(), - signatures: vec![signature_two.try_into().unwrap(), signature_one.try_into().unwrap()] - .try_into() - .unwrap(), - threshold: 1, - }; - - assert_ok!(DKG::verify(JobResult::DKGPhaseOne(job_to_verify)),); - }); -} - -#[test] -fn dkg_key_verification_works_for_ecdsa() { - new_test_ext().execute_with(|| { - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - key: vec![].try_into().unwrap(), - chain_code: None, - participants: vec![].try_into().unwrap(), - signatures: vec![].try_into().unwrap(), - threshold: 2, - }; - - // should fail for empty participants - assert_noop!( - DKG::verify(JobResult::DKGPhaseOne(job_to_verify)), - Error::::NoParticipantsFound - ); - - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - key: vec![].try_into().unwrap(), - chain_code: None, - participants: vec![mock_pub_key_secp256k1_ecdsa() - .as_mut() - .to_vec() - .try_into() - .unwrap()] - .try_into() - .unwrap(), - signatures: vec![].try_into().unwrap(), - threshold: 2, - }; - - // should fail for empty keys/signatures - assert_noop!( - DKG::verify(JobResult::DKGPhaseOne(job_to_verify)), - Error::::NoSignaturesFound - ); - - let mut pub_key = mock_pub_key_secp256k1_ecdsa(); - let signature = mock_signature_secp256k1_ecdsa(pub_key, pub_key); - - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - key: vec![].try_into().unwrap(), - chain_code: None, - participants: vec![mock_pub_key_secp256k1_ecdsa() - .as_mut() - .to_vec() - .try_into() - .unwrap()] - .try_into() - .unwrap(), - signatures: vec![signature.clone().try_into().unwrap()].try_into().unwrap(), - threshold: 1, - }; - - // should fail for less than threshold - assert_noop!( - DKG::verify(JobResult::DKGPhaseOne(job_to_verify)), - Error::::NotEnoughSigners - ); - - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - key: pub_key.0.to_vec().try_into().unwrap(), - chain_code: None, - participants: vec![pub_key.as_mut().to_vec().try_into().unwrap()].try_into().unwrap(), - signatures: vec![ - signature.clone().try_into().unwrap(), - signature.clone().try_into().unwrap(), - ] - .try_into() - .unwrap(), - threshold: 1, - }; - - // should fail for duplicate signers - assert_noop!( - DKG::verify(JobResult::DKGPhaseOne(job_to_verify)), - Error::::DuplicateSignature - ); - - // works correctly when all params as expected - let mut participant_one = mock_pub_key_secp256k1_ecdsa(); - let mut participant_two = mock_pub_key_secp256k1_ecdsa(); - let signature_one = mock_signature_secp256k1_ecdsa(participant_one, participant_one); - let signature_two = mock_signature_secp256k1_ecdsa(participant_two, participant_one); - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - key: participant_one.to_raw_vec().try_into().unwrap(), - chain_code: None, - participants: vec![ - participant_one.as_mut().to_vec().try_into().unwrap(), - participant_two.as_mut().to_vec().try_into().unwrap(), - ] - .try_into() - .unwrap(), - signatures: vec![signature_two.try_into().unwrap(), signature_one.try_into().unwrap()] - .try_into() - .unwrap(), - threshold: 1, - }; - - assert_ok!(DKG::verify(JobResult::DKGPhaseOne(job_to_verify)),); - }); -} - -#[test] -fn dkg_key_verifcation_works_for_ecdsa_when_n_equals_t() { - new_test_ext().execute_with(|| { - let mut participant_one = mock_pub_key_secp256k1_ecdsa(); - let mut participant_two = mock_pub_key_secp256k1_ecdsa(); - let signature_one = mock_signature_secp256k1_ecdsa(participant_one, participant_one); - let signature_two = mock_signature_secp256k1_ecdsa(participant_two, participant_one); - let job_to_verify = DKGTSSKeySubmissionResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - key: participant_one.to_raw_vec().try_into().unwrap(), - chain_code: None, - participants: vec![ - participant_one.as_mut().to_vec().try_into().unwrap(), - participant_two.as_mut().to_vec().try_into().unwrap(), - ] - .try_into() - .unwrap(), - signatures: vec![signature_two.try_into().unwrap(), signature_one.try_into().unwrap()] - .try_into() - .unwrap(), - threshold: 2, - }; - - assert_ok!(DKG::verify(JobResult::DKGPhaseOne(job_to_verify)),); - }); -} - -#[test] -fn signature_verification_works_bls() { - use snowbridge_milagro_bls::{PublicKey, SecretKey, Signature}; - - const BLS_SECRET_KEY: [u8; 32] = [ - 25, 192, 46, 5, 150, 93, 249, 180, 243, 38, 104, 158, 250, 226, 60, 6, 248, 5, 232, 52, - 111, 140, 82, 20, 226, 220, 135, 137, 186, 203, 181, 133, - ]; - - const BLS_DATA_TO_SIGN: &[u8; 13] = b"Hello, world!"; - - new_test_ext().execute_with(|| { - let secret_key = SecretKey::from_bytes(&BLS_SECRET_KEY).unwrap(); - let pub_key = PublicKey::from_secret_key(&secret_key); - let message = keccak_256(BLS_DATA_TO_SIGN); - let signature = Signature::new(&message, &secret_key); - - let job_to_verify: DKGTSSSignatureResult< - MaxDataLen, - MaxKeyLen, - MaxSignatureLen, - MaxAdditionalParamsLen, - > = DKGTSSSignatureResult { - signature_scheme: DigitalSignatureScheme::Bls381, - derivation_path: None, - signature: signature.as_bytes().to_vec().try_into().unwrap(), - verifying_key: pub_key.as_bytes().to_vec().try_into().unwrap(), - data: BLS_DATA_TO_SIGN.to_vec().try_into().unwrap(), - chain_code: None, - }; - - // Should fail for an invalid public key - assert_noop!( - DKG::verify(JobResult::DKGPhaseTwo(job_to_verify)), - Error::::InvalidBlsPublicKey - ); - - let job_to_verify: DKGTSSSignatureResult< - MaxDataLen, - MaxKeyLen, - MaxSignatureLen, - MaxAdditionalParamsLen, - > = DKGTSSSignatureResult { - signature_scheme: DigitalSignatureScheme::Bls381, - derivation_path: None, - signature: signature.as_bytes()[..10].to_vec().try_into().unwrap(), - data: BLS_DATA_TO_SIGN.to_vec().try_into().unwrap(), - verifying_key: pub_key.as_uncompressed_bytes().to_vec().try_into().unwrap(), - chain_code: None, - }; - - // Should fail for an invalid signature - assert_noop!( - DKG::verify(JobResult::DKGPhaseTwo(job_to_verify)), - Error::::InvalidSignatureData - ); - - let job_to_verify: DKGTSSSignatureResult< - MaxDataLen, - MaxKeyLen, - MaxSignatureLen, - MaxAdditionalParamsLen, - > = DKGTSSSignatureResult { - signature_scheme: DigitalSignatureScheme::Bls381, - derivation_path: None, - signature: signature.as_bytes().to_vec().try_into().unwrap(), - verifying_key: pub_key.as_uncompressed_bytes().to_vec().try_into().unwrap(), - data: BLS_DATA_TO_SIGN.to_vec().try_into().unwrap(), - chain_code: None, - }; - - assert_ok!(DKG::verify(JobResult::DKGPhaseTwo(job_to_verify))); - }); -} - -#[test] -fn signature_verification_works_secp256k1_ecdsa() { - new_test_ext().execute_with(|| { - let pub_key = mock_pub_key_secp256k1_ecdsa(); - let signature = mock_signature_secp256k1_ecdsa(pub_key, mock_pub_key_secp256k1_ecdsa()); - - let job_to_verify = DKGTSSSignatureResult::< - MaxDataLen, - MaxKeyLen, - MaxSignatureLen, - MaxAdditionalParamsLen, - > { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - derivation_path: None, - signature: signature[..64].to_vec().try_into().unwrap(), - data: pub_key.to_raw_vec().try_into().unwrap(), - verifying_key: pub_key.to_raw_vec().try_into().unwrap(), - chain_code: None, - }; - - // should fail for invalid keys - assert_noop!( - DKG::verify(JobResult::DKGPhaseTwo(job_to_verify)), - Error::::InvalidSignature - ); - - let signature = mock_signature_secp256k1_ecdsa(pub_key, pub_key); - let job_to_verify = DKGTSSSignatureResult::< - MaxDataLen, - MaxKeyLen, - MaxSignatureLen, - MaxAdditionalParamsLen, - > { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - derivation_path: None, - signature: signature[..64].to_vec().try_into().unwrap(), - data: pub_key.to_raw_vec().try_into().unwrap(), - verifying_key: pub_key.to_raw_vec().try_into().unwrap(), - chain_code: None, - }; - - // should work with correct params - assert_ok!(DKG::verify(JobResult::DKGPhaseTwo(job_to_verify))); - }); -} - -#[test] -fn signature_verification_works_sr25519_schnorr() { - new_test_ext().execute_with(|| { - let pub_key = mock_pub_key_sr25519(); - let signature = mock_signature_sr25519(pub_key, mock_pub_key_sr25519()); - - let job_to_verify = DKGTSSSignatureResult::< - MaxDataLen, - MaxKeyLen, - MaxSignatureLen, - MaxAdditionalParamsLen, - > { - signature_scheme: DigitalSignatureScheme::SchnorrSr25519, - derivation_path: None, - signature: signature.try_into().unwrap(), - data: pub_key.to_raw_vec().try_into().unwrap(), - verifying_key: pub_key.to_raw_vec().try_into().unwrap(), - chain_code: None, - }; - - // should fail for invalid keys - assert_noop!( - DKG::verify(JobResult::DKGPhaseTwo(job_to_verify)), - Error::::InvalidSignature - ); - - let signature = mock_signature_sr25519(pub_key, pub_key); - let job_to_verify = DKGTSSSignatureResult { - signature_scheme: DigitalSignatureScheme::SchnorrSr25519, - derivation_path: None, - signature: signature.try_into().unwrap(), - data: pub_key.to_raw_vec().try_into().unwrap(), - verifying_key: pub_key.to_raw_vec().try_into().unwrap(), - chain_code: None, - }; - - // should work with correct params - assert_ok!(DKG::verify(JobResult::DKGPhaseTwo(job_to_verify))); - }); -} - -#[test] -fn signature_verification_works_secp256r1_ecdsa() { - new_test_ext().execute_with(|| { - let mut rng = OsRng; - let secret_key = SigningKey::random(&mut rng); - let public_key = VerifyingKey::from(&secret_key); - let message = b"hello world"; - let prehash = keccak_256(message); - let (signature, _) = secret_key.sign_prehash(&prehash).unwrap(); - - let job_to_verify = DKGTSSSignatureResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256r1, - derivation_path: None, - signature: signature.to_vec().try_into().unwrap(), - data: message.to_vec().try_into().unwrap(), - verifying_key: public_key - .to_encoded_point(true) - .to_bytes() - .to_vec() - .try_into() - .unwrap(), - chain_code: None, - }; - - // should work with correct params - assert_ok!(DKG::verify(JobResult::DKGPhaseTwo(job_to_verify))); - }); -} - -pub fn field_element_from_be_hex(hex: &str) -> FieldElement { - let decoded = hex::decode(hex.trim_start_matches("0x")).unwrap(); - - if decoded.len() > 32 { - panic!("hex string too long"); - } - - let mut buffer = [0u8; 32]; - buffer[(32 - decoded.len())..].copy_from_slice(&decoded[..]); - - FieldElement::from_bytes_be(&buffer).unwrap() -} - -#[test] -fn signature_verification_works_stark_ecdsa() { - new_test_ext().execute_with(|| { - let private_key = field_element_from_be_hex( - "0000000000000000000000000000000000000000000000000000000000000001", - ); - let message = field_element_from_be_hex( - "0000000000000000000000000000000000000000000000000000000000000002", - ); - let k = field_element_from_be_hex( - "0000000000000000000000000000000000000000000000000000000000000003", - ); - let signature = starknet_crypto::sign(&private_key, &message, &k).unwrap(); - let public_key = starknet_crypto::get_public_key(&private_key); - let public_key_point: Point = Point::from_x_and_parity( - &Coordinate::from_be_bytes(&public_key.to_bytes_be()).unwrap(), - Parity::Odd, - ) - .unwrap(); - let mut encoded_signature: [u8; 64] = [0u8; 64]; - encoded_signature[..32].copy_from_slice(&signature.r.to_bytes_be()); - encoded_signature[32..].copy_from_slice(&signature.s.to_bytes_be()); - - let job_to_verify = DKGTSSSignatureResult { - signature_scheme: DigitalSignatureScheme::EcdsaStark, - derivation_path: None, - signature: encoded_signature.to_vec().try_into().unwrap(), - data: message.to_bytes_be().to_vec().try_into().unwrap(), - verifying_key: public_key_point.to_bytes(true).to_vec().try_into().unwrap(), - chain_code: None, - }; - - // should work with correct params - assert_ok!(DKG::verify(JobResult::DKGPhaseTwo(job_to_verify))); - }); -} - -#[test] -fn dkg_key_rotation_works() { - new_test_ext().execute_with(|| { - let curr_key = mock_pub_key_secp256k1_ecdsa(); - let new_key = mock_pub_key_secp256k1_ecdsa(); - let invalid_key = mock_pub_key_secp256k1_ecdsa(); - let signature = mock_signature_secp256k1_ecdsa(invalid_key, new_key); - - let job_to_verify = DKGTSSKeyRotationResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - derivation_path: None, - signature: signature[..64].to_vec().try_into().unwrap(), - key: curr_key.to_raw_vec().try_into().unwrap(), - new_key: new_key.to_raw_vec().try_into().unwrap(), - phase_one_id: 1, - new_phase_one_id: 2, - chain_code: None, - }; - - // should fail for invalid keys - assert_noop!( - DKG::verify(JobResult::DKGPhaseFour(job_to_verify)), - Error::::InvalidSignature - ); - - let signature = mock_signature_secp256k1_ecdsa(curr_key, new_key); - - let job_to_verify = DKGTSSKeyRotationResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - signature: signature[..64].to_vec().try_into().unwrap(), - key: curr_key.to_raw_vec().try_into().unwrap(), - new_key: new_key.to_raw_vec().try_into().unwrap(), - phase_one_id: 1, - new_phase_one_id: 2, - derivation_path: None, - chain_code: None, - }; - // should work with correct params - assert_ok!(DKG::verify(JobResult::DKGPhaseFour(job_to_verify))); - // should emit KeyRotated event - assert!( - System::events().iter().any(|r| r.event - == RuntimeEvent::DKG(Event::KeyRotated { - from_job_id: 1, - to_job_id: 2, - signature: signature[..64].to_vec(), - })), - "KeyRotated event not emitted" - ); - }); -} diff --git a/pallets/dkg/src/types.rs b/pallets/dkg/src/types.rs deleted file mode 100644 index 7ff89f0c6..000000000 --- a/pallets/dkg/src/types.rs +++ /dev/null @@ -1,72 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use super::*; -use frame_support::traits::Currency; -use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use scale_info::TypeInfo; -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; -use sp_core::RuntimeDebug; - -pub type BalanceOf = - <::Currency as Currency<::AccountId>>::Balance; - -pub type FeeInfoOf = FeeInfo>; - -/// This struct represents the preset fee to charge for different DKG job types -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen, Default)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct FeeInfo { - /// The base fee for all jobs. - pub base_fee: Balance, - - /// The fee for Distributed Key Generation (DKG) job. - pub dkg_validator_fee: Balance, - - /// The fee for signature generation. - pub sig_validator_fee: Balance, - - /// The fee for refresh existing DKG. - pub refresh_validator_fee: Balance, - - /// The storage fee per byts - pub storage_fee_per_byte: Balance, - - // The storage fee per block - pub storage_fee_per_block: Balance, -} - -impl FeeInfo { - /// Get the base fee. - pub fn get_base_fee(self) -> Balance { - self.base_fee - } - - /// Get the DKG validator fee. - pub fn get_dkg_validator_fee(self) -> Balance { - self.dkg_validator_fee - } - - /// Get the signature validator fee. - pub fn get_sig_validator_fee(self) -> Balance { - self.sig_validator_fee - } - - /// Get the storage fee per byte - pub fn get_storage_fee_per_byte(self) -> Balance { - self.storage_fee_per_byte - } -} diff --git a/pallets/dkg/src/weights.rs b/pallets/dkg/src/weights.rs deleted file mode 100644 index 37c381ce6..000000000 --- a/pallets/dkg/src/weights.rs +++ /dev/null @@ -1,55 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -//! Autogenerated weights for pallet_dkg -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 -//! DATE: 2021-08-16, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 - -// Executed Command: -// target/release/tangle -// benchmark -// --chain=dev -// --steps=50 -// --repeat=20 -// --pallet=pallet_dkg -// --extrinsic=* -// --execution=wasm -// --wasm-execution=compiled -// --heap-pages=4096 - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(clippy::unnecessary_cast)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_dkg. -pub trait WeightInfo { - fn set_fee() -> Weight; -} - -// For backwards compatibility and tests -impl WeightInfo for () { - fn set_fee() -> Weight { - Weight::from_parts(32_778_000, 0) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/pallets/jobs/Cargo.toml b/pallets/jobs/Cargo.toml deleted file mode 100644 index 53ff9f8ac..000000000 --- a/pallets/jobs/Cargo.toml +++ /dev/null @@ -1,98 +0,0 @@ -[package] -name = "pallet-jobs" -version = { workspace = true } -authors = { workspace = true } -edition = { workspace = true } -homepage = { workspace = true } -license = { workspace = true } -repository = { workspace = true } - -[dependencies] -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -tangle-crypto-primitives = { workspace = true, default-features = false } -tangle-primitives = { workspace = true, default-features = false } - -[dev-dependencies] -ethereum = { workspace = true, features = ["with-codec"] } -ethers = "2.0" -hex = { workspace = true } -hex-literal = { workspace = true } -libsecp256k1 = { workspace = true } -pallet-balances = { workspace = true } -pallet-timestamp = { workspace = true } -serde = { workspace = true } -serde_json = { workspace = true } -smallvec = { workspace = true } -sp-io = { workspace = true } -sp-keystore = { workspace = true } - -# Frontier Primitive -fp-account = { workspace = true } -fp-consensus = { workspace = true } -fp-dynamic-fee = { workspace = true } -fp-ethereum = { workspace = true } -fp-evm = { workspace = true } -fp-rpc = { workspace = true } -fp-self-contained = { workspace = true } -fp-storage = { workspace = true } - -# Frontier FRAME -pallet-base-fee = { workspace = true } -pallet-dynamic-fee = { workspace = true } -pallet-ethereum = { workspace = true } -pallet-evm = { workspace = true } -pallet-evm-chain-id = { workspace = true } - -# Roles pallet -pallet-roles = { workspace = true } -pallet-session = { workspace = true } -pallet-staking = { workspace = true } -sp-staking = { workspace = true } -frame-election-provider-support = { workspace = true } - -[features] -default = ["std"] -std = [ - "scale-info/std", - "sp-runtime/std", - "frame-benchmarking?/std", - "frame-support/std", - "frame-system/std", - "sp-core/std", - "sp-std/std", - "tangle-primitives/std", - "tangle-crypto-primitives/std", - "pallet-balances/std", - "pallet-timestamp/std", - "fp-account/std", - "fp-consensus/std", - "fp-dynamic-fee/std", - "fp-ethereum/std", - "fp-evm/std", - "fp-rpc/std", - "fp-self-contained/std", - "fp-storage/std", - "pallet-base-fee/std", - "pallet-dynamic-fee/std", - "pallet-ethereum/std", - "pallet-evm/std", - "pallet-evm-chain-id/std", - "pallet-roles/std" -] -try-runtime = ["frame-support/try-runtime"] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-ethereum/runtime-benchmarks", - "pallet-evm/runtime-benchmarks", -] diff --git a/pallets/jobs/rpc/runtime-api/src/lib.rs b/pallets/jobs/rpc/runtime-api/src/lib.rs deleted file mode 100644 index e3829722e..000000000 --- a/pallets/jobs/rpc/runtime-api/src/lib.rs +++ /dev/null @@ -1,96 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -//! Runtime API definition for jobs pallet. - -#![cfg_attr(not(feature = "std"), no_std)] -#![allow(clippy::type_complexity)] -use parity_scale_codec::Codec; -use sp_runtime::{ - traits::{Get, MaybeDisplay}, - Serialize, -}; -use sp_std::vec::Vec; -use tangle_primitives::{ - jobs::{JobId, PhaseResult, RpcResponseJobsData}, - roles::RoleType, -}; - -pub type BlockNumberOf = - <::HeaderT as sp_runtime::traits::Header>::Number; - -sp_api::decl_runtime_apis! { - pub trait JobsApi where - AccountId: Codec + MaybeDisplay + Serialize, - MaxParticipants: Codec + Serialize + Get + Clone, - MaxSubmissionLen: Codec + Serialize + Get, - MaxKeyLen: Codec + Serialize + Get, - MaxDataLen: Codec + Serialize + Get, - MaxSignatureLen: Codec + Serialize + Get, - MaxProofLen: Codec + Serialize + Get, - MaxAdditionalParamsLen: Codec + Serialize + Get, - { - /// Query jobs associated with a specific validator. - /// - /// This function takes a `validator` parameter of type `AccountId` and attempts - /// to retrieve a list of jobs associated with the provided validator. If successful, - /// it constructs a vector of `RpcResponseJobsData` containing information - /// about the jobs and returns it as a `Result`. - /// - /// # Arguments - /// - /// * `validator` - The account ID of the validator whose jobs are to be queried. - /// - /// # Returns - /// - /// An optional vec of `RpcResponseJobsData` of jobs assigned to validator - fn query_jobs_by_validator(validator: AccountId) -> Option, MaxParticipants, MaxSubmissionLen, MaxAdditionalParamsLen>>>; - /// Queries a job by its key and ID. - /// - /// # Arguments - /// - /// * `role_type` - The role of the job. - /// * `job_id` - The ID of the job. - /// - /// # Returns - /// - /// An optional `RpcResponseJobsData` containing the account ID of the job. - fn query_job_by_id(role_type: RoleType, job_id: JobId) -> Option, MaxParticipants, MaxSubmissionLen, MaxAdditionalParamsLen>>; - - /// Queries the result of a job by its role_type and ID. - /// - /// # Arguments - /// - /// * `role_type` - The role of the job. - /// * `job_id` - The ID of the job. - /// - /// # Returns - /// - /// An `Option` containing the phase one result of the job, wrapped in an `PhaseResult`. - fn query_job_result(role_type: RoleType, job_id: JobId) -> Option, MaxParticipants, MaxKeyLen, MaxDataLen, MaxSignatureLen, MaxSubmissionLen, MaxProofLen, MaxAdditionalParamsLen>>; - - /// Queries next job ID. - /// - /// # Returns - /// Next job ID. - fn query_next_job_id() -> JobId; - - /// Queries restaker's role key - /// - /// # Returns - /// Role key - fn query_restaker_role_key(address: AccountId) -> Option>; - } -} diff --git a/pallets/jobs/rpc/src/lib.rs b/pallets/jobs/rpc/src/lib.rs deleted file mode 100644 index 06593db6b..000000000 --- a/pallets/jobs/rpc/src/lib.rs +++ /dev/null @@ -1,311 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#![allow(clippy::unnecessary_mut_passed)] -#![allow(clippy::type_complexity)] -use jsonrpsee::{ - core::RpcResult, - proc_macros::rpc, - types::error::{ErrorObject, ErrorObjectOwned}, -}; -pub use pallet_jobs_rpc_runtime_api::JobsApi as JobsRuntimeApi; -use parity_scale_codec::Codec; -use sp_api::ProvideRuntimeApi; -use sp_blockchain::HeaderBackend; -use sp_runtime::{ - traits::{Block as BlockT, Get, MaybeDisplay}, - Serialize, -}; -use std::sync::Arc; -use tangle_primitives::{ - jobs::{JobId, PhaseResult, RpcResponseJobsData}, - roles::RoleType, -}; - -type BlockNumberOf = - <::HeaderT as sp_runtime::traits::Header>::Number; - -/// JobsClient RPC methods. -#[rpc(client, server)] -pub trait JobsApi< - BlockHash, - AccountId, - BlockNumber, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxKeyLen: Get, - MaxDataLen: Get, - MaxSignatureLen: Get, - MaxProofLen: Get, - MaxAdditionalParamsLen: Get, -> -{ - #[method(name = "jobs_queryJobsByValidator")] - fn query_jobs_by_validator( - &self, - at: Option, - validator: AccountId, - ) -> RpcResult< - Option< - Vec< - RpcResponseJobsData< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - >, - >, - >; - - #[method(name = "jobs_queryJobById")] - fn query_job_by_id( - &self, - at: Option, - role_type: RoleType, - job_id: JobId, - ) -> RpcResult< - Option< - RpcResponseJobsData< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - >, - >; - - #[method(name = "jobs_queryPhaseOneById")] - fn query_job_result( - &self, - at: Option, - role_type: RoleType, - job_id: JobId, - ) -> RpcResult< - Option< - PhaseResult< - AccountId, - BlockNumber, - MaxParticipants, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxSubmissionLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - >, - >; - - #[method(name = "jobs_queryNextJobId")] - fn query_next_job_id(&self, at: Option) -> RpcResult; - - #[method(name = "jobs_queryRestakerRoleKey")] - fn query_restaker_role_key( - &self, - at: Option, - address: AccountId, - ) -> RpcResult>>; -} - -/// A struct that implements the `JobsApi`. -pub struct JobsClient { - client: Arc, - _marker: std::marker::PhantomData<(M, P)>, -} - -impl JobsClient { - /// Create new `JobsClient` instance with the given reference to the client. - pub fn new(client: Arc) -> Self { - Self { client, _marker: Default::default() } - } -} - -impl< - C, - Block, - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > - JobsApiServer< - ::Hash, - AccountId, - BlockNumberOf, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > for JobsClient -where - Block: BlockT, - AccountId: Codec + MaybeDisplay + Send + Sync + 'static + Serialize, - MaxParticipants: Codec + Serialize + Get + Clone, - MaxSubmissionLen: Codec + Serialize + Get, - MaxKeyLen: Codec + Serialize + Get, - MaxDataLen: Codec + Serialize + Get, - MaxSignatureLen: Codec + Serialize + Get, - MaxProofLen: Codec + Serialize + Get, - MaxAdditionalParamsLen: Codec + Serialize + Get, - C: HeaderBackend + ProvideRuntimeApi + Send + Sync + 'static, - C::Api: JobsRuntimeApi< - Block, - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, -{ - fn query_jobs_by_validator( - &self, - at: Option<::Hash>, - validator: AccountId, - ) -> RpcResult< - Option< - Vec< - RpcResponseJobsData< - AccountId, - BlockNumberOf, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - >, - >, - > { - let api = self.client.runtime_api(); - let at = at.unwrap_or_else(|| self.client.info().best_hash); - - match api.query_jobs_by_validator(at, validator) { - Ok(res) => Ok(res), - Err(e) => Err(runtime_error_into_rpc_err(e)), - } - } - - fn query_job_by_id( - &self, - at: Option<::Hash>, - role_type: RoleType, - job_id: JobId, - ) -> RpcResult< - Option< - RpcResponseJobsData< - AccountId, - BlockNumberOf, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - >, - > { - let api = self.client.runtime_api(); - let at = at.unwrap_or_else(|| self.client.info().best_hash); - match api.query_job_by_id(at, role_type, job_id) { - Ok(res) => Ok(res), - Err(e) => Err(runtime_error_into_rpc_err(e)), - } - } - - fn query_job_result( - &self, - at: Option<::Hash>, - role_type: RoleType, - job_id: JobId, - ) -> RpcResult< - Option< - PhaseResult< - AccountId, - BlockNumberOf, - MaxParticipants, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxSubmissionLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - >, - > { - let api = self.client.runtime_api(); - let at = at.unwrap_or_else(|| self.client.info().best_hash); - - match api.query_job_result(at, role_type, job_id) { - Ok(res) => Ok(res), - Err(e) => Err(runtime_error_into_rpc_err(e)), - } - } - - fn query_next_job_id(&self, at: Option<::Hash>) -> RpcResult { - let api = self.client.runtime_api(); - let at = at.unwrap_or_else(|| self.client.info().best_hash); - - match api.query_next_job_id(at) { - Ok(res) => Ok(res), - Err(e) => Err(runtime_error_into_rpc_err(e)), - } - } - - fn query_restaker_role_key( - &self, - at: Option<::Hash>, - address: AccountId, - ) -> RpcResult>> { - let api = self.client.runtime_api(); - let at = at.unwrap_or_else(|| self.client.info().best_hash); - - match api.query_restaker_role_key(at, address) { - Ok(res) => Ok(res), - Err(e) => Err(runtime_error_into_rpc_err(e)), - } - } -} - -/// Error type of this RPC api. -pub enum Error { - /// The transaction was not decodable. - DecodeError, - /// The call to runtime failed. - RuntimeError, -} - -impl From for i32 { - fn from(e: Error) -> i32 { - match e { - Error::RuntimeError => 1, - Error::DecodeError => 2, - } - } -} - -/// Converts a runtime trap into an RPC error. -fn runtime_error_into_rpc_err(err: impl std::fmt::Debug) -> ErrorObjectOwned { - ErrorObject::owned(RUNTIME_ERROR, "Runtime error", Some(format!("{:?}", err))) -} - -const RUNTIME_ERROR: i32 = 1; diff --git a/pallets/jobs/src/benchmarking.rs b/pallets/jobs/src/benchmarking.rs deleted file mode 100644 index 0f0eb5fd6..000000000 --- a/pallets/jobs/src/benchmarking.rs +++ /dev/null @@ -1,186 +0,0 @@ -use crate::{ - BalanceOf, Call, Config, JobSubmissionOf, KnownResults, Pallet, PhaseResult, - ValidatorOffenceType, ValidatorRewards, -}; -use frame_benchmarking::{account, benchmarks, impl_benchmark_test_suite}; -use frame_support::traits::Currency; -use frame_system::RawOrigin; -use parity_scale_codec::Decode; -use sp_runtime::traits::Bounded; -use sp_std::vec; -use tangle_primitives::{ - jobs::{ - DKGTSSKeySubmissionResult, DKGTSSPhaseOneJobType, DigitalSignatureScheme, FallbackOptions, - JobId, JobResult, JobType, - }, - roles::RoleType, -}; - -fn mock_account_id(id: u8) -> T::AccountId { - let stash: T::AccountId = T::AccountId::decode(&mut &[id; 32][..]).unwrap(); - stash -} - -benchmarks! { - // Benchmark submit_job function - submit_job { - let caller: T::AccountId = mock_account_id::(1u8); - let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); - let job = JobSubmissionOf:: { - expiry: 100u32.into(), - ttl: 100u32.into(), - fallback: FallbackOptions::Destroy, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: vec![caller.clone(), caller.clone()].try_into().unwrap(), - threshold: 1, - permitted_caller: None, - role_type : Default::default(), - hd_wallet: false - }), - }; - - }: _(RawOrigin::Signed(caller.clone()), job.clone()) - - // Benchmark submit_job_result function - submit_job_result { - let caller: T::AccountId = mock_account_id::(1u8); - let validator2: T::AccountId = mock_account_id::(2u8); - let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); - let job = JobSubmissionOf:: { - expiry: 100u32.into(), - ttl: 100u32.into(), - fallback: FallbackOptions::Destroy, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: vec![caller.clone(), validator2].try_into().unwrap(), - threshold: 1, - permitted_caller: None, - role_type : Default::default(), - hd_wallet: false, - }), - }; - let _ = Pallet::::submit_job(RawOrigin::Signed(caller.clone()).into(), job); - let job_key: RoleType = RoleType::Tss(Default::default()); - let job_id: JobId = 0; - let result = JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - chain_code: None, - }); - }: _(RawOrigin::Signed(caller.clone()), job_key.clone(), job_id.clone(), result) - - // Benchmark withdraw_rewards function - withdraw_rewards { - let caller: T::AccountId = mock_account_id::(1u8); - let pallet_account = Pallet::::rewards_account_id(); - let _ = T::Currency::make_free_balance_be(&pallet_account, BalanceOf::::max_value()); - let reward_amount: BalanceOf = 100u32.into(); // Set a reward amount for testing - ValidatorRewards::::insert(caller.clone(), reward_amount); - }: _(RawOrigin::Signed(caller.clone())) - - // Benchmark report_inactive_validator function - report_inactive_validator { - let caller: T::AccountId = mock_account_id::(1u8); - let validator2: T::AccountId = mock_account_id::(2u8); - let validator3: T::AccountId = mock_account_id::(3u8); - let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); - let job = JobSubmissionOf:: { - expiry: 100u32.into(), - ttl: 100u32.into(), - fallback: FallbackOptions::Destroy, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: vec![caller.clone(), validator2, validator3].try_into().unwrap(), - threshold: 2, - permitted_caller: None, - role_type : Default::default(), - hd_wallet: false, - }), - }; - let _ = Pallet::::submit_job(RawOrigin::Signed(caller.clone()).into(), job); - let job_key: RoleType = RoleType::Tss(Default::default()); - let job_id: JobId = 0; - }: _(RawOrigin::Signed(caller.clone()), job_key.clone(), job_id.clone(), caller.clone(), ValidatorOffenceType::Inactivity, vec![]) - - set_permitted_caller { - let caller: T::AccountId = mock_account_id::(1u8); - let new_permitted_caller: T::AccountId = mock_account_id::(2u8); - let job_info = JobSubmissionOf:: { - expiry: 100u32.into(), - ttl: 100u32.into(), - fallback: FallbackOptions::Destroy, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: vec![caller.clone(), caller.clone()].try_into().unwrap(), - threshold: 1, - permitted_caller: Some(caller.clone()), - role_type : Default::default(), - hd_wallet: false - }), - }; - let job_key: RoleType = RoleType::Tss(Default::default()); - let job_id: JobId = 0; - let result = JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - chain_code: None, - }); - let result = PhaseResult { - owner: caller.clone(), - job_type: job_info.job_type.clone(), - ttl: job_info.ttl, - permitted_caller: Some(caller.clone()), - result, - }; - KnownResults::::insert(job_key, job_id, result); - - }: _(RawOrigin::Signed(caller.clone()),job_key, job_id, new_permitted_caller.clone()) - - set_time_fee { - let caller: T::AccountId = mock_account_id::(1u8); - let new_time_fee: BalanceOf = 100u32.into(); - let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); - }: _(RawOrigin::Root, new_time_fee) - - - // Benchmark extend_job_result_ttl function - extend_job_result_ttl { - let caller: T::AccountId = mock_account_id::(1u8); - let validator2: T::AccountId = mock_account_id::(2u8); - let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); - let job = JobSubmissionOf:: { - expiry: 100u32.into(), - ttl: 100u32.into(), - fallback: FallbackOptions::Destroy, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: vec![caller.clone(), validator2].try_into().unwrap(), - threshold: 1, - permitted_caller: None, - role_type : Default::default(), - hd_wallet: false, - }), - }; - let _ = Pallet::::submit_job(RawOrigin::Signed(caller.clone()).into(), job); - let job_key: RoleType = RoleType::Tss(Default::default()); - let job_id: JobId = 0; - let result = JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - chain_code: None, - }); - let _ = Pallet::::submit_job_result(RawOrigin::Signed(caller.clone()).into(), job_key.clone(), job_id.clone(), result); - }: _(RawOrigin::Signed(caller.clone()), RoleType::Tss(Default::default()), job_id.clone(), 10u32.into()) -} - -// Define the module and associated types for the benchmarks -impl_benchmark_test_suite!( - Pallet, - crate::mock::new_test_ext(vec![1, 2, 3, 4]), - crate::mock::Runtime, -); diff --git a/pallets/jobs/src/functions.rs b/pallets/jobs/src/functions.rs deleted file mode 100644 index 9978f4d28..000000000 --- a/pallets/jobs/src/functions.rs +++ /dev/null @@ -1,652 +0,0 @@ -use super::*; -use crate::types::{ - DKGTSSKeyRotationResultOf, DKGTSSKeySubmissionResultOf, DKGTSSSignatureResultOf, - ParticipantKeyOf, ParticipantKeysOf, ZkSaaSCircuitResultOf, ZkSaaSProofResultOf, -}; -use sp_runtime::traits::Zero; -use sp_runtime::Saturating; -use tangle_primitives::{ - jobs::{ - DKGTSSKeyRefreshResult, DKGTSSPhaseOneJobType, FallbackOptions, JobType, JobWithResult, - ZkSaaSPhaseOneJobType, - }, - roles::RoleType, -}; - -impl Pallet { - /// Add a job ID to the validator lookup. - /// - /// This function associates a job ID with a specific validator account. - /// - /// # Parameters - /// - /// - `validator`: The account ID of the validator. - /// - `job_id`: The ID of the job to associate with the validator. - /// - `role_type`: An identifier for the role type of the job. - /// - /// # Errors - /// - /// Returns a `DispatchError` if the operation fails. - pub(crate) fn add_job_to_validator_lookup( - validator: T::AccountId, - role_type: RoleType, - job_id: JobId, - ) -> DispatchResult { - ValidatorJobIdLookup::::try_mutate(validator.clone(), |jobs| -> DispatchResult { - let jobs = jobs.get_or_insert_with(Default::default); - - // ensure the max limit of validator is followed - let max_allowed = T::RolesHandler::get_max_active_service_for_restaker(validator) - .unwrap_or_else(Default::default); - - jobs.try_push((role_type, job_id)) - .map_err(|_| Error::::TooManyJobsForValidator)?; - - ensure!(jobs.len() <= max_allowed as usize, Error::::TooManyJobsForValidator); - Ok(()) - }) - } - - /// Get the next available job ID. - /// - /// This function returns the current job ID and increments the internal counter for the next - /// job. - /// - /// # Returns - /// - /// Returns the next available job ID if successful. - /// - /// # Errors - /// - /// Returns a `DispatchError` if the operation fails. - pub(crate) fn get_next_job_id() -> Result { - let current_job_id = NextJobId::::get(); - NextJobId::::try_mutate(|job_id| -> DispatchResult { - *job_id = job_id.saturating_add(1); - Ok(()) - })?; - Ok(current_job_id) - } - - /// Record rewards to a validator. - /// - /// This function records the rewards earned by a validator account. - /// - /// # Parameters - /// - /// - `validator`: The account ID of the validator. - /// - `reward`: The amount of rewards to record. - /// - /// # Errors - /// - /// Returns a `DispatchError` if the operation fails. - pub(crate) fn record_reward_to_validator( - validator: T::AccountId, - reward: BalanceOf, - ) -> DispatchResult { - ValidatorRewards::::try_mutate(validator, |existing| -> DispatchResult { - let existing = existing.get_or_insert_with(Default::default); - *existing = existing.saturating_add(reward); - Ok(()) - }) - } - - /// Get the account ID of the rewards pot. - /// - /// This function returns the account ID associated with the rewards pot. - pub fn rewards_account_id() -> T::AccountId { - T::PalletId::get().into_sub_account_truncating(0) - } - - pub fn refund_job_creator(owner: &T::AccountId, fee: BalanceOf) -> DispatchResult { - // refund the job creator - T::Currency::transfer( - &Self::rewards_account_id(), - owner, - fee, - ExistenceRequirement::AllowDeath, - ) - } - - /// Try to remove a validator from a submitted job. - /// - /// # Parameters - /// - /// - `role_type`: An identifier for the role type of the job. - /// - `job_id`: A unique identifier for the job within the category. - /// - `validator`: The account ID of the validator to be removed. - /// - /// # Errors - /// - /// This function can return an error if: - /// - /// - The specified job is not found. - /// - The phase one result is not found (for phase two jobs). - /// - There are not enough validators after removal. - /// - The threshold is zero. - /// - The next job ID cannot be generated. - /// - The fee transfer fails. - /// - /// # Details - /// - /// This function attempts to remove a validator from a submitted job. If the job is in phase - /// two, it fetches the phase one result. It then adjusts the participants and threshold based - /// on the removal of the validator. If there are not enough validators after removal, an error - /// is returned. If the job is in phase two, a new job is generated with updated parameters and - /// the fee is charged from validator. The original job's result is removed. - pub fn try_validator_removal_from_job( - role_type: RoleType, - job_id: JobId, - validator: T::AccountId, - ) -> DispatchResult { - SubmittedJobs::::try_mutate(role_type, job_id, |maybe_job_info| -> DispatchResult { - let job_info = maybe_job_info.as_mut().ok_or(Error::::JobNotFound)?; - - if job_info.job_type.is_phase_one() { - match job_info.fallback { - FallbackOptions::Destroy => { - Self::refund_job_creator(&job_info.owner, job_info.fee)?; - Self::deposit_event(Event::JobRefunded { job_id, role_type }); - // remove the job from storage - *maybe_job_info = None; - Ok(()) - }, - FallbackOptions::RegenerateWithThreshold(new_threshold) => { - let participants = job_info.job_type.clone().get_participants().unwrap(); - - let participants: Vec = - participants.into_iter().filter(|x| x != &validator).collect(); - - if participants.len() <= new_threshold as usize { - return Err(Error::::NotEnoughValidators.into()); - } - - ensure!(!new_threshold.is_zero(), Error::::NotEnoughValidators); - - // set fallback to destroy since we already regenerated - job_info.fallback = FallbackOptions::Destroy; - - Self::deposit_event(Event::JobParticipantsUpdated { - job_id, - role_type, - details: job_info.clone(), - }); - Ok(()) - }, - } - } else { - let phase_one_id = job_info - .job_type - .get_phase_one_id() - .ok_or(Error::::PhaseOneResultNotFound)?; - - let phase1 = KnownResults::::take(role_type, phase_one_id) - .ok_or(Error::::PhaseOneResultNotFound)?; - - let new_participants: BoundedVec<_, _> = phase1 - .participants() - .ok_or(Error::::InvalidJobPhase)? - .into_iter() - .filter(|x| x != &validator) - .collect::>() - .try_into() - .map_err(|_| Error::::TooManyParticipants)?; - - #[allow(clippy::collapsible_if)] - match job_info.fallback { - FallbackOptions::Destroy => { - // if the role is TSS, then destory only if signing is impossible - if matches!(role_type, RoleType::Tss(_)) { - if new_participants.len() - >= job_info - .job_type - .clone() - .get_threshold() - .expect("Should exist!") - .into() - { - return Ok(()); - } - } - - Self::refund_job_creator(&job_info.owner, job_info.fee)?; - Self::deposit_event(Event::JobRefunded { job_id, role_type }); - // remove the job from storage - *maybe_job_info = None; - Ok(()) - }, - FallbackOptions::RegenerateWithThreshold(new_threshold) => { - // Generate a job to generate new key - let job_id = Self::get_next_job_id()?; - - ensure!(!new_threshold.is_zero(), Error::::NotEnoughValidators); - - let job_type: JobType< - T::AccountId, - T::MaxParticipants, - T::MaxSubmissionLen, - T::MaxAdditionalParamsLen, - > = match role_type { - RoleType::Tss(role) => JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - role_type: role, - participants: new_participants, - threshold: new_threshold, - permitted_caller: phase1.clone().permitted_caller, - hd_wallet: match phase1.job_type { - JobType::DKGTSSPhaseOne(info) => info.hd_wallet, - _ => false, - }, - }), - - RoleType::ZkSaaS(role) => { - let phase_one = SubmittedJobs::::get(role_type, phase_one_id) - .ok_or(Error::::JobNotFound)?; - let system = match phase_one.job_type { - JobType::ZkSaaSPhaseOne(ref info) => info.system.clone(), - _ => return Err(Error::::JobNotFound.into()), - }; - - JobType::ZkSaaSPhaseOne(ZkSaaSPhaseOneJobType { - role_type: role, - participants: new_participants, - system, - permitted_caller: phase1.clone().permitted_caller, - }) - }, - _ => todo!(), - }; - - // charge the validator fee for job submission - let job = JobSubmissionOf:: { - expiry: job_info.expiry, - ttl: job_info.ttl, - job_type: job_type.clone(), - fallback: job_info.fallback, - }; - - let fee = T::JobToFee::job_to_fee(&job); - - T::Currency::transfer( - &validator, - &Self::rewards_account_id(), - fee, - ExistenceRequirement::KeepAlive, - )?; - - let phase_one_job_info = JobInfo { - owner: phase1.owner.clone(), - expiry: job_info.expiry, - ttl: job_info.ttl, - job_type, - fee, - fallback: FallbackOptions::Destroy, /* set to destroy, we - * dont want to keep - * looping */ - }; - - Self::deposit_event(Event::JobReSubmitted { - job_id, - role_type, - details: phase_one_job_info.clone(), - }); - - SubmittedJobs::::insert(role_type, job_id, phase_one_job_info); - - // update the current job with new phase-one id - job_info.job_type.update_phase_one_id(job_id); - - // set fallback to destroy since we already regenerated - job_info.fallback = FallbackOptions::Destroy; - - // the old results are not useful since a participant has left, remove - // from storage - KnownResults::::remove(role_type, job_id); - Ok(()) - }, - } - } - }) - } - - pub fn verify_dkg_job_result( - role_type: RoleType, - job_info: &JobInfoOf, - info: DKGTSSKeySubmissionResultOf, - ) -> Result, DispatchError> { - // sanity check, does job and result type match - ensure!(role_type.is_dkg_tss(), Error::::ResultNotExpectedType); - - // ensure the participants are the expected participants from job - let participants = job_info - .job_type - .clone() - .get_participants() - .ok_or(Error::::InvalidJobParams)?; - let mut participant_keys: ParticipantKeysOf = Default::default(); - - for participant in participants.clone() { - let key = T::RolesHandler::get_validator_role_key(participant); - ensure!(key.is_some(), Error::::ValidatorRoleKeyNotFound); - let bounded_key: ParticipantKeyOf = key - .expect("Checked above!") - .try_into() - .map_err(|_| Error::::ExceedsMaxKeySize)?; - participant_keys - .try_push(bounded_key) - .map_err(|_| Error::::TooManyParticipants)?; - } - - let job_result = JobResult::DKGPhaseOne(DKGTSSKeySubmissionResultOf:: { - key: info.key.clone(), - chain_code: info.chain_code, - signatures: info.signatures, - participants: participant_keys, - threshold: job_info.job_type.clone().get_threshold().expect("Checked before"), - signature_scheme: info.signature_scheme.clone(), - }); - - T::MPCHandler::verify(JobWithResult { - job_type: job_info.job_type.clone(), - phase_one_job_type: None, - result: job_result.clone(), - })?; - - let result = PhaseResult { - owner: job_info.owner.clone(), - job_type: job_info.job_type.clone(), - ttl: job_info.ttl, - permitted_caller: job_info.job_type.clone().get_permitted_caller(), - result: job_result, - }; - Ok(result) - } - - pub fn verify_dkg_signature_job_result( - role_type: RoleType, - job_info: &JobInfoOf, - info: DKGTSSSignatureResultOf, - ) -> Result, DispatchError> { - let now = >::block_number(); - // sanity check, does job and result type match - ensure!(role_type.is_dkg_tss(), Error::::ResultNotExpectedType); - - let existing_result_id = job_info - .job_type - .clone() - .get_phase_one_id() - .ok_or(Error::::InvalidJobPhase)?; - // Ensure the result exists - let phase_one_result = - KnownResults::::get(job_info.job_type.get_role_type(), existing_result_id) - .ok_or(Error::::PreviousResultNotFound)?; - - // Validate existing result - ensure!(phase_one_result.ttl >= now, Error::::ResultExpired); - - let (verifying_key, chain_code) = match phase_one_result.result { - JobResult::DKGPhaseOne(result) => (result.key, result.chain_code), - _ => return Err(Error::::InvalidJobPhase.into()), - }; - let job_result = JobResult::DKGPhaseTwo(DKGTSSSignatureResultOf:: { - signature: info.signature.clone(), - data: info.data, - verifying_key, - signature_scheme: info.signature_scheme, - derivation_path: info.derivation_path, - chain_code, - }); - - let phase_one_job_info = KnownResults::::get( - job_info.job_type.get_role_type(), - job_info.job_type.get_phase_one_id().ok_or(Error::::InvalidJobPhase)?, - ) - .ok_or(Error::::JobNotFound)?; - T::MPCHandler::verify(JobWithResult { - job_type: job_info.job_type.clone(), - phase_one_job_type: Some(phase_one_job_info.job_type), - result: job_result.clone(), - })?; - - let result = PhaseResult { - owner: job_info.owner.clone(), - ttl: job_info.ttl, - job_type: job_info.job_type.clone(), - permitted_caller: job_info.job_type.clone().get_permitted_caller(), - result: job_result, - }; - Ok(result) - } - - pub fn verify_dkg_key_refresh_job_result( - role_type: RoleType, - job_info: &JobInfoOf, - info: DKGTSSKeyRefreshResult, - ) -> Result, DispatchError> { - let now = >::block_number(); - // sanity check, does job and result type match - ensure!(role_type.is_dkg_tss(), Error::::ResultNotExpectedType); - - let existing_result_id = job_info - .job_type - .clone() - .get_phase_one_id() - .ok_or(Error::::InvalidJobPhase)?; - // Ensure the result exists - let phase_one_result = - KnownResults::::get(job_info.job_type.get_role_type(), existing_result_id) - .ok_or(Error::::PreviousResultNotFound)?; - - // Validate existing result - ensure!(phase_one_result.ttl >= now, Error::::ResultExpired); - - // ensure the participants are the expected participants from job - let mut participant_keys: Vec = Default::default(); - - let participants = phase_one_result.participants().ok_or(Error::::InvalidJobPhase)?; - for participant in participants { - let key = T::RolesHandler::get_validator_role_key(participant); - ensure!(key.is_some(), Error::::ValidatorRoleKeyNotFound); - let pub_key = sp_core::ecdsa::Public::from_slice(&key.expect("checked above")[0..33]) - .map_err(|_| Error::::InvalidValidator)?; - participant_keys.push(pub_key); - } - - let job_result = JobResult::DKGPhaseThree(DKGTSSKeyRefreshResult { - signature_scheme: info.signature_scheme.clone(), - }); - - let phase_one_job_info = KnownResults::::get( - job_info.job_type.get_role_type(), - job_info.job_type.get_phase_one_id().ok_or(Error::::InvalidJobPhase)?, - ) - .ok_or(Error::::JobNotFound)?; - T::MPCHandler::verify(JobWithResult { - job_type: job_info.job_type.clone(), - phase_one_job_type: Some(phase_one_job_info.job_type), - result: job_result.clone(), - })?; - - let result = PhaseResult { - owner: job_info.owner.clone(), - job_type: job_info.job_type.clone(), - ttl: job_info.ttl, - permitted_caller: job_info.job_type.clone().get_permitted_caller(), - result: job_result, - }; - Ok(result) - } - - pub fn verify_dkg_key_rotation_job_result( - role_type: RoleType, - job_info: &JobInfoOf, - info: DKGTSSKeyRotationResultOf, - ) -> Result, DispatchError> { - let now = >::block_number(); - // sanity check, does job and result type match - ensure!(role_type.is_dkg_tss(), Error::::ResultNotExpectedType); - - let existing_result_id = job_info - .job_type - .clone() - .get_phase_one_id() - .ok_or(Error::::InvalidJobPhase)?; - // Ensure the result exists - let phase_one_result = - KnownResults::::get(job_info.job_type.get_role_type(), existing_result_id) - .ok_or(Error::::PreviousResultNotFound)?; - - // Validate existing result - ensure!(phase_one_result.ttl >= now, Error::::ResultExpired); - - // ensure the participants are the expected participants from job - let mut participant_keys: Vec = Default::default(); - - let participants = phase_one_result.participants().ok_or(Error::::InvalidJobPhase)?; - for participant in participants { - let key = T::RolesHandler::get_validator_role_key(participant); - ensure!(key.is_some(), Error::::ValidatorRoleKeyNotFound); - let pub_key = sp_core::ecdsa::Public::from_slice(&key.expect("checked above")[0..33]) - .map_err(|_| Error::::InvalidValidator)?; - participant_keys.push(pub_key); - } - - let curr_key = match phase_one_result.result { - JobResult::DKGPhaseOne(info) => info.key.clone(), - _ => return Err(Error::::InvalidJobPhase.into()), - }; - - let new_phase_one_job_id = match job_info.job_type { - JobType::DKGTSSPhaseFour(ref info) => info.new_phase_one_id, - _ => return Err(Error::::InvalidJobPhase.into()), - }; - - let new_phase_one_job_info = - KnownResults::::get(job_info.job_type.get_role_type(), new_phase_one_job_id) - .ok_or(Error::::JobNotFound)?; - - let new_key = match new_phase_one_job_info.result { - JobResult::DKGPhaseOne(info) => info.key.clone(), - _ => return Err(Error::::InvalidJobPhase.into()), - }; - let job_result = JobResult::DKGPhaseFour(DKGTSSKeyRotationResultOf:: { - phase_one_id: job_info - .job_type - .get_phase_one_id() - .ok_or(Error::::InvalidJobPhase)?, - new_phase_one_id: new_phase_one_job_id, - new_key, - key: curr_key, - signature: info.signature.clone(), - signature_scheme: info.signature_scheme.clone(), - derivation_path: None, - chain_code: None, - }); - - T::MPCHandler::verify(JobWithResult { - job_type: job_info.job_type.clone(), - phase_one_job_type: Some(phase_one_result.job_type), - result: job_result.clone(), - })?; - - let result = PhaseResult { - owner: job_info.owner.clone(), - job_type: job_info.job_type.clone(), - ttl: job_info.ttl, - permitted_caller: job_info.job_type.clone().get_permitted_caller(), - result: job_result, - }; - Ok(result) - } - - pub fn verify_zksaas_circuit_job_result( - role_type: RoleType, - job_id: JobId, - job_info: &JobInfoOf, - _info: ZkSaaSCircuitResultOf, - ) -> Result, DispatchError> { - // sanity check, does job and result type match - ensure!(role_type.is_zksaas(), Error::::ResultNotExpectedType); - // ensure the participants are the expected participants from job - - let participants = job_info - .job_type - .clone() - .get_participants() - .ok_or(Error::::InvalidJobParams)?; - let mut participant_keys: BoundedVec< - sp_core::ecdsa::Public, - ::MaxParticipants, - > = Default::default(); - - for participant in participants.clone() { - let key = T::RolesHandler::get_validator_role_key(participant); - ensure!(key.is_some(), Error::::ValidatorRoleKeyNotFound); - let pub_key = sp_core::ecdsa::Public::from_slice(&key.expect("checked above")[0..33]) - .map_err(|_| Error::::InvalidValidator)?; - participant_keys - .try_push(pub_key) - .map_err(|_| Error::::TooManyParticipants)?; - } - - let job_result = JobResult::ZkSaaSPhaseOne(ZkSaaSCircuitResultOf:: { - job_id, - participants: participant_keys, - }); - - T::MPCHandler::verify(JobWithResult { - job_type: job_info.job_type.clone(), - phase_one_job_type: None, - result: job_result.clone(), - })?; - - let result = PhaseResult { - owner: job_info.owner.clone(), - ttl: job_info.ttl, - job_type: job_info.job_type.clone(), - result: job_result, - permitted_caller: job_info.job_type.clone().get_permitted_caller(), - }; - Ok(result) - } - - pub fn verify_zksaas_prove_job_result( - role_type: RoleType, - job_info: &JobInfoOf, - info: ZkSaaSProofResultOf, - ) -> Result, DispatchError> { - let now = >::block_number(); - // sanity check, does job and result type match - ensure!(role_type.is_zksaas(), Error::::ResultNotExpectedType); - ensure!(role_type == job_info.job_type.get_role_type(), Error::::ResultNotExpectedType); - - let existing_result_id = job_info - .job_type - .clone() - .get_phase_one_id() - .ok_or(Error::::InvalidJobPhase)?; - // Ensure the result exists - let phase_one_result = - KnownResults::::get(job_info.job_type.get_role_type(), existing_result_id) - .ok_or(Error::::PreviousResultNotFound)?; - - // Validate existing result - ensure!(phase_one_result.ttl >= now, Error::::ResultExpired); - - let job_result = JobResult::ZkSaaSPhaseTwo(info.clone()); - - T::MPCHandler::verify(JobWithResult { - job_type: job_info.job_type.clone(), - phase_one_job_type: Some(phase_one_result.job_type), - result: job_result.clone(), - })?; - - let result = PhaseResult { - owner: job_info.owner.clone(), - ttl: job_info.ttl, - job_type: job_info.job_type.clone(), - result: job_result, - permitted_caller: job_info.job_type.clone().get_permitted_caller(), - }; - Ok(result) - } -} diff --git a/pallets/jobs/src/impls.rs b/pallets/jobs/src/impls.rs deleted file mode 100644 index 1137bf97c..000000000 --- a/pallets/jobs/src/impls.rs +++ /dev/null @@ -1,39 +0,0 @@ -use super::*; -use tangle_primitives::{jobs::traits::JobsHandler, roles::RoleType}; - -/// A trait that handles various aspects of jobs for a validator. -impl JobsHandler for Pallet { - /// Returns a list of active jobs associated with a validator. - /// - /// # Parameters - /// - /// - `validator`: The account ID of the validator. - /// - /// # Returns - /// - /// Returns a vector of `JobId` representing the active jobs of the validator. - fn get_active_jobs(validator: T::AccountId) -> Vec<(RoleType, JobId)> { - if let Some(jobs) = ValidatorJobIdLookup::::get(validator) { - return jobs.to_vec(); - } - Default::default() - } - - /// Exits a job from the known set of a validator. - /// - /// # Parameters - /// - /// - `validator`: The account ID of the validator. - /// - `job_id`: The ID of the job to exit from the known set. - /// - /// # Errors - /// - /// Returns a `DispatchResult` indicating success or an error if the operation fails. - fn exit_from_known_set( - validator: T::AccountId, - role_type: RoleType, - job_id: JobId, - ) -> DispatchResult { - Self::try_validator_removal_from_job(role_type, job_id, validator) - } -} diff --git a/pallets/jobs/src/lib.rs b/pallets/jobs/src/lib.rs deleted file mode 100644 index 3cc51aaca..000000000 --- a/pallets/jobs/src/lib.rs +++ /dev/null @@ -1,727 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -#![cfg_attr(not(feature = "std"), no_std)] -#![allow(clippy::unused_unit)] - -use crate::types::{JobInfoOf, JobResultOf, JobSubmissionOf, PhaseResultOf}; -use frame_support::{ - pallet_prelude::*, - traits::{Currency, ExistenceRequirement, ReservableCurrency}, - PalletId, -}; -use frame_system::pallet_prelude::*; -use sp_core::crypto::ByteArray; -use sp_runtime::{ - traits::{AccountIdConversion, Get, Zero}, - DispatchResult, -}; -use sp_std::{prelude::*, vec::Vec}; -use tangle_primitives::{ - jobs::{ - traits::{JobToFee, MPCHandler}, - DKGTSSKeySubmissionResult, JobId, JobInfo, JobResult, PhaseResult, ValidatorOffenceType, - }, - misbehavior::{traits::MisbehaviorHandler, MisbehaviorSubmission}, - roles::traits::RolesHandler, -}; - -mod functions; -mod impls; -mod rpc; -mod types; - -#[cfg(test)] -mod mock; -#[cfg(test)] -mod mock_evm; -#[cfg(test)] -mod tests; - -#[cfg(feature = "runtime-benchmarks")] -mod benchmarking; - -pub mod weights; -use crate::types::BalanceOf; - -pub use module::*; -pub use weights::WeightInfo; - -#[frame_support::pallet] -pub mod module { - use super::*; - use scale_info::prelude::fmt::Debug; - use sp_runtime::Saturating; - use tangle_primitives::roles::RoleType; - - #[pallet::config] - pub trait Config: frame_system::Config { - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// The currency mechanism. - type Currency: ReservableCurrency; - - /// The job to fee converter - type JobToFee: JobToFee< - Self::AccountId, - BlockNumberFor, - Self::MaxParticipants, - Self::MaxSubmissionLen, - Self::MaxAdditionalParamsLen, - Balance = BalanceOf, - >; - - /// The roles manager mechanism - type RolesHandler: RolesHandler>; - - /// The job result verifying mechanism - type MPCHandler: MPCHandler< - Self::AccountId, - BlockNumberFor, - BalanceOf, - Self::MaxParticipants, - Self::MaxSubmissionLen, - Self::MaxKeyLen, - Self::MaxDataLen, - Self::MaxSignatureLen, - Self::MaxProofLen, - Self::MaxAdditionalParamsLen, - >; - - /// The misbehavior verifying mechanism - type MisbehaviorHandler: MisbehaviorHandler; - /// The origin which may set filter. - type ForceOrigin: EnsureOrigin; - - /// The maximum participants allowed in a job - type MaxParticipants: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of job result submission - type MaxSubmissionLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of a signature - type MaxSignatureLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of data to be signed - type MaxDataLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of validator key allowed - type MaxKeyLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of proof allowed - type MaxProofLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum active jobs per validator - type MaxActiveJobsPerValidator: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of additional parameters - type MaxAdditionalParamsLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// `PalletId` for the jobs pallet. - #[pallet::constant] - type PalletId: Get; - - /// Weight information for the extrinsics in this module. - type WeightInfo: WeightInfo; - } - - #[pallet::error] - pub enum Error { - /// invalid phase provided - InvalidJobPhase, - /// Given validator not valid for job type - InvalidValidator, - /// invalid params, cannot execute jobs - InvalidJobParams, - /// cannot find phase 1 result - PreviousResultNotFound, - /// The previous result expired - ResultExpired, - /// Invalid job expiry input - JobAlreadyExpired, - /// The requested job was not found - JobNotFound, - /// P1 result not found - PhaseOneResultNotFound, - /// no rewards found for validator - NoRewards, - /// Not enough validators to exit - NotEnoughValidators, - /// empty result - EmptyResult, - /// empty job - EmptyJob, - /// Validator role key not found. - ValidatorRoleKeyNotFound, - /// Unexpected result provided - ResultNotExpectedType, - /// No permission to change permitted caller - NoPermission, - /// Exceeds max participant limits - TooManyParticipants, - /// Invalid Key size - ExceedsMaxKeySize, - /// Validator exceeds limit of max active jobs - TooManyJobsForValidator, - } - - #[pallet::event] - #[pallet::generate_deposit(pub(crate) fn deposit_event)] - pub enum Event { - /// A new job has been submitted - JobSubmitted { job_id: JobId, role_type: RoleType, details: JobSubmissionOf }, - /// A new job result has been submitted - JobResultSubmitted { job_id: JobId, role_type: RoleType }, - /// validator has earned reward - ValidatorRewarded { id: T::AccountId, reward: BalanceOf }, - /// An existing job was removed and refunded - JobRefunded { job_id: JobId, role_type: RoleType }, - /// The participants of a job has been updated - JobParticipantsUpdated { job_id: JobId, role_type: RoleType, details: JobInfoOf }, - /// A job has been resubmitted, this is when a phase1 result has been discarded - /// and a new phase1 job is requested - JobReSubmitted { job_id: JobId, role_type: RoleType, details: JobInfoOf }, - /// A job result expiry time has been extended - JobResultExtended { job_id: JobId, role_type: RoleType, new_expiry: BlockNumberFor }, - } - - #[pallet::storage] - #[pallet::getter(fn submitted_jobs)] - pub type SubmittedJobs = - StorageDoubleMap<_, Twox64Concat, RoleType, Blake2_128Concat, JobId, JobInfoOf>; - - #[pallet::storage] - #[pallet::getter(fn submitted_jobs_role)] - pub type SubmittedJobsRole = StorageMap<_, Twox64Concat, JobId, RoleType>; - - #[pallet::storage] - #[pallet::getter(fn known_results)] - pub type KnownResults = - StorageDoubleMap<_, Twox64Concat, RoleType, Blake2_128Concat, JobId, PhaseResultOf>; - - #[pallet::storage] - #[pallet::getter(fn validator_job_id_lookup)] - pub type ValidatorJobIdLookup = StorageMap< - _, - Twox64Concat, - T::AccountId, - BoundedVec<(RoleType, JobId), T::MaxActiveJobsPerValidator>, - >; - - #[pallet::storage] - #[pallet::getter(fn validator_rewards)] - pub type ValidatorRewards = StorageMap<_, Twox64Concat, T::AccountId, BalanceOf>; - - /// The job-id storage - #[pallet::storage] - #[pallet::getter(fn next_job_id)] - pub type NextJobId = StorageValue<_, JobId, ValueQuery>; - - #[pallet::storage] - #[pallet::getter(fn time_fee)] - pub type TimeFeePerBlock = StorageValue<_, BalanceOf, ValueQuery>; - - #[pallet::pallet] - pub struct Pallet(_); - - #[pallet::call] - impl Pallet { - /// Submit a job for processing. - /// - /// # Parameters - /// - /// - `origin`: The origin of the call (typically a signed account). - /// - `job`: The details of the job to be submitted. - /// - /// # Errors - /// - /// This function can return an error if: - /// - /// - The caller is not authorized. - /// - The job type is invalid or has invalid participants. - /// - The threshold or parameters for phase one jobs are invalid. - /// - The result for phase two jobs does not exist or is expired. - /// - The phase one participants are not valid validators. - /// - The caller did not generate the phase one result for phase two jobs. - /// - The job has already expired. - /// - The fee transfer fails. - /// - /// # Details - /// - /// This function allows a caller to submit a job for processing. For phase one jobs, it - /// ensures that all participants have valid roles and performs a sanity check on the - /// threshold. For phase two jobs, it validates the existence and expiration of the phase - /// one result, as well as the validity of phase one participants. It also verifies that the - /// caller generated the phase one result. The user is charged a fee based on job params. - #[pallet::call_index(0)] - #[pallet::weight(T::WeightInfo::submit_job())] - pub fn submit_job(origin: OriginFor, job: JobSubmissionOf) -> DispatchResult { - let caller = ensure_signed(origin)?; - let now = >::block_number(); - - let job_id = Self::get_next_job_id()?; - let role_type = job.job_type.get_role_type(); - - // Ensure the job can be processed - if job.job_type.is_phase_one() { - // Ensure all the participants have valid roles - let participants = - job.job_type.clone().get_participants().ok_or(Error::::InvalidJobPhase)?; - - ensure!(!participants.len().is_zero(), Error::::InvalidJobPhase); - - for participant in participants { - ensure!( - T::RolesHandler::is_restaker_with_role(participant.clone(), role_type), - Error::::InvalidValidator - ); - - // Add record for easy lookup - Self::add_job_to_validator_lookup(participant, role_type, job_id)?; - } - - // Sanity check ensure threshold is valid - ensure!(job.job_type.sanity_check(), Error::::InvalidJobParams); - } - // phase two validations - else { - let existing_result_id = - job.job_type.clone().get_phase_one_id().ok_or(Error::::InvalidJobPhase)?; - - // Ensure the result exists - let result = - KnownResults::::get(job.job_type.get_role_type(), existing_result_id) - .ok_or(Error::::PreviousResultNotFound)?; - - // Ensure the phase one participants are still validators - let participants = result.participants().ok_or(Error::::InvalidJobPhase)?; - - // ensure the account can use the result - if let Some(permitted_caller) = result.permitted_caller { - ensure!(permitted_caller == caller, Error::::InvalidJobParams); - } - - // Validate existing result - ensure!(result.ttl >= now, Error::::ResultExpired); - - for participant in participants { - ensure!( - T::RolesHandler::is_restaker_with_role(participant.clone(), role_type), - Error::::InvalidValidator - ); - - // add record for easy lookup - Self::add_job_to_validator_lookup(participant, role_type, job_id)?; - } - } - - // Basic sanity checks - ensure!(job.expiry > now, Error::::JobAlreadyExpired); - - // charge the user fee for job submission - let processing_fee = T::JobToFee::job_to_fee(&job); - let ttl_u32: u32 = - job.ttl.try_into().map_err(|_| sp_runtime::ArithmeticError::Underflow)?; - let time_fee = Self::time_fee() * ttl_u32.into(); - let fee = processing_fee.saturating_add(time_fee); - - T::Currency::transfer( - &caller, - &Self::rewards_account_id(), - fee, - ExistenceRequirement::KeepAlive, - )?; - - // store the job to pallet - let job_info = JobInfo { - owner: caller.clone(), - ttl: job.ttl, - expiry: job.expiry, - job_type: job.job_type.clone(), - fee, - fallback: job.fallback, - }; - SubmittedJobs::::insert(role_type, job_id, job_info); - SubmittedJobsRole::::insert(job_id, role_type); - - Self::deposit_event(Event::JobSubmitted { job_id, role_type, details: job }); - - Ok(()) - } - - /// Submit the result of a job - /// - /// # Parameters - /// - /// - `origin`: The origin of the call (typically a signed account). - /// - `role_type`: An identifier for the role type of the job. - /// - `job_id`: A unique identifier for the job within the category. - /// - `result`: A vector containing the result of the job. - /// - /// # Errors - /// - /// This function can return an error if: - /// - /// - The caller is not authorized. - /// - The specified job is not found. - /// - The phase one result is not found (for phase two jobs). - /// - The result fails verification. - /// - The fee distribution or reward recording fails. - /// - /// # Details - /// - /// This function allows a caller to submit the result of a job. The function validates the - /// result using the result verifier config. If the result is valid, it proceeds to store - /// the result in known results for phase one jobs. It distributes the fee among the - /// participants and records rewards for each participant. Finally, it removes the job from - /// the submitted jobs storage. - #[pallet::call_index(1)] - #[pallet::weight(T::WeightInfo::submit_job_result())] - pub fn submit_job_result( - origin: OriginFor, - role_type: RoleType, - job_id: JobId, - result: JobResultOf, - ) -> DispatchResult { - let _caller = ensure_signed(origin)?; - - // Ensure the job exists - let job_info = - SubmittedJobs::::get(role_type, job_id).ok_or(Error::::JobNotFound)?; - let participants = match &result { - JobResult::DKGPhaseOne(_) | JobResult::ZkSaaSPhaseOne(_) => job_info - .job_type - .clone() - .get_participants() - .ok_or(Error::::InvalidJobParams)?, - JobResult::DKGPhaseTwo(_) - | JobResult::DKGPhaseThree(_) - | JobResult::DKGPhaseFour(_) - | JobResult::ZkSaaSPhaseTwo(_) => { - let existing_result_id = job_info - .job_type - .clone() - .get_phase_one_id() - .ok_or(Error::::InvalidJobPhase)?; - // Ensure the result exists - let phase_one_result = KnownResults::::get( - job_info.job_type.get_role_type(), - existing_result_id, - ) - .ok_or(Error::::PreviousResultNotFound)?; - phase_one_result.participants().ok_or(Error::::InvalidJobPhase)? - }, - }; - - // Handle based on job result - match result { - JobResult::DKGPhaseOne(info) => { - let result = Self::verify_dkg_job_result(role_type, &job_info, info)?; - KnownResults::::insert(role_type, job_id, result); - }, - JobResult::DKGPhaseTwo(info) => { - let result = Self::verify_dkg_signature_job_result(role_type, &job_info, info)?; - KnownResults::::insert(role_type, job_id, result); - }, - JobResult::DKGPhaseThree(info) => { - let result = - Self::verify_dkg_key_refresh_job_result(role_type, &job_info, info)?; - KnownResults::::insert(role_type, job_id, result); - }, - JobResult::DKGPhaseFour(info) => { - let result = - Self::verify_dkg_key_rotation_job_result(role_type, &job_info, info)?; - KnownResults::::insert(role_type, job_id, result); - }, - JobResult::ZkSaaSPhaseOne(info) => { - let result = - Self::verify_zksaas_circuit_job_result(role_type, job_id, &job_info, info)?; - KnownResults::::insert(role_type, job_id, result); - }, - JobResult::ZkSaaSPhaseTwo(info) => { - let result = Self::verify_zksaas_prove_job_result(role_type, &job_info, info)?; - KnownResults::::insert(role_type, job_id, result); - }, - }; - - T::RolesHandler::record_job_by_validators(participants.to_vec())?; - - let l = if participants.is_empty() { 1u32 } else { participants.len() as u32 }; - let fee_per_participant = job_info.fee / l.into(); - - for participant in participants { - Self::record_reward_to_validator(participant.clone(), fee_per_participant)?; - Self::deposit_event(Event::ValidatorRewarded { - id: participant, - reward: fee_per_participant, - }); - } - - SubmittedJobs::::remove(role_type, job_id); - SubmittedJobsRole::::remove(job_id); - - Self::deposit_event(Event::JobResultSubmitted { job_id, role_type }); - - Ok(()) - } - - /// Withdraw rewards accumulated by the caller. - /// - /// # Parameters - /// - /// - `origin`: The origin of the call (typically a signed account). - /// - /// # Errors - /// - /// This function can return an error if: - /// - /// - The caller is not authorized. - /// - No rewards are available for the caller. - /// - The reward transfer operation fails. - /// - /// # Details - /// - /// This function allows a caller to withdraw rewards that have been accumulated in their - /// account. - #[pallet::call_index(2)] - #[pallet::weight(T::WeightInfo::withdraw_rewards())] - pub fn withdraw_rewards(origin: OriginFor) -> DispatchResult { - let caller = ensure_signed(origin)?; - - let reward_available = - ValidatorRewards::::get(caller.clone()).ok_or(Error::::NoRewards)?; - - T::Currency::transfer( - &Self::rewards_account_id(), - &caller, - reward_available, - ExistenceRequirement::KeepAlive, - )?; - - ValidatorRewards::::remove(caller); - - Ok(()) - } - - /// Report an inactive validator and take appropriate actions. - /// - /// # Parameters - /// - /// - `origin`: The origin of the call (typically a signed account). - /// - `role_type`: An identifier for the role - /// - `job_id`: A unique identifier for the job within the category. - /// - `validator`: The account ID of the inactive validator. - /// - `offence`: The type of offence committed by the validator. - /// - `signatures`: A vector of signatures related to the report. - /// - /// # Errors - /// - /// This function can return an error if: - /// - /// - The caller is not authorized. - /// - The specified job is not found. - /// - The phase one result is not found (for phase two jobs). - /// - The specified validator is not part of the job participants. - /// - The validator report is not valid or fails verification. - /// - Slashing the validator fails. - /// - Trying to remove the validator from the job fails. - /// - /// # Details - /// - /// This function allows a caller to report an inactive validator. - /// It ensures that the specified validator is part of the job participants. The function - /// then validates the report using the Result verifier config. If the report is valid, it - /// will slash the validator. - #[pallet::call_index(3)] - #[pallet::weight(T::WeightInfo::report_inactive_validator())] - pub fn report_inactive_validator( - origin: OriginFor, - role_type: RoleType, - job_id: JobId, - validator: T::AccountId, - offence: ValidatorOffenceType, - signatures: Vec>, - ) -> DispatchResult { - let _caller = ensure_signed(origin)?; - - // Remove the validator from the job - let job_info = - SubmittedJobs::::get(role_type, job_id).ok_or(Error::::JobNotFound)?; - - let mut phase1_result: Option> = None; - - // If phase2, fetch phase1 result - if !job_info.job_type.is_phase_one() { - let result = KnownResults::::get(role_type, job_id) - .ok_or(Error::::PhaseOneResultNotFound)?; - phase1_result = Some(result); - } - - let participants = if job_info.job_type.is_phase_one() { - job_info.job_type.clone().get_participants().unwrap() - } else { - phase1_result.unwrap().participants().unwrap() - }; - - ensure!(participants.contains(&validator), Error::::JobNotFound); - - // Validate the result - T::MPCHandler::verify_validator_report(validator.clone(), offence.clone(), signatures)?; - - // TODO: Report validator offence. - // T::RolesHandler::report_offence(validator.clone(), offence)?; - - // Trigger validator removal - Self::try_validator_removal_from_job(role_type, job_id, validator)?; - - Ok(()) - } - - /// Withdraw rewards accumulated by the caller. - /// - /// # Parameters - /// - /// - `origin`: The origin of the call (typically a signed account). - /// - /// # Errors - /// - /// This function can return an error if: - /// - /// - The caller is not authorized. - /// - No rewards are available for the caller. - /// - The reward transfer operation fails. - /// - /// # Details - /// - /// This function allows a caller to withdraw rewards that have been accumulated in their - /// account. - #[pallet::call_index(4)] - #[pallet::weight(T::WeightInfo::set_permitted_caller())] - pub fn set_permitted_caller( - origin: OriginFor, - role_type: RoleType, - job_id: JobId, - new_permitted_caller: T::AccountId, - ) -> DispatchResult { - let caller = ensure_signed(origin)?; - - KnownResults::::try_mutate(role_type, job_id, |job| -> DispatchResult { - let job = job.as_mut().ok_or(Error::::JobNotFound)?; - - // ensure the caller is the current permitted caller - ensure!(job.permitted_caller == Some(caller), Error::::NoPermission); - - job.permitted_caller = Some(new_permitted_caller); - - Ok(()) - }) - } - - #[pallet::call_index(5)] - #[pallet::weight(T::WeightInfo::set_time_fee())] - pub fn set_time_fee(origin: OriginFor, new_fee: BalanceOf) -> DispatchResult { - T::ForceOrigin::ensure_origin(origin)?; - TimeFeePerBlock::::set(new_fee); - Ok(()) - } - - /// Submit a misbehavior report - /// - /// # Parameters - /// - /// - `origin`: The origin of the call (typically a signed account). - /// - `misbehavior`: A detailed misbehavior report. - /// - /// # Errors - /// - /// This function can return an error if: - /// TODO: Fill this in - /// - /// # Details - /// TODO: Fill this in - #[pallet::call_index(6)] - #[pallet::weight({0})] - pub fn submit_misbehavior( - origin: OriginFor, - misbehavior: MisbehaviorSubmission, - ) -> DispatchResult { - let _caller = ensure_signed(origin)?; - - // Ensure the job exists - let _job_info = SubmittedJobs::::get(misbehavior.role_type, misbehavior.job_id) - .ok_or(Error::::JobNotFound)?; - // TODO: verify misbehavior - // TODO: handle slashing - // TODO: emit events - Ok(()) - } - - /// Extend the time-to-live (TTL) of a job result. - /// - /// This function allows extending the TTL of a job result for a specific role type and job - /// ID. The TTL represents the time until the result is considered expired. - /// - /// - `origin`: The dispatch origin, usually a signed account. - /// - `role_type`: The type of role associated with the job result. - /// - `job_id`: The ID of the job whose result's TTL is to be extended. - /// - `extend_by`: The number of blocks by which to extend the TTL. - /// - /// Weight: `T::WeightInfo::withdraw_rewards()` where `T` is the pallet configuration trait. - /// - /// # Errors - /// - /// - `JobNotFound`: The specified job ID does not exist. - /// - `ResultExpired`: The result is already expired. - /// - Transfer errors: Errors related to transferring fees. - #[pallet::call_index(7)] - #[pallet::weight(T::WeightInfo::extend_job_result_ttl())] - pub fn extend_job_result_ttl( - origin: OriginFor, - role_type: RoleType, - job_id: JobId, - extend_by: BlockNumberFor, - ) -> DispatchResult { - let caller = ensure_signed(origin)?; - - KnownResults::::try_mutate(role_type, job_id, |result| -> DispatchResult { - let result = result.as_mut().ok_or(Error::::JobNotFound)?; - - let now = >::block_number(); - ensure!(result.ttl > now, Error::::ResultExpired); - - let extension_fee = - T::JobToFee::calculate_result_extension_fee(result.encode(), extend_by); - - T::Currency::transfer( - &caller, - &Self::rewards_account_id(), - extension_fee, - ExistenceRequirement::KeepAlive, - )?; - - result.ttl = result.ttl.saturating_add(extend_by); - - Self::deposit_event(Event::JobResultExtended { - job_id, - role_type, - new_expiry: result.ttl, - }); - - Ok(()) - }) - } - } -} diff --git a/pallets/jobs/src/mock.rs b/pallets/jobs/src/mock.rs deleted file mode 100644 index 889befc17..000000000 --- a/pallets/jobs/src/mock.rs +++ /dev/null @@ -1,530 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use super::*; -use crate::{self as pallet_jobs}; -use frame_election_provider_support::{ - bounds::{ElectionBounds, ElectionBoundsBuilder}, - onchain, SequentialPhragmen, -}; -use frame_support::{ - construct_runtime, parameter_types, - traits::{ConstU128, ConstU32, ConstU64, Contains}, -}; -use pallet_session::historical as pallet_session_historical; -use sp_core::{ - sr25519::{self}, - H256, -}; -use sp_runtime::{ - app_crypto::ecdsa::Public, - traits::{ConvertInto, IdentityLookup, OpaqueKeys}, - AccountId32, BuildStorage, DispatchResult, Perbill, Percent, -}; -use sp_staking::{ - offence::{OffenceError, ReportOffence}, - SessionIndex, -}; - -use tangle_crypto_primitives::crypto::AuthorityId as RoleKeyId; -use tangle_primitives::{jobs::*, roles::ValidatorRewardDistribution}; - -pub type AccountId = AccountId32; -pub type Balance = u128; -pub type BlockNumber = u64; - -impl frame_system::Config for Runtime { - type RuntimeOrigin = RuntimeOrigin; - type Nonce = u64; - type RuntimeCall = RuntimeCall; - type Hash = H256; - type Hashing = ::sp_runtime::traits::BlakeTwo256; - type AccountId = AccountId; - type Block = Block; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type BlockWeights = (); - type BlockLength = (); - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type DbWeight = (); - type BaseCallFilter = BaseFilter; - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type RuntimeTask = (); - type MaxConsumers = ConstU32<16>; -} - -impl pallet_balances::Config for Runtime { - type Balance = Balance; - type DustRemoval = (); - type RuntimeEvent = RuntimeEvent; - type ExistentialDeposit = ConstU128<1>; - type AccountStore = System; - type MaxLocks = (); - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = (); - type WeightInfo = (); - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = (); - type FreezeIdentifier = (); - type MaxFreezes = (); -} - -pub struct MockDKGPallet; -impl MockDKGPallet { - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - if job.job_type.is_phase_one() { - job.job_type.clone().get_participants().unwrap().len().try_into().unwrap() - } else { - 20 - } - } - - fn calculate_result_extension_fee(_result: Vec, _extension_time: BlockNumber) -> Balance { - 20 - } -} - -pub struct MockZkSaasPallet; -impl MockZkSaasPallet { - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - if job.job_type.is_phase_one() { - 10 - } else { - 20 - } - } -} - -pub struct MockJobToFeeHandler; - -impl JobToFee - for MockJobToFeeHandler -{ - type Balance = Balance; - - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - match job.job_type { - JobType::DKGTSSPhaseOne(_) - | JobType::DKGTSSPhaseTwo(_) - | JobType::DKGTSSPhaseThree(_) - | JobType::DKGTSSPhaseFour(_) => MockDKGPallet::job_to_fee(job), - JobType::ZkSaaSPhaseOne(_) | JobType::ZkSaaSPhaseTwo(_) => { - MockZkSaasPallet::job_to_fee(job) - }, - } - } - - fn calculate_result_extension_fee(result: Vec, extension_time: BlockNumber) -> Balance { - MockDKGPallet::calculate_result_extension_fee(result, extension_time) - } -} - -pub struct MockMPCHandler; - -impl - MPCHandler< - AccountId, - BlockNumber, - Balance, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > for MockMPCHandler -{ - fn verify( - _data: JobWithResult< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - ) -> DispatchResult { - Ok(()) - } - - fn verify_validator_report( - _validator: AccountId, - _offence: ValidatorOffenceType, - _signatures: Vec>, - ) -> DispatchResult { - Ok(()) - } - - fn validate_authority_key(_validator: AccountId, _authority_key: Vec) -> DispatchResult { - Ok(()) - } -} - -pub struct MockMisbehaviorHandler; - -impl MisbehaviorHandler for MockMisbehaviorHandler { - fn verify(_data: MisbehaviorSubmission) -> DispatchResult { - Ok(()) - } -} - -type IdentificationTuple = (AccountId, AccountId); -type Offence = pallet_roles::offences::ValidatorOffence; - -parameter_types! { - pub static Offences: Vec<(Vec, Offence)> = vec![]; - pub ElectionBoundsOnChain: ElectionBounds = ElectionBoundsBuilder::default() - .voters_count(5_000.into()).targets_count(1_250.into()).build(); - pub ElectionBoundsMultiPhase: ElectionBounds = ElectionBoundsBuilder::default() - .voters_count(10_000.into()).targets_count(1_500.into()).build(); -} - -/// A mock offence report handler. -pub struct OffenceHandler; -impl ReportOffence for OffenceHandler { - fn report_offence(reporters: Vec, offence: Offence) -> Result<(), OffenceError> { - Offences::mutate(|l| l.push((reporters, offence))); - Ok(()) - } - - fn is_known_offence(_offenders: &[IdentificationTuple], _time_slot: &SessionIndex) -> bool { - false - } -} - -impl pallet_session::historical::Config for Runtime { - type FullIdentification = AccountId; - type FullIdentificationOf = ConvertInto; -} - -pub struct BaseFilter; -impl Contains for BaseFilter { - fn contains(call: &RuntimeCall) -> bool { - let is_stake_unbond_call = - matches!(call, RuntimeCall::Staking(pallet_staking::Call::unbond { .. })); - - if is_stake_unbond_call { - // no unbond call - return false; - } - - // no chill call - if matches!(call, RuntimeCall::Staking(pallet_staking::Call::chill { .. })) { - return false; - } - - // no withdraw_unbonded call - let is_stake_withdraw_call = - matches!(call, RuntimeCall::Staking(pallet_staking::Call::withdraw_unbonded { .. })); - - if is_stake_withdraw_call { - return false; - } - - true - } -} - -sp_runtime::impl_opaque_keys! { - pub struct MockSessionKeys { - pub role: pallet_roles::Pallet, - } -} - -pub struct MockSessionManager; - -impl pallet_session::SessionManager for MockSessionManager { - fn end_session(_: sp_staking::SessionIndex) {} - fn start_session(_: sp_staking::SessionIndex) {} - fn new_session(idx: sp_staking::SessionIndex) -> Option> { - if idx == 0 || idx == 1 || idx == 2 { - Some(vec![mock_pub_key(1), mock_pub_key(2), mock_pub_key(3), mock_pub_key(4)]) - } else { - None - } - } -} - -parameter_types! { - pub const Period: u64 = 1; - pub const Offset: u64 = 0; -} - -impl pallet_session::Config for Runtime { - type SessionManager = MockSessionManager; - type Keys = MockSessionKeys; - type ShouldEndSession = pallet_session::PeriodicSessions; - type NextSessionRotation = pallet_session::PeriodicSessions; - type SessionHandler = ::KeyTypeIdProviders; - type RuntimeEvent = RuntimeEvent; - type ValidatorId = AccountId; - type ValidatorIdOf = pallet_staking::StashOf; - type WeightInfo = (); -} - -pub struct OnChainSeqPhragmen; -impl onchain::Config for OnChainSeqPhragmen { - type System = Runtime; - type Solver = SequentialPhragmen; - type DataProvider = Staking; - type WeightInfo = (); - type MaxWinners = ConstU32<100>; - type Bounds = ElectionBoundsOnChain; -} - -/// Upper limit on the number of NPOS nominations. -const MAX_QUOTA_NOMINATIONS: u32 = 16; - -impl pallet_staking::Config for Runtime { - type Currency = Balances; - type CurrencyBalance = ::Balance; - type UnixTime = pallet_timestamp::Pallet; - type CurrencyToVote = (); - type RewardRemainder = (); - type RuntimeEvent = RuntimeEvent; - type Slash = (); - type Reward = (); - type SessionsPerEra = (); - type SlashDeferDuration = (); - type AdminOrigin = frame_system::EnsureRoot; - type BondingDuration = (); - type SessionInterface = (); - type EraPayout = (); - type NextNewSession = Session; - type RolesHandler = Roles; - type MaxExposurePageSize = ConstU32<64>; - type MaxControllersInDeprecationBatch = ConstU32<100>; - type OffendingValidatorsThreshold = (); - type ElectionProvider = onchain::OnChainExecution; - type GenesisElectionProvider = Self::ElectionProvider; - type VoterList = pallet_staking::UseNominatorsAndValidatorsMap; - type TargetList = pallet_staking::UseValidatorsMap; - type MaxUnlockingChunks = ConstU32<32>; - type HistoryDepth = ConstU32<84>; - type EventListeners = (); - type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; - type NominationsQuota = pallet_staking::FixedNominationsQuota; - type WeightInfo = (); -} - -parameter_types! { - pub MaxRestake : Percent = Percent::from_percent(50); - pub Reward : ValidatorRewardDistribution = ValidatorRewardDistribution::try_new(Percent::from_rational(1_u32,2_u32), Percent::from_rational(1_u32,2_u32)).unwrap(); -} - -impl pallet_roles::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type JobsHandler = Jobs; - type MaxRolesPerAccount = ConstU32<2>; - type RoleKeyId = RoleKeyId; - type ValidatorRewardDistribution = Reward; - type ValidatorSet = Historical; - type ReportOffences = OffenceHandler; - type MaxKeyLen = MaxKeyLen; - type ForceOrigin = frame_system::EnsureRoot; - type MaxValidators = ConstU32<100>; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type MaxRestake = MaxRestake; - type RestakerEraPayout = (); - type MaxRolesPerValidator = MaxActiveJobsPerValidator; - type WeightInfo = (); -} - -parameter_types! { - pub const JobsPalletId: PalletId = PalletId(*b"py/jobss"); - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxParticipants: u32 = 10; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSubmissionLen: u32 = 32; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxKeyLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxDataLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSignatureLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxProofLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxActiveJobsPerValidator: u32 = 100; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxAdditionalParamsLen: u32 = 256; -} - -impl Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type MisbehaviorHandler = MockMisbehaviorHandler; - type ForceOrigin = frame_system::EnsureRoot; - type Currency = Balances; - type JobToFee = MockJobToFeeHandler; - type RolesHandler = Roles; - type MPCHandler = MockMPCHandler; - type PalletId = JobsPalletId; - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - -type Block = frame_system::mocking::MockBlock; - -construct_runtime!( - pub enum Runtime - { - System: frame_system, - Timestamp: pallet_timestamp, - Balances: pallet_balances, - Jobs: pallet_jobs, - EVM: pallet_evm, - Ethereum: pallet_ethereum, - Roles: pallet_roles, - Session: pallet_session, - Staking: pallet_staking, - Historical: pallet_session_historical, - } -); - -pub struct ExtBuilder; - -impl Default for ExtBuilder { - fn default() -> Self { - ExtBuilder - } -} - -pub fn mock_pub_key(id: u8) -> AccountId { - sr25519::Public::from_raw([id; 32]).into() -} - -pub fn mock_role_key_id(id: u8) -> RoleKeyId { - RoleKeyId::from(Public::from_raw([id; 33])) -} - -pub fn mock_authorities(vec: Vec) -> Vec<(AccountId, RoleKeyId)> { - vec.into_iter().map(|id| (mock_pub_key(id), mock_role_key_id(id))).collect() -} - -pub fn new_test_ext(ids: Vec) -> sp_io::TestExternalities { - new_test_ext_raw_authorities(mock_authorities(ids)) -} - -// This function basically just builds a genesis storage key/value store according to -// our desired mockup. -pub fn new_test_ext_raw_authorities( - authorities: Vec<(AccountId, RoleKeyId)>, -) -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); - // We use default for brevity, but you can configure as desired if needed. - let balances: Vec<_> = authorities.iter().map(|(i, _)| (i.clone(), 20_000_u128)).collect(); - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); - - let session_keys: Vec<_> = authorities - .iter() - .map(|(id, role_id)| (id.clone(), id.clone(), MockSessionKeys { role: role_id.clone() })) - .collect(); - - pallet_session::GenesisConfig:: { keys: session_keys } - .assimilate_storage(&mut t) - .unwrap(); - - let stakers: Vec<_> = authorities - .iter() - .map(|(authority, _)| { - ( - authority.clone(), - authority.clone(), - 10_000_u128, - pallet_staking::StakerStatus::::Validator, - ) - }) - .collect(); - - let staking_config = pallet_staking::GenesisConfig:: { - stakers, - validator_count: 4, - force_era: pallet_staking::Forcing::ForceNew, - minimum_validator_count: 0, - max_validator_count: Some(5), - max_nominator_count: Some(5), - invulnerables: vec![], - ..Default::default() - }; - - staking_config.assimilate_storage(&mut t).unwrap(); - - let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(1)); - ext.execute_with(|| { - System::set_block_number(1); - Session::on_initialize(1); - >::on_initialize(1); - }); - - ext -} - -// Checks events against the latest. A contiguous set of events must be -// provided. They must include the most recent RuntimeEvent, but do not have to include -// every past RuntimeEvent. -pub fn assert_events(mut expected: Vec) { - let mut actual: Vec = System::events().iter().map(|e| e.event.clone()).collect(); - - expected.reverse(); - for evt in expected { - let next = actual.pop().expect("RuntimeEvent expected"); - assert_eq!(next, evt, "Events don't match (actual,expected)"); - } -} diff --git a/pallets/jobs/src/mock_evm.rs b/pallets/jobs/src/mock_evm.rs deleted file mode 100644 index 930c60438..000000000 --- a/pallets/jobs/src/mock_evm.rs +++ /dev/null @@ -1,237 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::mock::{ - AccountId, Balances, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, Timestamp, -}; -use ethereum::TransactionAction; -use fp_ethereum::Transaction; -use fp_evm::FeeCalculator; -use frame_support::{parameter_types, traits::FindAuthor, weights::Weight, PalletId}; -use pallet_ethereum::{EthereumBlockHashMapping, IntermediateStateRoot, PostLogContent, RawOrigin}; -use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot, HashedAddressMapping}; -use sp_core::{keccak_256, ConstU32, H160, H256, U256}; -use sp_runtime::{ - traits::{BlakeTwo256, DispatchInfoOf, Dispatchable}, - transaction_validity::{TransactionValidity, TransactionValidityError}, - ConsensusEngineId, -}; - -parameter_types! { - pub const MinimumPeriod: u64 = 6000 / 2; -} - -impl pallet_timestamp::Config for Runtime { - type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; - type WeightInfo = (); -} - -pub struct FixedGasPrice; -impl FeeCalculator for FixedGasPrice { - fn min_gas_price() -> (U256, Weight) { - (1.into(), Weight::zero()) - } -} - -pub struct FindAuthorTruncated; -impl FindAuthor for FindAuthorTruncated { - fn find_author<'a, I>(_digests: I) -> Option - where - I: 'a + IntoIterator, - { - Some(address_build(0).address) - } -} - -const BLOCK_GAS_LIMIT: u64 = 150_000_000; -const MAX_POV_SIZE: u64 = 5 * 1024 * 1024; - -parameter_types! { - pub const TransactionByteFee: u64 = 1; - pub const ChainId: u64 = 42; - pub const EVMModuleId: PalletId = PalletId(*b"py/evmpa"); - pub BlockGasLimit: U256 = U256::from(BLOCK_GAS_LIMIT); - pub const GasLimitPovSizeRatio: u64 = BLOCK_GAS_LIMIT.saturating_div(MAX_POV_SIZE); - pub const WeightPerGas: Weight = Weight::from_parts(20_000, 0); -} - -parameter_types! { - pub SuicideQuickClearLimit: u32 = 0; -} - -impl pallet_evm::Config for Runtime { - type FeeCalculator = FixedGasPrice; - type GasWeightMapping = pallet_evm::FixedGasWeightMapping; - type WeightPerGas = WeightPerGas; - type BlockHashMapping = EthereumBlockHashMapping; - type CallOrigin = EnsureAddressRoot; - type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = HashedAddressMapping; - type Currency = Balances; - type RuntimeEvent = RuntimeEvent; - type PrecompilesType = (); - type PrecompilesValue = (); - type ChainId = ChainId; - type BlockGasLimit = BlockGasLimit; - type Runner = pallet_evm::runner::stack::Runner; - type OnChargeTransaction = (); - type OnCreate = (); - type SuicideQuickClearLimit = SuicideQuickClearLimit; - type FindAuthor = FindAuthorTruncated; - type GasLimitPovSizeRatio = GasLimitPovSizeRatio; - type Timestamp = Timestamp; - type WeightInfo = (); -} - -parameter_types! { - pub const PostBlockAndTxnHashes: PostLogContent = PostLogContent::BlockAndTxnHashes; -} - -impl pallet_ethereum::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type StateRoot = IntermediateStateRoot; - type PostLogContent = PostBlockAndTxnHashes; - type ExtraDataLength = ConstU32<30>; -} - -impl fp_self_contained::SelfContainedCall for RuntimeCall { - type SignedInfo = H160; - - fn is_self_contained(&self) -> bool { - match self { - RuntimeCall::Ethereum(call) => call.is_self_contained(), - _ => false, - } - } - - fn check_self_contained(&self) -> Option> { - match self { - RuntimeCall::Ethereum(call) => call.check_self_contained(), - _ => None, - } - } - - fn validate_self_contained( - &self, - info: &Self::SignedInfo, - dispatch_info: &DispatchInfoOf, - len: usize, - ) -> Option { - match self { - RuntimeCall::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len), - _ => None, - } - } - - fn pre_dispatch_self_contained( - &self, - info: &Self::SignedInfo, - dispatch_info: &DispatchInfoOf, - len: usize, - ) -> Option> { - match self { - RuntimeCall::Ethereum(call) => { - call.pre_dispatch_self_contained(info, dispatch_info, len) - }, - _ => None, - } - } - - fn apply_self_contained( - self, - info: Self::SignedInfo, - ) -> Option>> { - match self { - call @ RuntimeCall::Ethereum(pallet_ethereum::Call::transact { .. }) => { - Some(call.dispatch(RuntimeOrigin::from(RawOrigin::EthereumTransaction(info)))) - }, - _ => None, - } - } -} - -pub struct AccountInfo { - pub address: H160, - pub account_id: AccountId, - pub private_key: H256, -} - -pub fn address_build(seed: u8) -> AccountInfo { - let private_key = H256::from_slice(&[(seed + 1); 32]); //H256::from_low_u64_be((i + 1) as u64); - let secret_key = libsecp256k1::SecretKey::parse_slice(&private_key[..]).unwrap(); - let public_key = &libsecp256k1::PublicKey::from_secret_key(&secret_key).serialize()[1..65]; - let address = H160::from(H256::from(keccak_256(public_key))); - - AccountInfo { - private_key, - account_id: HashedAddressMapping::::into_account_id(address), - address, - } -} - -pub struct EIP1559UnsignedTransaction { - pub nonce: U256, - pub max_priority_fee_per_gas: U256, - pub max_fee_per_gas: U256, - pub gas_limit: U256, - pub action: TransactionAction, - pub value: U256, - pub input: Vec, -} - -impl EIP1559UnsignedTransaction { - pub fn sign(&self, secret: &H256, chain_id: Option) -> Transaction { - let secret = { - let mut sk: [u8; 32] = [0u8; 32]; - sk.copy_from_slice(&secret[0..]); - libsecp256k1::SecretKey::parse(&sk).unwrap() - }; - let chain_id = chain_id.unwrap_or(ChainId::get()); - let msg = ethereum::EIP1559TransactionMessage { - chain_id, - nonce: self.nonce, - max_priority_fee_per_gas: self.max_priority_fee_per_gas, - max_fee_per_gas: self.max_fee_per_gas, - gas_limit: self.gas_limit, - action: self.action, - value: self.value, - input: self.input.clone(), - access_list: vec![], - }; - let signing_message = libsecp256k1::Message::parse_slice(&msg.hash()[..]).unwrap(); - - let (signature, recid) = libsecp256k1::sign(&signing_message, &secret); - let rs = signature.serialize(); - let r = H256::from_slice(&rs[0..32]); - let s = H256::from_slice(&rs[32..64]); - Transaction::EIP1559(ethereum::EIP1559Transaction { - chain_id: msg.chain_id, - nonce: msg.nonce, - max_priority_fee_per_gas: msg.max_priority_fee_per_gas, - max_fee_per_gas: msg.max_fee_per_gas, - gas_limit: msg.gas_limit, - action: msg.action, - value: msg.value, - input: msg.input.clone(), - access_list: msg.access_list, - odd_y_parity: recid.serialize() != 0, - r, - s, - }) - } -} diff --git a/pallets/jobs/src/rpc.rs b/pallets/jobs/src/rpc.rs deleted file mode 100644 index 803f81a6a..000000000 --- a/pallets/jobs/src/rpc.rs +++ /dev/null @@ -1,86 +0,0 @@ -use super::*; -use crate::types::{PhaseResultOf, RpcResponseJobsDataOf}; -pub use tangle_primitives::jobs::RpcResponseJobsData; -use tangle_primitives::roles::RoleType; - -impl Pallet { - /// Queries jobs associated with a specific validator. - /// - /// This function takes a `validator` parameter of type `T::AccountId` and attempts - /// to retrieve a list of jobs associated with the provided validator. If successful, - /// it constructs a vector of `RpcResponseJobsData` containing information - /// about the jobs and returns it as a `Result`. - /// - /// # Arguments - /// - /// * `validator` - The account ID of the validator whose jobs are to be queried. - /// - /// # Returns - /// - /// Returns a `Result` containing a vector of `RpcResponseJobsData` if the - /// operation is successful, or an error message as a `String` if there is an issue. - pub fn query_jobs_by_validator( - validator: T::AccountId, - ) -> Option>> { - let mut jobs: Vec> = vec![]; - if let Some(jobs_list) = ValidatorJobIdLookup::::get(validator) { - for (role_type, job_id) in jobs_list.iter() { - if let Some(job_info) = SubmittedJobs::::get(role_type, job_id) { - let info = RpcResponseJobsData { - job_id: *job_id, - job_type: job_info.job_type, - ttl: job_info.ttl, - expiry: job_info.expiry, - }; - jobs.push(info); - } else { - continue; - } - } - } - - Some(jobs) - } - - /// Queries a job by its key and ID. - /// - /// # Arguments - /// - /// * `role_type` - The role of the job. - /// * `job_id` - The ID of the job. - /// - /// # Returns - /// - /// An optional `RpcResponseJobsData` containing the account ID of the job. - pub fn query_job_by_id(role_type: RoleType, job_id: JobId) -> Option> { - SubmittedJobs::::get(role_type, job_id).map(|job_info| RpcResponseJobsData { - job_id, - job_type: job_info.job_type, - ttl: job_info.ttl, - expiry: job_info.expiry, - }) - } - - /// Queries the phase one result of a job by its key and ID. - /// - /// # Arguments - /// - /// * `role_type` - The role of the job. - /// * `job_id` - The ID of the job. - /// - /// # Returns - /// - /// An `Option` containing the phase one result of the job, wrapped in an - /// `PhaseResult`. - pub fn query_job_result(role_type: RoleType, job_id: JobId) -> Option> { - KnownResults::::get(role_type, job_id) - } - - /// Queries next job ID. - /// - /// # Returns - /// Next job ID. - pub fn query_next_job_id() -> JobId { - NextJobId::::get() - } -} diff --git a/pallets/jobs/src/tests.rs b/pallets/jobs/src/tests.rs deleted file mode 100644 index c83c55ca9..000000000 --- a/pallets/jobs/src/tests.rs +++ /dev/null @@ -1,2049 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -#![cfg(test)] -use super::*; -use crate::mock_evm::{address_build, EIP1559UnsignedTransaction}; -use ethers::prelude::*; -use frame_support::{assert_noop, assert_ok}; -use mock::*; -use pallet_evm::{AddressMapping, HashedAddressMapping}; -use pallet_roles::profile::{IndependentRestakeProfile, Profile, Record, SharedRestakeProfile}; -use serde_json::Value; -use sp_core::U256; -use sp_runtime::traits::BlakeTwo256; -use sp_std::sync::Arc; -use std::fs; -use tangle_primitives::jobs::FallbackOptions; -use tangle_primitives::{ - jobs::{ - DKGTSSKeyRefreshResult, DKGTSSKeyRotationResult, DKGTSSPhaseFourJobType, - DKGTSSPhaseOneJobType, DKGTSSPhaseThreeJobType, DKGTSSPhaseTwoJobType, - DKGTSSSignatureResult, DigitalSignatureScheme, Groth16ProveRequest, Groth16System, - HyperData, JobSubmission, JobType, RpcResponseJobsData, ZkSaaSCircuitResult, - ZkSaaSPhaseOneJobType, ZkSaaSPhaseTwoJobType, ZkSaaSPhaseTwoRequest, ZkSaaSSystem, - }, - roles::{RoleType, ThresholdSignatureRoleType, ZeroKnowledgeRoleType}, -}; - -const ALICE: u8 = 1; -const BOB: u8 = 2; -const CHARLIE: u8 = 3; -const DAVE: u8 = 4; -const EVE: u8 = 5; - -const TEN: u8 = 10; -const TWENTY: u8 = 20; -const HUNDRED: u8 = 100; - -pub fn shared_profile() -> Profile { - let profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), amount: None }, - ]) - .unwrap(), - amount: 1000, - }; - Profile::Shared(profile) -} - -pub fn independent_profile() -> Profile { - let profile = IndependentRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: Some(500), - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: Some(500), - }, - ]) - .unwrap(), - }; - Profile::Independent(profile) -} - -fn get_signing_rules_abi() -> (Value, Value) { - let mut data: Value = serde_json::from_str( - &fs::read_to_string("../../examples/contracts/artifacts/VotableSigningRules.json").unwrap(), - ) - .unwrap(); - let abi = data["abi"].take(); - let bytecode = data["bytecode"]["object"].take(); - (abi, bytecode) -} - -fn eip1559_signing_rules_creation_unsigned_transaction( - bytecode: Vec, -) -> EIP1559UnsignedTransaction { - EIP1559UnsignedTransaction { - nonce: U256::zero(), - max_priority_fee_per_gas: U256::from(1), - max_fee_per_gas: U256::from(1), - gas_limit: U256::from(0x100000), - action: pallet_ethereum::TransactionAction::Create, - value: U256::zero(), - input: bytecode, - } -} - -fn eip1559_contract_call_unsigned_transaction( - address: Address, - data: Vec, -) -> EIP1559UnsignedTransaction { - EIP1559UnsignedTransaction { - nonce: U256::zero(), - max_priority_fee_per_gas: U256::from(1), - max_fee_per_gas: U256::from(1), - gas_limit: U256::from(0x100000), - action: pallet_ethereum::TransactionAction::Call(address), - value: U256::zero(), - input: data, - } -} - -#[test] -fn test_signing_rules() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - System::set_block_number(1); - - let pairs = (0..10).map(|i| address_build(i as u8)).collect::>(); - let alice = &pairs[0]; - let bob = &pairs[1]; - Balances::make_free_balance_be(&alice.account_id, 20_000_000_u128); - Balances::make_free_balance_be(&bob.account_id, 20_000_000_u128); - - let (_abi, bytecode) = get_signing_rules_abi(); - let stripped_bytecode = bytecode.as_str().unwrap().trim_start_matches("0x"); - let decoded = hex::decode(stripped_bytecode).unwrap(); - let signing_rules_create_tx = eip1559_signing_rules_creation_unsigned_transaction(decoded); - let signed_tx = signing_rules_create_tx.sign(&alice.private_key, None); - let res = Ethereum::execute(alice.address, &signed_tx, None); - assert_ok!(res.clone()); - assert!(res.clone().unwrap().1.is_some()); - let signing_rules_address = res.unwrap().1.unwrap(); - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - let submission = JobSubmission { - ttl: 200, - expiry: 100, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 2, - permitted_caller: Some(HashedAddressMapping::::into_account_id( - signing_rules_address, - )), - role_type: ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job( - RuntimeOrigin::signed(mock_pub_key(ALICE)), - submission.clone() - )); - - abigen!(SigningRules, "../../examples/contracts/artifacts/VotableSigningRules.json"); - let (provider, _) = Provider::mocked(); - let client = Arc::new(provider); - let contract = SigningRules::new(Address::from(signing_rules_address), client); - - let phase_1_job_id = 0u64; - let threshold = 3; - let use_democracy = false; - let voters = vec![ - pairs[0].address, - pairs[1].address, - pairs[2].address, - pairs[3].address, - pairs[4].address, - ]; - let expiry = 1000; - let ttl = 1000; - let ethers_call: FunctionCall<_, _, _> = - contract.initialize(phase_1_job_id, threshold, use_democracy, voters, expiry, ttl); - let initialize_tx = eip1559_contract_call_unsigned_transaction( - signing_rules_address, - ethers_call.calldata().unwrap().to_vec(), - ); - let signed_tx = initialize_tx.sign(&alice.private_key, None); - let res = Ethereum::execute(alice.address, &signed_tx, None); - assert_ok!(res.clone()); - - let phase_2_job_details: Bytes = b"phase2".into(); - let vote_proposal_call: FunctionCall<_, _, _> = - contract.vote_proposal(phase_1_job_id, phase_2_job_details); - let vote_proposal_tx = eip1559_contract_call_unsigned_transaction( - signing_rules_address, - vote_proposal_call.calldata().unwrap().to_vec(), - ); - // Submit first proposal vote. - let signed_tx = vote_proposal_tx.sign(&alice.private_key, None); - let res = Ethereum::execute(alice.address, &signed_tx, None); - assert_ok!(res.clone()); - - // Submit second proposal vote. - let signed_tx = vote_proposal_tx.sign(&bob.private_key, None); - let res = Ethereum::execute(bob.address, &signed_tx, None); - assert_ok!(res.clone()); - }); -} - -#[test] -fn jobs_submission_e2e_works_for_dkg() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - System::set_block_number(1); - - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [HUNDRED, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: None, - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - - // should fail with invalid validator - assert_noop!( - Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(ALICE)), submission), - Error::::InvalidValidator - ); - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 6, - permitted_caller: None, - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - - // should fail with invalid threshold - assert_noop!( - Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(ALICE)), submission), - Error::::InvalidJobParams - ); - - // should fail when caller has no balance - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: None, - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - - assert_noop!( - Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission), - sp_runtime::TokenError::FundsUnavailable - ); - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - // should work when n = t - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 5, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 5); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - chain_code: None, - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1 - }) - )); - - // ensure the job reward is distributed correctly - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE].iter().map(|x| mock_pub_key(*x)) { - assert_eq!(ValidatorRewards::::get(validator), Some(1)); - } - - // ensure storage is correctly setup - assert!(KnownResults::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0 - ) - .is_some()); - assert!(SubmittedJobs::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0 - ) - .is_none()); - - // ---- use phase one solution in phase 2 signinig ------- - - // another account cannot use solution - let submission = JobSubmission { - expiry: 10, - ttl: 0, - job_type: JobType::DKGTSSPhaseTwo(DKGTSSPhaseTwoJobType { - phase_one_id: 0, - submission: vec![].try_into().unwrap(), - derivation_path: None, - role_type: threshold_signature_role_type, - }), - fallback: FallbackOptions::Destroy, - }; - assert_noop!( - Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TWENTY)), submission), - Error::::InvalidJobParams - ); - - let submission = JobSubmission { - expiry: 10, - ttl: 0, - job_type: JobType::DKGTSSPhaseTwo(DKGTSSPhaseTwoJobType { - phase_one_id: 0, - submission: vec![].try_into().unwrap(), - derivation_path: None, - role_type: threshold_signature_role_type, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 25); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(threshold_signature_role_type), - 1, - JobResult::DKGPhaseTwo(DKGTSSSignatureResult { - verifying_key: vec![].try_into().unwrap(), - signature: vec![].try_into().unwrap(), - data: vec![].try_into().unwrap(), - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - derivation_path: None, - chain_code: None, - }) - )); - - // ensure the job reward is distributed correctly - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE].iter().map(|x| mock_pub_key(*x)) { - assert_eq!(ValidatorRewards::::get(validator), Some(5)); - } - - // ensure storage is correctly setup - assert!(KnownResults::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0 - ) - .is_some()); - assert!(SubmittedJobs::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0 - ) - .is_none()); - }); -} - -#[test] -fn jobs_submission_e2e_for_dkg_refresh() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - System::set_block_number(1); - - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 5); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - chain_code: None, - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1 - }) - )); - - // ---- use phase one solution in phase 3 key refresh ------- - - let submission = JobSubmission { - expiry: 10, - ttl: 0, - job_type: JobType::DKGTSSPhaseThree(DKGTSSPhaseThreeJobType { - phase_one_id: 0, - role_type: threshold_signature_role_type, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 25); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(threshold_signature_role_type), - 1, - JobResult::DKGPhaseThree(DKGTSSKeyRefreshResult { - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1 - }) - )); - - // ensure the job reward is distributed correctly - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE].iter().map(|x| mock_pub_key(*x)) { - assert_eq!(ValidatorRewards::::get(validator), Some(5)); - } - }); -} - -#[test] -fn jobs_submission_e2e_for_dkg_rotation() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - System::set_block_number(1); - - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 5); - - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 10); - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - chain_code: None, - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1 - }) - )); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 1, - JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - chain_code: None, - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1 - }) - )); - - // ---- use phase one solution in phase 4 key rotation ------- - - let submission = JobSubmission { - expiry: 10, - ttl: 0, - job_type: JobType::DKGTSSPhaseFour(DKGTSSPhaseFourJobType { - phase_one_id: 0, - new_phase_one_id: 1, - role_type: threshold_signature_role_type, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 30); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(threshold_signature_role_type), - 2, - JobResult::DKGPhaseFour(DKGTSSKeyRotationResult { - key: vec![].try_into().unwrap(), - new_key: vec![].try_into().unwrap(), - signature: vec![].try_into().unwrap(), - phase_one_id: 0, - new_phase_one_id: 1, - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1, - derivation_path: None, - chain_code: None, - }) - )); - - // ensure the job reward is distributed correctly - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE].iter().map(|x| mock_pub_key(*x)) { - assert_eq!(ValidatorRewards::::get(validator), Some(6)); - } - }); -} - -#[test] -fn jobs_rpc_tests() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - System::set_block_number(1); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - let stored_job = - SubmittedJobs::::get(RoleType::Tss(threshold_signature_role_type), 0).unwrap(); - let expected_rpc_response = RpcResponseJobsData { - job_id: 0, - job_type: stored_job.job_type, - ttl: stored_job.ttl, - expiry: stored_job.expiry, - }; - - // query jobs by validator should work - for validator in participants.iter().map(|x| mock_pub_key(*x)).collect::>() { - assert_eq!( - Jobs::query_jobs_by_validator(validator), - Some(vec![expected_rpc_response.clone()]) - ); - } - - assert_eq!( - Jobs::query_job_by_id(RoleType::Tss(threshold_signature_role_type), 0), - Some(expected_rpc_response) - ); - assert_eq!(Jobs::query_next_job_id(), 1); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - chain_code: None, - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1 - }) - )); - - assert_eq!(Jobs::query_job_by_id(RoleType::Tss(threshold_signature_role_type), 0), None); - assert_eq!(Jobs::query_next_job_id(), 1); - - let expected_result = KnownResults::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - ); - assert_eq!( - Jobs::query_job_result(RoleType::Tss(threshold_signature_role_type), 0), - expected_result - ); - - let submission = JobSubmission { - expiry: 10, - ttl: 0, - job_type: JobType::DKGTSSPhaseTwo(DKGTSSPhaseTwoJobType { - phase_one_id: 0, - submission: vec![].try_into().unwrap(), - derivation_path: None, - role_type: threshold_signature_role_type, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - let stored_job = - SubmittedJobs::::get(RoleType::Tss(threshold_signature_role_type), 1).unwrap(); - let expected_rpc_response = RpcResponseJobsData { - job_id: 1, - job_type: stored_job.job_type, - ttl: stored_job.ttl, - expiry: stored_job.expiry, - }; - - assert_eq!( - Jobs::query_job_by_id(RoleType::Tss(threshold_signature_role_type), 1), - Some(expected_rpc_response) - ); - assert_eq!(Jobs::query_next_job_id(), 2); - - let expected_result = KnownResults::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 1, - ); - assert_eq!( - Jobs::query_job_result(RoleType::Tss(threshold_signature_role_type), 1), - expected_result - ); - }); -} - -#[test] -fn jobs_submission_e2e_works_for_zksaas() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - let dummy_system = ZkSaaSSystem::Groth16(Groth16System { - circuit: HyperData::Raw(vec![].try_into().unwrap()), - num_inputs: 0, - num_constraints: 0, - proving_key: HyperData::Raw(vec![].try_into().unwrap()), - verifying_key: vec![].try_into().unwrap(), - wasm: HyperData::Raw(vec![].try_into().unwrap()), - }); - - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::ZkSaaSPhaseOne(ZkSaaSPhaseOneJobType { - permitted_caller: None, - system: dummy_system.clone(), - role_type: ZeroKnowledgeRoleType::ZkSaaSGroth16, - participants: [HUNDRED, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - }), - fallback: FallbackOptions::Destroy, - }; - - // should fail with invalid validator - assert_noop!( - Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(ALICE)), submission), - Error::::InvalidValidator - ); - - // should fail when caller has no balance - let _submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::<_, _, _, MaxAdditionalParamsLen>::ZkSaaSPhaseOne( - ZkSaaSPhaseOneJobType:: { - permitted_caller: None, - system: dummy_system.clone(), - role_type: ZeroKnowledgeRoleType::ZkSaaSGroth16, - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - }, - ), - fallback: FallbackOptions::Destroy, - }; - - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::ZkSaaSPhaseOne(ZkSaaSPhaseOneJobType { - permitted_caller: Some(mock_pub_key(TEN)), - system: dummy_system.clone(), - role_type: ZeroKnowledgeRoleType::ZkSaaSGroth16, - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 10); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - 0, - JobResult::ZkSaaSPhaseOne(ZkSaaSCircuitResult { - job_id: 0, - participants: vec![].try_into().unwrap() - }), - )); - - // ensure the job reward is distributed correctly - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_eq!(ValidatorRewards::::get(mock_pub_key(validator)), Some(2)); - } - - // ensure storage is correctly setup - assert!(KnownResults::::get( - RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - 0 - ) - .is_some()); - assert!(SubmittedJobs::::get( - RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - 0 - ) - .is_none()); - - // ---- use phase one solution in phase 2 proving ------- - let dummy_req = ZkSaaSPhaseTwoRequest::Groth16(Groth16ProveRequest { - public_input: vec![].try_into().unwrap(), - a_shares: vec![].try_into().unwrap(), - ax_shares: vec![].try_into().unwrap(), - qap_shares: vec![].try_into().unwrap(), - }); - // another account cannot use solution - let submission = JobSubmission { - expiry: 100, - ttl: 200, - job_type: JobType::ZkSaaSPhaseTwo(ZkSaaSPhaseTwoJobType { - phase_one_id: 0, - request: dummy_req.clone(), - role_type: ZeroKnowledgeRoleType::ZkSaaSGroth16, - }), - fallback: FallbackOptions::Destroy, - }; - assert_noop!( - Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TWENTY)), submission), - Error::::InvalidJobParams - ); - - let submission = JobSubmission { - expiry: 100, - ttl: 200, - job_type: JobType::ZkSaaSPhaseTwo(ZkSaaSPhaseTwoJobType { - phase_one_id: 0, - request: dummy_req, - role_type: ZeroKnowledgeRoleType::ZkSaaSGroth16, - }), - fallback: FallbackOptions::Destroy, - }; - - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 30); - - // ensure the job reward is distributed correctly - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - { - assert_eq!(ValidatorRewards::::get(validator), Some(2)); - } - - // ensure storage is correctly setup - assert!(KnownResults::::get( - RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - 1 - ) - .is_none()); - assert!(SubmittedJobs::::get( - RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - 1 - ) - .is_some()); - }); -} - -#[test] -fn reduce_active_role_restake_should_fail() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ======= active validator cannot reduce stake =============== - let reduced_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 500, // reduce stake by 50% - }; - - for validator in participants.clone() { - assert_noop!( - Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(reduced_profile.clone()) - ), - pallet_roles::Error::::InsufficientRestakingBond - ); - } - }); -} - -#[test] -fn delete_profile_with_active_role_should_fail() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ========= active validator cannot delete profile with active job ============= - for validator in participants.clone() { - assert_noop!( - Roles::delete_profile(RuntimeOrigin::signed(mock_pub_key(validator)),), - pallet_roles::Error::::ProfileDeleteRequestFailed - ); - } - }); -} - -#[test] -fn remove_active_role_should_fail() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - Roles::set_min_restaking_bond(RuntimeOrigin::root(), Default::default()).unwrap(); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ========= active validator cannot remove role with active job ============= - let reduced_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }]) - .unwrap(), - amount: 500, // reduce stake by 50% - }; - for validator in participants.clone() { - assert_noop!( - Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(reduced_profile.clone()) - ), - pallet_roles::Error::::RoleCannotBeRemoved - ); - } - }); -} - -#[test] -fn remove_role_without_active_jobs_should_work() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ========= active validator can remove role without active job ========= - let reduced_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }]) - .unwrap(), - amount: 1000, - }; - - for validator in participants.clone() { - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(reduced_profile.clone()) - )); - } - }); -} - -#[test] -fn add_role_to_active_profile_should_work() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ========= active validator can add a new role with current active role ========= - let updated_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 1000, - }; - - for validator in participants.clone() { - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(updated_profile.clone()) - )); - } - }); -} - -#[test] -fn reduce_stake_on_non_active_role_should_work() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - Roles::set_min_restaking_bond(RuntimeOrigin::root(), Default::default()).unwrap(); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ========= active validator can reduce stake on non active role ========= - let updated_profile = IndependentRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: Some(1500), - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: Some(500), // reduced by 3x - }, - ]) - .unwrap(), - }; - - for validator in participants.clone() { - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Independent(updated_profile.clone()) - )); - } - }); -} - -#[test] -fn increase_stake_on_active_role_should_work() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ========= active validator can increase stake with current active role ========= - let updated_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 1500, - }; - - for validator in participants.clone() { - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(updated_profile.clone()) - )); - } - }); -} - -#[test] -fn switch_non_active_profile_should_work() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - Roles::set_min_restaking_bond(RuntimeOrigin::root(), Default::default()).unwrap(); - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // ========= active validator can switch shared to independent profile ========= - let updated_profile = IndependentRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: Some(1500), - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: Some(500), - }, - ]) - .unwrap(), - }; - - for validator in participants.clone() { - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Independent(updated_profile.clone()) - )); - } - - // ========= active validator can switch independent to shared profile ========= - let updated_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 2000, - }; - - for validator in participants.clone() { - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(updated_profile.clone()) - )); - } - }); -} - -#[test] -fn switch_active_shared_profile_to_independent_should_work_if_active_stake_preserved() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - Roles::set_min_restaking_bond(RuntimeOrigin::root(), Default::default()).unwrap(); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ========= active validator cannot switch shared to independent profile ========= - let updated_profile = IndependentRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: Some(500), // <---------- ACTIVE STAKE NOT PRESERVED - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: Some(500), - }, - ]) - .unwrap(), - }; - - for validator in participants.clone() { - assert_noop!( - Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Independent(updated_profile.clone()) - ), - pallet_roles::Error::::InsufficientRestakingBond - ); - } - - // ========= active validator can switch shared to independent profile ========= - let updated_profile = IndependentRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: Some(1000), // <---------- ACTIVE STAKE PRESERVED - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: Some(500), - }, - ]) - .unwrap(), - }; - - for validator in participants.clone() { - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Independent(updated_profile.clone()) - )); - } - }); -} - -#[test] -fn switch_active_independent_profile_to_shared_should_work_if_active_restake_sum_preserved() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - Roles::set_min_restaking_bond(RuntimeOrigin::root(), Default::default()).unwrap(); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet w/ independent profile - let profile = independent_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ========= active validator can not switch independent to shared profile ========= - let updated_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 400, // <---------- ACTIVE RESTAKE SUM NOT PRESERVED - }; - - for validator in participants.clone() { - assert_noop!( - Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(updated_profile.clone()) - ), - pallet_roles::Error::::InsufficientRestakingBond - ); - } - - // ========= active validator can switch independent to shared profile ========= - let updated_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 1500, - }; - - for validator in participants.clone() { - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(updated_profile.clone()) - )); - } - }); -} - -#[test] -fn test_fee_charged_for_jobs_submission() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - System::set_block_number(1); - - // setup time fees - assert_ok!(Jobs::set_time_fee(RuntimeOrigin::root(), 1)); - - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let submission = JobSubmission { - expiry: 10, - ttl: 20, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // Fees charged - // 1. 1unit per participant - // 2. 1unit per ttl block (20) - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 5 - 20); - }); -} - -#[test] -fn try_validator_removal_from_job_with_destory_fallback_works() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - - let job_creator_balance = Balances::free_balance(mock_pub_key(TEN)); - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // sanity check, creator was charged for job - assert!(Balances::free_balance(mock_pub_key(TEN)) < job_creator_balance); - - // ==== now we try to remove inactive validator in the set ==== - assert_ok!(Jobs::try_validator_removal_from_job( - RoleType::Tss(threshold_signature_role_type), - 0, - mock_pub_key(ALICE) - )); - - assert_events(vec![RuntimeEvent::Jobs(crate::Event::JobRefunded { - job_id: 0, - role_type: RoleType::Tss(threshold_signature_role_type), - })]); - - // jobs creator should recieve all fees back - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), job_creator_balance); - - // the job should be removed from storage - assert!(SubmittedJobs::::get(RoleType::Tss(threshold_signature_role_type), 0) - .is_none()); - }); -} - -#[test] -fn try_validator_removal_from_job_with_retry_works_phase_one() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::RegenerateWithThreshold(3), - }; - - let job_creator_balance = Balances::free_balance(mock_pub_key(TEN)); - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // sanity check, creator was charged for job - assert!(Balances::free_balance(mock_pub_key(TEN)) < job_creator_balance); - - let job_info = - SubmittedJobs::::get(RoleType::Tss(threshold_signature_role_type), 0).unwrap(); - - // ==== now we try to remove inactive validator in the set ==== - assert_ok!(Jobs::try_validator_removal_from_job( - RoleType::Tss(threshold_signature_role_type), - 0, - mock_pub_key(ALICE) - )); - - // the job will have two changes - let mut new_job_info = job_info.clone(); - new_job_info.fallback = FallbackOptions::Destroy; - System::assert_has_event(RuntimeEvent::Jobs(crate::Event::JobParticipantsUpdated { - job_id: 0, - role_type: RoleType::Tss(threshold_signature_role_type), - details: new_job_info, - })); - }); -} - -#[test] -fn try_validator_removal_from_job_with_retry_works_phase_two() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let participants = vec![ALICE, BOB, CHARLIE, DAVE, EVE]; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in participants.clone() { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // submit job with existing validators - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: participants - .clone() - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::RegenerateWithThreshold(3), - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - let _job_info = - SubmittedJobs::::get(RoleType::Tss(threshold_signature_role_type), 0).unwrap(); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - chain_code: None, - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1 - }) - )); - - // ensure the job reward is distributed correctly - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE].iter().map(|x| mock_pub_key(*x)) { - assert_eq!(ValidatorRewards::::get(validator), Some(1)); - } - - // ensure storage is correctly setup - assert!(KnownResults::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0 - ) - .is_some()); - assert!(SubmittedJobs::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0 - ) - .is_none()); - - // ---- use phase one solution in phase 2 signinig ------- - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseTwo(DKGTSSPhaseTwoJobType { - phase_one_id: 0, - submission: vec![].try_into().unwrap(), - derivation_path: None, - role_type: threshold_signature_role_type, - }), - fallback: FallbackOptions::RegenerateWithThreshold(3), - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // ==== now we try to remove inactive validator in the set ==== - assert_ok!(Jobs::try_validator_removal_from_job( - RoleType::Tss(threshold_signature_role_type), - 1, - mock_pub_key(ALICE) - )); - - // the job will have two changes - let job_info = - SubmittedJobs::::get(RoleType::Tss(threshold_signature_role_type), 2).unwrap(); - - System::assert_has_event(RuntimeEvent::Jobs(crate::Event::JobReSubmitted { - job_id: 2, - role_type: RoleType::Tss(threshold_signature_role_type), - details: job_info, - })); - - assert!(KnownResults::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0 - ) - .is_none()); - - // the phase two job should ahve new job id for phase one - let job_info = - SubmittedJobs::::get(RoleType::Tss(threshold_signature_role_type), 1).unwrap(); - assert_eq!(job_info.job_type.get_phase_one_id().unwrap(), 2); - assert_eq!(job_info.fallback, FallbackOptions::Destroy); - }); -} - -#[test] -fn test_validator_limit_is_counted_for_jobs_submission() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - System::set_block_number(1); - - // setup time fees - assert_ok!(Jobs::set_time_fee(RuntimeOrigin::root(), 1)); - - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - Some(1) - )); - } - - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - let submission = JobSubmission { - expiry: 10, - ttl: 20, - fallback: FallbackOptions::Destroy, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 3, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission.clone())); - - // submitting again should fail since the max validators can accept is one - assert_noop!( - Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission), - Error::::TooManyJobsForValidator - ); - }); -} - -#[test] -fn jobs_extend_result_works() { - new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { - System::set_block_number(1); - - let threshold_signature_role_type = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - - // all validators sign up in roles pallet - let profile = shared_profile(); - for validator in [ALICE, BOB, CHARLIE, DAVE, EVE] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - Balances::make_free_balance_be(&mock_pub_key(TEN), 100); - - // should work when n = t - let submission = JobSubmission { - expiry: 10, - ttl: 200, - job_type: JobType::DKGTSSPhaseOne(DKGTSSPhaseOneJobType { - participants: [ALICE, BOB, CHARLIE, DAVE, EVE] - .iter() - .map(|x| mock_pub_key(*x)) - .collect::>() - .try_into() - .unwrap(), - threshold: 5, - permitted_caller: Some(mock_pub_key(TEN)), - role_type: threshold_signature_role_type, - hd_wallet: false, - }), - fallback: FallbackOptions::Destroy, - }; - assert_ok!(Jobs::submit_job(RuntimeOrigin::signed(mock_pub_key(TEN)), submission)); - - // submit a solution for this job - assert_ok!(Jobs::submit_job_result( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - JobResult::DKGPhaseOne(DKGTSSKeySubmissionResult { - signatures: vec![].try_into().unwrap(), - threshold: 3, - participants: vec![].try_into().unwrap(), - key: vec![].try_into().unwrap(), - chain_code: None, - signature_scheme: DigitalSignatureScheme::EcdsaSecp256k1 - }) - )); - - // ensure storage is correctly setup - assert!(KnownResults::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0 - ) - .is_some()); - - // extend result by paying fee - assert_ok!(Jobs::extend_job_result_ttl( - RuntimeOrigin::signed(mock_pub_key(TEN)), - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - 100 - )); - - // should be charged 5 for creation and 20 for extension - assert_eq!(Balances::free_balance(mock_pub_key(TEN)), 100 - 25); - - let known_result = KnownResults::::get( - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - ) - .unwrap(); - - assert_eq!(known_result.ttl, 300); - }); -} diff --git a/pallets/jobs/src/types.rs b/pallets/jobs/src/types.rs deleted file mode 100644 index f93072d4a..000000000 --- a/pallets/jobs/src/types.rs +++ /dev/null @@ -1,93 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use super::*; -use tangle_primitives::jobs::*; - -pub type JobSubmissionOf = JobSubmission< - ::AccountId, - BlockNumberFor, - ::MaxParticipants, - ::MaxSubmissionLen, - ::MaxAdditionalParamsLen, ->; - -pub type JobInfoOf = JobInfo< - ::AccountId, - BlockNumberFor, - BalanceOf, - ::MaxParticipants, - ::MaxSubmissionLen, - ::MaxAdditionalParamsLen, ->; - -pub type BalanceOf = - <::Currency as Currency<::AccountId>>::Balance; - -pub type PhaseResultOf = PhaseResult< - ::AccountId, - BlockNumberFor, - ::MaxParticipants, - ::MaxKeyLen, - ::MaxDataLen, - ::MaxSignatureLen, - ::MaxSubmissionLen, - ::MaxProofLen, - ::MaxAdditionalParamsLen, ->; - -pub type JobResultOf = JobResult< - ::MaxParticipants, - ::MaxKeyLen, - ::MaxSignatureLen, - ::MaxDataLen, - ::MaxProofLen, - ::MaxAdditionalParamsLen, ->; - -pub type DKGTSSKeySubmissionResultOf = DKGTSSKeySubmissionResult< - ::MaxKeyLen, - ::MaxParticipants, - ::MaxSignatureLen, ->; - -pub type DKGTSSSignatureResultOf = DKGTSSSignatureResult< - ::MaxDataLen, - ::MaxKeyLen, - ::MaxSignatureLen, - ::MaxAdditionalParamsLen, ->; - -pub type DKGTSSKeyRotationResultOf = DKGTSSKeyRotationResult< - ::MaxKeyLen, - ::MaxSignatureLen, - ::MaxAdditionalParamsLen, ->; - -pub type ZkSaaSCircuitResultOf = ZkSaaSCircuitResult<::MaxParticipants>; - -pub type ZkSaaSProofResultOf = ZkSaaSProofResult<::MaxProofLen>; - -pub type RpcResponseJobsDataOf = RpcResponseJobsData< - ::AccountId, - BlockNumberFor, - ::MaxParticipants, - ::MaxSubmissionLen, - ::MaxAdditionalParamsLen, ->; - -pub type ParticipantKeysOf = BoundedVec, ::MaxParticipants>; - -pub type ParticipantKeyOf = BoundedVec::MaxKeyLen>; diff --git a/pallets/jobs/src/weights.rs b/pallets/jobs/src/weights.rs deleted file mode 100644 index 1fb27a479..000000000 --- a/pallets/jobs/src/weights.rs +++ /dev/null @@ -1,244 +0,0 @@ - -//! Autogenerated weights for `pallet_jobs` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0 -//! DATE: 2024-04-04, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `Salmans-Laptop.local`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("benchmark")`, DB CACHE: `1024` - -// Executed Command: -// ./target/release/tangle -// benchmark -// pallet -// --chain -// benchmark -// --pallet=pallet-jobs -// --extrinsic -// * -// --steps -// 50 -// --repeat -// 20 -// --output=./pallets/jobs/src/weights.rs -// --template=./.maintain/frame-weights-template.hbs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use core::marker::PhantomData; - -/// Weight functions needed for `pallet_jobs`. -pub trait WeightInfo { - fn submit_job() -> Weight; - fn submit_job_result() -> Weight; - fn withdraw_rewards() -> Weight; - fn report_inactive_validator() -> Weight; - fn set_permitted_caller() -> Weight; - fn set_time_fee() -> Weight; - fn extend_job_result_ttl() -> Weight; -} - -/// Weights for `pallet_jobs` using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: `Jobs::NextJobId` (r:1 w:1) - /// Proof: `Jobs::NextJobId` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Jobs::ValidatorJobIdLookup` (r:1 w:1) - /// Proof: `Jobs::ValidatorJobIdLookup` (`max_values`: None, `max_size`: Some(1042), added: 3517, mode: `MaxEncodedLen`) - /// Storage: `Dkg::FeeInfo` (r:1 w:0) - /// Proof: `Dkg::FeeInfo` (`max_values`: Some(1), `max_size`: Some(96), added: 591, mode: `MaxEncodedLen`) - /// Storage: `Jobs::TimeFeePerBlock` (r:1 w:0) - /// Proof: `Jobs::TimeFeePerBlock` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Jobs::SubmittedJobsRole` (r:0 w:1) - /// Proof: `Jobs::SubmittedJobsRole` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Jobs::SubmittedJobs` (r:0 w:1) - /// Proof: `Jobs::SubmittedJobs` (`max_values`: None, `max_size`: Some(5587), added: 8062, mode: `MaxEncodedLen`) - fn submit_job() -> Weight { - // Proof Size summary in bytes: - // Measured: `256` - // Estimated: `4507` - // Minimum execution time: 17_000_000 picoseconds. - Weight::from_parts(19_000_000, 4507) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `Jobs::SubmittedJobs` (r:1 w:1) - /// Proof: `Jobs::SubmittedJobs` (`max_values`: None, `max_size`: Some(5587), added: 8062, mode: `MaxEncodedLen`) - /// Storage: `Jobs::ValidatorRewards` (r:2 w:2) - /// Proof: `Jobs::ValidatorRewards` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) - /// Storage: `Jobs::SubmittedJobsRole` (r:0 w:1) - /// Proof: `Jobs::SubmittedJobsRole` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Jobs::KnownResults` (r:0 w:1) - /// Proof: `Jobs::KnownResults` (`max_values`: None, `max_size`: Some(11050), added: 13525, mode: `MaxEncodedLen`) - fn submit_job_result() -> Weight { - // Proof Size summary in bytes: - // Measured: `471` - // Estimated: `9052` - // Minimum execution time: 24_000_000 picoseconds. - Weight::from_parts(26_000_000, 9052) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: `Jobs::ValidatorRewards` (r:1 w:1) - /// Proof: `Jobs::ValidatorRewards` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn withdraw_rewards() -> Weight { - // Proof Size summary in bytes: - // Measured: `519` - // Estimated: `6196` - // Minimum execution time: 41_000_000 picoseconds. - Weight::from_parts(42_000_000, 6196) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Jobs::SubmittedJobs` (r:1 w:1) - /// Proof: `Jobs::SubmittedJobs` (`max_values`: None, `max_size`: Some(5587), added: 8062, mode: `MaxEncodedLen`) - fn report_inactive_validator() -> Weight { - // Proof Size summary in bytes: - // Measured: `503` - // Estimated: `9052` - // Minimum execution time: 13_000_000 picoseconds. - Weight::from_parts(13_000_000, 9052) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Jobs::KnownResults` (r:1 w:1) - /// Proof: `Jobs::KnownResults` (`max_values`: None, `max_size`: Some(11050), added: 13525, mode: `MaxEncodedLen`) - fn set_permitted_caller() -> Weight { - // Proof Size summary in bytes: - // Measured: `424` - // Estimated: `14515` - // Minimum execution time: 8_000_000 picoseconds. - Weight::from_parts(8_000_000, 14515) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Jobs::TimeFeePerBlock` (r:0 w:1) - /// Proof: `Jobs::TimeFeePerBlock` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - fn set_time_fee() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_000_000 picoseconds. - Weight::from_parts(2_000_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Jobs::KnownResults` (r:1 w:1) - /// Proof: `Jobs::KnownResults` (`max_values`: None, `max_size`: Some(11050), added: 13525, mode: `MaxEncodedLen`) - /// Storage: `Dkg::FeeInfo` (r:1 w:0) - /// Proof: `Dkg::FeeInfo` (`max_values`: Some(1), `max_size`: Some(96), added: 591, mode: `MaxEncodedLen`) - fn extend_job_result_ttl() -> Weight { - // Proof Size summary in bytes: - // Measured: `598` - // Estimated: `14515` - // Minimum execution time: 14_000_000 picoseconds. - Weight::from_parts(15_000_000, 14515) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - -// For backwards compatibility and tests. -impl WeightInfo for () { - /// Storage: `Jobs::NextJobId` (r:1 w:1) - /// Proof: `Jobs::NextJobId` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Jobs::ValidatorJobIdLookup` (r:1 w:1) - /// Proof: `Jobs::ValidatorJobIdLookup` (`max_values`: None, `max_size`: Some(1042), added: 3517, mode: `MaxEncodedLen`) - /// Storage: `Dkg::FeeInfo` (r:1 w:0) - /// Proof: `Dkg::FeeInfo` (`max_values`: Some(1), `max_size`: Some(96), added: 591, mode: `MaxEncodedLen`) - /// Storage: `Jobs::TimeFeePerBlock` (r:1 w:0) - /// Proof: `Jobs::TimeFeePerBlock` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Jobs::SubmittedJobsRole` (r:0 w:1) - /// Proof: `Jobs::SubmittedJobsRole` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Jobs::SubmittedJobs` (r:0 w:1) - /// Proof: `Jobs::SubmittedJobs` (`max_values`: None, `max_size`: Some(5587), added: 8062, mode: `MaxEncodedLen`) - fn submit_job() -> Weight { - // Proof Size summary in bytes: - // Measured: `256` - // Estimated: `4507` - // Minimum execution time: 17_000_000 picoseconds. - Weight::from_parts(19_000_000, 4507) - .saturating_add(RocksDbWeight::get().reads(4_u64)) - .saturating_add(RocksDbWeight::get().writes(4_u64)) - } - /// Storage: `Jobs::SubmittedJobs` (r:1 w:1) - /// Proof: `Jobs::SubmittedJobs` (`max_values`: None, `max_size`: Some(5587), added: 8062, mode: `MaxEncodedLen`) - /// Storage: `Jobs::ValidatorRewards` (r:2 w:2) - /// Proof: `Jobs::ValidatorRewards` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) - /// Storage: `Jobs::SubmittedJobsRole` (r:0 w:1) - /// Proof: `Jobs::SubmittedJobsRole` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Jobs::KnownResults` (r:0 w:1) - /// Proof: `Jobs::KnownResults` (`max_values`: None, `max_size`: Some(11050), added: 13525, mode: `MaxEncodedLen`) - fn submit_job_result() -> Weight { - // Proof Size summary in bytes: - // Measured: `471` - // Estimated: `9052` - // Minimum execution time: 24_000_000 picoseconds. - Weight::from_parts(26_000_000, 9052) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(5_u64)) - } - /// Storage: `Jobs::ValidatorRewards` (r:1 w:1) - /// Proof: `Jobs::ValidatorRewards` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn withdraw_rewards() -> Weight { - // Proof Size summary in bytes: - // Measured: `519` - // Estimated: `6196` - // Minimum execution time: 41_000_000 picoseconds. - Weight::from_parts(42_000_000, 6196) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(3_u64)) - } - /// Storage: `Jobs::SubmittedJobs` (r:1 w:1) - /// Proof: `Jobs::SubmittedJobs` (`max_values`: None, `max_size`: Some(5587), added: 8062, mode: `MaxEncodedLen`) - fn report_inactive_validator() -> Weight { - // Proof Size summary in bytes: - // Measured: `503` - // Estimated: `9052` - // Minimum execution time: 13_000_000 picoseconds. - Weight::from_parts(13_000_000, 9052) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `Jobs::KnownResults` (r:1 w:1) - /// Proof: `Jobs::KnownResults` (`max_values`: None, `max_size`: Some(11050), added: 13525, mode: `MaxEncodedLen`) - fn set_permitted_caller() -> Weight { - // Proof Size summary in bytes: - // Measured: `424` - // Estimated: `14515` - // Minimum execution time: 8_000_000 picoseconds. - Weight::from_parts(8_000_000, 14515) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `Jobs::TimeFeePerBlock` (r:0 w:1) - /// Proof: `Jobs::TimeFeePerBlock` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - fn set_time_fee() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_000_000 picoseconds. - Weight::from_parts(2_000_000, 0) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `Jobs::KnownResults` (r:1 w:1) - /// Proof: `Jobs::KnownResults` (`max_values`: None, `max_size`: Some(11050), added: 13525, mode: `MaxEncodedLen`) - /// Storage: `Dkg::FeeInfo` (r:1 w:0) - /// Proof: `Dkg::FeeInfo` (`max_values`: Some(1), `max_size`: Some(96), added: 591, mode: `MaxEncodedLen`) - fn extend_job_result_ttl() -> Weight { - // Proof Size summary in bytes: - // Measured: `598` - // Estimated: `14515` - // Minimum execution time: 14_000_000 picoseconds. - Weight::from_parts(15_000_000, 14515) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} diff --git a/pallets/multi-asset-delegation/src/tests/delegate.rs b/pallets/multi-asset-delegation/src/tests/delegate.rs index 2f4635780..585abe8e1 100644 --- a/pallets/multi-asset-delegation/src/tests/delegate.rs +++ b/pallets/multi-asset-delegation/src/tests/delegate.rs @@ -13,6 +13,7 @@ // // You should have received a copy of the GNU General Public License // along with Tangle. If not, see . +#![allow(clippy::all)] use super::*; use crate::types::*; use crate::CurrentRound; diff --git a/pallets/roles/Cargo.toml b/pallets/roles/Cargo.toml deleted file mode 100644 index fc1680686..000000000 --- a/pallets/roles/Cargo.toml +++ /dev/null @@ -1,78 +0,0 @@ -[package] -name = "pallet-roles" -version = { workspace = true } -authors = { workspace = true } -edition = { workspace = true } -homepage = { workspace = true } -license = { workspace = true } -repository = { workspace = true } - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[dependencies] -frame-benchmarking = { workspace = true, optional = true } -frame-election-provider-support = { workspace = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -log = { workspace = true } -pallet-balances = { workspace = true } -pallet-session = { workspace = true } -pallet-staking = { workspace = true } -pallet-timestamp = { workspace = true } -parity-scale-codec = { workspace = true, features = ["derive", "max-encoded-len"] } -scale-info = { workspace = true } -serde = { workspace = true } -sp-core = { workspace = true } -sp-io = { workspace = true } -sp-runtime = { workspace = true } -sp-staking = { workspace = true } -sp-std = { workspace = true } -tangle-crypto-primitives = { workspace = true, default-features = false } -tangle-primitives = { workspace = true, default-features = false } - -[dev-dependencies] -hex-literal = { workspace = true } -serde_json = { workspace = true } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -hex = { workspace = true } -pallet-jobs = { workspace = true } - -[features] -default = ["std"] -std = [ - "log/std", - "serde/std", - "parity-scale-codec/std", - "scale-info/std", - "frame-support/std", - "frame-system/std", - "frame-benchmarking?/std", - "sp-core/std", - "sp-runtime/std", - "sp-std/std", - "sp-io/std", - "sp-staking/std", - "pallet-balances/std", - "pallet-staking/std", - "pallet-session/std", - "pallet-timestamp/std", - "tangle-primitives/std", - "tangle-crypto-primitives/std", - "frame-election-provider-support/std", - "pallet-jobs/std" -] - -try-runtime = ["frame-support/try-runtime"] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "sp-staking/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-staking/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "frame-election-provider-support/runtime-benchmarks", -] diff --git a/pallets/roles/README.md b/pallets/roles/README.md deleted file mode 100644 index 9b6b8d6a2..000000000 --- a/pallets/roles/README.md +++ /dev/null @@ -1,152 +0,0 @@ -

Roles Pallet

-The Roles Pallet introduces the concept of roles for validators within the Tangle blockchain. Validators can opt into one or more roles by restaking their tokens. - -By opting into a role, validators agree to new slashing conditions specific to that role and are rewarded accordingly. - ---- - -

Types of Role

- -- ##### TSS Roles - Validators can opt into various threshold signature schemes roles, following are different types of TSS roles - - DfnsCGGMP21Secp256k1 - - DfnsCGGMP21Secp256r1 - - DfnsCGGMP21Stark - - ZcashFrostP256 - - ZcashFrostP384 - - ZcashFrostSecp256k1 - - ZcashFrostEd25519 - - ZcashFrostEd448 - - ZcashFrostRistretto255 - -- ##### ZkSaaS Roles, - Validators can opt into various zero-knowledge proof (ZkSaaS) roles, following are different type of ZKSaaS roles - - ZkSaaSGroth16 - ---- - -

Restaking

-Restaking enables validators to reuse their staked amounts to provide various services within the Tangle network. When validators opt into roles and restake tokens, they agree to adhere to new slashing conditions associated with the selected roles. - -Currently we allow max 50% of staked amount that can be restaked for providing various services within the Tangle network. - -- ##### Independent Restaking: - Validators can restake independently for each role individually. The staked amount allocated to each role is subject to slashing conditions specific to that role. Rewards are distributed based on the allocated restake for each role. - -- ##### Shared Restaking: - Validators can opt for shared restaking, allowing their restaked amount to be distributed across all roles. This provides flexibility and a more collaborative approach to restaking - - ---- - -

Dispatchable calls

- -- ##### create_profile - Validators can create a profile, specifying the roles they want to participate in and the restaking amounts for each role. Profiles can be shared or independent, and the total restaking amount should meet minimum requirements. - -- ##### update_profile - Validators can update their profiles, adjusting restaking amounts for roles. The update operation ensures that the new restaking amounts meet the minimum requirements and do not exceed the maximum allowed. - -- ##### delete_profile - Validators can submit a request to delete their profile, initiating the process to exit from all services. This operation fails if there are pending jobs associated with the roles. - -- ##### chill - Validators can declare no desire to validate or nominate, effectively opting out of all roles and services. - -- ##### unbond_funds - Validators can unbond funds, these operations are only allowed when the validator has no active roles. - -- ##### withdraw_unbonded - Validators can withdraw unbonded funds after a certain period. These operations are only allowed when the validator has no active roles. - ---- - -

Rewards

- -The validator rewards system is designed to distribute rewards among validators in the current era based on their contributions and stake in the system. Here's a summary of how the rewards are computed: - -### 1. Active Validator Rewards (50%) - -- **Function:** `compute_active_validator_rewards` -- **Purpose:** Calculates rewards for validators who have completed jobs in the current era. -- **Method:** - - Retrieves active validators and their completed jobs from storage. - - Calculates the total number of jobs completed by all active validators. - - Distributes rewards among active validators proportionally to the number of jobs they have completed relative to the total jobs completed. -- **Formula:** - - 1. **Calculate Total Jobs Completed by Active Validators:** $\text{total jobs completed}$ (TJC), $\text{jobs completed}$ (JC) - $$\text{TJC} = \sum_{\text{validator}} \text{JC}\_{\text{validator}}$$ - - 2. **Compute Reward Share for Each Active Validator $v$:** $\text{validator share}$ (VS) - $$\text{VS}\_v = \frac{\text{JC}_v}{\text{TJC}}$$ - - 3. **Compute Reward for Each Active Validator $v$:** $\text{validator reward}$ (VR) - - $$\text{VR}_v = \text{VS}_v \times R$$ - - -### 2. Validator Rewards by Restake (50%) - -- **Function:** `compute_validator_rewards_by_restake` -- **Purpose:** Computes rewards for validators based on the amount they have staked in the system. -- **Method:** - - Retrieves the total stake in the system and the restake amount of individual validators. - - Calculates the ratio of restake to total stake in the system. - - Adjusts the total rewards based on the missing restake ratio to ensure rewards are distributed properly. - - Calculates rewards for each validator based on their restake amount relative to the total restake in the system. -- **Formula:** - - 1. **Compute Total Restake in the System:** $\text{total restake}$ (TR) - $$TR = \sum_{i=1}^{n} R_i$$ - - 3. **Compute Restake-to-Stake Ratio:** $\text{Restake-to-Stake Ratio}$ (RSR) - $$\text{RSR} = \frac{TR}{S_{\text{era}}}$$ - - 4. **Compute Missing Restake Ratio:** $\text{Missing Restake Ratio}$ (MRR) - $$\text{MRR} = \text{MaxRestake} - \text{RSR}$$ - - 5. **Adjust Total Rewards:** $\text{Adjusted Total Rewards}$ (ATR) - - $\text{if } \text{MRR} \neq 0$, $\text{ATR} = (\text{MaxRestakeRatio} - \text{MRR}) \times R$ - - $\text{otherwise } \text{ATR} = R$ - - 6. **Compute Reward Share for Each Restaker:** $\text{RS}_i$ - $$\text{RS}_i = \frac{R_i}{TR}$$ - - 7. **Compute Reward for Each Restaker:** $\text{Reward}_i$ - $$\text{Reward}_i = \text{RS}_i \times \text{ATR}$$ - - -#### Example: -Lets take an example in era 100, we have 20 restakers at era 100, and the roles reward for era is 1000TNT -10 restakers have completed 5 jobs each. - -1. Active Validator Rewards - - 50% of 1000TNT is meant for active restakers (completed atleast one job in last era) - - 10 restakers have completed 5 jobs each, since everyone completed the same amount of jobs, 500TNT is equally divided among all 10 restakers. - - If one restaker had completed a higher number of jobs compared to the rest of the restakers, they would get a larger share of the rewards. - -2. Rewards by restake - - 50% of 1000TNT is meant for all restakers, as long as you were restaked in the era, you are eligible for a share of the reward - - The restaker reward share is determined by the amount of restake, if a restaker has restaked 100TNT and the total restake in the system is 1000TNT, then the restaker is eligible for 10% of the rewards. - - The restaker rewards are also weighted by the total restake in the system compared to the total stake. If the total stake in the system is 100_000 TNT and only 1000TNT is restaked (1%), then the total rewards are reduced propotional to this value. - - ---- - -

Contributing

- -Interested in contributing to the Tangle Network? Thank you so much for your interest! We are always appreciative for contributions from the open-source community! - -If you have a contribution in mind, please check out our [Contribution Guide](../../.github/CONTRIBUTING.md) for information on how to do so. We are excited for your first contribution! - ---- - -

License

- -Licensed under GNU General Public License v3.0. - -Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the GNU General Public License v3.0 license, shall be licensed as above, without any additional terms or conditions. - - - diff --git a/pallets/roles/src/benchmarking.rs b/pallets/roles/src/benchmarking.rs deleted file mode 100644 index 447838269..000000000 --- a/pallets/roles/src/benchmarking.rs +++ /dev/null @@ -1,159 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -//! Role pallet benchmarking. - -use super::*; -use crate::{ - profile::{Profile, Record, SharedRestakeProfile}, - Pallet as Roles, -}; -use frame_benchmarking::v2::*; -use frame_support::BoundedVec; -use frame_system::RawOrigin; -use sp_core::sr25519; -use tangle_primitives::roles::RoleType; - -fn assert_last_event(generic_event: ::RuntimeEvent) { - frame_system::Pallet::::assert_last_event(generic_event.into()); -} - -pub fn shared_profile() -> Profile { - let amount: T::CurrencyBalance = 3000_u64.into(); - let profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { role: RoleType::Tss(Default::default()), amount: None }, - Record { role: RoleType::ZkSaaS(Default::default()), amount: None }, - ]) - .unwrap(), - amount, - }; - Profile::Shared(profile) -} - -pub fn updated_profile() -> Profile { - let amount: T::CurrencyBalance = 5000_u64.into(); - let profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { role: RoleType::Tss(Default::default()), amount: None }, - Record { role: RoleType::ZkSaaS(Default::default()), amount: None }, - ]) - .unwrap(), - amount, - }; - Profile::Shared(profile) -} - -fn mock_account_id(id: u8) -> T::AccountId { - let stash: T::AccountId = T::AccountId::decode(&mut &[id; 32][..]).unwrap(); - stash -} - -#[benchmarks( - where - T::RoleKeyId: From, - T::AccountId : From, -)] -mod benchmarks { - use super::*; - // Create profile. - #[benchmark] - fn create_profile() { - let shared_profile = shared_profile::(); - - let caller: T::AccountId = mock_account_id::(1u8); - - #[extrinsic_call] - _(RawOrigin::Signed(caller.clone().into()), shared_profile.clone(), None); - - let ledger = Roles::::ledger(caller).unwrap(); - assert!(ledger.profile == shared_profile); - } - - // Update profile. - #[benchmark] - fn update_profile() { - let caller: T::AccountId = mock_account_id::(1u8); - let shared_profile = shared_profile::(); - let ledger = - RestakingLedger::::try_new(caller.clone(), shared_profile.clone(), vec![], None) - .unwrap(); - Ledger::::insert(caller.clone(), ledger); - // Updating shared stake from 3000 to 5000 tokens - let updated_profile = updated_profile::(); - - #[extrinsic_call] - _(RawOrigin::Signed(caller.clone()), updated_profile.clone()); - - let ledger = Roles::::ledger(caller).unwrap(); - assert!(ledger.profile == updated_profile); - } - - // Delete profile - #[benchmark] - fn delete_profile() { - let caller: T::AccountId = mock_account_id::(1u8); - let shared_profile = shared_profile::(); - let ledger = - RestakingLedger::::try_new(caller.clone(), shared_profile.clone(), vec![], None) - .unwrap(); - Ledger::::insert(caller.clone(), ledger); - - #[extrinsic_call] - _(RawOrigin::Signed(caller.clone())); - - assert_last_event::(Event::ProfileDeleted { account: caller.clone() }.into()); - let ledger = Roles::::ledger(caller); - assert!(ledger.is_none()) - } - - #[benchmark] - fn chill() { - let caller: T::AccountId = mock_account_id::(1u8); - - #[extrinsic_call] - _(RawOrigin::Signed(caller.clone())); - } - - #[benchmark] - fn unbond_funds() { - let caller: T::AccountId = mock_account_id::(1u8); - let amount: T::CurrencyBalance = 2000_u64.into(); - - #[extrinsic_call] - _(RawOrigin::Signed(caller.clone()), amount); - } - - #[benchmark] - fn withdraw_unbonded() { - let caller: T::AccountId = mock_account_id::(1u8); - let shared_profile = shared_profile::(); - let ledger = - RestakingLedger::::try_new(caller.clone(), shared_profile.clone(), vec![], None) - .unwrap(); - Ledger::::insert(caller.clone(), ledger); - - #[extrinsic_call] - _(RawOrigin::Signed(caller.clone())); - } - - // Define the module and associated types for the benchmarks - impl_benchmark_test_suite!( - Roles, - crate::mock::new_test_ext(vec![1, 2, 3, 4]), - crate::mock::Runtime, - ); -} diff --git a/pallets/roles/src/functions.rs b/pallets/roles/src/functions.rs deleted file mode 100644 index 411335c62..000000000 --- a/pallets/roles/src/functions.rs +++ /dev/null @@ -1,575 +0,0 @@ -/// Functions for the pallet. -use super::*; -use crate::{offences::ValidatorOffence, types::*}; -use frame_support::traits::DefensiveSaturating; -use frame_support::traits::UnixTime; -use frame_support::{ - pallet_prelude::DispatchResult, - traits::{DefensiveResult, Imbalance, OnUnbalanced}, -}; -use pallet_staking::ActiveEra; -use pallet_staking::EraPayout; -use sp_runtime::SaturatedConversion; -use sp_runtime::Saturating; -use sp_runtime::{traits::Convert, Perbill}; -use sp_staking::offence::Offence; -use sp_std::collections::btree_map::BTreeMap; -use tangle_primitives::jobs::{traits::JobsHandler, JobId, ReportRestakerOffence}; - -impl Pallet { - /// Validate updated profile for the given account. - /// This function will validate the updated profile for the given account by - /// checking if the account has any active jobs for the removed roles. If the - /// account has any active jobs for the removed roles, then it will return - /// the error `RoleCannotBeRemoved`. - /// - /// # Parameters - /// - `account`: The account ID of the validator. - /// - `updated_profile`: The updated profile. - pub(crate) fn validate_updated_profile( - account: T::AccountId, - updated_profile: Profile, - ) -> DispatchResult { - let current_ledger = Self::ledger(&account).ok_or(Error::::NoProfileFound)?; - let active_jobs: Vec<(RoleType, JobId)> = T::JobsHandler::get_active_jobs(account.clone()); - // Check if the account has any active jobs for the removed roles. - let removed_roles = current_ledger.profile.get_removed_roles(&updated_profile); - if !removed_roles.is_empty() { - for role in removed_roles { - for job in active_jobs.clone() { - let role_type = job.0; - if role_type == role { - return Err(Error::::RoleCannotBeRemoved.into()); - } - } - } - }; - - // Get all roles for which there are active jobs - let roles_with_active_jobs: Vec = - active_jobs.iter().map(|job| job.0).fold(Vec::new(), |mut acc, role| { - if !acc.contains(&role) { - acc.push(role); - } - acc - }); - - // If there are active jobs, changing a current independent profile to shared profile - // is allowed if and only if the shared restaking amount is at least as much as the - // sum of the restaking amounts of the current profile. This is because we require - // the total amount staked to only increase or remain the same across active roles. - if updated_profile.is_shared() && current_ledger.profile.is_independent() { - if active_jobs.len() > 0 { - let mut active_role_restaking_sum: BalanceOf = Zero::zero(); - for role in roles_with_active_jobs.iter() { - let current_role_restaking_amount = current_ledger - .profile - .get_records() - .iter() - .find_map(|record| if record.role == *role { record.amount } else { None }) - .unwrap_or_else(|| Zero::zero()); - active_role_restaking_sum = - active_role_restaking_sum.saturating_add(current_role_restaking_amount); - } - - ensure!( - updated_profile.get_total_profile_restake() >= active_role_restaking_sum, - Error::::InsufficientRestakingBond - ); - } - } - - // Changing a current shared profile to an independent profile is allowed if there are - // active jobs as long as the stake allocated to the active roles is at least as much as - // the shared profile restaking amount. This is because the shared restaking profile for an - // active role is entirely allocated to that role (as it is shared between all selected - // roles). Thus, we allow the user to change to an independent profile as long as the - // restaking amount for the active roles is at least as much as the shared restaking amount. - if updated_profile.is_independent() && current_ledger.profile.is_shared() { - // For each role with an active job, ensure its stake is greater than or equal to the - // existing ledger's shared restaking amount. - for role in roles_with_active_jobs.iter() { - let updated_role_restaking_amount = updated_profile - .get_records() - .iter() - .find_map(|record| if record.role == *role { record.amount } else { None }) - .unwrap_or_else(|| Zero::zero()); - ensure!( - updated_role_restaking_amount - >= current_ledger.profile.get_total_profile_restake(), - Error::::InsufficientRestakingBond - ); - } - - return Ok(()); - } - // For each role with an active job, ensure its stake is greater than or equal to the - // existing ledger's restaking amount for that role. If it's a shared profile, then the - // restaking amount for that role is the entire shared restaking amount. - let min_restaking_bond = MinRestakingBond::::get(); - for record in updated_profile.clone().get_records() { - match updated_profile.clone() { - Profile::Independent(_) => { - if roles_with_active_jobs.contains(&record.role) { - ensure!( - record.amount.unwrap_or_default() >= min_restaking_bond, - Error::::InsufficientRestakingBond - ); - ensure!( - record.amount.unwrap_or_default() - >= current_ledger.restake_for(&record.role), - Error::::InsufficientRestakingBond - ); - } - }, - Profile::Shared(profile) => { - if roles_with_active_jobs.contains(&record.role) { - ensure!( - profile.amount >= current_ledger.profile.get_total_profile_restake(), - Error::::InsufficientRestakingBond - ); - } - }, - } - } - Ok(()) - } - - /// Check if account can chill, unbond and withdraw funds. - /// - /// # Parameters - /// - `account`: The account ID of the restaker. - /// - /// # Returns - /// Returns boolean value. - pub(crate) fn can_exit(account: T::AccountId) -> bool { - let assigned_roles = AccountRolesMapping::::get(account); - if assigned_roles.is_empty() { - // Role is cleared, account can chill, unbond and withdraw funds. - return true; - } - false - } - - /// Calculate max restake amount for the given account. - /// - /// # Parameters - /// - `total_stake`: Total stake of the restaker - /// - /// # Returns - /// Returns the max restake amount. - pub(crate) fn calculate_max_restake_amount(total_stake: BalanceOf) -> BalanceOf { - // User can restake max 50% of the total stake - T::MaxRestake::get() * total_stake - } - - /// Calculate slash value for restaked amount - /// - /// # Parameters - /// - `slash_fraction`: Slash fraction of total-stake - /// - `total_stake`: Total stake of the validator - /// - /// # Returns - /// Returns the slash value - pub(crate) fn calculate_restake_slash_value( - slash_fraction: Perbill, - total_stake: BalanceOf, - ) -> BalanceOf { - // Slash value for given slash fraction - slash_fraction * total_stake - } - - /// Report offence for the given restaker. - /// This function will report restakers for committing offence. - /// - /// # Parameters - /// - `offence_report`: The offence report. - /// - /// # Returns - /// - /// Returns Ok() if restaker offence report is submitted successfully. - pub(crate) fn report_offence( - offence_report: ReportRestakerOffence, - ) -> sp_runtime::DispatchResult { - let offenders = offence_report - .clone() - .offenders - .into_iter() - .enumerate() - .filter_map(|(_, id)| { - // Get validator id from account id. - let id = <::ValidatorSet as ValidatorSet< - ::AccountId, - >>::ValidatorIdOf::convert(id)?; - >::IdentificationOf::convert( - id.clone(), - ).map(|full_id| (id, full_id)) - }) - .collect::>>(); - - let offence = ValidatorOffence { - session_index: offence_report.session_index, - validator_set_count: offence_report.validator_set_count, - offenders, - role_type: offence_report.role_type, - offence_type: offence_report.offence_type, - }; - let _ = T::ReportOffences::report_offence(sp_std::vec![], offence.clone()); - // Update and apply slash on ledger for all offenders - let slash_fraction = offence.slash_fraction(offence.validator_set_count); - for offender in offence_report.offenders { - let mut profile_ledger = - >::get(&offender).ok_or(Error::::NoProfileFound)?; - let staking_ledger = - pallet_staking::Ledger::::get(&offender).ok_or(Error::::NotValidator)?; - let slash_value = - Self::calculate_restake_slash_value(slash_fraction, staking_ledger.total); - // apply slash - profile_ledger.total = profile_ledger.total.saturating_sub(slash_value); - Self::update_ledger(&offender, &profile_ledger); - } - - Ok(()) - } - - /// Update the ledger for the given stash account. - /// - /// # Parameters - /// - `restaker`: The stash account ID. - /// - `ledger`: The new ledger. - pub(crate) fn update_ledger(restaker: &T::AccountId, ledger: &RestakingLedger) { - >::insert(restaker, ledger); - } - - /// Computes rewards for validators in the current era. - /// - /// This function computes rewards for validators in the current era. It divides the total - /// rewards available for the era into two parts: one for active validators and the other for - /// validators based on their restake amount. The rewards are then combined, and individual - /// reward points are assigned to each eligible validator. Finally, the reward points are stored - /// for the current era, and relevant storage items are updated accordingly. - /// - /// # Arguments - /// - /// * `current_era_index` - The index of the current era. - /// - /// # Errors - /// - /// Returns an error if any dispatch operation fails. - pub fn compute_rewards( - active_era: ActiveEraInfo, - current_era_index: EraIndex, - ) -> DispatchResult { - // Note: active_era_start can be None if end era is called during genesis config. - if let Some(active_era_start) = active_era.start { - let now_as_millis_u64 = T::UnixTime::now().as_millis().saturated_into::(); - - let era_duration = (now_as_millis_u64.defensive_saturating_sub(active_era_start)) - .saturated_into::(); - - let total_restake: BalanceOf = TotalRestake::::get(); - - let issuance = T::Currency::total_issuance(); - - let (total_rewards, _remainder) = - T::RestakerEraPayout::era_payout(total_restake, issuance, era_duration); - - let active_validator_rewards: BTreeMap<_, _> = - Self::compute_active_validator_rewards(total_rewards / 2_u32.into()); - - let role_type_validator_rewards: BTreeMap<_, _> = - Self::compute_validator_rewards_by_restake( - total_rewards / 2_u32.into(), - current_era_index, - ); - - let mut combined_validator_rewards: BTreeMap<_, _> = Default::default(); - for (validator, role_reward) in role_type_validator_rewards.iter() { - if let Some(reward) = active_validator_rewards.get(&validator) { - combined_validator_rewards - .insert(validator.clone(), role_reward.saturating_add(*reward)); - } else { - combined_validator_rewards.insert(validator.clone(), *role_reward); - } - } - - // set the era restaker reward point storage - let mut era_reward_points = >::get(¤t_era_index); - era_reward_points.total = total_rewards.try_into().unwrap_or(0_u32); - - // add individual reward points to each eligible validator - for (validator, reward) in combined_validator_rewards.into_iter() { - let reward_as_u32: u32 = reward.try_into().unwrap_or(0_u32); - era_reward_points.individual.insert(validator.clone(), reward_as_u32.into()); - } - - ErasRestakeRewardPoints::::insert(current_era_index, era_reward_points); - ValidatorJobsInEra::::take(); - Self::deposit_event(Event::::RolesRewardSet { total_rewards }); - } - - Ok(()) - } - - /// Computes rewards for active validators based on their completed jobs. - /// - /// This function calculates rewards for validators who have completed jobs in the current era. - /// The rewards are distributed among active validators proportionally to the number of jobs - /// they have completed relative to the total number of jobs completed by all active validators. - /// - /// # Arguments - /// - /// * `total_rewards` - Total rewards available to distribute among active validators. - /// - /// # Returns - /// - /// A `BTreeMap` containing the account IDs of active validators as keys and their corresponding - /// rewards as values. - pub fn compute_active_validator_rewards( - total_rewards: BalanceOf, - ) -> BTreeMap> { - // Log total rewards available for debugging - log::debug!( - target: "pallet-roles", - "Compute_active_validator_rewards, total rewards available {:?}", - total_rewards - ); - - // Retrieve active validators and their rewards from storage - let active_validators = ValidatorJobsInEra::::get(); - - // Initialize a map to store rewards for active validators - let mut active_validator_reward_map: BTreeMap<_, _> = Default::default(); - - // Calculate the total jobs for all active validators - let total_jobs_completed: u32 = - active_validators.values().rfold(0_u32.into(), |acc, &x| acc.saturating_add(x)); - - // Distribute rewards to active validators based on their share - for (validator, jobs_completed) in active_validators.iter() { - // Calculate the share of rewards for the current validator - let validator_share = - Perbill::from_rational(jobs_completed.clone(), total_jobs_completed); - - // Calculate the actual reward amount for the current validator - let validator_share_of_total_reward = validator_share.mul_floor(total_rewards); - // Insert the validator's account ID and reward amount into the reward map - active_validator_reward_map.insert( - validator.clone(), - validator_share_of_total_reward.saturating_add((*jobs_completed).into()), - ); - } - - // Return the map containing rewards for active validators - active_validator_reward_map - } - - /// Computes validator rewards based on inflation. - /// - /// This function calculates rewards for validators based on the amount they have staked - /// in the system. The rewards are distributed proportionally to the amount of staked - /// tokens each validator holds relative to the total staked tokens in the system. - /// - /// # Arguments - /// - /// * `total_rewards` - Total rewards available to distribute among validators. - /// - /// # Returns - /// - /// A `BTreeMap` containing validator accounts as keys and their corresponding rewards as - /// values. - pub fn compute_validator_rewards_by_restake( - total_rewards: BalanceOf, - era_index: EraIndex, - ) -> BTreeMap> { - let mut total_restake: BalanceOf = Default::default(); - let mut restakers_with_restake: Vec<(T::AccountId, BalanceOf)> = Default::default(); - - let total_stake_in_system: BalanceOf = - pallet_staking::Pallet::::eras_total_stake(era_index); - - // TODO : This is an unbounded query, potentially dangerous - for (restaker, ledger) in Ledger::::iter() { - restakers_with_restake.push((restaker, ledger.total_restake())); - total_restake += ledger.total_restake(); - } - - let restake_to_stake_ratio = Perbill::from_rational(total_restake, total_stake_in_system); - log::debug!( - target: "pallet-roles", - "EraIndex {:?} restake_to_stake_ratio {:?}", - era_index, restake_to_stake_ratio - ); - - let missing_restake_ratio = - Perbill::from_percent(T::MaxRestake::get().deconstruct().into()) - - restake_to_stake_ratio; - log::debug!( - target: "pallet-roles", - "EraIndex {:?} missing_restake_ratio {:?}", - era_index, missing_restake_ratio - ); - - let mut normalized_total_rewards = total_rewards; - - if !missing_restake_ratio.is_zero() { - normalized_total_rewards = - (Perbill::from_percent(T::MaxRestake::get().deconstruct().into()) - .saturating_sub(missing_restake_ratio)) - .mul_floor(total_rewards); - } - - log::debug!( - target: "pallet-roles", - "EraIndex {:?} total_rewards {:?} normalized_total_rewards {:?}", - era_index, total_rewards, normalized_total_rewards - ); - - let mut validator_reward_map: BTreeMap> = Default::default(); - - for (restaker, restake_amount) in restakers_with_restake { - let restaker_reward_share = Perbill::from_rational(restake_amount, total_restake); - let restaker_reward = restaker_reward_share.mul_floor(normalized_total_rewards); - validator_reward_map.insert(restaker, restaker_reward); - } - - validator_reward_map - } - - /// Updates the role key associated with a restaker's ledger. - /// - /// This function allows updating the role key associated with a restaker's ledger entry. - /// It takes the restaker's account ID and the new role key as input parameters. - /// - /// # Arguments - /// - /// * `restaker` - The account ID of the restaker whose ledger's role key is to be updated. - /// * `role_key` - The new role key to be associated with the restaker's ledger. - /// - /// # Errors - /// - /// Returns an error if no ledger entry is found for the given restaker or if the provided - /// role key exceeds the maximum allowed key length. - pub fn update_ledger_role_key(restaker: &T::AccountId, role_key: Vec) -> DispatchResult { - let mut ledger = Ledger::::get(restaker).ok_or(Error::::NoProfileFound)?; - let bounded_role_key: BoundedVec = - role_key.try_into().map_err(|_| Error::::KeySizeExceeded)?; - ledger.role_key = bounded_role_key; - Self::update_ledger(restaker, &ledger); - Ok(()) - } - - pub fn do_payout_stakers(validator_stash: T::AccountId, era: EraIndex) -> DispatchResult { - // Validate input data - let current_era = - ActiveEra::::get().ok_or_else(|| Error::::InvalidEraToReward)?.index; - - let history_depth = ::HistoryDepth::get(); - - ensure!( - era <= current_era && era >= current_era.saturating_sub(history_depth), - Error::::InvalidEraToReward - ); - - let mut ledger = >::get(&validator_stash).ok_or(Error::::NoProfileFound)?; - - ledger - .claimed_rewards - .retain(|&x| x >= current_era.saturating_sub(history_depth)); - - match ledger.claimed_rewards.binary_search(&era) { - Ok(_) => return Err(Error::::AlreadyClaimed.into()), - Err(pos) => ledger - .claimed_rewards - .try_insert(pos, era) - // Since we retain era entries in `claimed_rewards` only upto - // `HistoryDepth`, following bound is always expected to be - // satisfied. - .defensive_map_err(|_| Error::::BoundNotMet)?, - } - - let exposure = >::get(&era, &ledger.stash); - - // Input data seems good, no errors allowed after this point - >::insert(&validator_stash, &ledger); - - let era_reward_points = >::get(&era); - let restaker_reward_points = era_reward_points - .individual - .get(&ledger.stash) - .copied() - .unwrap_or_else(Zero::zero); - - // Nothing to do if they have no reward points. - if restaker_reward_points.is_zero() { - return Ok(()); - } - - // This is how much validator + nominators are entitled to. - let validator_total_payout = restaker_reward_points; - - let validator_prefs = - pallet_staking::Pallet::::eras_validator_prefs(&era, &validator_stash); - // Validator first gets a cut off the top. - let validator_commission = validator_prefs.commission; - let validator_commission_payout = validator_commission * validator_total_payout; - - let validator_leftover_payout = validator_total_payout - validator_commission_payout; - // Now let's calculate how this is split to the validator. - let validator_exposure_part = Perbill::from_rational(exposure.own, exposure.total); - let validator_staking_payout = validator_exposure_part * validator_leftover_payout; - - Self::deposit_event(Event::::PayoutStarted { - era_index: era, - validator_stash: ledger.stash.clone(), - }); - - let mut total_imbalance = PositiveImbalanceOf::::zero(); - // We can now make total validator payout - // we use the staking pallet payout function since it handles the reward destination - if let Some(imbalance) = Self::make_payout( - &ledger.stash, - (validator_staking_payout + validator_commission_payout).into(), - ) { - Self::deposit_event(Event::::Rewarded { - stash: ledger.stash, - amount: imbalance.peek(), - }); - total_imbalance.subsume(imbalance); - } - - // Track the number of payout ops to nominators. Note: - // `WeightInfo::payout_stakers_alive_staked` always assumes at least a validator is paid - // out, so we do not need to count their payout op. - let mut nominator_payout_count: u32 = 0; - - // Lets now calculate how this is split to the nominators. - // Reward only the clipped exposures. Note this is not necessarily sorted. - for nominator in exposure.others.iter() { - let nominator_exposure_part = Perbill::from_rational(nominator.value, exposure.total); - - let nominator_reward: BalanceOf = - (nominator_exposure_part * validator_leftover_payout).into(); - // We can now make nominator payout: - if let Some(imbalance) = Self::make_payout(&nominator.who, nominator_reward) { - // Note: this logic does not count payouts for `RewardDestination::None`. - nominator_payout_count += 1; - let e = - Event::::Rewarded { stash: nominator.who.clone(), amount: imbalance.peek() }; - Self::deposit_event(e); - total_imbalance.subsume(imbalance); - } - } - - T::Reward::on_unbalanced(total_imbalance); - debug_assert!(nominator_payout_count <= T::MaxExposurePageSize::get()); - Ok(()) - } - - /// Actually make a payment to a staker. This uses the currency's reward function - /// to pay the right payee for the given staker account. - fn make_payout(stash: &T::AccountId, amount: BalanceOf) -> Option> { - // TODO : Consider handling RewardDestination config - Some(T::Currency::deposit_creating(&stash, amount)) - } -} diff --git a/pallets/roles/src/impls.rs b/pallets/roles/src/impls.rs deleted file mode 100644 index d96cc2187..000000000 --- a/pallets/roles/src/impls.rs +++ /dev/null @@ -1,166 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use super::*; - -use frame_support::{pallet_prelude::DispatchResult, traits::OneSessionHandler}; - -use tangle_primitives::{jobs::ReportRestakerOffence, roles::traits::RolesHandler}; - -/// Implements RolesHandler for the pallet. -impl RolesHandler for Pallet { - type Balance = BalanceOf; - - /// Validates if the given address has the given role. - /// - /// # Parameters - /// - `address`: The account ID of the validator. - /// - `job`: The key representing the type of job. - /// - /// # Returns - /// Returns `true` if the validator is permitted to work with this job type, otherwise `false`. - fn is_restaker_with_role(address: T::AccountId, role_type: RoleType) -> bool { - let assigned_roles = AccountRolesMapping::::get(address); - assigned_roles.contains(&role_type) - } - - /// Validates if the given address has any active role - /// - /// # Parameters - /// - `address`: The account ID of the validator. - /// - /// # Returns - /// Returns `true` if the validator has any active role - fn is_restaker(address: T::AccountId) -> bool { - let assigned_roles = AccountRolesMapping::::get(address); - !assigned_roles.is_empty() - } - - /// Report offence for the given validator. - /// This function will report validators for committing offence. - /// - /// # Parameters - /// - `offence_report`: The offence report. - /// - /// # Returns - /// - /// Returns Ok() if validator offence report is submitted successfully. - fn report_offence( - offence_report: ReportRestakerOffence, - ) -> sp_runtime::DispatchResult { - Self::report_offence(offence_report) - } - - /// Retrieves the role key associated with the given validator address. - /// - /// Returns `Some(Vec)` containing the role key if the address has an associated ledger - /// entry; otherwise, returns `None`. - /// - /// # Arguments - /// - /// * `address` - The account identifier of the validator whose role key is to be retrieved. - fn get_validator_role_key(address: T::AccountId) -> Option> { - let maybe_ledger = Self::ledger(&address); - if let Some(ledger) = maybe_ledger { - Some(ledger.role_key.to_vec()) - } else { - return None; - } - } - - /// Record rewards to a validator. - /// - /// This function records the rewards earned by a validator account. - /// - /// # Parameters - /// - /// - `validators`: The account ID of the validators. - /// - `reward_per_validator`: The amount of rewards to record per validator, all validators are - /// rewarded equally for a job - /// - /// # Errors - /// - /// Returns a `DispatchError` if the operation fails. - fn record_job_by_validators(validators: Vec) -> DispatchResult { - let mut validator_job_map = ValidatorJobsInEra::::get(); - for validator in validators { - let current_job_count: u32 = - *validator_job_map.get(&validator).unwrap_or(&Default::default()); - let new_job_count = current_job_count.saturating_add(1u32.into()); - let _ = validator_job_map.try_insert(validator, new_job_count); - } - - ValidatorJobsInEra::::put(validator_job_map); - - Ok(()) - } - - fn get_max_active_service_for_restaker(restaker: T::AccountId) -> Option { - let maybe_ledger = Self::ledger(&restaker); - if let Some(ledger) = maybe_ledger { - Some(ledger.max_active_services) - } else { - return None; - } - } -} - -impl sp_runtime::BoundToRuntimeAppPublic for Pallet { - type Public = T::RoleKeyId; -} - -impl OneSessionHandler for Pallet { - type Key = T::RoleKeyId; - - fn on_genesis_session<'a, I: 'a>(validators: I) - where - I: Iterator, - { - validators - .into_iter() - .filter(|(acc, _)| Ledger::::contains_key(acc)) - .for_each(|(acc, role_key)| { - match Self::update_ledger_role_key(acc, role_key.encode()) { - Ok(_) => (), - Err(e) => log::error!("Error updating ledger role key: {:?}", e), - } - }); - } - - fn on_new_session<'a, I: 'a>(_changed: bool, validators: I, _queued_validators: I) - where - I: Iterator, - { - validators - .into_iter() - .filter(|(acc, _)| Ledger::::contains_key(acc)) - .for_each(|(acc, role_key)| { - match Self::update_ledger_role_key(acc, role_key.encode()) { - Ok(_) => (), - Err(e) => log::error!("Error updating ledger role key: {:?}", e), - } - }); - } - - fn on_disabled(_i: u32) { - // ignore - } - - // Distribute the inflation rewards - fn on_before_session_ending() { - // ignore - } -} diff --git a/pallets/roles/src/lib.rs b/pallets/roles/src/lib.rs deleted file mode 100644 index bb9075f4b..000000000 --- a/pallets/roles/src/lib.rs +++ /dev/null @@ -1,708 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -//! Pallet to process claims from Ethereum addresses. -#![cfg_attr(not(feature = "std"), no_std)] -#![allow(clippy::all)] - -use frame_support::{ - ensure, - traits::{Currency, Get, ValidatorSet, ValidatorSetWithIdentification}, - BoundedBTreeMap, BoundedVec, CloneNoBound, EqNoBound, PartialEqNoBound, RuntimeDebugNoBound, -}; -pub use pallet::*; -use pallet_staking::{ActiveEraInfo, EraRewardPoints}; -use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use scale_info::TypeInfo; -use sp_core::ecdsa; -use sp_runtime::{ - traits::{Convert, OpaqueKeys, Zero}, - DispatchError, Percent, Saturating, -}; -use sp_staking::{offence::ReportOffence, EraIndex}; -use sp_std::{convert::TryInto, fmt::Debug, prelude::*, vec}; -use tangle_crypto_primitives::ROLE_KEY_TYPE; -use tangle_primitives::roles::{RoleType, ValidatorRewardDistribution}; - -mod functions; -mod impls; -mod types; - -pub mod profile; -use profile::{Profile, Record}; -pub use types::*; - -#[cfg(test)] -pub(crate) mod mock; -pub mod offences; -#[cfg(test)] -mod tests; - -#[cfg(feature = "runtime-benchmarks")] -mod benchmarking; - -mod weights; -pub use weights::WeightInfo; - -use sp_runtime::RuntimeAppPublic; - -#[frame_support::pallet] -pub mod pallet { - use crate::offences::ValidatorOffence; - - use super::*; - use frame_support::pallet_prelude::*; - use frame_system::pallet_prelude::*; - use tangle_primitives::jobs::{traits::JobsHandler, JobId}; - - /// A type for representing the validator id in a session. - pub type ValidatorId = <::ValidatorSet as ValidatorSet< - ::AccountId, - >>::ValidatorId; - - /// A tuple of (ValidatorId, Identification) where `Identification` is the full identification - /// of `ValidatorId`. - pub type IdentificationTuple = ( - ValidatorId, - <::ValidatorSet as ValidatorSetWithIdentification< - ::AccountId, - >>::Identification, - ); - - #[pallet::pallet] - pub struct Pallet(_); - - /// Configuration trait. - #[pallet::config] - pub trait Config: - frame_system::Config + pallet_staking::Config + pallet_session::Config - { - /// The overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// Authority identifier type - type RoleKeyId: Member - + Parameter - + RuntimeAppPublic - + MaybeSerializeDeserialize - + AsRef<[u8]> - + Into - + From - + MaxEncodedLen; - - /// The job manager mechanism. - type JobsHandler: JobsHandler; - - /// Max roles per account. - #[pallet::constant] - type MaxRolesPerAccount: Get; - - /// The inflation distribution based on validator type - type ValidatorRewardDistribution: Get; - - /// A type for retrieving the validators supposed to be online in a session. - type ValidatorSet: ValidatorSetWithIdentification; - - /// The max length for validator key - type MaxKeyLen: Get; - - /// The max roles a validator is allowed to have - type MaxRolesPerValidator: Get; - - /// The max validators allowed in the pallet - type MaxValidators: Get; - - /// A type to submit offence reports against the validators. - type ReportOffences: ReportOffence< - Self::AccountId, - IdentificationTuple, - ValidatorOffence>, - >; - - /// The maximum active jobs per validator - type MaxActiveJobsPerValidator: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The max permitted restake for a restaker - type MaxRestake: Get; - - /// The origin for privileged calls - type ForceOrigin: EnsureOrigin; - - /// The restaker payout per era - type RestakerEraPayout: pallet_staking::EraPayout>; - - type WeightInfo: WeightInfo; - } - - #[pallet::event] - #[pallet::generate_deposit(pub fn deposit_event)] - pub enum Event { - /// Role assigned to the validator. - RoleAssigned { account: T::AccountId, role: RoleType }, - /// Removed validator from role. - RoleRemoved { account: T::AccountId, role: RoleType }, - /// Slashed validator. - Slashed { account: T::AccountId, amount: BalanceOf }, - /// New profile created. - ProfileCreated { - account: T::AccountId, - total_profile_restake: BalanceOf, - roles: Vec, - }, - /// Profile updated. - ProfileUpdated { - account: T::AccountId, - total_profile_restake: BalanceOf, - roles: Vec, - }, - /// Profile deleted. - ProfileDeleted { account: T::AccountId }, - /// Pending jobs,that cannot be opted out at the moment. - PendingJobs { pending_jobs: Vec<(RoleType, JobId)> }, - /// Roles inflation reward paid for era - RolesRewardSet { total_rewards: BalanceOf }, - /// The re-stakers' rewards are getting paid. - PayoutStarted { era_index: EraIndex, validator_stash: T::AccountId }, - /// The re-staker has been rewarded by this amount. - Rewarded { stash: T::AccountId, amount: BalanceOf }, - /// The min restaking bond amount has been updated - MinRestakingBondUpdated { value: BalanceOf }, - } - - #[pallet::error] - pub enum Error { - /// Not a validator. - NotValidator, - /// Validator has active role assigned. - HasRoleAssigned, - /// Given role is not assigned to the validator. - RoleNotAssigned, - /// Max role limit reached for the account. - MaxRoles, - /// Role cannot due to pending jobs, which can't be opted out at the moment. - RoleCannotBeRemoved, - /// Restaking amount cannot be lowered if there are any pending jobs. You can only add more - RestakingAmountCannotBeUpdated, - /// Invalid Restaking amount, should not exceed total staked amount. - ExceedsMaxRestakeValue, - /// Re staking amount should be greater than minimum Restaking bond requirement. - InsufficientRestakingBond, - /// Profile Update failed. - ProfileUpdateFailed, - /// Profile already exists for given validator account. - ProfileAlreadyExists, - /// Stash controller account not found in Roles Ledger. - NoProfileFound, - /// Profile delete request failed due to pending jobs, which can't be opted out at the - /// moment. - ProfileDeleteRequestFailed, - /// SessionKeys not provided - SessionKeysNotProvided, - /// Key size exceeded - KeySizeExceeded, - /// Cannot find Current era - CannotGetCurrentEra, - /// Invalid era info - InvalidEraToReward, - /// Out of bounds input - BoundNotMet, - /// Rewards already claimed - AlreadyClaimed, - /// Unlock chunks already filled - NoMoreChunks, - } - - /// Map from all "controller" accounts to the info regarding the staking. - #[pallet::storage] - #[pallet::getter(fn ledger)] - pub type Ledger = StorageMap<_, Blake2_128Concat, T::AccountId, RestakingLedger>; - - #[pallet::storage] - #[pallet::getter(fn account_roles)] - /// Mapping of resource to bridge index - pub type AccountRolesMapping = StorageMap< - _, - Blake2_128Concat, - T::AccountId, - BoundedVec, - ValueQuery, - >; - - #[pallet::type_value] - pub fn DefaultMinRestakingBond() -> BalanceOf { - 1000u32.into() - } - - /// The minimum re staking bond to become and maintain the role. - #[pallet::storage] - #[pallet::getter(fn min_active_bond)] - pub(super) type MinRestakingBond = - StorageValue<_, BalanceOf, ValueQuery, DefaultMinRestakingBond>; - - /// The total restake amount in the system - #[pallet::storage] - #[pallet::getter(fn total_restake)] - pub(super) type TotalRestake = StorageValue<_, BalanceOf, ValueQuery>; - - /// The number of jobs completed by a validator in era - #[pallet::storage] - #[pallet::getter(fn validator_points_per_session)] - pub type ValidatorJobsInEra = - StorageValue<_, BoundedBTreeMap, ValueQuery>; - - /// Rewards for the last `HISTORY_DEPTH` eras. - /// If reward hasn't been set or has been removed then 0 reward is returned. - #[pallet::storage] - #[pallet::unbounded] - #[pallet::getter(fn eras_reward_points)] - pub type ErasRestakeRewardPoints = - StorageMap<_, Twox64Concat, EraIndex, EraRewardPoints, ValueQuery>; - - /// The active era information, it holds index and start. - /// - /// The active era is the era being currently rewarded. - #[pallet::storage] - #[pallet::getter(fn active_restaker_era)] - pub type ActiveRestakerEra = StorageValue<_, ActiveEraInfo>; - - #[pallet::hooks] - impl Hooks> for Pallet { - fn on_initialize(_now: BlockNumberFor) -> Weight { - // just return the weight of the on_finalize. - T::DbWeight::get().reads_writes(1, 1) - } - - fn on_finalize(_n: BlockNumberFor) { - // if we already have restaker era information, check if the - // staking pallet has advanced in active era - if let Some(restaker_era) = Self::active_restaker_era() { - if let Some(staking_era) = pallet_staking::Pallet::::active_era() { - // if we staking pallet has advanced a session, then we - // compute rewards with last session restakers - // and set new era - if staking_era.index > restaker_era.index { - let _ = Self::compute_rewards(staking_era.clone(), restaker_era.index); - ActiveRestakerEra::::put(staking_era); - } - } - } - // Set the start of the first era. - else { - if let Some(staking_era) = pallet_staking::Pallet::::active_era() { - ActiveRestakerEra::::put(staking_era); - } - } - } - } - - #[pallet::call] - impl Pallet { - /// Create profile for the validator. - /// Validator can choose roles he is interested to opt-in and restake tokens for it. - /// Staking can be done shared or independently for each role. - /// - /// # Parameters - /// - /// - `origin`: Origin of the transaction. - /// - `profile`: Profile to be created - /// - /// This function will return error if - /// - Account is not a validator account. - /// - Profile already exists for the validator. - /// - Min Restaking bond is not met. - /// - Restaking amount is exceeds max Restaking value. - #[pallet::weight(::WeightInfo::create_profile())] - #[pallet::call_index(0)] - pub fn create_profile( - origin: OriginFor, - profile: Profile, - max_active_services: Option, - ) -> DispatchResult { - let restaker_account = ensure_signed(origin)?; - - // Ensure stash account is a validator. - ensure!( - pallet_staking::Validators::::contains_key(&restaker_account), - Error::::NotValidator - ); - - // Get Role key of validator. - let validator_id = - ::ValidatorIdOf::convert(restaker_account.clone()) - .ok_or(Error::::NotValidator)?; - - let session_keys = pallet_session::NextKeys::::get(validator_id) - .ok_or(Error::::SessionKeysNotProvided)?; - let role_key = OpaqueKeys::get_raw(&session_keys, ROLE_KEY_TYPE); - - // Ensure no profile is assigned to the validator. - ensure!( - !Ledger::::contains_key(&restaker_account), - Error::::ProfileAlreadyExists - ); - let ledger = RestakingLedger::::try_new( - restaker_account.clone(), - profile.clone(), - role_key.to_vec(), - max_active_services, - )?; - let total_profile_restake = profile.get_total_profile_restake(); - - // add the restake to system restake - let total_system_restake = TotalRestake::::get(); - TotalRestake::::put(total_system_restake.saturating_add(total_profile_restake)); - - // Restaking amount of profile should meet min Restaking amount requirement. - let min_restaking_bond = MinRestakingBond::::get(); - ensure!( - total_profile_restake >= min_restaking_bond, - Error::::InsufficientRestakingBond - ); - - // Total restaking amount should not exceed max_restaking_amount. - let staking_ledger = pallet_staking::Ledger::::get(&restaker_account) - .ok_or(Error::::NotValidator)?; - let max_restaking_bond = Self::calculate_max_restake_amount(staking_ledger.active); - ensure!( - total_profile_restake <= max_restaking_bond, - Error::::ExceedsMaxRestakeValue - ); - - // Validate role re-staking records. - let records = profile.get_records(); - for record in records { - if profile.is_independent() { - // Restaking amount of record should meet min Restaking amount requirement. - let record_restake = record.amount.unwrap_or_default(); - ensure!( - record_restake >= min_restaking_bond, - Error::::InsufficientRestakingBond - ); - } - } - - let profile_roles: BoundedVec = - BoundedVec::try_from(profile.get_roles()).map_err(|_| Error::::MaxRoles)?; - - AccountRolesMapping::::insert(&restaker_account, profile_roles); - - Self::update_ledger(&restaker_account, &ledger); - Self::deposit_event(Event::::ProfileCreated { - account: restaker_account.clone(), - total_profile_restake, - roles: profile.get_roles(), - }); - - Ok(()) - } - - /// Update profile of the restaker. - /// This function will update the profile of the restaker. - /// If user wants to remove any role, ensure that all the jobs associated with the - /// role are completed else this tx will fail. - /// If user wants to add any role, ensure that the Restaking amount is greater than - /// required min Restaking bond. - /// - /// # Parameters - /// - `origin`: Origin of the transaction. - /// - `profile`: Updated profile. - /// - /// This function will return error if - /// - Account is not a validator account. - /// - Profile is not assigned to the validator. - /// - If there are any pending jobs for the role which user wants to remove. - /// - Restaking amount is exceeds max Restaking value. - /// - Restaking amount is less than min Restaking bond. - #[pallet::weight(::WeightInfo::update_profile())] - #[pallet::call_index(1)] - pub fn update_profile(origin: OriginFor, updated_profile: Profile) -> DispatchResult { - let restaker_account = ensure_signed(origin)?; - // Ensure stash account is a validator. - ensure!( - pallet_staking::Validators::::contains_key(&restaker_account), - Error::::NotValidator - ); - let mut ledger = - Ledger::::get(&restaker_account).ok_or(Error::::NoProfileFound)?; - - let profile_before_update = ledger.profile; - - // Restaking amount of record should meet min restaking amount requirement. - match updated_profile.clone() { - Profile::Shared(profile) => { - ensure!( - profile.amount >= MinRestakingBond::::get(), - Error::::InsufficientRestakingBond - ); - }, - Profile::Independent(profile) => { - for record in profile.records.iter() { - let record_restake = record.amount.unwrap_or_default(); - ensure!( - record_restake >= MinRestakingBond::::get(), - Error::::InsufficientRestakingBond - ); - } - }, - }; - - // Total restaking amount should not exceed `max_restaking_amount`. - let staking_ledger = pallet_staking::Ledger::::get(&restaker_account) - .ok_or(Error::::NotValidator)?; - let max_restaking_bond = Self::calculate_max_restake_amount(staking_ledger.active); - ensure!( - updated_profile.get_total_profile_restake() <= max_restaking_bond, - Error::::ExceedsMaxRestakeValue - ); - // Validate additional rules for profile update. - Self::validate_updated_profile(restaker_account.clone(), updated_profile.clone())?; - ledger.profile = updated_profile.clone(); - ledger.total = updated_profile.get_total_profile_restake().into(); - - // if the total restake was reduced, we record that in unlock data - if profile_before_update.get_total_profile_restake() - > updated_profile.get_total_profile_restake() - { - let value = profile_before_update - .get_total_profile_restake() - .saturating_sub(updated_profile.get_total_profile_restake()); - - let era = Self::active_restaker_era().ok_or(Error::::InvalidEraToReward)?.index - + T::BondingDuration::get(); - - ledger - .unlocking - .try_push(UnlockChunk { value, era }) - .map_err(|_| Error::::NoMoreChunks)?; - - // remove the unlocked amount - let total_system_restake = TotalRestake::::get(); - TotalRestake::::put(total_system_restake.saturating_sub(value)); - } else { - let value_increased = updated_profile - .get_total_profile_restake() - .saturating_sub(profile_before_update.get_total_profile_restake()); - - // update the unlocked amount - let total_system_restake = TotalRestake::::get(); - TotalRestake::::put(total_system_restake.saturating_add(value_increased)); - } - - let profile_roles: BoundedVec = - BoundedVec::try_from(updated_profile.get_roles()) - .map_err(|_| Error::::MaxRoles)?; - - AccountRolesMapping::::insert(&restaker_account, profile_roles); - Self::update_ledger(&restaker_account, &ledger); - - Self::deposit_event(Event::::ProfileUpdated { - account: restaker_account.clone(), - total_profile_restake: updated_profile.get_total_profile_restake().into(), - roles: updated_profile.get_roles(), - }); - - Ok(()) - } - - /// Delete profile of the restaker. - /// This function will submit the request to exit from all the services and will fails if - /// all the job are not completed. - /// - /// - /// # Parameters - /// - `origin`: Origin of the transaction. - /// - /// This function will return error if - /// - Account is not a validator account. - /// - Profile is not assigned to the restaker. - /// - All the jobs are not completed. - #[pallet::weight(::WeightInfo::delete_profile())] - #[pallet::call_index(2)] - pub fn delete_profile(origin: OriginFor) -> DispatchResult { - let restaker_account = ensure_signed(origin)?; - // Ensure stash account is a validator. - ensure!( - pallet_staking::Validators::::contains_key(&restaker_account), - Error::::NotValidator - ); - let ledger = Ledger::::get(&restaker_account).ok_or(Error::::NoProfileFound)?; - - // Submit request to exit from all the services. - let active_jobs = T::JobsHandler::get_active_jobs(restaker_account.clone()); - let mut pending_jobs = Vec::new(); - for job in active_jobs { - let role_type = job.0; - pending_jobs.push((role_type, job.1)); - } - - if !pending_jobs.is_empty() { - // Update account roles mapping. - let profile_roles: BoundedVec = - BoundedVec::try_from(ledger.profile.get_roles()) - .map_err(|_| Error::::MaxRoles)?; - - AccountRolesMapping::::insert(&restaker_account, profile_roles); - - // Profile delete request failed due to pending jobs, which can't be opted out at - // the moment. - return Err(Error::::ProfileDeleteRequestFailed.into()); - } - - // remove the restaker amount from total restake - let total_system_restake = TotalRestake::::get(); - TotalRestake::::put(total_system_restake.saturating_sub(ledger.total_restake())); - - Self::deposit_event(Event::::ProfileDeleted { account: restaker_account.clone() }); - - // Remove entry from ledger. - Ledger::::remove(&restaker_account); - // Remove entry from account roles mapping. - AccountRolesMapping::::remove(&restaker_account); - - Ok(()) - } - - /// Declare no desire to either validate or nominate. - /// - /// If you have opted for any of the roles, please submit `clear_role` extrinsic to opt out - /// of all the services. Once your role is cleared, your request will be processed. - /// - /// # Parameters - /// - /// - `origin`: Origin of the transaction. - /// - /// This function will return error if - /// - Account is not a validator account. - /// - Role is assigned to the validator. - #[pallet::weight(::WeightInfo::chill())] - #[pallet::call_index(3)] - pub fn chill(origin: OriginFor) -> DispatchResult { - let restaker_account = ensure_signed(origin.clone())?; - // Ensure no role is assigned to the restaker_account before chilling. - ensure!(Self::can_exit(restaker_account), Error::::HasRoleAssigned); - - // chill - pallet_staking::Pallet::::chill(origin) - } - - /// Unbond funds from the stash account. - /// This will allow user to unbond and later withdraw funds. - /// If you have opted for any of the roles, please submit `clear_role` extrinsic to opt out - /// of all the services. Once your role is cleared, you can unbond - /// and withdraw funds. - /// - /// # Parameters - /// - /// - `origin`: Origin of the transaction. - /// - `amount`: Amount of funds to unbond. - /// - /// This function will return error if - /// - If there is any active role assigned to the user. - /// - /// NOTE : This call wraps pallet_staking.unbond, so the pallet_staking.unbond call should - /// be blocked in runtime - #[pallet::weight(::WeightInfo::unbond_funds())] - #[pallet::call_index(4)] - pub fn unbond_funds( - origin: OriginFor, - #[pallet::compact] amount: BalanceOf, - ) -> DispatchResult { - let restaker_account = ensure_signed(origin.clone())?; - // Ensure no role is assigned to the restaker_account and is eligible to unbond. - ensure!(Self::can_exit(restaker_account), Error::::HasRoleAssigned); - - // Unbond funds. - let res = pallet_staking::Pallet::::unbond(origin, amount); - match res { - Ok(_) => Ok(()), - Err(dispatch_post_info) => Err(dispatch_post_info.error), - } - } - - /// Withdraw unbond funds after un-bonding period has passed. - /// - /// # Parameters - /// - /// - `origin`: Origin of the transaction. - /// - /// This function will return error if - /// - If there is any active role assigned to the user. - /// NOTE : This call wraps pallet_staking.withdraw_unbonded, so the - /// pallet_staking.withdraw_unbonded call should be blocked in runtime - #[pallet::weight(::WeightInfo::withdraw_unbonded())] - #[pallet::call_index(5)] - pub fn withdraw_unbonded(origin: OriginFor) -> DispatchResult { - let restaker_account = ensure_signed(origin.clone())?; - // Ensure no role is assigned to the restaker_account and is eligible to withdraw. - ensure!(Self::can_exit(restaker_account.clone()), Error::::HasRoleAssigned); - - // if any unlocking restake, then remove any eligible restake - let mut ledger = - Ledger::::get(&restaker_account.clone()).ok_or(Error::::NoProfileFound)?; - - if !ledger.unlocking.is_empty() { - let current_era = - Self::active_restaker_era().ok_or(Error::::InvalidEraToReward)?.index; - - ledger.unlocking.retain(|x| x.era >= current_era); - Ledger::::insert(restaker_account, ledger); - } - - // Withdraw unbond funds. - let res = pallet_staking::Pallet::::withdraw_unbonded(origin, 0); - match res { - Ok(_) => Ok(()), - Err(dispatch_post_info) => Err(dispatch_post_info.error), - } - } - - /// Pay out all the stakers behind a single restaker for a single era. - /// - /// - `validator_stash` is the stash account of the restaker. Their nominators, up to - /// `T::MaxNominatorRewardedPerValidator`, will also receive their rewards. - /// - `era` may be any era between `[current_era - history_depth; current_era]`. - /// - /// The origin of this call must be _Signed_. Any account can call this function, even if - /// it is not one of the stakers. - /// Note : This will only payout the restaker rewards, the validator/restaker will have to - /// call staking.payout_stakers to claim staking rewards - /// - /// ## Complexity - /// - At most O(MaxNominatorRewardedPerValidator). - #[pallet::call_index(6)] - #[pallet::weight(::WeightInfo::withdraw_unbonded())] - pub fn payout_stakers( - origin: OriginFor, - validator_stash: T::AccountId, - era: EraIndex, - ) -> DispatchResult { - ensure_signed(origin)?; - Self::do_payout_stakers(validator_stash, era) - } - - #[pallet::call_index(7)] - #[pallet::weight(::WeightInfo::withdraw_unbonded())] - pub fn set_min_restaking_bond( - origin: OriginFor, - min_restaking_bond: BalanceOf, - ) -> DispatchResult { - T::ForceOrigin::ensure_origin(origin)?; - MinRestakingBond::::put(min_restaking_bond.clone()); - Self::deposit_event(Event::::MinRestakingBondUpdated { value: min_restaking_bond }); - Ok(()) - } - } -} diff --git a/pallets/roles/src/mock.rs b/pallets/roles/src/mock.rs deleted file mode 100644 index 2dff7a050..000000000 --- a/pallets/roles/src/mock.rs +++ /dev/null @@ -1,517 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -#![cfg(test)] - -use super::*; -use crate as pallet_roles; -use frame_election_provider_support::{ - bounds::{ElectionBounds, ElectionBoundsBuilder}, - onchain, SequentialPhragmen, -}; -use frame_support::{ - construct_runtime, parameter_types, - traits::{ConstU128, ConstU32, ConstU64, Contains, Hooks}, - PalletId, -}; -use frame_system::EnsureSigned; -use pallet_session::historical as pallet_session_historical; -use sp_core::{ - sr25519::{self, Signature}, - H256, -}; -use sp_runtime::{ - app_crypto::ecdsa::Public, - testing::Header, - traits::{ConvertInto, IdentifyAccount, IdentityLookup, OpaqueKeys, Verify}, - BuildStorage, DispatchResult, Perbill, Percent, -}; -use sp_staking::{ - offence::{OffenceError, ReportOffence}, - SessionIndex, -}; -use tangle_crypto_primitives::crypto::AuthorityId as RoleKeyId; -use tangle_primitives::{ - jobs::{ - traits::{JobToFee, MPCHandler}, - *, - }, - misbehavior::{MisbehaviorHandler, MisbehaviorSubmission}, - roles::ValidatorRewardDistribution, -}; - -// pub type AccountId = u64; -pub type AccountId = <::Signer as IdentifyAccount>::AccountId; -pub type Balance = u128; -pub type BlockNumber = u64; - -impl frame_system::Config for Runtime { - type RuntimeOrigin = RuntimeOrigin; - type Nonce = u64; - type RuntimeCall = RuntimeCall; - type Hash = H256; - type Hashing = ::sp_runtime::traits::BlakeTwo256; - type AccountId = AccountId; - type Block = Block; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type BlockWeights = (); - type BlockLength = (); - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type DbWeight = (); - type BaseCallFilter = BaseFilter; - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type RuntimeTask = (); - type MaxConsumers = ConstU32<16>; -} - -impl pallet_balances::Config for Runtime { - type Balance = Balance; - type DustRemoval = (); - type RuntimeEvent = RuntimeEvent; - type ExistentialDeposit = ConstU128<1>; - type AccountStore = System; - type MaxLocks = (); - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = (); - type WeightInfo = (); - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = (); - type FreezeIdentifier = (); - type MaxFreezes = (); -} - -type IdentificationTuple = (AccountId, AccountId); -type Offence = crate::offences::ValidatorOffence; - -parameter_types! { - pub static Offences: Vec<(Vec, Offence)> = vec![]; - pub ElectionBoundsOnChain: ElectionBounds = ElectionBoundsBuilder::default() - .voters_count(5_000.into()).targets_count(1_250.into()).build(); - pub ElectionBoundsMultiPhase: ElectionBounds = ElectionBoundsBuilder::default() - .voters_count(10_000.into()).targets_count(1_500.into()).build(); -} - -/// A mock offence report handler. -pub struct OffenceHandler; -impl ReportOffence for OffenceHandler { - fn report_offence(reporters: Vec, offence: Offence) -> Result<(), OffenceError> { - Offences::mutate(|l| l.push((reporters, offence))); - Ok(()) - } - - fn is_known_offence(_offenders: &[IdentificationTuple], _time_slot: &SessionIndex) -> bool { - false - } -} - -impl pallet_timestamp::Config for Runtime { - type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = ConstU64<5>; - type WeightInfo = (); -} - -impl pallet_session::historical::Config for Runtime { - type FullIdentification = AccountId; - type FullIdentificationOf = ConvertInto; -} - -pub struct BaseFilter; -impl Contains for BaseFilter { - fn contains(call: &RuntimeCall) -> bool { - let is_stake_unbond_call = - matches!(call, RuntimeCall::Staking(pallet_staking::Call::unbond { .. })); - - if is_stake_unbond_call { - // no unbond call - return false; - } - - // no chill call - if matches!(call, RuntimeCall::Staking(pallet_staking::Call::chill { .. })) { - return false; - } - - // no withdraw_unbonded call - let is_stake_withdraw_call = - matches!(call, RuntimeCall::Staking(pallet_staking::Call::withdraw_unbonded { .. })); - - if is_stake_withdraw_call { - return false; - } - - true - } -} - -sp_runtime::impl_opaque_keys! { - pub struct MockSessionKeys { - pub role: pallet_roles::Pallet, - } -} - -pub struct MockSessionManager; - -impl pallet_session::SessionManager for MockSessionManager { - fn end_session(_: sp_staking::SessionIndex) {} - fn start_session(_: sp_staking::SessionIndex) {} - fn new_session(idx: sp_staking::SessionIndex) -> Option> { - if idx == 0 || idx == 1 { - Some(vec![mock_pub_key(1), mock_pub_key(2), mock_pub_key(3), mock_pub_key(4)]) - } else if idx == 2 { - Some(vec![mock_pub_key(1), mock_pub_key(2), mock_pub_key(3), mock_pub_key(4)]) - } else { - None - } - } -} - -parameter_types! { - pub const Period: u64 = 1; - pub const Offset: u64 = 0; -} - -impl pallet_session::Config for Runtime { - type SessionManager = MockSessionManager; - type Keys = MockSessionKeys; - type ShouldEndSession = pallet_session::PeriodicSessions; - type NextSessionRotation = pallet_session::PeriodicSessions; - type SessionHandler = ::KeyTypeIdProviders; - type RuntimeEvent = RuntimeEvent; - type ValidatorId = AccountId; - type ValidatorIdOf = pallet_staking::StashOf; - type WeightInfo = (); -} - -pub struct OnChainSeqPhragmen; -impl onchain::Config for OnChainSeqPhragmen { - type System = Runtime; - type Solver = SequentialPhragmen; - type DataProvider = Staking; - type WeightInfo = (); - type MaxWinners = ConstU32<100>; - type Bounds = ElectionBoundsOnChain; -} - -/// Upper limit on the number of NPOS nominations. -const MAX_QUOTA_NOMINATIONS: u32 = 16; - -parameter_types! { - pub static SessionsPerEra: SessionIndex = 1; -} - -impl pallet_staking::Config for Runtime { - type Currency = Balances; - type CurrencyBalance = ::Balance; - type UnixTime = pallet_timestamp::Pallet; - type CurrencyToVote = (); - type RewardRemainder = (); - type RuntimeEvent = RuntimeEvent; - type Slash = (); - type Reward = (); - type RolesHandler = Roles; - type SessionsPerEra = SessionsPerEra; - type SlashDeferDuration = (); - type AdminOrigin = frame_system::EnsureRoot; - type BondingDuration = (); - type SessionInterface = (); - type EraPayout = (); - type NextNewSession = Session; - type MaxExposurePageSize = ConstU32<64>; - type MaxControllersInDeprecationBatch = ConstU32<100>; - type OffendingValidatorsThreshold = (); - type ElectionProvider = onchain::OnChainExecution; - type GenesisElectionProvider = Self::ElectionProvider; - type VoterList = pallet_staking::UseNominatorsAndValidatorsMap; - type TargetList = pallet_staking::UseValidatorsMap; - type MaxUnlockingChunks = ConstU32<32>; - type HistoryDepth = ConstU32<84>; - type EventListeners = (); - type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; - type NominationsQuota = pallet_staking::FixedNominationsQuota; - type WeightInfo = (); -} - -pub struct MockJobToFeeHandler; - -impl JobToFee - for MockJobToFeeHandler -{ - type Balance = Balance; - - fn job_to_fee( - _job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - Default::default() - } - - fn calculate_result_extension_fee(_result: Vec, _extension_time: BlockNumber) -> Balance { - Default::default() - } -} - -pub struct MockMPCHandler; - -impl - MPCHandler< - AccountId, - BlockNumber, - Balance, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > for MockMPCHandler -{ - fn verify( - _data: JobWithResult< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - ) -> DispatchResult { - Ok(()) - } - - fn verify_validator_report( - _validator: AccountId, - _offence: ValidatorOffenceType, - _signatures: Vec>, - ) -> DispatchResult { - Ok(()) - } - - fn validate_authority_key(_validator: AccountId, _authority_key: Vec) -> DispatchResult { - Ok(()) - } -} - -pub struct MockMisbehaviorHandler; - -impl MisbehaviorHandler for MockMisbehaviorHandler { - fn verify(_data: MisbehaviorSubmission) -> DispatchResult { - Ok(()) - } -} - -parameter_types! { - pub const JobsPalletId: PalletId = PalletId(*b"py/jobss"); - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxParticipants: u32 = 10; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSubmissionLen: u32 = 32; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxKeyLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxDataLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSignatureLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxProofLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxActiveJobsPerValidator: u32 = 100; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxRolesPerValidator: u32 = 100; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxAdditionalParamsLen: u32 = 256; -} - -impl pallet_jobs::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ForceOrigin = EnsureSigned; - type Currency = Balances; - type JobToFee = MockJobToFeeHandler; - type RolesHandler = Roles; - type MPCHandler = MockMPCHandler; - type MisbehaviorHandler = MockMisbehaviorHandler; - type PalletId = JobsPalletId; - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - -parameter_types! { - pub MaxRestake: Percent = Percent::from_percent(50); - pub Reward : ValidatorRewardDistribution = ValidatorRewardDistribution::try_new(Percent::from_rational(1_u32,2_u32), Percent::from_rational(1_u32,2_u32)).unwrap(); -} - -pub struct RestakerEraPayout; -impl pallet_staking::EraPayout for RestakerEraPayout { - fn era_payout( - _total_staked: Balance, - _total_issuance: Balance, - _era_duration_millis: u64, - ) -> (Balance, Balance) { - (10_000, 0) - } -} - -impl Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type JobsHandler = Jobs; - type MaxRolesPerAccount = ConstU32<2>; - type RoleKeyId = RoleKeyId; - type ValidatorRewardDistribution = Reward; - type ValidatorSet = Historical; - type ForceOrigin = frame_system::EnsureRoot; - type ReportOffences = OffenceHandler; - type MaxRolesPerValidator = MaxRolesPerValidator; - type MaxKeyLen = MaxKeyLen; - type MaxValidators = ConstU32<100>; - type RestakerEraPayout = RestakerEraPayout; - type MaxRestake = MaxRestake; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type WeightInfo = (); -} - -pub type Block = sp_runtime::generic::Block; -pub type UncheckedExtrinsic = sp_runtime::generic::UncheckedExtrinsic; - -construct_runtime!( - pub enum Runtime - { - System: frame_system, - Timestamp: pallet_timestamp, - Balances: pallet_balances, - Session: pallet_session, - Staking: pallet_staking, - Historical: pallet_session_historical, - Roles: pallet_roles, - Jobs: pallet_jobs - } -); - -pub struct ExtBuilder; - -impl Default for ExtBuilder { - fn default() -> Self { - ExtBuilder - } -} - -// Checks events against the latest. A contiguous set of events must be -// provided. They must include the most recent RuntimeEvent, but do not have to include -// every past RuntimeEvent. -pub fn assert_events(mut expected: Vec) { - let mut actual: Vec = System::events().iter().map(|e| e.event.clone()).collect(); - - expected.reverse(); - for evt in expected { - let next = actual.pop().expect("RuntimeEvent expected"); - assert_eq!(next, evt, "Events don't match (actual,expected)"); - } -} - -pub fn mock_pub_key(id: u8) -> AccountId { - sr25519::Public::from_raw([id; 32]) -} - -pub fn mock_role_key_id(id: u8) -> RoleKeyId { - RoleKeyId::from(Public::from_raw([id; 33])) -} - -pub fn mock_authorities(vec: Vec) -> Vec<(AccountId, RoleKeyId)> { - vec.into_iter().map(|id| (mock_pub_key(id), mock_role_key_id(id))).collect() -} - -pub fn new_test_ext(ids: Vec) -> sp_io::TestExternalities { - new_test_ext_raw_authorities(mock_authorities(ids)) -} - -// This function basically just builds a genesis storage key/value store according to -// our desired mockup. -pub fn new_test_ext_raw_authorities( - authorities: Vec<(AccountId, RoleKeyId)>, -) -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); - // We use default for brevity, but you can configure as desired if needed. - let balances: Vec<_> = authorities.iter().map(|(i, _)| (*i, 20_000_u128)).collect(); - - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); - - let session_keys: Vec<_> = authorities - .iter() - .map(|(id, role_id)| (*id, *id, MockSessionKeys { role: role_id.clone() })) - .collect(); - - pallet_session::GenesisConfig:: { keys: session_keys } - .assimilate_storage(&mut t) - .unwrap(); - - let stakers: Vec<_> = authorities - .iter() - .map(|(authority, _)| { - ( - *authority, - *authority, - 10_000_u128, - pallet_staking::StakerStatus::::Validator, - ) - }) - .collect(); - - let staking_config = pallet_staking::GenesisConfig:: { - stakers, - validator_count: 4, - force_era: pallet_staking::Forcing::ForceNew, - minimum_validator_count: 0, - max_validator_count: Some(5), - max_nominator_count: Some(5), - invulnerables: vec![], - ..Default::default() - }; - - staking_config.assimilate_storage(&mut t).unwrap(); - - let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(1)); - ext.execute_with(|| { - System::set_block_number(1); - Session::on_initialize(1); - >::on_initialize(1); - }); - - ext -} diff --git a/pallets/roles/src/offences.rs b/pallets/roles/src/offences.rs deleted file mode 100644 index 5aabdef60..000000000 --- a/pallets/roles/src/offences.rs +++ /dev/null @@ -1,70 +0,0 @@ -// This file is part of Webb. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use super::*; -use sp_runtime::{Perbill, Saturating}; -use sp_staking::{ - offence::{Kind, Offence}, - SessionIndex, -}; -use tangle_primitives::jobs::ValidatorOffenceType; - -#[derive(PartialEq, Clone, Debug, Encode, Decode)] -pub struct ValidatorOffence { - /// The current session index in which we report the validators. - pub session_index: SessionIndex, - /// The size of the validator set in current session/era. - pub validator_set_count: u32, - /// Authorities that committed an offence. - pub offenders: Vec, - /// Role type against which offence is reported. - pub role_type: RoleType, - /// The different types of the offence. - pub offence_type: ValidatorOffenceType, -} - -impl Offence for ValidatorOffence { - const ID: Kind = *b"validator:offenc"; - type TimeSlot = SessionIndex; - - fn offenders(&self) -> Vec { - self.offenders.clone() - } - - fn session_index(&self) -> SessionIndex { - self.session_index - } - - fn validator_set_count(&self) -> u32 { - self.validator_set_count - } - - fn time_slot(&self) -> Self::TimeSlot { - self.session_index - } - - fn slash_fraction(&self, offenders: u32) -> Perbill { - // the formula is min((3 * (k - (n / 10 + 1))) / n, 1) * 0.07 - // basically, 10% can be offline with no slash, but after that, it linearly climbs up to 7% - // when 13/30 are offline (around 5% when 1/3 are offline). - if let Some(threshold) = offenders.checked_sub(self.validator_set_count / 10 + 1) { - let x = Perbill::from_rational(3 * threshold, self.validator_set_count); - x.saturating_mul(Perbill::from_percent(7)) - } else { - Perbill::default() - } - } -} diff --git a/pallets/roles/src/profile.rs b/pallets/roles/src/profile.rs deleted file mode 100644 index cc8a2f398..000000000 --- a/pallets/roles/src/profile.rs +++ /dev/null @@ -1,170 +0,0 @@ -// This file is part of Webb. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::{BalanceOf, Config}; -use frame_support::pallet_prelude::*; -use sp_runtime::traits::Zero; -use sp_runtime::Saturating; -use sp_std::vec::Vec; -use tangle_primitives::roles::RoleType; - -#[derive( - PartialEqNoBound, - EqNoBound, - CloneNoBound, - Encode, - Decode, - RuntimeDebugNoBound, - TypeInfo, - MaxEncodedLen, -)] -#[scale_info(skip_type_params(T))] -pub struct Record { - pub role: RoleType, - pub amount: Option>, -} - -#[derive( - PartialEqNoBound, - EqNoBound, - CloneNoBound, - Encode, - Decode, - RuntimeDebugNoBound, - TypeInfo, - MaxEncodedLen, -)] -#[scale_info(skip_type_params(T))] -pub struct IndependentRestakeProfile { - pub records: BoundedVec, T::MaxRolesPerAccount>, -} - -#[derive( - PartialEqNoBound, - EqNoBound, - CloneNoBound, - Encode, - Decode, - RuntimeDebugNoBound, - TypeInfo, - MaxEncodedLen, -)] -#[scale_info(skip_type_params(T))] -pub struct SharedRestakeProfile { - pub records: BoundedVec, T::MaxRolesPerAccount>, - pub amount: BalanceOf, -} - -#[derive( - PartialEqNoBound, - EqNoBound, - CloneNoBound, - Encode, - Decode, - RuntimeDebugNoBound, - TypeInfo, - MaxEncodedLen, -)] -#[scale_info(skip_type_params(T))] -pub enum Profile { - Independent(IndependentRestakeProfile), - Shared(SharedRestakeProfile), -} - -impl Profile { - /// Checks if the profile is an independent profile. - pub fn is_independent(&self) -> bool { - matches!(self, Profile::Independent(_)) - } - - /// Checks if the profile is a shared profile. - pub fn is_shared(&self) -> bool { - matches!(self, Profile::Shared(_)) - } - - /// Returns the total profile restake. - pub fn get_total_profile_restake(&self) -> BalanceOf { - match self { - Profile::Independent(profile) => { - profile.records.iter().fold(Zero::zero(), |acc, record| { - acc.saturating_add(record.amount.unwrap_or_default()) - }) - }, - Profile::Shared(profile) => profile.amount, - } - } - - /// Returns staking record details containing role metadata and restake amount. - pub fn get_records(&self) -> Vec> { - match self { - Profile::Independent(profile) => profile.records.clone().into_inner(), - Profile::Shared(profile) => profile.records.clone().into_inner(), - } - } - - /// Returns roles in the profile. - pub fn get_roles(&self) -> Vec { - match self { - Profile::Independent(profile) => { - profile.records.iter().map(|record| record.role).collect() - }, - Profile::Shared(profile) => profile.records.iter().map(|record| record.role).collect(), - } - } - - /// Checks if the profile contains given role. - pub fn has_role(&self, role_type: RoleType) -> bool { - match self { - Profile::Independent(profile) => { - profile.records.iter().any(|record| record.role == role_type) - }, - Profile::Shared(profile) => { - profile.records.iter().any(|record| record.role == role_type) - }, - } - } - - /// Removes given role from the profile. - pub fn remove_role_from_profile(&mut self, role_type: RoleType) { - match self { - Profile::Independent(profile) => { - profile.records.retain(|record| record.role != role_type); - }, - Profile::Shared(profile) => { - profile.records.retain(|record| record.role != role_type); - }, - } - } - - /// Return roles from current profile removed in updated profile. - pub fn get_removed_roles(&self, updated_profile: &Profile) -> Vec { - // Get the roles from the current profile. - let roles = self.get_roles(); - let updated_roles = updated_profile.get_roles(); - // Returns roles in current profile that have been removed in updated profile. - roles - .iter() - .filter_map(|role| { - let updated_role = updated_roles.iter().find(|updated_role| *updated_role == role); - if updated_role.is_none() { - Some(role.clone()) - } else { - None - } - }) - .collect() - } -} diff --git a/pallets/roles/src/tests.rs b/pallets/roles/src/tests.rs deleted file mode 100644 index abd8bc54b..000000000 --- a/pallets/roles/src/tests.rs +++ /dev/null @@ -1,623 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -#![cfg(test)] -use super::*; -use frame_support::{assert_err, assert_ok, BoundedVec}; -use mock::*; -use pallet_staking::{CurrentEra, ErasTotalStake}; -use profile::{IndependentRestakeProfile, Record, SharedRestakeProfile}; -use sp_std::{default::Default, vec}; -use tangle_primitives::{ - jobs::ReportRestakerOffence, - roles::{ThresholdSignatureRoleType, ZeroKnowledgeRoleType}, -}; - -pub fn independent_profile() -> Profile { - let profile = IndependentRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: Some(2500), - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: Some(2500), - }, - ]) - .unwrap(), - }; - Profile::Independent(profile) -} - -pub fn shared_profile() -> Profile { - let profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), amount: None }, - ]) - .unwrap(), - amount: 5000, - }; - Profile::Shared(profile) -} - -// Test create independent profile. -#[test] -fn test_create_independent_profile() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let profile = independent_profile(); - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - profile.clone(), - None - )); - - assert_events(vec![RuntimeEvent::Roles(crate::Event::ProfileCreated { - account: mock_pub_key(1), - total_profile_restake: profile.get_total_profile_restake().into(), - roles: profile.get_roles(), - })]); - // Get the ledger to check if the profile is created. - let ledger = Roles::ledger(mock_pub_key(1)).unwrap(); - assert_eq!(ledger.profile, profile); - assert!(ledger.profile.is_independent()); - }); -} - -// Test create shared profile. -#[test] -fn test_create_shared_profile() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let profile = shared_profile(); - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - profile.clone(), - None - )); - - assert_events(vec![RuntimeEvent::Roles(crate::Event::ProfileCreated { - account: mock_pub_key(1), - total_profile_restake: profile.get_total_profile_restake().into(), - roles: profile.get_roles(), - })]); - - // Get the ledger to check if the profile is created. - let ledger = Roles::ledger(mock_pub_key(1)).unwrap(); - assert_eq!(ledger.profile, profile); - assert!(ledger.profile.is_shared()); - }); -} - -// Test create profile should fail if user is not a validator. -#[test] -fn test_create_profile_should_fail_if_user_is_not_a_validator() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let profile = shared_profile(); - assert_err!( - Roles::create_profile(RuntimeOrigin::signed(mock_pub_key(5)), profile.clone(), None), - Error::::NotValidator - ); - }); -} - -// Test create profile should fail if user already has a profile. -#[test] -fn test_create_profile_should_fail_if_user_already_has_a_profile() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let profile = shared_profile(); - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - profile.clone(), - None - )); - assert_err!( - Roles::create_profile(RuntimeOrigin::signed(mock_pub_key(1)), profile.clone(), None), - Error::::ProfileAlreadyExists - ); - }); -} - -// Test create profile should fail if min required restake condition is not met. -// Min restake required is 2500. -#[test] -fn test_create_profile_should_fail_if_min_required_restake_condition_is_not_met() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - pallet::MinRestakingBond::::put(2500); - - let profile = Profile::Shared(SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 1000, - }); - - assert_err!( - Roles::create_profile(RuntimeOrigin::signed(mock_pub_key(1)), profile.clone(), None), - Error::::InsufficientRestakingBond - ); - }); -} - -// Test create profile should fail if min required restake condition is not met. -// In case of independent profile, each role should meet the min required restake condition. -// Min restake required is 2500. -#[test] -fn test_create_profile_should_fail_if_min_required_restake_condition_is_not_met_for_independent_profile( -) { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - pallet::MinRestakingBond::::put(2500); - - let profile = Profile::Independent(IndependentRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: Some(1000), - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: Some(1000), - }, - ]) - .unwrap(), - }); - - assert_err!( - Roles::create_profile(RuntimeOrigin::signed(mock_pub_key(1)), profile.clone(), None), - Error::::InsufficientRestakingBond - ); - }); -} - -// Update profile from independent to shared. -#[test] -fn test_update_profile_from_independent_to_shared() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - // Lets create independent profile. - let profile = independent_profile(); - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - profile.clone(), - None - )); - - // Get the ledger to check if the profile is created. - let ledger = Roles::ledger(mock_pub_key(1)).unwrap(); - assert!(ledger.profile.is_independent()); - assert_eq!(ledger.total_restake(), 5000); - - let updated_profile = shared_profile(); - - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - updated_profile.clone() - )); - - assert_events(vec![RuntimeEvent::Roles(crate::Event::ProfileUpdated { - account: mock_pub_key(1), - total_profile_restake: profile.get_total_profile_restake().into(), - roles: profile.get_roles(), - })]); - // Get updated ledger and check if the profile is updated. - let ledger = Roles::ledger(mock_pub_key(1)).unwrap(); - assert_eq!(ledger.profile, updated_profile); - assert!(ledger.profile.is_shared()); - }); -} - -// Update profile from shared to independent. -#[test] -fn test_update_profile_from_shared_to_independent() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - // Lets create shared profile. - let profile = shared_profile(); - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - profile.clone(), - None - )); - - // Get the ledger to check if the profile is created. - let ledger = Roles::ledger(mock_pub_key(1)).unwrap(); - assert!(ledger.profile.is_shared()); - assert_eq!(ledger.total_restake(), 5000); - - let updated_profile = independent_profile(); - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - updated_profile.clone() - )); - - assert_events(vec![RuntimeEvent::Roles(crate::Event::ProfileUpdated { - account: mock_pub_key(1), - total_profile_restake: profile.get_total_profile_restake().into(), - roles: profile.get_roles(), - })]); - // Get updated ledger and check if the profile is updated. - let ledger = Roles::ledger(mock_pub_key(1)).unwrap(); - assert_eq!(ledger.profile, updated_profile); - assert!(ledger.profile.is_independent()); - assert_eq!(ledger.total_restake(), 5000); - }); -} - -#[test] -fn test_update_profile_should_fail_if_user_is_not_a_validator() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let profile = shared_profile(); - assert_err!( - Roles::update_profile(RuntimeOrigin::signed(mock_pub_key(5)), profile.clone()), - Error::::NotValidator - ); - }); -} - -// Test delete profile. -#[test] -fn test_delete_profile() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - // Lets create shared profile. - let profile = shared_profile(); - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - profile.clone(), - None - )); - - // Get the ledger to check if the profile is created. - let ledger = Roles::ledger(mock_pub_key(1)).unwrap(); - assert!(ledger.profile.is_shared()); - assert_eq!(ledger.total_restake(), 5000); - - assert_ok!(Roles::delete_profile(RuntimeOrigin::signed(mock_pub_key(1)))); - - assert_events(vec![RuntimeEvent::Roles(crate::Event::ProfileDeleted { - account: mock_pub_key(1), - })]); - assert_eq!(Roles::ledger(mock_pub_key(1)), None); - }); -} - -#[test] -fn test_unbond_funds_should_work() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - // Lets create shared profile. - let profile = shared_profile(); - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - profile.clone(), - None - )); - - // Lets delete profile by opting out of all services. - assert_ok!(Roles::delete_profile(RuntimeOrigin::signed(mock_pub_key(1)))); - - assert_eq!(Roles::ledger(mock_pub_key(1)), None); - - // unbond funds. - assert_ok!(Roles::unbond_funds(RuntimeOrigin::signed(mock_pub_key(1)), 5000)); - - assert_events(vec![RuntimeEvent::Staking(pallet_staking::Event::Unbonded { - stash: mock_pub_key(1), - amount: 5000, - })]); - - // Get pallet staking ledger mapping. - let staking_ledger = pallet_staking::Ledger::::get(mock_pub_key(1)).unwrap(); - // Since we we have unbonded 5000 tokens, we should have 5000 tokens in staking ledger. - assert_eq!(staking_ledger.active, 5000); - }); -} - -#[test] -fn total_restake_should_calculate_correctly() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - Staking::bond_extra(RuntimeOrigin::signed(mock_pub_key(1)), 5000).unwrap(); - let active_era_info = ActiveEraInfo { index: Session::current_index(), start: Some(0) }; - ActiveRestakerEra::::put(active_era_info); - - // Lets create shared profile. - let profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 6000, - }; - - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - Profile::Shared(profile), - None - )); - - assert_eq!(TotalRestake::::get(), 6000); - - let updated_profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 5000, - }; - - assert_ok!(Roles::update_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - Profile::Shared(updated_profile), - )); - - assert_eq!(TotalRestake::::get(), 5000); - - // Lets delete profile by opting out of all services. - assert_ok!(Roles::delete_profile(RuntimeOrigin::signed(mock_pub_key(1)))); - - assert_eq!(TotalRestake::::get(), 0); - }); -} - -#[test] -fn test_reward_dist_works_as_expected_with_multiple_validator() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let _total_inflation_reward = 10_000; - CurrentEra::::put(1); - ErasTotalStake::::insert(1, 40_000); - - assert_eq!(Balances::free_balance(mock_pub_key(1)), 20_000); - assert_eq!(Balances::free_balance(mock_pub_key(2)), 20_000); - - // lets give both validators equal rewards for jobs participation - let mut validator_rewards: BoundedBTreeMap<_, _, _> = Default::default(); - validator_rewards.try_insert(mock_pub_key(1), 100_u32).unwrap(); - validator_rewards.try_insert(mock_pub_key(2), 100_u32).unwrap(); - ValidatorJobsInEra::::put(validator_rewards); - - let profile = shared_profile(); - for validator in vec![1, 2, 3, 4] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - profile.clone(), - None - )); - } - - // The reward is 1000, we have 5 authorities - let active_era_info = ActiveEraInfo { index: Session::current_index(), start: Some(0) }; - - assert_ok!(Roles::compute_rewards(active_era_info, 1)); - assert!(ValidatorJobsInEra::::get().is_empty()); - - // Rewards math - // Total rewards : 10_000 - // Active validators : 1&2, will receive 50% each - // All validators : will receive 50%, everyone receives equally - - // 1 & 2 receives, 5000/2 + 5000/4 + 100 (job reward) - let reward_points = ErasRestakeRewardPoints::::get(1); - assert_eq!( - *reward_points.individual.get(&mock_pub_key(1)).unwrap(), - 2500_u32 + 1250_u32 + 100_u32 - ); - assert_eq!( - *reward_points.individual.get(&mock_pub_key(2)).unwrap(), - 2500_u32 + 1250_u32 + 100_u32 - ); - - // 3 & 4 receives only 5000/4 - assert_eq!(*reward_points.individual.get(&mock_pub_key(3)).unwrap(), 1250_u32); - assert_eq!(*reward_points.individual.get(&mock_pub_key(4)).unwrap(), 1250_u32); - }); -} - -#[test] -fn test_reward_dist_takes_restake_into_account() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let _total_inflation_reward = 10_000; - CurrentEra::::put(1); - ErasTotalStake::::insert(1, 24000); - - let profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 1000, - }; - - for validator in vec![1, 2] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(profile.clone()), - None - )); - } - - let profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 5000, - }; - for validator in vec![3, 4] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(profile.clone()), - None - )); - } - - // The reward is 1000, we have 5 authorities - let active_era_info = ActiveEraInfo { index: Session::current_index(), start: Some(0) }; - - assert_ok!(Roles::compute_rewards(active_era_info, 1)); - assert!(ValidatorJobsInEra::::get().is_empty()); - - // Rewards math - // Total rewards : 10_000 - // Inflation rewards for re-staking : 50% = 5000 - // Stake of 1 = 1000 - // Stake of 2 = 1000 - // Stake of 3 = 5000 - // Stake of 4 = 5000 - // Total stake = 12000 - - let reward_points = ErasRestakeRewardPoints::::get(1); - // rewards should be 1/12, since validator 1 bonded 1000/12000 - assert_eq!(*reward_points.individual.get(&mock_pub_key(1)).unwrap(), 5000 / 12); - // rewards should be 1/12, since validator 2 bonded 1000/12000 - assert_eq!(*reward_points.individual.get(&mock_pub_key(2)).unwrap(), 5000 / 12); - - // rewards should be 5/12, since validator 3 bonded 5000/12000 - assert_eq!(*reward_points.individual.get(&mock_pub_key(3)).unwrap(), (5000 * 5) / 12); - - // rewards should be 5/12, since validator4 bonded 5000/12000 - assert_eq!(*reward_points.individual.get(&mock_pub_key(4)).unwrap(), (5000 * 5) / 12); - }); -} - -#[test] -fn test_reward_dist_handles_less_than_ideal_restake() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let _total_inflation_reward = 10_000; - CurrentEra::::put(1); - ErasTotalStake::::insert(1, 100_000); - - let profile = SharedRestakeProfile { - records: BoundedVec::try_from(vec![ - Record { - role: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - amount: None, - }, - Record { - role: RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16), - amount: None, - }, - ]) - .unwrap(), - amount: 1000, - }; - - for validator in vec![1] { - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(validator)), - Profile::Shared(profile.clone()), - None - )); - } - - // The reward is 10_000, we have 1 authority - let active_era_info = ActiveEraInfo { index: Session::current_index(), start: Some(0) }; - - assert_ok!(Roles::compute_rewards(active_era_info, 1)); - assert!(ValidatorJobsInEra::::get().is_empty()); - - // Rewards math - // Total rewards : 10_000 - // Inflation rewards for re-staking : 50% = 5000 - // Stake of 1 = 1000 - // Total stake = 1000 - - let reward_points = ErasRestakeRewardPoints::::get(1); - // our ideal re-stake rate is 50% - // but we only have 1% - // so reward of 5000 will be reduced to 1% of 5000 - assert_eq!(*reward_points.individual.get(&mock_pub_key(1)).unwrap(), 50); - }); -} - -// Test report offence should work. -#[test] -fn test_report_offence_should_work() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - let profile = shared_profile(); - assert_ok!(Roles::create_profile( - RuntimeOrigin::signed(mock_pub_key(1)), - profile.clone(), - None - )); - - // Get current session index. - let session_index = pallet_session::CurrentIndex::::get(); - - // Create offence report. - let offence_report = ReportRestakerOffence { - session_index, - validator_set_count: 4, - role_type: RoleType::Tss(Default::default()), - offence_type: tangle_primitives::jobs::ValidatorOffenceType::Inactivity, - offenders: vec![mock_pub_key(1)], - }; - // Lets report offence. - assert_ok!(Roles::report_offence(offence_report)); - // Should slash 700 tokens - let ledger = Roles::ledger(mock_pub_key(1)).unwrap(); - assert_eq!(ledger.total, 4300); - }); -} - -#[test] -fn test_set_min_validator_stake() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - // should fail with non force origin - frame_support::assert_noop!( - Roles::set_min_restaking_bond(RuntimeOrigin::signed(mock_pub_key(1)), 100u32.into()), - sp_runtime::DispatchError::BadOrigin - ); - - assert_ok!(Roles::set_min_restaking_bond(RuntimeOrigin::root(), 100u32.into())); - - assert_eq!(MinRestakingBond::::get(), 100u32.into()); - }) -} diff --git a/pallets/roles/src/types.rs b/pallets/roles/src/types.rs deleted file mode 100644 index a4c0b4fde..000000000 --- a/pallets/roles/src/types.rs +++ /dev/null @@ -1,100 +0,0 @@ -use super::*; -use parity_scale_codec::HasCompact; -use sp_runtime::RuntimeDebug; - -/// Just a Balance/BlockNumber tuple to encode when a chunk of funds will be unlocked. -#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct UnlockChunk { - /// Amount of funds to be unlocked. - #[codec(compact)] - pub value: Balance, - /// Era number at which point it'll be unlocked. - #[codec(compact)] - pub era: EraIndex, -} - -/// The ledger of a (bonded) stash. -#[derive( - PartialEqNoBound, - EqNoBound, - CloneNoBound, - Encode, - Decode, - RuntimeDebugNoBound, - TypeInfo, - MaxEncodedLen, -)] -#[scale_info(skip_type_params(T))] -pub struct RestakingLedger { - /// The stash account whose balance is actually locked and at stake. - pub stash: T::AccountId, - /// The total amount of the stash's balance that is restaked for all selected roles. - /// This restaked balance we are currently accounting for new slashing conditions. - #[codec(compact)] - pub total: BalanceOf, - /// Restaking Profile - pub profile: Profile, - /// Roles map with their respective records. - pub roles: BoundedBTreeMap, T::MaxRolesPerValidator>, - /// Role key - pub role_key: BoundedVec, - /// Any balance that is becoming free, which may eventually be transferred out of the stash - /// (assuming it doesn't get slashed first). It is assumed that this will be treated as a first - /// in, first out queue where the new (higher value) eras get pushed on the back. - pub unlocking: BoundedVec>, T::MaxUnlockingChunks>, - /// List of eras for which the stakers behind a validator have claimed rewards. Only updated - /// for validators. - pub claimed_rewards: BoundedVec, - /// Max active services - pub max_active_services: u32, -} - -impl RestakingLedger { - /// New staking ledger for a stash account. - pub fn try_new( - stash: T::AccountId, - profile: Profile, - role_key: Vec, - max_active_services: Option, - ) -> Result { - let total_restake = profile.get_total_profile_restake(); - let mut roles: BoundedBTreeMap<_, _, _> = Default::default(); - for record in profile.get_records().into_iter() { - roles.try_insert(record.role, record).map_err(|_| Error::::KeySizeExceeded)?; - } - let bounded_role_key: BoundedVec = - role_key.try_into().map_err(|_| Error::::KeySizeExceeded)?; - Ok(Self { - stash, - total: total_restake.into(), - profile, - roles, - role_key: bounded_role_key, - unlocking: Default::default(), - claimed_rewards: Default::default(), - max_active_services: max_active_services - .unwrap_or_else(|| T::MaxActiveJobsPerValidator::get()), - }) - } - - /// Returns the total amount of the stash's balance that is restaked for all selected roles. - pub fn total_restake(&self) -> BalanceOf { - self.total - } - - /// Returns the amount of the stash's balance that is restaked for the given role. - /// If the role is not found, returns zero. - pub fn restake_for(&self, role: &RoleType) -> BalanceOf { - self.roles - .get(role) - .map_or_else(Zero::zero, |record| record.amount.unwrap_or_default()) - } -} - -pub type CurrencyOf = ::Currency; -pub type BalanceOf = - as Currency<::AccountId>>::Balance; -pub type PositiveImbalanceOf = - as Currency<::AccountId>>::PositiveImbalance; -pub type NegativeImbalanceOf = - as Currency<::AccountId>>::NegativeImbalance; diff --git a/pallets/roles/src/weights.rs b/pallets/roles/src/weights.rs deleted file mode 100644 index 404276d74..000000000 --- a/pallets/roles/src/weights.rs +++ /dev/null @@ -1,327 +0,0 @@ - -//! Autogenerated weights for `pallet_roles` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0 -//! DATE: 2024-03-19, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `Salmans-MacBook-Pro.local`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` - -// Executed Command: -// ./target/release/tangle -// benchmark -// pallet -// --chain -// dev -// --pallet=pallet-roles -// --extrinsic -// * -// --steps -// 50 -// --repeat -// 20 -// --output=./pallets/roles/src/weights.rs -// --template=./.maintain/frame-weights-template.hbs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use core::marker::PhantomData; - -/// Weight functions needed for `pallet_roles`. -pub trait WeightInfo { - fn create_profile() -> Weight; - fn update_profile() -> Weight; - fn delete_profile() -> Weight; - fn chill() -> Weight; - fn unbond_funds() -> Weight; - fn withdraw_unbonded() -> Weight; -} - -/// Weights for `pallet_roles` using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:0) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Roles::Ledger` (r:1 w:1) - /// Proof: `Roles::Ledger` (`max_values`: None, `max_size`: Some(3479), added: 5954, mode: `MaxEncodedLen`) - /// Storage: `Roles::MinRestakingBond` (r:1 w:0) - /// Proof: `Roles::MinRestakingBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Roles::AccountRolesMapping` (r:0 w:1) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - fn create_profile() -> Weight { - // Proof Size summary in bytes: - // Measured: `1654` - // Estimated: `6944` - // Minimum execution time: 30_000_000 picoseconds. - Weight::from_parts(31_000_000, 6944) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Roles::Ledger` (r:1 w:1) - /// Proof: `Roles::Ledger` (`max_values`: None, `max_size`: Some(3479), added: 5954, mode: `MaxEncodedLen`) - /// Storage: `Roles::MinRestakingBond` (r:1 w:0) - /// Proof: `Roles::MinRestakingBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:0) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Jobs::ValidatorJobIdLookup` (r:1 w:0) - /// Proof: `Jobs::ValidatorJobIdLookup` (`max_values`: None, `max_size`: Some(1042), added: 3517, mode: `MaxEncodedLen`) - /// Storage: `Roles::AccountRolesMapping` (r:0 w:1) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - fn update_profile() -> Weight { - // Proof Size summary in bytes: - // Measured: `1445` - // Estimated: `6944` - // Minimum execution time: 32_000_000 picoseconds. - Weight::from_parts(33_000_000, 6944) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Roles::Ledger` (r:1 w:1) - /// Proof: `Roles::Ledger` (`max_values`: None, `max_size`: Some(3479), added: 5954, mode: `MaxEncodedLen`) - /// Storage: `Jobs::ValidatorJobIdLookup` (r:1 w:0) - /// Proof: `Jobs::ValidatorJobIdLookup` (`max_values`: None, `max_size`: Some(1042), added: 3517, mode: `MaxEncodedLen`) - /// Storage: `Roles::AccountRolesMapping` (r:0 w:1) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - fn delete_profile() -> Weight { - // Proof Size summary in bytes: - // Measured: `1100` - // Estimated: `6944` - // Minimum execution time: 20_000_000 picoseconds. - Weight::from_parts(21_000_000, 6944) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Roles::AccountRolesMapping` (r:1 w:0) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:0) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Staking::Validators` (r:1 w:1) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::CounterForValidators` (r:1 w:1) - /// Proof: `Staking::CounterForValidators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `BagsList::ListNodes` (r:3 w:3) - /// Proof: `BagsList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) - /// Storage: `BagsList::CounterForListNodes` (r:1 w:1) - /// Proof: `BagsList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:0) - /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) - fn chill() -> Weight { - // Proof Size summary in bytes: - // Measured: `2204` - // Estimated: `8877` - // Minimum execution time: 47_000_000 picoseconds. - Weight::from_parts(48_000_000, 8877) - .saturating_add(T::DbWeight::get().reads(9_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) - } - /// Storage: `Roles::AccountRolesMapping` (r:1 w:0) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:0) - /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::MinValidatorBond` (r:1 w:0) - /// Proof: `Staking::MinValidatorBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:1 w:0) - /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(949), added: 3424, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `BagsList::ListNodes` (r:1 w:1) - /// Proof: `BagsList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) - fn unbond_funds() -> Weight { - // Proof Size summary in bytes: - // Measured: `2632` - // Estimated: `4764` - // Minimum execution time: 62_000_000 picoseconds. - Weight::from_parts(63_000_000, 4764) - .saturating_add(T::DbWeight::get().reads(11_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `Roles::AccountRolesMapping` (r:1 w:0) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - /// Storage: `Roles::Ledger` (r:1 w:0) - /// Proof: `Roles::Ledger` (`max_values`: None, `max_size`: Some(3479), added: 5954, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:1 w:0) - /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(949), added: 3424, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn withdraw_unbonded() -> Weight { - // Proof Size summary in bytes: - // Measured: `1749` - // Estimated: `6944` - // Minimum execution time: 40_000_000 picoseconds. - Weight::from_parts(41_000_000, 6944) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } -} - -// For backwards compatibility and tests. -impl WeightInfo for () { - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:0) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Roles::Ledger` (r:1 w:1) - /// Proof: `Roles::Ledger` (`max_values`: None, `max_size`: Some(3479), added: 5954, mode: `MaxEncodedLen`) - /// Storage: `Roles::MinRestakingBond` (r:1 w:0) - /// Proof: `Roles::MinRestakingBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Roles::AccountRolesMapping` (r:0 w:1) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - fn create_profile() -> Weight { - // Proof Size summary in bytes: - // Measured: `1654` - // Estimated: `6944` - // Minimum execution time: 30_000_000 picoseconds. - Weight::from_parts(31_000_000, 6944) - .saturating_add(RocksDbWeight::get().reads(5_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - } - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Roles::Ledger` (r:1 w:1) - /// Proof: `Roles::Ledger` (`max_values`: None, `max_size`: Some(3479), added: 5954, mode: `MaxEncodedLen`) - /// Storage: `Roles::MinRestakingBond` (r:1 w:0) - /// Proof: `Roles::MinRestakingBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:0) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Jobs::ValidatorJobIdLookup` (r:1 w:0) - /// Proof: `Jobs::ValidatorJobIdLookup` (`max_values`: None, `max_size`: Some(1042), added: 3517, mode: `MaxEncodedLen`) - /// Storage: `Roles::AccountRolesMapping` (r:0 w:1) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - fn update_profile() -> Weight { - // Proof Size summary in bytes: - // Measured: `1445` - // Estimated: `6944` - // Minimum execution time: 32_000_000 picoseconds. - Weight::from_parts(33_000_000, 6944) - .saturating_add(RocksDbWeight::get().reads(5_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - } - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Roles::Ledger` (r:1 w:1) - /// Proof: `Roles::Ledger` (`max_values`: None, `max_size`: Some(3479), added: 5954, mode: `MaxEncodedLen`) - /// Storage: `Jobs::ValidatorJobIdLookup` (r:1 w:0) - /// Proof: `Jobs::ValidatorJobIdLookup` (`max_values`: None, `max_size`: Some(1042), added: 3517, mode: `MaxEncodedLen`) - /// Storage: `Roles::AccountRolesMapping` (r:0 w:1) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - fn delete_profile() -> Weight { - // Proof Size summary in bytes: - // Measured: `1100` - // Estimated: `6944` - // Minimum execution time: 20_000_000 picoseconds. - Weight::from_parts(21_000_000, 6944) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - } - /// Storage: `Roles::AccountRolesMapping` (r:1 w:0) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:0) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Staking::Validators` (r:1 w:1) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::CounterForValidators` (r:1 w:1) - /// Proof: `Staking::CounterForValidators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `BagsList::ListNodes` (r:3 w:3) - /// Proof: `BagsList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) - /// Storage: `BagsList::CounterForListNodes` (r:1 w:1) - /// Proof: `BagsList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:0) - /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) - fn chill() -> Weight { - // Proof Size summary in bytes: - // Measured: `2204` - // Estimated: `8877` - // Minimum execution time: 47_000_000 picoseconds. - Weight::from_parts(48_000_000, 8877) - .saturating_add(RocksDbWeight::get().reads(9_u64)) - .saturating_add(RocksDbWeight::get().writes(6_u64)) - } - /// Storage: `Roles::AccountRolesMapping` (r:1 w:0) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:0) - /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::MinValidatorBond` (r:1 w:0) - /// Proof: `Staking::MinValidatorBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:1 w:0) - /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(949), added: 3424, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `BagsList::ListNodes` (r:1 w:1) - /// Proof: `BagsList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) - fn unbond_funds() -> Weight { - // Proof Size summary in bytes: - // Measured: `2632` - // Estimated: `4764` - // Minimum execution time: 62_000_000 picoseconds. - Weight::from_parts(63_000_000, 4764) - .saturating_add(RocksDbWeight::get().reads(11_u64)) - .saturating_add(RocksDbWeight::get().writes(4_u64)) - } - /// Storage: `Roles::AccountRolesMapping` (r:1 w:0) - /// Proof: `Roles::AccountRolesMapping` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) - /// Storage: `Roles::Ledger` (r:1 w:0) - /// Proof: `Roles::Ledger` (`max_values`: None, `max_size`: Some(3479), added: 5954, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1075), added: 3550, mode: `MaxEncodedLen`) - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:1 w:0) - /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(949), added: 3424, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn withdraw_unbonded() -> Weight { - // Proof Size summary in bytes: - // Measured: `1749` - // Estimated: `6944` - // Minimum execution time: 40_000_000 picoseconds. - Weight::from_parts(41_000_000, 6944) - .saturating_add(RocksDbWeight::get().reads(8_u64)) - .saturating_add(RocksDbWeight::get().writes(3_u64)) - } -} diff --git a/pallets/services/Cargo.toml b/pallets/services/Cargo.toml new file mode 100644 index 000000000..a3e4764ce --- /dev/null +++ b/pallets/services/Cargo.toml @@ -0,0 +1,128 @@ +[package] +name = "pallet-services" +version = { workspace = true } +authors = { workspace = true } +edition = { workspace = true } +homepage = { workspace = true } +license = { workspace = true } +repository = { workspace = true } + +[dependencies] +log = { workspace = true } +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +parity-scale-codec = { workspace = true } +scale-info = { workspace = true } +sp-core = { workspace = true } +sp-runtime = { workspace = true } +sp-io = { workspace = true } +sp-std = { workspace = true } +tangle-crypto-primitives = { workspace = true, default-features = false } +tangle-primitives = { workspace = true, default-features = false } +fp-evm = { workspace = true } +ethabi = { workspace = true } +itertools = { workspace = true, features = ["use_alloc"] } +serde = { workspace = true, features = ["derive"], optional = true } +hex = { workspace = true, features = ["alloc"] } + +[dev-dependencies] +ethereum = { workspace = true, features = ["with-codec"] } +ethers = "2.0" +hex = { workspace = true } +num_enum = { workspace = true } +hex-literal = { workspace = true } +libsecp256k1 = { workspace = true } +pallet-balances = { workspace = true } +pallet-timestamp = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +smallvec = { workspace = true } +sp-io = { workspace = true } +sp-keystore = { workspace = true } + +# Frontier Primitive +fp-account = { workspace = true } +fp-consensus = { workspace = true } +fp-dynamic-fee = { workspace = true } +fp-ethereum = { workspace = true } +fp-rpc = { workspace = true } +fp-self-contained = { workspace = true } +fp-storage = { workspace = true } + +# Frontier FRAME +pallet-base-fee = { workspace = true } +pallet-dynamic-fee = { workspace = true } +pallet-ethereum = { workspace = true } +pallet-evm = { workspace = true } +pallet-evm-chain-id = { workspace = true } + +pallet-evm-precompile-blake2 = { workspace = true } +pallet-evm-precompile-bn128 = { workspace = true } +pallet-evm-precompile-curve25519 = { workspace = true } +pallet-evm-precompile-ed25519 = { workspace = true } +pallet-evm-precompile-modexp = { workspace = true } +pallet-evm-precompile-sha3fips = { workspace = true } +pallet-evm-precompile-simple = { workspace = true } + +precompile-utils = { workspace = true } + +pallet-session = { workspace = true } +pallet-staking = { workspace = true } +sp-staking = { workspace = true } +frame-election-provider-support = { workspace = true } + +[features] +default = ["std"] +std = [ + "hex/std", + "itertools/use_std", + "scale-info/std", + "sp-runtime/std", + "frame-benchmarking?/std", + "frame-support/std", + "frame-system/std", + "sp-core/std", + "sp-std/std", + "sp-io/std", + "sp-staking/std", + "tangle-primitives/std", + "tangle-crypto-primitives/std", + "pallet-balances/std", + "pallet-timestamp/std", + "pallet-staking/std", + "fp-account/std", + "fp-consensus/std", + "fp-dynamic-fee/std", + "fp-ethereum/std", + "fp-evm/std", + "fp-rpc/std", + "fp-self-contained/std", + "fp-storage/std", + "ethabi/std", + "pallet-base-fee/std", + "pallet-dynamic-fee/std", + "pallet-ethereum/std", + "pallet-evm/std", + "pallet-evm-chain-id/std", + + "pallet-evm-precompile-modexp/std", + "pallet-evm-precompile-sha3fips/std", + "pallet-evm-precompile-simple/std", + "pallet-evm-precompile-blake2/std", + "pallet-evm-precompile-bn128/std", + "pallet-evm-precompile-curve25519/std", + "pallet-evm-precompile-ed25519/std", + "precompile-utils/std", + "serde/std", +] +try-runtime = ["frame-support/try-runtime"] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-ethereum/runtime-benchmarks", + "pallet-evm/runtime-benchmarks", +] diff --git a/pallets/jobs/rpc/Cargo.toml b/pallets/services/rpc/Cargo.toml similarity index 84% rename from pallets/jobs/rpc/Cargo.toml rename to pallets/services/rpc/Cargo.toml index 7b369f1c0..15a029e57 100644 --- a/pallets/jobs/rpc/Cargo.toml +++ b/pallets/services/rpc/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "pallet-jobs-rpc" +name = "pallet-services-rpc" version = { workspace = true } authors = { workspace = true } edition = { workspace = true } @@ -12,7 +12,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] jsonrpsee = { workspace = true, features = ["client-core", "server", "macros"] } -pallet-jobs-rpc-runtime-api = { path = "./runtime-api", default-features = false } +pallet-services-rpc-runtime-api = { path = "./runtime-api", default-features = false } parity-scale-codec = { workspace = true } sp-api = { workspace = true } sp-blockchain = { workspace = true } diff --git a/pallets/jobs/rpc/runtime-api/Cargo.toml b/pallets/services/rpc/runtime-api/Cargo.toml similarity index 94% rename from pallets/jobs/rpc/runtime-api/Cargo.toml rename to pallets/services/rpc/runtime-api/Cargo.toml index a0820f543..f716537fb 100644 --- a/pallets/jobs/rpc/runtime-api/Cargo.toml +++ b/pallets/services/rpc/runtime-api/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "pallet-jobs-rpc-runtime-api" +name = "pallet-services-rpc-runtime-api" version = { workspace = true } authors = { workspace = true } edition = { workspace = true } diff --git a/pallets/services/rpc/runtime-api/src/lib.rs b/pallets/services/rpc/runtime-api/src/lib.rs new file mode 100644 index 000000000..1bc8f0bae --- /dev/null +++ b/pallets/services/rpc/runtime-api/src/lib.rs @@ -0,0 +1,48 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +//! Runtime API definition for services pallet. + +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::type_complexity)] +use parity_scale_codec::Codec; +use sp_runtime::{traits::MaybeDisplay, Serialize}; +use sp_std::vec::Vec; +use tangle_primitives::services::{Constraints, RpcServicesWithBlueprint}; + +pub type BlockNumberOf = + <::HeaderT as sp_runtime::traits::Header>::Number; + +sp_api::decl_runtime_apis! { + pub trait ServicesApi + where + C: Constraints, + AccountId: Codec + MaybeDisplay + Serialize, + { + /// Query all the services that this operator is providing along with their blueprints. + /// + /// ## Arguments + /// - `operator`: The operator account id. + /// ## Return + /// - [`RpcServicesWithBlueprint`]: A list of services with their blueprints. + fn query_services_with_blueprints_by_operator( + operator: AccountId, + ) -> Result< + Vec>>, + sp_runtime::DispatchError, + >; + } +} diff --git a/pallets/services/rpc/src/lib.rs b/pallets/services/rpc/src/lib.rs new file mode 100644 index 000000000..5827cbeaf --- /dev/null +++ b/pallets/services/rpc/src/lib.rs @@ -0,0 +1,124 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#![allow(clippy::unnecessary_mut_passed)] +#![allow(clippy::type_complexity)] +use jsonrpsee::{ + core::RpcResult, + proc_macros::rpc, + types::error::{ErrorObject, ErrorObjectOwned}, +}; +pub use pallet_services_rpc_runtime_api::ServicesApi as ServicesRuntimeApi; +use parity_scale_codec::Codec; +use sp_api::{ApiError, ProvideRuntimeApi}; +use sp_blockchain::HeaderBackend; +use sp_runtime::{ + traits::{Block as BlockT, MaybeDisplay}, + DispatchError, Serialize, +}; +use std::sync::Arc; +use tangle_primitives::services::{Constraints, RpcServicesWithBlueprint}; + +type BlockNumberOf = + <::HeaderT as sp_runtime::traits::Header>::Number; + +/// ServicesClient RPC methods. +#[rpc(client, server)] +pub trait ServicesApi +where + X: Constraints, + AccountId: Codec + MaybeDisplay + core::fmt::Debug + Send + Sync + 'static + Serialize, + BlockNumber: Codec + MaybeDisplay + core::fmt::Debug + Send + Sync + 'static + Serialize, +{ + #[method(name = "services_queryServicesWithBlueprintsByOperator")] + fn query_services_with_blueprints_by_operator( + &self, + operator: AccountId, + at: Option, + ) -> RpcResult>>; +} + +/// A struct that implements the `ServicesApi`. +pub struct ServicesClient { + client: Arc, + _marker: std::marker::PhantomData<(M, P)>, +} + +impl ServicesClient { + /// Create new `JobsClient` instance with the given reference to the client. + pub fn new(client: Arc) -> Self { + Self { client, _marker: Default::default() } + } +} + +impl + ServicesApiServer<::Hash, X, AccountId, BlockNumberOf> + for ServicesClient +where + Block: BlockT, + AccountId: Codec + MaybeDisplay + core::fmt::Debug + Send + Sync + 'static + Serialize, + X: Constraints, + C: HeaderBackend + ProvideRuntimeApi + Send + Sync + 'static, + C::Api: ServicesRuntimeApi, +{ + fn query_services_with_blueprints_by_operator( + &self, + operator: AccountId, + at: Option<::Hash>, + ) -> RpcResult>>> { + let api = self.client.runtime_api(); + let at = at.unwrap_or_else(|| self.client.info().best_hash); + + match api.query_services_with_blueprints_by_operator(at, operator) { + Ok(Ok(res)) => Ok(res), + Ok(Err(e)) => Err(custom_error_into_rpc_err(Error::CustomDispatchError(e))), + Err(e) => Err(custom_error_into_rpc_err(Error::RuntimeError(e))), + } + } +} + +/// Error type of this RPC api. +pub enum Error { + /// The transaction was not decodable. + DecodeError, + /// The call to runtime failed. + RuntimeError(ApiError), + /// Custom pallet error. + CustomDispatchError(DispatchError), +} + +impl From for i32 { + fn from(e: Error) -> i32 { + match e { + Error::RuntimeError(_) => 1, + Error::DecodeError => 2, + Error::CustomDispatchError(_) => 3, + } + } +} + +fn custom_error_into_rpc_err(err: Error) -> ErrorObjectOwned { + match err { + Error::RuntimeError(e) => { + ErrorObject::owned(RUNTIME_ERROR, "Runtime error", Some(format!("{e}"))) + }, + Error::DecodeError => { + ErrorObject::owned(2, "Decode error", Some("Transaction was not decodable")) + }, + Error::CustomDispatchError(msg) => ErrorObject::owned(3, "Dispatch error", Some(msg)), + } +} + +const RUNTIME_ERROR: i32 = 1; diff --git a/pallets/services/src/benchmarking.rs b/pallets/services/src/benchmarking.rs new file mode 100644 index 000000000..247e18545 --- /dev/null +++ b/pallets/services/src/benchmarking.rs @@ -0,0 +1,303 @@ +use crate::{Call, Config, Pallet}; +use frame_benchmarking::{benchmarks, impl_benchmark_test_suite}; +use frame_system::RawOrigin; +use parity_scale_codec::Decode; +use sp_core::{ecdsa, H160}; +use sp_runtime::KeyTypeId; +use sp_std::vec; +use tangle_primitives::services::*; + +fn zero_key() -> ecdsa::Public { + ecdsa::Public([0; 33]) +} + +fn mock_account_id(id: u8) -> T::AccountId { + let stash: T::AccountId = T::AccountId::decode(&mut &[id; 32][..]).unwrap(); + stash +} + +pub const CGGMP21_REGISTRATION_HOOK: H160 = H160([0x21; 20]); +pub const CGGMP21_REQUEST_HOOK: H160 = H160([0x22; 20]); +pub const CGGMP21_JOB_RESULT_VERIFIER: H160 = H160([0x23; 20]); + +fn cggmp21_blueprint() -> ServiceBlueprint { + ServiceBlueprint { + metadata: ServiceMetadata { name: "CGGMP21 TSS".try_into().unwrap(), ..Default::default() }, + jobs: vec![ + JobDefinition { + metadata: JobMetadata { name: "keygen".try_into().unwrap(), ..Default::default() }, + params: vec![FieldType::Uint8].try_into().unwrap(), + result: vec![FieldType::Bytes].try_into().unwrap(), + verifier: JobResultVerifier::Evm(CGGMP21_JOB_RESULT_VERIFIER), + }, + JobDefinition { + metadata: JobMetadata { name: "sign".try_into().unwrap(), ..Default::default() }, + params: vec![FieldType::Uint64, FieldType::Bytes].try_into().unwrap(), + result: vec![FieldType::Bytes].try_into().unwrap(), + verifier: JobResultVerifier::Evm(CGGMP21_JOB_RESULT_VERIFIER), + }, + ] + .try_into() + .unwrap(), + registration_hook: ServiceRegistrationHook::Evm(CGGMP21_REGISTRATION_HOOK), + registration_params: vec![].try_into().unwrap(), + request_hook: ServiceRequestHook::Evm(CGGMP21_REQUEST_HOOK), + request_params: vec![].try_into().unwrap(), + gadget: Default::default(), + } +} + +benchmarks! { + + create_blueprint { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + }: _(RawOrigin::Signed(alice.clone()), blueprint) + + register { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let bob: T::AccountId = mock_account_id::(2u8); + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }; + + }: _(RawOrigin::Signed(bob.clone()), 0, operator_preference, Default::default()) + + + unregister { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let bob: T::AccountId = mock_account_id::(2u8); + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }; + + let _= Pallet::::register(RawOrigin::Signed(bob.clone()).into(), 0, operator_preference, Default::default()); + + }: _(RawOrigin::Signed(bob.clone()), 0) + + + update_approval_preference { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let bob: T::AccountId = mock_account_id::(2u8); + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }; + + let _= Pallet::::register(RawOrigin::Signed(bob.clone()).into(), 0, operator_preference, Default::default()); + + }: _(RawOrigin::Signed(bob.clone()), 0, ApprovalPrefrence::Required) + + + request { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }; + let bob: T::AccountId = mock_account_id::(2u8); + let _= Pallet::::register(RawOrigin::Signed(bob.clone()).into(), 0, operator_preference, Default::default()); + + let charlie: T::AccountId = mock_account_id::(3u8); + let _= Pallet::::register(RawOrigin::Signed(charlie.clone()).into(), 0, operator_preference, Default::default()); + + let dave: T::AccountId = mock_account_id::(4u8); + let _= Pallet::::register(RawOrigin::Signed(dave.clone()).into(), 0, operator_preference, Default::default()); + + let eve: T::AccountId = mock_account_id::(5u8); + let _= Pallet::::register(RawOrigin::Signed(eve.clone()).into(), 0, operator_preference, Default::default()); + + }: _( + RawOrigin::Signed(eve.clone()), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100u32.into(), + Default::default() + ) + + approve { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let bob: T::AccountId = mock_account_id::(2u8); + let _= Pallet::::register( + RawOrigin::Signed(bob.clone()).into(), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default() + ); + + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::Required }; + + let charlie: T::AccountId = mock_account_id::(3u8); + let _= Pallet::::register(RawOrigin::Signed(charlie.clone()).into(), 0, operator_preference, Default::default()); + + let dave: T::AccountId = mock_account_id::(4u8); + let _= Pallet::::register(RawOrigin::Signed(dave.clone()).into(), 0, operator_preference, Default::default()); + + let eve: T::AccountId = mock_account_id::(5u8); + let _= Pallet::::request( + RawOrigin::Signed(eve.clone()).into(), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100u32.into(), + Default::default() + ); + + }: _(RawOrigin::Signed(charlie.clone()), 0) + + + reject { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let bob: T::AccountId = mock_account_id::(2u8); + let _= Pallet::::register( + RawOrigin::Signed(bob.clone()).into(), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default() + ); + + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::Required }; + + let charlie: T::AccountId = mock_account_id::(3u8); + let _= Pallet::::register(RawOrigin::Signed(charlie.clone()).into(), 0, operator_preference, Default::default()); + + let dave: T::AccountId = mock_account_id::(4u8); + let _= Pallet::::register(RawOrigin::Signed(dave.clone()).into(), 0, operator_preference, Default::default()); + + let eve: T::AccountId = mock_account_id::(5u8); + let _= Pallet::::request( + RawOrigin::Signed(eve.clone()).into(), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100u32.into(), + Default::default() + ); + + }: _(RawOrigin::Signed(charlie.clone()), 0) + + + terminate { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }; + + let bob: T::AccountId = mock_account_id::(2u8); + let _= Pallet::::register(RawOrigin::Signed(bob.clone()).into(), 0, operator_preference, Default::default()); + + let charlie: T::AccountId = mock_account_id::(3u8); + let _= Pallet::::register(RawOrigin::Signed(charlie.clone()).into(), 0, operator_preference, Default::default()); + + let dave: T::AccountId = mock_account_id::(4u8); + let _= Pallet::::register(RawOrigin::Signed(dave.clone()).into(), 0, operator_preference, Default::default()); + + let eve: T::AccountId = mock_account_id::(5u8); + let _= Pallet::::request( + RawOrigin::Signed(eve.clone()).into(), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100u32.into(), + Default::default() + ); + + }: _(RawOrigin::Signed(eve.clone()),0) + + + call { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }; + + let bob: T::AccountId = mock_account_id::(2u8); + let _= Pallet::::register(RawOrigin::Signed(bob.clone()).into(), 0, operator_preference, Default::default()); + + let charlie: T::AccountId = mock_account_id::(3u8); + let _= Pallet::::register(RawOrigin::Signed(charlie.clone()).into(), 0, operator_preference, Default::default()); + + let dave: T::AccountId = mock_account_id::(4u8); + let _= Pallet::::register(RawOrigin::Signed(dave.clone()).into(), 0, operator_preference, Default::default()); + + let eve: T::AccountId = mock_account_id::(5u8); + let _= Pallet::::request( + RawOrigin::Signed(eve.clone()).into(), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100u32.into(), + Default::default() + ); + + }: _( + RawOrigin::Signed(eve.clone()), + 0, + 0, + vec![Field::Uint8(2)].try_into().unwrap() + ) + + + submit_result { + let alice: T::AccountId = mock_account_id::(1u8); + let blueprint = cggmp21_blueprint::(); + let _= Pallet::::create_blueprint(RawOrigin::Signed(alice.clone()).into(), blueprint); + + let operator_preference = OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }; + + let bob: T::AccountId = mock_account_id::(2u8); + let _= Pallet::::register(RawOrigin::Signed(bob.clone()).into(), 0, operator_preference, Default::default()); + + let charlie: T::AccountId = mock_account_id::(3u8); + let _= Pallet::::register(RawOrigin::Signed(charlie.clone()).into(), 0, operator_preference, Default::default()); + + let dave: T::AccountId = mock_account_id::(4u8); + let _= Pallet::::register(RawOrigin::Signed(dave.clone()).into(), 0, operator_preference, Default::default()); + + let eve: T::AccountId = mock_account_id::(5u8); + let _= Pallet::::request( + RawOrigin::Signed(eve.clone()).into(), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100u32.into(), + Default::default() + ); + + let _= Pallet::::call( + RawOrigin::Signed(eve.clone()).into(), + 0, + 0, + vec![Field::Uint8(2)].try_into().unwrap() + ); + + let keygen_job_call_id = 0; + let key_type = KeyTypeId(*b"mdkg"); + let dkg = sp_io::crypto::ecdsa_generate(key_type, None); + + }: _( + RawOrigin::Signed(bob.clone()), + 0, + keygen_job_call_id, + vec![Field::Bytes(dkg.0.to_vec().try_into().unwrap())].try_into().unwrap() + ) + +} + +// Define the module and associated types for the benchmarks +impl_benchmark_test_suite!( + Pallet, + crate::mock::new_test_ext(vec![1, 2, 3, 4]), + crate::mock::Runtime, +); diff --git a/pallets/services/src/functions.rs b/pallets/services/src/functions.rs new file mode 100644 index 000000000..e982eebc9 --- /dev/null +++ b/pallets/services/src/functions.rs @@ -0,0 +1,324 @@ +use core::iter; + +#[cfg(not(feature = "std"))] +use alloc::{boxed::Box, string::String, vec, vec::Vec}; + +#[cfg(feature = "std")] +use std::{boxed::Box, string::String, vec::Vec}; + +use ethabi::Token; +use frame_support::dispatch::{DispatchErrorWithPostInfo, PostDispatchInfo}; +use sp_core::{H160, U256}; +use sp_runtime::{traits::AccountIdConversion, traits::UniqueSaturatedInto}; +use tangle_primitives::services::{ + Field, JobDefinition, JobResultVerifier, OperatorPreferences, ServiceBlueprint, + ServiceRegistrationHook, ServiceRequestHook, +}; + +use super::*; + +impl Pallet { + /// Returns the account id of the pallet. + pub fn account_id() -> T::AccountId { + T::PalletId::get().into_account_truncating() + } + + /// Returns the address of the pallet. + pub fn address() -> H160 { + // Convert the account id to bytes. + let account_id = Self::account_id().encode(); + // Convert the first 20 bytes to an H160. + H160::from_slice(&account_id[0..20]) + } + + pub fn check_registeration_hook( + blueprint: &ServiceBlueprint, + prefrences: &OperatorPreferences, + registration_args: &[Field], + ) -> Result<(bool, Weight), DispatchErrorWithPostInfo> { + let (allowed, weight) = match blueprint.registration_hook { + ServiceRegistrationHook::None => (true, Weight::zero()), + ServiceRegistrationHook::Evm(contract) => { + #[allow(deprecated)] + let call = ethabi::Function { + name: String::from("onRegister"), + inputs: vec![ + ethabi::Param { + name: String::from("participant"), + kind: ethabi::ParamType::Bytes, + internal_type: None, + }, + ethabi::Param { + name: String::from("registrationInputs"), + kind: ethabi::ParamType::Bytes, + internal_type: None, + }, + ], + outputs: Default::default(), + constant: false, + state_mutability: ethabi::StateMutability::Payable, + }; + let args = prefrences + .to_ethabi() + .into_iter() + .chain(iter::once(Token::Bytes(Field::encode_to_ethabi(registration_args)))) + .collect::>(); + + let data = call.encode_input(&args).map_err(|_| Error::::EVMAbiEncode)?; + let gas_limit = 300_000; + + let info = + Self::evm_call(Self::address(), contract, U256::from(0), data, gas_limit)?; + (info.exit_reason.is_succeed(), Self::weight_from_call_info(&info)) + }, + }; + Ok((allowed, weight)) + } + + pub fn check_request_hook( + blueprint: &ServiceBlueprint, + service_id: u64, + participants: &[OperatorPreferences], + request_args: &[Field], + ) -> Result<(bool, Weight), DispatchErrorWithPostInfo> { + let (allowed, weight) = match blueprint.request_hook { + ServiceRequestHook::None => (true, Weight::zero()), + ServiceRequestHook::Evm(contract) => { + #[allow(deprecated)] + let call = ethabi::Function { + name: String::from("onRequest"), + inputs: vec![ + ethabi::Param { + name: String::from("serviceId"), + kind: ethabi::ParamType::Uint(64), + internal_type: None, + }, + ethabi::Param { + name: String::from("participants"), + kind: ethabi::ParamType::Array(Box::new(ethabi::ParamType::Bytes)), + internal_type: None, + }, + ethabi::Param { + name: String::from("requestInputs"), + kind: ethabi::ParamType::Bytes, + internal_type: None, + }, + ], + outputs: Default::default(), + constant: false, + state_mutability: ethabi::StateMutability::Payable, + }; + let service_id = Token::Uint(ethabi::Uint::from(service_id)); + let participants = Token::Array( + participants.iter().flat_map(OperatorPreferences::to_ethabi).collect(), + ); + let request_args = Token::Bytes(Field::encode_to_ethabi(request_args)); + let data = call + .encode_input(&[service_id, participants, request_args]) + .map_err(|_| Error::::EVMAbiEncode)?; + let gas_limit = 300_000; + + let info = + Self::evm_call(Self::address(), contract, U256::from(0), data, gas_limit)?; + (info.exit_reason.is_succeed(), Self::weight_from_call_info(&info)) + }, + }; + + Ok((allowed, weight)) + } + + pub fn check_job_call_hook( + blueprint: &ServiceBlueprint, + service_id: u64, + job: u8, + job_call_id: u64, + inputs: &[Field], + ) -> Result<(bool, Weight), DispatchErrorWithPostInfo> { + let (allowed, weight) = match blueprint.request_hook { + ServiceRequestHook::None => (true, Weight::zero()), + ServiceRequestHook::Evm(contract) => { + #[allow(deprecated)] + let call = ethabi::Function { + name: String::from("onJobCall"), + inputs: vec![ + ethabi::Param { + name: String::from("serviceId"), + kind: ethabi::ParamType::Uint(64), + internal_type: None, + }, + ethabi::Param { + name: String::from("job"), + kind: ethabi::ParamType::Uint(8), + internal_type: None, + }, + ethabi::Param { + name: String::from("jobCallId"), + kind: ethabi::ParamType::Uint(64), + internal_type: None, + }, + ethabi::Param { + name: String::from("inputs"), + kind: ethabi::ParamType::Bytes, + internal_type: None, + }, + ], + outputs: Default::default(), + constant: false, + state_mutability: ethabi::StateMutability::Payable, + }; + let service_id = Token::Uint(ethabi::Uint::from(service_id)); + let job = Token::Uint(ethabi::Uint::from(job)); + let job_call_id = Token::Uint(ethabi::Uint::from(job_call_id)); + let inputs = Token::Bytes(Field::encode_to_ethabi(inputs)); + let data = call + .encode_input(&[service_id, job, job_call_id, inputs]) + .map_err(|_| Error::::EVMAbiEncode)?; + let gas_limit = 300_000; + + let info = + Self::evm_call(Self::address(), contract, U256::from(0), data, gas_limit)?; + (info.exit_reason.is_succeed(), Self::weight_from_call_info(&info)) + }, + }; + Ok((allowed, weight)) + } + + pub fn check_job_call_result_hook( + job_def: &JobDefinition, + service_id: u64, + job: u8, + job_call_id: u64, + prefrences: &OperatorPreferences, + inputs: &[Field], + outputs: &[Field], + ) -> Result<(bool, Weight), DispatchErrorWithPostInfo> { + let (allowed, weight) = match job_def.verifier { + JobResultVerifier::None => (true, Weight::zero()), + JobResultVerifier::Evm(contract) => { + #[allow(deprecated)] + let call = ethabi::Function { + name: String::from("verify"), + inputs: vec![ + ethabi::Param { + name: String::from("serviceId"), + kind: ethabi::ParamType::Uint(64), + internal_type: None, + }, + ethabi::Param { + name: String::from("jobIndex"), + kind: ethabi::ParamType::Uint(8), + internal_type: None, + }, + ethabi::Param { + name: String::from("jobCallId"), + kind: ethabi::ParamType::Uint(64), + internal_type: None, + }, + ethabi::Param { + name: String::from("participant"), + kind: ethabi::ParamType::Bytes, + internal_type: None, + }, + ethabi::Param { + name: String::from("inputs"), + kind: ethabi::ParamType::Bytes, + internal_type: None, + }, + ethabi::Param { + name: String::from("outputs"), + kind: ethabi::ParamType::Bytes, + internal_type: None, + }, + ], + outputs: Default::default(), + constant: false, + state_mutability: ethabi::StateMutability::NonPayable, + }; + let service_id = Token::Uint(ethabi::Uint::from(service_id)); + let job = Token::Uint(ethabi::Uint::from(job)); + let job_call_id = Token::Uint(ethabi::Uint::from(job_call_id)); + let participant = prefrences.to_ethabi().first().unwrap().clone(); + let inputs = Token::Bytes(Field::encode_to_ethabi(inputs)); + let outputs = Token::Bytes(Field::encode_to_ethabi(outputs)); + let data = call + .encode_input(&[service_id, job, job_call_id, participant, inputs, outputs]) + .map_err(|_| Error::::EVMAbiEncode)?; + let gas_limit = 300_000; + + let info = + Self::evm_call(Self::address(), contract, U256::from(0), data, gas_limit)?; + (info.exit_reason.is_succeed(), Self::weight_from_call_info(&info)) + }, + }; + Ok((allowed, weight)) + } + + pub fn evm_call( + from: H160, + to: H160, + value: U256, + data: Vec, + gas_limit: u64, + ) -> Result { + let transactional = true; + let validate = false; + let result = + T::EvmRunner::call(from, to, data.clone(), value, gas_limit, transactional, validate); + match result { + Ok(info) => { + log::debug!( + target: "evm", + "Call from: {:?}, to: {:?}, data: 0x{}, gas_limit: {:?}, result: {:?}", + from, + to, + hex::encode(&data), + gas_limit, + info, + ); + // if we have a revert reason, emit an event + if info.exit_reason.is_revert() { + log::debug!( + target: "evm", + "Call to: {:?} with data: 0x{} Reverted with reason: 0x{}", + to, + hex::encode(&data), + hex::encode(&info.value), + ); + Self::deposit_event(Event::::EvmReverted { + from, + to, + data, + reason: info.value.clone(), + }); + } + // Emit logs from the EVM call. + for log in &info.logs { + Self::deposit_event(Event::::EvmLog { + address: log.address, + topics: log.topics.clone(), + data: log.data.clone(), + }); + } + Ok(info) + }, + Err(e) => Err(DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { actual_weight: Some(e.weight), pays_fee: Pays::Yes }, + error: e.error.into(), + }), + } + } + + /// Convert the gas used in the call info to weight. + pub fn weight_from_call_info(info: &fp_evm::CallInfo) -> Weight { + let mut gas_to_weight = T::EvmGasWeightMapping::gas_to_weight( + info.used_gas.standard.unique_saturated_into(), + true, + ); + if let Some(weight_info) = info.weight_info { + if let Some(proof_size_usage) = weight_info.proof_size_usage { + *gas_to_weight.proof_size_mut() = proof_size_usage; + } + } + gas_to_weight + } +} diff --git a/pallets/services/src/impls.rs b/pallets/services/src/impls.rs new file mode 100644 index 000000000..dd74681fd --- /dev/null +++ b/pallets/services/src/impls.rs @@ -0,0 +1,81 @@ +#[cfg(not(feature = "std"))] +use alloc::vec::Vec; +#[cfg(feature = "std")] +use std::vec::Vec; +use tangle_primitives::services::Constraints; + +use super::*; + +impl traits::EvmRunner for () { + type Error = crate::Error; + + fn call( + _source: sp_core::H160, + _target: sp_core::H160, + _input: Vec, + _value: sp_core::U256, + _gas_limit: u64, + _is_transactional: bool, + _validate: bool, + ) -> Result> { + Ok(fp_evm::CallInfo { + exit_reason: fp_evm::ExitReason::Succeed(fp_evm::ExitSucceed::Stopped), + value: Default::default(), + used_gas: fp_evm::UsedGas { + standard: Default::default(), + effective: Default::default(), + }, + weight_info: Default::default(), + logs: Default::default(), + }) + } +} + +impl Constraints for types::ConstraintsOf { + type MaxFields = T::MaxFields; + + type MaxFieldsSize = T::MaxFieldsSize; + + type MaxMetadataLength = T::MaxMetadataLength; + + type MaxJobsPerService = T::MaxJobsPerService; + + type MaxOperatorsPerService = T::MaxOperatorsPerService; + + type MaxPermittedCallers = T::MaxPermittedCallers; + + type MaxServicesPerOperator = T::MaxServicesPerOperator; + + type MaxBlueprintsPerOperator = T::MaxBlueprintsPerOperator; + + type MaxServicesPerUser = T::MaxServicesPerUser; + + type MaxBinariesPerGadget = T::MaxBinariesPerGadget; + + type MaxSourcesPerGadget = T::MaxSourcesPerGadget; + + type MaxGitOwnerLength = T::MaxGitOwnerLength; + + type MaxGitRepoLength = T::MaxGitRepoLength; + + type MaxGitTagLength = T::MaxGitTagLength; + + type MaxBinaryNameLength = T::MaxBinaryNameLength; + + type MaxIpfsHashLength = T::MaxIpfsHashLength; + + type MaxContainerRegistryLength = T::MaxContainerRegistryLength; + + type MaxContainerImageNameLength = T::MaxContainerImageNameLength; + + type MaxContainerImageTagLength = T::MaxContainerImageTagLength; +} + +impl traits::EvmGasWeightMapping for () { + fn gas_to_weight(_gas: u64, _without_base_weight: bool) -> Weight { + Default::default() + } + fn weight_to_gas(_weight: Weight) -> u64 { + Default::default() + } +} diff --git a/pallets/services/src/lib.rs b/pallets/services/src/lib.rs new file mode 100644 index 000000000..3fedf0d4b --- /dev/null +++ b/pallets/services/src/lib.rs @@ -0,0 +1,983 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::unused_unit)] +#![allow(clippy::type_complexity)] + +#[cfg(not(feature = "std"))] +extern crate alloc; + +use frame_support::{ + pallet_prelude::*, + traits::{Currency, ReservableCurrency}, + PalletId, +}; +use frame_system::pallet_prelude::*; +use sp_runtime::{traits::Get, DispatchResult}; + +mod functions; +mod impls; +mod rpc; +mod traits; +pub mod types; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod mock_evm; +#[cfg(test)] +mod tests; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +pub mod weights; + +pub use module::*; +pub use traits::*; +pub use weights::WeightInfo; + +#[frame_support::pallet(dev_mode)] +pub mod module { + use super::*; + use frame_support::dispatch::PostDispatchInfo; + use sp_core::{H160, H256}; + use sp_std::vec::Vec; + use tangle_primitives::services::*; + use types::*; + + #[pallet::config] + pub trait Config: frame_system::Config { + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + /// The origin which may set filter. + type ForceOrigin: EnsureOrigin; + /// The currency mechanism. + type Currency: ReservableCurrency; + + /// `PalletId` for the services pallet. + #[pallet::constant] + type PalletId: Get; + + /// A type that implements the `EvmRunner` trait for the execution of EVM + /// transactions. + type EvmRunner: traits::EvmRunner; + + /// A type that implements the `EvmGasWeightMapping` trait for the conversion of EVM gas to + /// Substrate weight and vice versa. + type EvmGasWeightMapping: traits::EvmGasWeightMapping; + + /// Maximum number of fields in a job call. + #[pallet::constant] + type MaxFields: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum size of a field in a job call. + #[pallet::constant] + type MaxFieldsSize: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum length of metadata string length. + #[pallet::constant] + type MaxMetadataLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of jobs per service. + #[pallet::constant] + type MaxJobsPerService: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of Operators per service. + #[pallet::constant] + type MaxOperatorsPerService: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of permitted callers per service. + #[pallet::constant] + type MaxPermittedCallers: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of services per operator. + #[pallet::constant] + type MaxServicesPerOperator: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of blueprints per operator. + #[pallet::constant] + type MaxBlueprintsPerOperator: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of services per user. + #[pallet::constant] + type MaxServicesPerUser: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of binaries per gadget. + #[pallet::constant] + type MaxBinariesPerGadget: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of sources per gadget. + #[pallet::constant] + type MaxSourcesPerGadget: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Git owner maximum length. + #[pallet::constant] + type MaxGitOwnerLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Git repository maximum length. + #[pallet::constant] + type MaxGitRepoLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Git tag maximum length. + #[pallet::constant] + type MaxGitTagLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// binary name maximum length. + #[pallet::constant] + type MaxBinaryNameLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// IPFS hash maximum length. + #[pallet::constant] + type MaxIpfsHashLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Container registry maximum length. + #[pallet::constant] + type MaxContainerRegistryLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Container image name maximum length. + #[pallet::constant] + type MaxContainerImageNameLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Container image tag maximum length. + #[pallet::constant] + type MaxContainerImageTagLength: Get + Default + Parameter + MaybeSerializeDeserialize; + + /// The constraints for the service module. + /// use [crate::types::ConstraintsOf] with `Self` to implement this trait. + type Constraints: Constraints; + + /// Weight information for the extrinsics in this module. + type WeightInfo: WeightInfo; + } + + #[pallet::error] + pub enum Error { + /// The service blueprint was not found. + BlueprintNotFound, + /// The caller is already registered as a operator. + AlreadyRegistered, + /// The caller does not have the requirements to be a operator. + InvalidRegistrationInput, + /// The caller does not have the requirements to request a service. + InvalidRequestInput, + /// The caller does not have the requirements to call a job. + InvalidJobCallInput, + /// The caller provided an invalid job result. + InvalidJobResult, + /// The caller is not registered as a operator. + NotRegistered, + /// The service request was not found. + ServiceRequestNotFound, + /// The service was not found. + ServiceNotFound, + /// An error occurred while type checking the provided input input. + TypeCheck(TypeCheckError), + /// The maximum number of permitted callers per service has been exceeded. + MaxPermittedCallersExceeded, + /// The maximum number of operators per service has been exceeded. + MaxServiceProvidersExceeded, + /// The maximum number of services per user has been exceeded. + MaxServicesPerUserExceeded, + /// The maximum number of fields per request has been exceeded. + MaxFieldsExceeded, + /// The approval is not requested for the operator (the caller). + ApprovalNotRequested, + /// The requested job definition does not exist. + /// This error is returned when the requested job definition does not exist in the service blueprint. + JobDefinitionNotFound, + /// Either the service or the job call was not found. + ServiceOrJobCallNotFound, + /// The result of the job call was not found. + JobCallResultNotFound, + /// An error occurred while encoding the EVM ABI. + EVMAbiEncode, + /// Operator profile not found. + OperatorProfileNotFound, + /// Maximum number of services per Provider reached. + MaxServicesPerProviderExceeded, + } + + #[pallet::event] + #[pallet::generate_deposit(pub(crate) fn deposit_event)] + pub enum Event { + /// A new service blueprint has been created. + BlueprintCreated { + /// The account that created the service blueprint. + owner: T::AccountId, + /// The ID of the service blueprint. + blueprint_id: u64, + }, + /// An new operator has been registered. + Registered { + /// The account that registered as a operator. + provider: T::AccountId, + /// The ID of the service blueprint. + blueprint_id: u64, + /// The preferences for the operator for this specific blueprint. + preferences: OperatorPreferences, + /// The arguments used for registration. + registration_args: Vec>, + }, + /// An operator has been unregistered. + Unregistered { + /// The account that unregistered as am operator. + operator: T::AccountId, + /// The ID of the service blueprint. + blueprint_id: u64, + }, + /// The approval preference for an operator has been updated. + ApprovalPreferenceUpdated { + /// The account that updated the approval preference. + operator: T::AccountId, + /// The ID of the service blueprint. + blueprint_id: u64, + /// The new approval preference. + approval_preference: ApprovalPrefrence, + }, + + /// A new service has been requested. + ServiceRequested { + /// The account that requested the service. + owner: T::AccountId, + /// The ID of the service request. + request_id: u64, + /// The ID of the service blueprint. + blueprint_id: u64, + /// The list of operators that need to approve the service. + pending_approvals: Vec, + /// The list of operators that atomaticaly approved the service. + approved: Vec, + }, + /// A service request has been approved. + ServiceRequestApproved { + /// The account that approved the service. + operator: T::AccountId, + /// The ID of the service request. + request_id: u64, + /// The ID of the service blueprint. + blueprint_id: u64, + /// The list of operators that need to approve the service. + pending_approvals: Vec, + /// The list of operators that atomaticaly approved the service. + approved: Vec, + }, + /// A service request has been rejected. + ServiceRequestRejected { + /// The account that rejected the service. + operator: T::AccountId, + /// The ID of the service request. + request_id: u64, + /// The ID of the service blueprint. + blueprint_id: u64, + }, + + /// A service request has been updated or modified. + ServiceRequestUpdated { + /// The account that requested the service. + owner: T::AccountId, + /// The ID of the service request. + request_id: u64, + /// The ID of the service blueprint. + blueprint_id: u64, + /// The list of operators that need to approve the service. + pending_approvals: Vec, + /// The list of operators that atomaticaly approved the service. + approved: Vec, + }, + /// A service has been initiated. + ServiceInitiated { + /// The owner of the service. + owner: T::AccountId, + /// The ID of the service request that got approved (if required). + request_id: Option, + /// The ID of the service. + service_id: u64, + /// The ID of the service blueprint. + blueprint_id: u64, + }, + + /// A service has been terminated. + ServiceTerminated { + /// The owner of the service. + owner: T::AccountId, + /// The ID of the service. + service_id: u64, + /// The ID of the service blueprint. + blueprint_id: u64, + }, + + /// A job has been called. + JobCalled { + /// The account that called the job. + caller: T::AccountId, + /// The ID of the service. + service_id: u64, + /// The ID of the call. + call_id: u64, + /// The index of the job. + job: u8, + /// The arguments of the job. + args: Vec>, + }, + + /// A job result has been submitted. + JobResultSubmitted { + /// The account that submitted the job result. + operator: T::AccountId, + /// The ID of the service. + service_id: u64, + /// The ID of the call. + call_id: u64, + /// The index of the job. + job: u8, + /// The result of the job. + result: Vec>, + }, + + /// An EVM log has been emitted during an execution. + EvmLog { + /// The account that emitted the log + address: H160, + /// The topics of the log + topics: Vec, + /// The data of the log + data: Vec, + }, + /// EVM execution reverted with a reason. + EvmReverted { from: H160, to: H160, data: Vec, reason: Vec }, + } + + #[pallet::pallet] + pub struct Pallet(_); + + // Counters + + /// The next free ID for a service blueprint. + #[pallet::storage] + #[pallet::getter(fn next_blueprint_id)] + pub type NextBlueprintId = StorageValue<_, u64, ValueQuery>; + + /// The next free ID for a service request. + #[pallet::storage] + #[pallet::getter(fn next_service_request_id)] + pub type NextServiceRequestId = StorageValue<_, u64, ValueQuery>; + + /// The next free ID for a service Instance. + #[pallet::storage] + #[pallet::getter(fn next_instance_id)] + pub type NextInstanceId = StorageValue<_, u64, ValueQuery>; + + /// The next free ID for a service call. + #[pallet::storage] + #[pallet::getter(fn next_job_call_id)] + pub type NextJobCallId = StorageValue<_, u64, ValueQuery>; + + /// The service blueprints along with their owner. + #[pallet::storage] + #[pallet::getter(fn blueprints)] + pub type Blueprints = StorageMap< + _, + Identity, + u64, + (T::AccountId, ServiceBlueprint), + ResultQuery::BlueprintNotFound>, + >; + + /// The operators for a specific service blueprint. + /// Blueprint ID -> Operator -> Operator Preferences + #[pallet::storage] + #[pallet::getter(fn operators)] + pub type Operators = StorageDoubleMap< + _, + Identity, + u64, + Identity, + T::AccountId, + OperatorPreferences, + ResultQuery::NotRegistered>, + >; + + /// The service requests along with their owner. + /// Request ID -> Service Request + #[pallet::storage] + #[pallet::getter(fn service_requests)] + pub type ServiceRequests = StorageMap< + _, + Identity, + u64, + ServiceRequest>, + ResultQuery::ServiceRequestNotFound>, + >; + + /// The Services Instances + /// Service ID -> Service + #[pallet::storage] + #[pallet::getter(fn services)] + pub type Instances = StorageMap< + _, + Identity, + u64, + Service>, + ResultQuery::ServiceNotFound>, + >; + + /// User Service Instances + /// User Account ID -> Service ID + #[pallet::storage] + #[pallet::getter(fn user_services)] + pub type UserServices = StorageMap< + _, + Identity, + T::AccountId, + BoundedBTreeSet>, + ValueQuery, + >; + + /// The Service Job Calls + /// Service ID -> Call ID -> Job Call + #[pallet::storage] + #[pallet::getter(fn job_calls)] + pub type JobCalls = StorageDoubleMap< + _, + Identity, + u64, + Identity, + u64, + JobCall, + ResultQuery::ServiceOrJobCallNotFound>, + >; + + /// The Service Job Call Results + /// Service ID -> Call ID -> Job Call Result + #[pallet::storage] + #[pallet::getter(fn job_results)] + pub type JobResults = StorageDoubleMap< + _, + Identity, + u64, + Identity, + u64, + JobCallResult, + ResultQuery::ServiceOrJobCallNotFound>, + >; + + // auxiliary storage and maps + + #[pallet::storage] + #[pallet::getter(fn operator_profile)] + pub type OperatorsProfile = StorageMap< + _, + Identity, + T::AccountId, + OperatorProfile, + ResultQuery::OperatorProfileNotFound>, + >; + + #[pallet::call] + impl Pallet { + /// Create a new service blueprint. + /// + /// A Service Blueprint is a template for a service that can be instantiated later on by a + /// user. + /// + /// # Parameters + /// - `origin`: The account that is creating the service blueprint. + /// - `blueprint`: The blueprint of the service. + #[pallet::call_index(0)] + #[pallet::weight(T::WeightInfo::create_blueprint())] + pub fn create_blueprint( + origin: OriginFor, + blueprint: ServiceBlueprint, + ) -> DispatchResult { + let owner = ensure_signed(origin)?; + let blueprint_id = Self::next_blueprint_id(); + Blueprints::::insert(blueprint_id, (owner.clone(), blueprint)); + NextBlueprintId::::set(blueprint_id.saturating_add(1)); + + Self::deposit_event(Event::BlueprintCreated { owner, blueprint_id }); + Ok(()) + } + + /// Register the caller as an operator for a specific blueprint. + /// + /// The caller may require an approval first before they can accept to provide the service + /// for the users. + #[pallet::call_index(1)] + #[pallet::weight(T::WeightInfo::register())] + pub fn register( + origin: OriginFor, + #[pallet::compact] blueprint_id: u64, + preferences: OperatorPreferences, + registration_args: Vec>, + ) -> DispatchResultWithPostInfo { + let caller = ensure_signed(origin)?; + let (_, blueprint) = Self::blueprints(blueprint_id)?; + let already_registered = Operators::::contains_key(blueprint_id, &caller); + ensure!(!already_registered, Error::::AlreadyRegistered); + blueprint + .type_check_registration(®istration_args) + .map_err(Error::::TypeCheck)?; + + let (allowed, _weight) = + Self::check_registeration_hook(&blueprint, &preferences, ®istration_args)?; + + ensure!(allowed, Error::::InvalidRegistrationInput); + + Operators::::insert(blueprint_id, &caller, preferences); + + OperatorsProfile::::try_mutate(&caller, |profile| { + match profile { + Ok(p) => { + p.blueprints + .try_insert(blueprint_id) + .map_err(|_| Error::::MaxServicesPerProviderExceeded)?; + }, + Err(_) => { + let mut blueprints = BoundedBTreeSet::new(); + blueprints + .try_insert(blueprint_id) + .map_err(|_| Error::::MaxServicesPerProviderExceeded)?; + *profile = Ok(OperatorProfile { blueprints, ..Default::default() }); + }, + }; + Result::<_, Error>::Ok(()) + })?; + + Self::deposit_event(Event::Registered { + provider: caller.clone(), + blueprint_id, + preferences, + registration_args, + }); + + // TODO: add weight for the registration. + + Ok(PostDispatchInfo { actual_weight: None, pays_fee: Pays::Yes }) + } + + /// Unregister the caller from being an operator for the service blueprint + /// so that, no more services will assigned to the caller for this specific blueprint. + /// Note that, the caller needs to keep providing service for other active service + /// that uses this blueprint, until the end of service time, otherwise they may get reported + /// and slashed. + #[pallet::call_index(2)] + #[pallet::weight(T::WeightInfo::unregister())] + pub fn unregister( + origin: OriginFor, + #[pallet::compact] blueprint_id: u64, + ) -> DispatchResult { + let caller = ensure_signed(origin)?; + ensure!(Blueprints::::contains_key(blueprint_id), Error::::BlueprintNotFound); + let registered = Operators::::contains_key(blueprint_id, &caller); + ensure!(registered, Error::::NotRegistered); + // TODO: check if the caller is not providing any service for the blueprint. + Operators::::remove(blueprint_id, &caller); + + // TODO: also remove all the services that uses this blueprint? + let removed = OperatorsProfile::::try_mutate_exists(&caller, |profile| { + profile + .as_mut() + .map(|p| p.blueprints.remove(&blueprint_id)) + .ok_or(Error::::NotRegistered) + })?; + + ensure!(removed, Error::::NotRegistered); + Self::deposit_event(Event::Unregistered { operator: caller.clone(), blueprint_id }); + Ok(()) + } + + /// Update the approval preference for the caller for a specific service blueprint. + /// + /// See [`Self::register`] for more information. + #[pallet::call_index(3)] + #[pallet::weight(T::WeightInfo::update_approval_preference())] + pub fn update_approval_preference( + origin: OriginFor, + #[pallet::compact] blueprint_id: u64, + approval_preference: ApprovalPrefrence, + ) -> DispatchResult { + let caller = ensure_signed(origin)?; + ensure!(Blueprints::::contains_key(blueprint_id), Error::::BlueprintNotFound); + Operators::::try_mutate_exists(blueprint_id, &caller, |current_preferences| { + current_preferences + .as_mut() + .map(|v| v.approval = approval_preference) + .ok_or(Error::::NotRegistered) + })?; + + Self::deposit_event(Event::ApprovalPreferenceUpdated { + operator: caller.clone(), + blueprint_id, + approval_preference, + }); + Ok(()) + } + /// Request a new service to be initiated using the provided blueprint with a list of + /// operators that will run your service. Optionally, you can specifiy who is permitted caller + /// of this service, by default anyone could use this service. + /// + /// Note that, if anyone of the participants set their [`ApprovalPreference`] to `ApprovalPreference::Required` + /// you will need to wait until they are approve your request, otherwise (if none), the service is initiated immediately. + #[pallet::call_index(4)] + #[pallet::weight(T::WeightInfo::request())] + pub fn request( + origin: OriginFor, + #[pallet::compact] blueprint_id: u64, + permitted_callers: Vec, + service_providers: Vec, + #[pallet::compact] ttl: BlockNumberFor, + request_args: Vec>, + ) -> DispatchResultWithPostInfo { + // TODO(@shekohex): split this function into smaller functions. + let caller = ensure_signed(origin)?; + let (_, blueprint) = Self::blueprints(blueprint_id)?; + + blueprint.type_check_request(&request_args).map_err(Error::::TypeCheck)?; + let mut preferences = Vec::new(); + let mut pending_approvals = Vec::new(); + let mut approved = Vec::new(); + for provider in &service_providers { + let prefs = Self::operators(blueprint_id, provider)?; + if prefs.approval == ApprovalPrefrence::Required { + pending_approvals.push(provider.clone()); + } else { + approved.push(provider.clone()); + } + preferences.push(prefs); + } + + let service_id = Self::next_instance_id(); + let (allowed, _weight) = + Self::check_request_hook(&blueprint, service_id, &preferences, &request_args)?; + + ensure!(allowed, Error::::InvalidRequestInput); + + let permitted_callers = + BoundedVec::<_, MaxPermittedCallersOf>::try_from(permitted_callers) + .map_err(|_| Error::::MaxPermittedCallersExceeded)?; + if pending_approvals.is_empty() { + // No approval is required, initiate the service immediately. + for operator in &approved { + // add the service id to the list of services for each operator's profile. + OperatorsProfile::::try_mutate_exists(&operator, |profile| { + profile + .as_mut() + .and_then(|p| p.services.try_insert(service_id).ok()) + .ok_or(Error::::NotRegistered) + })?; + } + let operators = BoundedVec::<_, MaxOperatorsPerServiceOf>::try_from(approved) + .map_err(|_| Error::::MaxServiceProvidersExceeded)?; + let service = Service { + id: service_id, + blueprint: blueprint_id, + owner: caller.clone(), + permitted_callers, + operators, + ttl, + }; + + UserServices::::try_mutate(&caller, |service_ids| { + Instances::::insert(service_id, service); + NextInstanceId::::set(service_id.saturating_add(1)); + service_ids + .try_insert(service_id) + .map_err(|_| Error::::MaxServicesPerUserExceeded) + })?; + Self::deposit_event(Event::ServiceInitiated { + owner: caller.clone(), + request_id: None, + service_id, + blueprint_id, + }); + + // TODO: add weight for the request to the total weight. + Ok(PostDispatchInfo { actual_weight: None, pays_fee: Pays::Yes }) + } else { + let request_id = NextServiceRequestId::::get(); + let operators = pending_approvals + .iter() + .cloned() + .map(|v| (v, ApprovalState::Pending)) + .chain(approved.iter().cloned().map(|v| (v, ApprovalState::Approved))) + .collect::>(); + + let args = BoundedVec::<_, MaxFieldsOf>::try_from(request_args) + .map_err(|_| Error::::MaxFieldsExceeded)?; + + let operators_with_approval_state = + BoundedVec::<_, MaxOperatorsPerServiceOf>::try_from(operators) + .map_err(|_| Error::::MaxServiceProvidersExceeded)?; + let service_request = ServiceRequest { + blueprint: blueprint_id, + owner: caller.clone(), + ttl, + args, + permitted_callers, + operators_with_approval_state, + }; + ServiceRequests::::insert(request_id, service_request); + NextServiceRequestId::::set(request_id.saturating_add(1)); + + Self::deposit_event(Event::ServiceRequested { + owner: caller.clone(), + request_id, + blueprint_id, + pending_approvals, + approved, + }); + + // TODO: add weight for the request to the total weight. + Ok(PostDispatchInfo { actual_weight: None, pays_fee: Pays::Yes }) + } + } + + /// Approve a service request, so that the service can be initiated. + #[pallet::call_index(5)] + #[pallet::weight(T::WeightInfo::approve())] + pub fn approve(origin: OriginFor, #[pallet::compact] request_id: u64) -> DispatchResult { + let caller = ensure_signed(origin)?; + let mut request = Self::service_requests(request_id)?; + let updated = request + .operators_with_approval_state + .iter_mut() + .find(|(v, _)| v == &caller) + .map(|(_, s)| *s = ApprovalState::Approved); + ensure!(updated.is_some(), Error::::ApprovalNotRequested); + + let approved = request + .operators_with_approval_state + .iter() + .filter_map( + |(v, s)| if *s == ApprovalState::Approved { Some(v.clone()) } else { None }, + ) + .collect::>(); + let pending_approvals = request + .operators_with_approval_state + .iter() + .filter_map( + |(v, s)| if *s == ApprovalState::Pending { Some(v.clone()) } else { None }, + ) + .collect::>(); + + // we emit this event regardless of the outcome of the approval. + Self::deposit_event(Event::ServiceRequestApproved { + operator: caller.clone(), + request_id, + blueprint_id: request.blueprint, + pending_approvals, + approved, + }); + + if request.is_approved() { + // remove the service request. + ServiceRequests::::remove(request_id); + + let service_id = Self::next_instance_id(); + let operators = request + .operators_with_approval_state + .into_iter() + .map(|(v, _)| v) + .collect::>(); + + // add the service id to the list of services for each operator's profile. + for operator in &operators { + OperatorsProfile::::try_mutate_exists(&operator, |profile| { + profile + .as_mut() + .and_then(|p| p.services.try_insert(service_id).ok()) + .ok_or(Error::::NotRegistered) + })?; + } + let operators = BoundedVec::<_, MaxOperatorsPerServiceOf>::try_from(operators) + .map_err(|_| Error::::MaxServiceProvidersExceeded)?; + let service = Service { + id: service_id, + blueprint: request.blueprint, + owner: request.owner.clone(), + permitted_callers: request.permitted_callers.clone(), + operators, + ttl: request.ttl, + }; + + UserServices::::try_mutate(&request.owner, |service_ids| { + Instances::::insert(service_id, service); + NextInstanceId::::set(service_id.saturating_add(1)); + service_ids + .try_insert(service_id) + .map_err(|_| Error::::MaxServicesPerUserExceeded) + })?; + + Self::deposit_event(Event::ServiceInitiated { + owner: request.owner, + request_id: Some(request_id), + service_id, + blueprint_id: request.blueprint, + }); + } else { + // Update the service request. + ServiceRequests::::insert(request_id, request); + } + Ok(()) + } + + /// Reject a service request. + /// The service will not be initiated, and the requester will need to update the service request. + #[pallet::call_index(6)] + #[pallet::weight(T::WeightInfo::reject())] + pub fn reject(origin: OriginFor, #[pallet::compact] request_id: u64) -> DispatchResult { + let caller = ensure_signed(origin)?; + let updated = ServiceRequests::::try_mutate_exists(request_id, |maybe_request| { + maybe_request + .as_mut() + .map(|r| { + r.operators_with_approval_state.iter_mut().find_map(|(v, s)| { + if v == &caller { + *s = ApprovalState::Rejected; + Some(r.blueprint) + } else { + None + } + }) + }) + .ok_or(Error::::ServiceRequestNotFound) + })?; + match updated { + Some(blueprint_id) => Self::deposit_event(Event::ServiceRequestRejected { + operator: caller.clone(), + request_id, + blueprint_id, + }), + None => return Err(Error::::ApprovalNotRequested.into()), + }; + + Ok(()) + } + + /// Terminates the service by the owner of the service. + #[pallet::call_index(7)] + #[pallet::weight(T::WeightInfo::terminate())] + pub fn terminate( + origin: OriginFor, + #[pallet::compact] service_id: u64, + ) -> DispatchResult { + let caller = ensure_signed(origin)?; + let service = Self::services(service_id)?; + // TODO: allow permissioned callers to terminate the service? + ensure!(service.owner == caller, DispatchError::BadOrigin); + let removed = UserServices::::try_mutate(&caller, |service_ids| { + Result::<_, Error>::Ok(service_ids.remove(&service_id)) + })?; + ensure!(removed, Error::::ServiceNotFound); + Instances::::remove(service_id); + // Remove the service from the operator's profile. + for operator in &service.operators { + OperatorsProfile::::try_mutate_exists(operator, |profile| { + profile + .as_mut() + .map(|p| p.services.remove(&service_id)) + .ok_or(Error::::NotRegistered) + })?; + } + + Self::deposit_event(Event::ServiceTerminated { + owner: caller.clone(), + service_id, + blueprint_id: service.blueprint, + }); + Ok(()) + } + + /// Call a Job in the service. + /// The caller needs to be the owner of the service, or a permitted caller. + #[pallet::call_index(8)] + #[pallet::weight(T::WeightInfo::call())] + pub fn call( + origin: OriginFor, + #[pallet::compact] service_id: u64, + #[pallet::compact] job: u8, + args: Vec>, + ) -> DispatchResultWithPostInfo { + let caller = ensure_signed(origin)?; + let service = Self::services(service_id)?; + let (_, blueprint) = Self::blueprints(service.blueprint)?; + let is_permitted_caller = service.permitted_callers.iter().any(|v| v == &caller); + ensure!(service.owner == caller || is_permitted_caller, DispatchError::BadOrigin); + + let job_def = + blueprint.jobs.get(usize::from(job)).ok_or(Error::::JobDefinitionNotFound)?; + let bounded_args = BoundedVec::<_, MaxFieldsOf>::try_from(args.clone()) + .map_err(|_| Error::::MaxFieldsExceeded)?; + let job_call = JobCall { service_id, job, args: bounded_args }; + + job_call.type_check(job_def).map_err(Error::::TypeCheck)?; + let call_id = Self::next_job_call_id(); + + let (allowed, _weight) = + Self::check_job_call_hook(&blueprint, service_id, job, call_id, &args)?; + + ensure!(allowed, Error::::InvalidJobCallInput); + + JobCalls::::insert(service_id, call_id, job_call); + NextJobCallId::::set(call_id.saturating_add(1)); + Self::deposit_event(Event::JobCalled { + caller: caller.clone(), + service_id, + call_id, + job, + args, + }); + // TODO: add weight for the call to the total weight. + Ok(PostDispatchInfo { actual_weight: None, pays_fee: Pays::Yes }) + } + + /// Submit the job result by using the service ID and call ID. + #[pallet::call_index(9)] + #[pallet::weight(T::WeightInfo::submit_result())] + pub fn submit_result( + origin: OriginFor, + #[pallet::compact] service_id: u64, + #[pallet::compact] call_id: u64, + result: Vec>, + ) -> DispatchResultWithPostInfo { + let caller = ensure_signed(origin)?; + let job_call = Self::job_calls(service_id, call_id)?; + let service = Self::services(job_call.service_id)?; + let (_, blueprint) = Self::blueprints(service.blueprint)?; + + let is_operator = service.operators.iter().any(|v| v == &caller); + ensure!(is_operator, DispatchError::BadOrigin); + let operator_preferences = Operators::::get(service.blueprint, &caller)?; + + let job_def = blueprint + .jobs + .get(usize::from(job_call.job)) + .ok_or(Error::::JobDefinitionNotFound)?; + + let bounded_result = BoundedVec::<_, MaxFieldsOf>::try_from(result.clone()) + .map_err(|_| Error::::MaxFieldsExceeded)?; + + let job_result = JobCallResult { service_id, call_id, result: bounded_result }; + job_result.type_check(job_def).map_err(Error::::TypeCheck)?; + + let (allowed, _weight) = Self::check_job_call_result_hook( + job_def, + service_id, + job_call.job, + call_id, + &operator_preferences, + &job_call.args, + &result, + )?; + + ensure!(allowed, Error::::InvalidJobResult); + + JobResults::::insert(service_id, call_id, job_result); + Self::deposit_event(Event::JobResultSubmitted { + operator: caller.clone(), + service_id, + call_id, + job: job_call.job, + result, + }); + // TODO: add weight for the call to the total weight. + Ok(PostDispatchInfo { actual_weight: None, pays_fee: Pays::Yes }) + } + } +} diff --git a/pallets/services/src/mock.rs b/pallets/services/src/mock.rs new file mode 100644 index 000000000..ce6d69b70 --- /dev/null +++ b/pallets/services/src/mock.rs @@ -0,0 +1,540 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . +#![allow(clippy::all)] +use super::*; +use crate::{self as pallet_services}; +use frame_election_provider_support::{ + bounds::{ElectionBounds, ElectionBoundsBuilder}, + onchain, SequentialPhragmen, +}; +use frame_support::{ + construct_runtime, parameter_types, + traits::{ConstU128, ConstU32, ConstU64, Contains, Everything, OneSessionHandler}, +}; +use mock_evm::MockedEvmRunner; +use pallet_evm::GasWeightMapping; +use pallet_session::historical as pallet_session_historical; +use sp_core::{sr25519, H160, H256}; +use sp_keystore::{testing::MemoryKeystore, KeystoreExt, KeystorePtr}; +use sp_runtime::{ + app_crypto::ecdsa::Public, + testing::UintAuthorityId, + traits::{ConvertInto, IdentityLookup}, + AccountId32, BuildStorage, Perbill, +}; + +use std::collections::BTreeMap; +use std::sync::Arc; + +pub type AccountId = AccountId32; +pub type Balance = u128; +pub type BlockNumber = u64; + +impl frame_system::Config for Runtime { + type RuntimeOrigin = RuntimeOrigin; + type Nonce = u64; + type RuntimeCall = RuntimeCall; + type Hash = H256; + type Hashing = ::sp_runtime::traits::BlakeTwo256; + type AccountId = AccountId; + type Block = Block; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = ConstU64<250>; + type BlockWeights = (); + type BlockLength = (); + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type DbWeight = (); + type BaseCallFilter = Everything; + type SystemWeightInfo = (); + type SS58Prefix = (); + type OnSetCode = (); + type RuntimeTask = (); + type MaxConsumers = ConstU32<16>; +} + +impl pallet_balances::Config for Runtime { + type Balance = Balance; + type DustRemoval = (); + type RuntimeEvent = RuntimeEvent; + type ExistentialDeposit = ConstU128<1>; + type AccountStore = System; + type MaxLocks = (); + type MaxReserves = ConstU32<50>; + type ReserveIdentifier = (); + type WeightInfo = (); + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = (); + type FreezeIdentifier = (); + type MaxFreezes = (); +} + +parameter_types! { + pub ElectionBoundsOnChain: ElectionBounds = ElectionBoundsBuilder::default() + .voters_count(5_000.into()).targets_count(1_250.into()).build(); + pub ElectionBoundsMultiPhase: ElectionBounds = ElectionBoundsBuilder::default() + .voters_count(10_000.into()).targets_count(1_500.into()).build(); +} + +impl pallet_session::historical::Config for Runtime { + type FullIdentification = AccountId; + type FullIdentificationOf = ConvertInto; +} + +pub struct BaseFilter; +impl Contains for BaseFilter { + fn contains(call: &RuntimeCall) -> bool { + let is_stake_unbond_call = + matches!(call, RuntimeCall::Staking(pallet_staking::Call::unbond { .. })); + + if is_stake_unbond_call { + // no unbond call + return false; + } + + // no chill call + if matches!(call, RuntimeCall::Staking(pallet_staking::Call::chill { .. })) { + return false; + } + + // no withdraw_unbonded call + let is_stake_withdraw_call = + matches!(call, RuntimeCall::Staking(pallet_staking::Call::withdraw_unbonded { .. })); + + if is_stake_withdraw_call { + return false; + } + + true + } +} + +sp_runtime::impl_opaque_keys! { + pub struct MockSessionKeys { + pub other: MockSessionHandler, + } +} + +pub struct MockSessionHandler; +impl OneSessionHandler for MockSessionHandler { + type Key = UintAuthorityId; + + fn on_genesis_session<'a, I: 'a>(_: I) + where + I: Iterator, + AccountId: 'a, + { + } + + fn on_new_session<'a, I: 'a>(_: bool, _: I, _: I) + where + I: Iterator, + AccountId: 'a, + { + } + + fn on_disabled(_validator_index: u32) {} +} + +impl sp_runtime::BoundToRuntimeAppPublic for MockSessionHandler { + type Public = UintAuthorityId; +} + +pub struct MockSessionManager; + +impl pallet_session::SessionManager for MockSessionManager { + fn end_session(_: sp_staking::SessionIndex) {} + fn start_session(_: sp_staking::SessionIndex) {} + fn new_session(idx: sp_staking::SessionIndex) -> Option> { + if idx == 0 || idx == 1 || idx == 2 { + Some(vec![mock_pub_key(1), mock_pub_key(2), mock_pub_key(3), mock_pub_key(4)]) + } else { + None + } + } +} + +parameter_types! { + pub const Period: u64 = 1; + pub const Offset: u64 = 0; +} + +impl pallet_session::Config for Runtime { + type SessionManager = MockSessionManager; + type Keys = MockSessionKeys; + type ShouldEndSession = pallet_session::PeriodicSessions; + type NextSessionRotation = pallet_session::PeriodicSessions; + type SessionHandler = (MockSessionHandler,); + type RuntimeEvent = RuntimeEvent; + type ValidatorId = AccountId; + type ValidatorIdOf = pallet_staking::StashOf; + type WeightInfo = (); +} + +pub struct OnChainSeqPhragmen; +impl onchain::Config for OnChainSeqPhragmen { + type System = Runtime; + type Solver = SequentialPhragmen; + type DataProvider = Staking; + type WeightInfo = (); + type MaxWinners = ConstU32<100>; + type Bounds = ElectionBoundsOnChain; +} + +/// Upper limit on the number of NPOS nominations. +const MAX_QUOTA_NOMINATIONS: u32 = 16; + +impl pallet_staking::Config for Runtime { + type Currency = Balances; + type CurrencyBalance = ::Balance; + type UnixTime = pallet_timestamp::Pallet; + type CurrencyToVote = (); + type RewardRemainder = (); + type RuntimeEvent = RuntimeEvent; + type Slash = (); + type Reward = (); + type SessionsPerEra = (); + type SlashDeferDuration = (); + type AdminOrigin = frame_system::EnsureRoot; + type BondingDuration = (); + type SessionInterface = (); + type EraPayout = (); + type NextNewSession = Session; + type MaxExposurePageSize = ConstU32<64>; + type MaxControllersInDeprecationBatch = ConstU32<100>; + type OffendingValidatorsThreshold = (); + type ElectionProvider = onchain::OnChainExecution; + type GenesisElectionProvider = Self::ElectionProvider; + type VoterList = pallet_staking::UseNominatorsAndValidatorsMap; + type TargetList = pallet_staking::UseValidatorsMap; + type MaxUnlockingChunks = ConstU32<32>; + type HistoryDepth = ConstU32<84>; + type EventListeners = (); + type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; + type NominationsQuota = pallet_staking::FixedNominationsQuota; + type WeightInfo = (); +} + +parameter_types! { + pub const ServicesPalletId: PalletId = PalletId(*b"py/servs"); +} + +pub struct PalletEVMGasWeightMapping; + +impl EvmGasWeightMapping for PalletEVMGasWeightMapping { + fn gas_to_weight(gas: u64, without_base_weight: bool) -> Weight { + pallet_evm::FixedGasWeightMapping::::gas_to_weight(gas, without_base_weight) + } + + fn weight_to_gas(weight: Weight) -> u64 { + pallet_evm::FixedGasWeightMapping::::weight_to_gas(weight) + } +} + +parameter_types! { + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxFields: u32 = 256; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxFieldsSize: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxMetadataLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxJobsPerService: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxOperatorsPerService: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxPermittedCallers: u32 = 256; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxServicesPerOperator: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxBlueprintsPerOperator: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxServicesPerUser: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxBinariesPerGadget: u32 = 64; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxSourcesPerGadget: u32 = 64; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxGitOwnerLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxGitRepoLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxGitTagLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxBinaryNameLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxIpfsHashLength: u32 = 46; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxContainerRegistryLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxContainerImageNameLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)] + #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] + pub const MaxContainerImageTagLength: u32 = 1024; +} + +impl Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type ForceOrigin = frame_system::EnsureRoot; + type Currency = Balances; + type PalletId = ServicesPalletId; + type EvmRunner = MockedEvmRunner; + type EvmGasWeightMapping = PalletEVMGasWeightMapping; + type MaxFields = MaxFields; + type MaxFieldsSize = MaxFieldsSize; + type MaxMetadataLength = MaxMetadataLength; + type MaxJobsPerService = MaxJobsPerService; + type MaxOperatorsPerService = MaxOperatorsPerService; + type MaxPermittedCallers = MaxPermittedCallers; + type MaxServicesPerOperator = MaxServicesPerOperator; + type MaxBlueprintsPerOperator = MaxBlueprintsPerOperator; + type MaxServicesPerUser = MaxServicesPerUser; + type MaxBinariesPerGadget = MaxBinariesPerGadget; + type MaxSourcesPerGadget = MaxSourcesPerGadget; + type MaxGitOwnerLength = MaxGitOwnerLength; + type MaxGitRepoLength = MaxGitRepoLength; + type MaxGitTagLength = MaxGitTagLength; + type MaxBinaryNameLength = MaxBinaryNameLength; + type MaxIpfsHashLength = MaxIpfsHashLength; + type MaxContainerRegistryLength = MaxContainerRegistryLength; + type MaxContainerImageNameLength = MaxContainerImageNameLength; + type MaxContainerImageTagLength = MaxContainerImageTagLength; + type Constraints = pallet_services::types::ConstraintsOf; + type WeightInfo = (); +} + +type Block = frame_system::mocking::MockBlock; + +#[allow(non_camel_case_types)] +construct_runtime!( + pub enum Runtime + { + System: frame_system, + Timestamp: pallet_timestamp, + Balances: pallet_balances, + Services: pallet_services, + EVM: pallet_evm, + Ethereum: pallet_ethereum, + Session: pallet_session, + Staking: pallet_staking, + Historical: pallet_session_historical, + } +); + +pub struct ExtBuilder; + +impl Default for ExtBuilder { + fn default() -> Self { + ExtBuilder + } +} + +pub fn mock_pub_key(id: u8) -> AccountId { + sr25519::Public::from_raw([id; 32]).into() +} + +pub fn mock_authorities(vec: Vec) -> Vec { + vec.into_iter().map(|id| mock_pub_key(id)).collect() +} + +pub fn new_test_ext(ids: Vec) -> sp_io::TestExternalities { + new_test_ext_raw_authorities(mock_authorities(ids)) +} + +pub const CGGMP21_REGISTRATION_HOOK: H160 = H160([0x21; 20]); +pub const CGGMP21_REQUEST_HOOK: H160 = H160([0x22; 20]); +pub const CGGMP21_JOB_RESULT_VERIFIER: H160 = H160([0x23; 20]); + +// This function basically just builds a genesis storage key/value store according to +// our desired mockup. +pub fn new_test_ext_raw_authorities(authorities: Vec<(AccountId)>) -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + // We use default for brevity, but you can configure as desired if needed. + let balances: Vec<_> = authorities.iter().map(|i| (i.clone(), 20_000_u128)).collect(); + pallet_balances::GenesisConfig:: { balances } + .assimilate_storage(&mut t) + .unwrap(); + + let stakers: Vec<_> = authorities + .iter() + .map(|authority| { + ( + authority.clone(), + authority.clone(), + 10_000_u128, + pallet_staking::StakerStatus::::Validator, + ) + }) + .collect(); + + let staking_config = pallet_staking::GenesisConfig:: { + stakers, + validator_count: 4, + force_era: pallet_staking::Forcing::ForceNew, + minimum_validator_count: 0, + max_validator_count: Some(5), + max_nominator_count: Some(5), + invulnerables: vec![], + ..Default::default() + }; + + staking_config.assimilate_storage(&mut t).unwrap(); + + let mut evm_accounts = BTreeMap::new(); + + let cggmp21_registration_hook_json: serde_json::Value = serde_json::from_str(include_str!( + "../../../forge/out/CGGMP21Hooks.sol/CGGMP21RegistrationHook.json" + )) + .unwrap(); + let cggmp21_registration_hook_code = hex::decode( + cggmp21_registration_hook_json["deployedBytecode"]["object"] + .as_str() + .unwrap() + .replace("0x", ""), + ) + .unwrap(); + evm_accounts.insert( + CGGMP21_REGISTRATION_HOOK, + fp_evm::GenesisAccount { + code: cggmp21_registration_hook_code, + storage: Default::default(), + nonce: Default::default(), + balance: Default::default(), + }, + ); + + let cggmp21_request_hook_json: serde_json::Value = serde_json::from_str(include_str!( + "../../../forge/out/CGGMP21Hooks.sol/CGGMP21RequestHook.json" + )) + .unwrap(); + + let cggmp21_request_hook_code = hex::decode( + cggmp21_request_hook_json["deployedBytecode"]["object"] + .as_str() + .unwrap() + .replace("0x", ""), + ) + .unwrap(); + + evm_accounts.insert( + CGGMP21_REQUEST_HOOK, + fp_evm::GenesisAccount { + code: cggmp21_request_hook_code, + storage: Default::default(), + nonce: Default::default(), + balance: Default::default(), + }, + ); + + let cggmp21_job_result_verifier_json: serde_json::Value = serde_json::from_str(include_str!( + "../../../forge/out/CGGMP21Hooks.sol/CGGMP21JobResultVerifier.json" + )) + .unwrap(); + + let cggmp21_job_result_verifier_code = hex::decode( + cggmp21_job_result_verifier_json["deployedBytecode"]["object"] + .as_str() + .unwrap() + .replace("0x", ""), + ) + .unwrap(); + + evm_accounts.insert( + CGGMP21_JOB_RESULT_VERIFIER, + fp_evm::GenesisAccount { + code: cggmp21_job_result_verifier_code, + storage: Default::default(), + nonce: Default::default(), + balance: Default::default(), + }, + ); + + let evm_config = + pallet_evm::GenesisConfig:: { accounts: evm_accounts, ..Default::default() }; + + evm_config.assimilate_storage(&mut t).unwrap(); + + let mut ext = sp_io::TestExternalities::new(t); + ext.register_extension(KeystoreExt(Arc::new(MemoryKeystore::new()) as KeystorePtr)); + ext.execute_with(|| System::set_block_number(1)); + ext.execute_with(|| { + System::set_block_number(1); + Session::on_initialize(1); + >::on_initialize(1); + }); + + ext +} + +// Checks events against the latest. A contiguous set of events must be +// provided. They must include the most recent RuntimeEvent, but do not have to include +// every past RuntimeEvent. +#[track_caller] +pub fn assert_events(mut expected: Vec) { + let mut actual: Vec = System::events().iter().map(|e| e.event.clone()).collect(); + + expected.reverse(); + for evt in expected { + let next = actual.pop().expect("RuntimeEvent expected"); + match (&next, &evt) { + (left_val, right_val) => { + if !(*left_val == *right_val) { + panic!("Events don't match\nactual: {next:#?}\nexpected: {evt:#?}"); + } + }, + }; + } +} diff --git a/pallets/services/src/mock_evm.rs b/pallets/services/src/mock_evm.rs new file mode 100644 index 000000000..55e2b6df4 --- /dev/null +++ b/pallets/services/src/mock_evm.rs @@ -0,0 +1,346 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +use crate as pallet_services; +use crate::mock::{ + AccountId, Balances, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, Timestamp, +}; +use fp_evm::FeeCalculator; +use frame_support::traits::{ + Currency, ExistenceRequirement, OnUnbalanced, SignedImbalance, WithdrawReasons, +}; +use frame_support::{parameter_types, traits::FindAuthor, weights::Weight, PalletId}; +use pallet_ethereum::{EthereumBlockHashMapping, IntermediateStateRoot, PostLogContent, RawOrigin}; +use pallet_evm::{ + AddressMapping, EnsureAddressNever, EnsureAddressRoot, HashedAddressMapping, + OnChargeEVMTransaction, +}; +use sp_core::{keccak_256, ConstU32, H160, H256, U256}; +use sp_runtime::traits::UniqueSaturatedInto; +use sp_runtime::{ + traits::{BlakeTwo256, DispatchInfoOf, Dispatchable}, + transaction_validity::{TransactionValidity, TransactionValidityError}, + ConsensusEngineId, +}; + +use pallet_evm_precompile_blake2::Blake2F; +use pallet_evm_precompile_bn128::{Bn128Add, Bn128Mul, Bn128Pairing}; +use pallet_evm_precompile_modexp::Modexp; +use pallet_evm_precompile_sha3fips::Sha3FIPS256; +use pallet_evm_precompile_simple::{ECRecover, ECRecoverPublicKey, Identity, Ripemd160, Sha256}; + +use precompile_utils::precompile_set::{ + AcceptDelegateCall, AddressU64, CallableByContract, CallableByPrecompile, OnlyFrom, + PrecompileAt, PrecompileSetBuilder, PrecompilesInRangeInclusive, +}; + +type EthereumPrecompilesChecks = (AcceptDelegateCall, CallableByContract, CallableByPrecompile); + +#[precompile_utils::precompile_name_from_address] +pub type DefaultPrecompiles = ( + // Ethereum precompiles: + PrecompileAt, ECRecover, EthereumPrecompilesChecks>, + PrecompileAt, Sha256, EthereumPrecompilesChecks>, + PrecompileAt, Ripemd160, EthereumPrecompilesChecks>, + PrecompileAt, Identity, EthereumPrecompilesChecks>, + PrecompileAt, Modexp, EthereumPrecompilesChecks>, + PrecompileAt, Bn128Add, EthereumPrecompilesChecks>, + PrecompileAt, Bn128Mul, EthereumPrecompilesChecks>, + PrecompileAt, Bn128Pairing, EthereumPrecompilesChecks>, + PrecompileAt, Blake2F, EthereumPrecompilesChecks>, + PrecompileAt, Sha3FIPS256, (CallableByContract, CallableByPrecompile)>, + PrecompileAt, ECRecoverPublicKey, (CallableByContract, CallableByPrecompile)>, +); + +pub type WebbPrecompiles = PrecompileSetBuilder< + R, + (PrecompilesInRangeInclusive<(AddressU64<1>, AddressU64<2095>), DefaultPrecompiles>,), +>; + +parameter_types! { + pub const MinimumPeriod: u64 = 6000 / 2; + + pub PrecompilesValue: WebbPrecompiles = WebbPrecompiles::<_>::new(); +} + +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +pub struct FixedGasPrice; +impl FeeCalculator for FixedGasPrice { + fn min_gas_price() -> (U256, Weight) { + (1.into(), Weight::zero()) + } +} + +pub struct FindAuthorTruncated; +impl FindAuthor for FindAuthorTruncated { + fn find_author<'a, I>(_digests: I) -> Option + where + I: 'a + IntoIterator, + { + Some(address_build(0).address) + } +} + +const BLOCK_GAS_LIMIT: u64 = 150_000_000; +const MAX_POV_SIZE: u64 = 5 * 1024 * 1024; + +parameter_types! { + pub const TransactionByteFee: u64 = 1; + pub const ChainId: u64 = 42; + pub const EVMModuleId: PalletId = PalletId(*b"py/evmpa"); + pub BlockGasLimit: U256 = U256::from(BLOCK_GAS_LIMIT); + pub const GasLimitPovSizeRatio: u64 = BLOCK_GAS_LIMIT.saturating_div(MAX_POV_SIZE); + pub const WeightPerGas: Weight = Weight::from_parts(20_000, 0); +} + +parameter_types! { + pub SuicideQuickClearLimit: u32 = 0; +} + +pub struct DealWithFees; +impl OnUnbalanced for DealWithFees { + fn on_unbalanceds(mut fees_then_tips: impl Iterator) { + // whatever + } +} +pub struct FreeEVMExecution; + +impl OnChargeEVMTransaction for FreeEVMExecution { + type LiquidityInfo = (); + + fn withdraw_fee( + who: &H160, + fee: U256, + ) -> Result> { + Ok(()) + } + + fn correct_and_deposit_fee( + who: &H160, + corrected_fee: U256, + base_fee: U256, + already_withdrawn: Self::LiquidityInfo, + ) -> Self::LiquidityInfo { + already_withdrawn + } + + fn pay_priority_fee(tip: Self::LiquidityInfo) {} +} + +/// Type alias for negative imbalance during fees +type RuntimeNegativeImbalance = + ::AccountId>>::NegativeImbalance; + +/// See: [`pallet_evm::EVMCurrencyAdapter`] +pub struct CustomEVMCurrencyAdapter; + +impl OnChargeEVMTransaction for CustomEVMCurrencyAdapter { + type LiquidityInfo = Option; + + fn withdraw_fee( + who: &H160, + fee: U256, + ) -> Result> { + let pallet_services_address = pallet_services::Pallet::::address(); + // Make pallet services account free to use + if who == &pallet_services_address { + return Ok(None); + } + // fallback to the default implementation + as OnChargeEVMTransaction< + Runtime, + >>::withdraw_fee(who, fee) + } + + fn correct_and_deposit_fee( + who: &H160, + corrected_fee: U256, + base_fee: U256, + already_withdrawn: Self::LiquidityInfo, + ) -> Self::LiquidityInfo { + let pallet_services_address = pallet_services::Pallet::::address(); + // Make pallet services account free to use + if who == &pallet_services_address { + return already_withdrawn; + } + // fallback to the default implementation + as OnChargeEVMTransaction< + Runtime, + >>::correct_and_deposit_fee(who, corrected_fee, base_fee, already_withdrawn) + } + + fn pay_priority_fee(tip: Self::LiquidityInfo) { + as OnChargeEVMTransaction< + Runtime, + >>::pay_priority_fee(tip) + } +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = FixedGasPrice; + type GasWeightMapping = pallet_evm::FixedGasWeightMapping; + type WeightPerGas = WeightPerGas; + type BlockHashMapping = EthereumBlockHashMapping; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = HashedAddressMapping; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type PrecompilesType = WebbPrecompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = ChainId; + type BlockGasLimit = BlockGasLimit; + type Runner = pallet_evm::runner::stack::Runner; + type OnChargeTransaction = CustomEVMCurrencyAdapter; + type OnCreate = (); + type SuicideQuickClearLimit = SuicideQuickClearLimit; + type FindAuthor = FindAuthorTruncated; + type GasLimitPovSizeRatio = GasLimitPovSizeRatio; + type Timestamp = Timestamp; + type WeightInfo = (); +} + +parameter_types! { + pub const PostBlockAndTxnHashes: PostLogContent = PostLogContent::BlockAndTxnHashes; +} + +impl pallet_ethereum::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type StateRoot = IntermediateStateRoot; + type PostLogContent = PostBlockAndTxnHashes; + type ExtraDataLength = ConstU32<30>; +} + +impl fp_self_contained::SelfContainedCall for RuntimeCall { + type SignedInfo = H160; + + fn is_self_contained(&self) -> bool { + match self { + RuntimeCall::Ethereum(call) => call.is_self_contained(), + _ => false, + } + } + + fn check_self_contained(&self) -> Option> { + match self { + RuntimeCall::Ethereum(call) => call.check_self_contained(), + _ => None, + } + } + + fn validate_self_contained( + &self, + info: &Self::SignedInfo, + dispatch_info: &DispatchInfoOf, + len: usize, + ) -> Option { + match self { + RuntimeCall::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len), + _ => None, + } + } + + fn pre_dispatch_self_contained( + &self, + info: &Self::SignedInfo, + dispatch_info: &DispatchInfoOf, + len: usize, + ) -> Option> { + match self { + RuntimeCall::Ethereum(call) => { + call.pre_dispatch_self_contained(info, dispatch_info, len) + }, + _ => None, + } + } + + fn apply_self_contained( + self, + info: Self::SignedInfo, + ) -> Option>> { + match self { + call @ RuntimeCall::Ethereum(pallet_ethereum::Call::transact { .. }) => { + Some(call.dispatch(RuntimeOrigin::from(RawOrigin::EthereumTransaction(info)))) + }, + _ => None, + } + } +} + +pub struct MockedEvmRunner; + +impl pallet_services::EvmRunner for MockedEvmRunner { + type Error = pallet_evm::Error; + + fn call( + source: sp_core::H160, + target: sp_core::H160, + input: Vec, + value: sp_core::U256, + gas_limit: u64, + is_transactional: bool, + validate: bool, + ) -> Result> { + let max_fee_per_gas = FixedGasPrice::min_gas_price().0; + let max_priority_fee_per_gas = max_fee_per_gas.saturating_mul(U256::from(2)); + let nonce = None; + let access_list = Default::default(); + let weight_limit = None; + let proof_size_base_cost = None; + <::Runner as pallet_evm::Runner>::call( + source, + target, + input, + value, + gas_limit, + Some(max_fee_per_gas), + Some(max_priority_fee_per_gas), + nonce, + access_list, + is_transactional, + validate, + weight_limit, + proof_size_base_cost, + ::config(), + ) + .map_err(|o| pallet_services::traits::RunnerError { error: o.error, weight: o.weight }) + } +} + +pub struct AccountInfo { + pub address: H160, + pub account_id: AccountId, + pub private_key: H256, +} + +pub fn address_build(seed: u8) -> AccountInfo { + let private_key = H256::from_slice(&[(seed + 1); 32]); //H256::from_low_u64_be((i + 1) as u64); + let secret_key = libsecp256k1::SecretKey::parse_slice(&private_key[..]).unwrap(); + let public_key = &libsecp256k1::PublicKey::from_secret_key(&secret_key).serialize()[1..65]; + let address = H160::from(H256::from(keccak_256(public_key))); + + AccountInfo { + private_key, + account_id: HashedAddressMapping::::into_account_id(address), + address, + } +} diff --git a/pallets/services/src/rpc.rs b/pallets/services/src/rpc.rs new file mode 100644 index 000000000..fb8c0fb8b --- /dev/null +++ b/pallets/services/src/rpc.rs @@ -0,0 +1,45 @@ +use itertools::Itertools; +use sp_std::collections::btree_map::BTreeMap; +use sp_std::vec::Vec; + +use tangle_primitives::services::*; + +use super::*; + +impl Pallet { + #[allow(clippy::type_complexity)] + pub fn services_with_blueprints_by_operator( + operator: T::AccountId, + ) -> Result< + Vec>>, + Error, + > { + let profile = Self::operator_profile(operator)?; + let mut result = Vec::with_capacity(profile.services.len()); + let services = profile + .services + .into_iter() + .flat_map(Self::services) + .group_by(|service| service.blueprint); + + let blueprints = profile + .blueprints + .into_iter() + .flat_map(|id| Self::blueprints(id).map(|(_, b)| (id, b))) + .collect::>(); + + for (blueprint_id, services) in services.into_iter() { + match blueprints.get(&blueprint_id) { + Some(blueprint) => { + result.push(RpcServicesWithBlueprint { + blueprint_id, + blueprint: blueprint.clone(), + services: services.collect(), + }); + }, + None => return Err(Error::::BlueprintNotFound), + } + } + Ok(result) + } +} diff --git a/pallets/services/src/tests.rs b/pallets/services/src/tests.rs new file mode 100644 index 000000000..1e8edb887 --- /dev/null +++ b/pallets/services/src/tests.rs @@ -0,0 +1,628 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . +#![cfg(test)] +use crate::types::ConstraintsOf; + +use super::*; +use crate::mock_evm::address_build; +use ethers::prelude::*; +use frame_support::{assert_err, assert_noop, assert_ok}; +use mock::*; +use serde_json::Value; +use sp_core::{bounded_vec, ecdsa, ByteArray, U256}; +use sp_runtime::{traits::BlakeTwo256, KeyTypeId}; +use sp_std::sync::Arc; +use std::fs; +use tangle_primitives::services::*; + +const ALICE: u8 = 1; +const BOB: u8 = 2; +const CHARLIE: u8 = 3; +const DAVE: u8 = 4; +const EVE: u8 = 5; + +const TEN: u8 = 10; +const TWENTY: u8 = 20; +const HUNDRED: u8 = 100; + +fn zero_key() -> ecdsa::Public { + ecdsa::Public([0; 33]) +} + +fn cggmp21_blueprint() -> ServiceBlueprint> { + ServiceBlueprint { + metadata: ServiceMetadata { name: "CGGMP21 TSS".try_into().unwrap(), ..Default::default() }, + jobs: bounded_vec![ + JobDefinition { + metadata: JobMetadata { name: "keygen".try_into().unwrap(), ..Default::default() }, + params: bounded_vec![FieldType::Uint8], + result: bounded_vec![FieldType::Bytes], + verifier: JobResultVerifier::Evm(CGGMP21_JOB_RESULT_VERIFIER), + }, + JobDefinition { + metadata: JobMetadata { name: "sign".try_into().unwrap(), ..Default::default() }, + params: bounded_vec![FieldType::Uint64, FieldType::Bytes], + result: bounded_vec![FieldType::Bytes], + verifier: JobResultVerifier::Evm(CGGMP21_JOB_RESULT_VERIFIER), + }, + ], + registration_hook: ServiceRegistrationHook::Evm(CGGMP21_REGISTRATION_HOOK), + registration_params: bounded_vec![], + request_hook: ServiceRequestHook::Evm(CGGMP21_REQUEST_HOOK), + request_params: bounded_vec![], + gadget: Default::default(), + } +} + +#[test] +fn create_service_blueprint() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + + let blueprint = cggmp21_blueprint(); + + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + + let next_id = Services::next_blueprint_id(); + assert_eq!(next_id, 1); + assert_events(vec![RuntimeEvent::Services(crate::Event::BlueprintCreated { + owner: alice, + blueprint_id: next_id - 1, + })]); + }); +} + +#[test] +fn register_on_blueprint() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + + let blueprint = cggmp21_blueprint(); + + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + + let bob = mock_pub_key(BOB); + + let registeration_call = Services::register( + RuntimeOrigin::signed(bob.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + ); + assert_ok!(registeration_call); + + assert_events(vec![RuntimeEvent::Services(crate::Event::Registered { + provider: bob.clone(), + blueprint_id: 0, + preferences: OperatorPreferences { + key: zero_key(), + approval: ApprovalPrefrence::default(), + }, + registration_args: Default::default(), + })]); + + // The blueprint should be added to my blueprints in my profile. + let profile = OperatorsProfile::::get(bob.clone()).unwrap(); + assert!(profile.blueprints.contains(&0)); + + // if we try to register again, it should fail. + assert_err!( + Services::register( + RuntimeOrigin::signed(bob), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + ), + crate::Error::::AlreadyRegistered + ); + }); +} + +#[test] +fn update_approval_preference() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + + let blueprint = cggmp21_blueprint(); + + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + + let bob = mock_pub_key(BOB); + + assert_ok!(Services::register( + RuntimeOrigin::signed(bob.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + + assert_eq!( + Operators::::get(0, &bob).unwrap(), + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + ); + + assert_events(vec![RuntimeEvent::Services(crate::Event::Registered { + provider: bob.clone(), + blueprint_id: 0, + preferences: OperatorPreferences { + key: zero_key(), + approval: ApprovalPrefrence::default(), + }, + registration_args: Default::default(), + })]); + + // update approval preference + assert_ok!(Services::update_approval_preference( + RuntimeOrigin::signed(bob.clone()), + 0, + ApprovalPrefrence::Required, + )); + + assert_eq!( + Operators::::get(0, &bob).unwrap().approval, + ApprovalPrefrence::Required + ); + + assert_events(vec![RuntimeEvent::Services(crate::Event::ApprovalPreferenceUpdated { + operator: bob, + blueprint_id: 0, + approval_preference: ApprovalPrefrence::Required, + })]); + + // try to update approval preference when not registered + let charlie = mock_pub_key(CHARLIE); + assert_err!( + Services::update_approval_preference( + RuntimeOrigin::signed(charlie), + 0, + ApprovalPrefrence::Required + ), + crate::Error::::NotRegistered + ); + }); +} + +#[test] +fn unregister_from_blueprint() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + let blueprint = cggmp21_blueprint(); + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + + let bob = mock_pub_key(BOB); + assert_ok!(Services::register( + RuntimeOrigin::signed(bob.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + assert_ok!(Services::unregister(RuntimeOrigin::signed(bob.clone()), 0)); + assert_eq!(Operators::::contains_key(0, &bob), false); + + // The blueprint should be removed from my blueprints in my profile. + let profile = OperatorsProfile::::get(bob.clone()).unwrap(); + assert!(!profile.blueprints.contains(&0)); + + assert_events(vec![RuntimeEvent::Services(crate::Event::Unregistered { + operator: bob, + blueprint_id: 0, + })]); + + // try to deregister when not registered + let charlie = mock_pub_key(CHARLIE); + assert_err!( + Services::unregister(RuntimeOrigin::signed(charlie), 0), + crate::Error::::NotRegistered + ); + }); +} + +#[test] +fn request_service() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + let blueprint = cggmp21_blueprint(); + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + let bob = mock_pub_key(BOB); + assert_ok!(Services::register( + RuntimeOrigin::signed(bob.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + let charlie = mock_pub_key(CHARLIE); + assert_ok!(Services::register( + RuntimeOrigin::signed(charlie.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + let dave = mock_pub_key(DAVE); + assert_ok!(Services::register( + RuntimeOrigin::signed(dave.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + + let eve = mock_pub_key(EVE); + assert_ok!(Services::request( + RuntimeOrigin::signed(eve.clone()), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100, + Default::default(), + )); + // this service gets immediately accepted by all providers. + assert_eq!(ServiceRequests::::iter_keys().collect::>().len(), 0); + assert_eq!(Instances::::contains_key(0), true); + // The service should also be added to the services for each operator. + let profile = OperatorsProfile::::get(bob).unwrap(); + assert!(profile.services.contains(&0)); + let profile = OperatorsProfile::::get(charlie).unwrap(); + assert!(profile.services.contains(&0)); + let profile = OperatorsProfile::::get(dave).unwrap(); + assert!(profile.services.contains(&0)); + + assert_events(vec![RuntimeEvent::Services(crate::Event::ServiceInitiated { + owner: eve, + request_id: None, + service_id: 0, + blueprint_id: 0, + })]); + }); +} + +#[test] +fn request_service_with_approval_process() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + let blueprint = cggmp21_blueprint(); + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + + let bob = mock_pub_key(BOB); + assert_ok!(Services::register( + RuntimeOrigin::signed(bob.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + + let charlie = mock_pub_key(CHARLIE); + assert_ok!(Services::register( + RuntimeOrigin::signed(charlie.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::Required }, + Default::default(), + )); + + let dave = mock_pub_key(DAVE); + assert_ok!(Services::register( + RuntimeOrigin::signed(dave.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::Required }, + Default::default(), + )); + + let eve = mock_pub_key(EVE); + assert_ok!(Services::request( + RuntimeOrigin::signed(eve.clone()), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100, + Default::default(), + )); + + // the service should be pending approval from charlie and dave. + assert_eq!(ServiceRequests::::contains_key(0), true); + assert_events(vec![RuntimeEvent::Services(crate::Event::ServiceRequested { + owner: eve.clone(), + request_id: 0, + blueprint_id: 0, + approved: vec![bob.clone()], + pending_approvals: vec![charlie.clone(), dave.clone()], + })]); + + // it should not be added, until all providers approve. + let profile = OperatorsProfile::::get(bob.clone()).unwrap(); + assert!(!profile.services.contains(&0)); + let profile = OperatorsProfile::::get(charlie.clone()).unwrap(); + assert!(!profile.services.contains(&0)); + let profile = OperatorsProfile::::get(dave.clone()).unwrap(); + assert!(!profile.services.contains(&0)); + // charlie approves the service + assert_ok!(Services::approve(RuntimeOrigin::signed(charlie.clone()), 0)); + assert_events(vec![RuntimeEvent::Services(crate::Event::ServiceRequestApproved { + operator: charlie.clone(), + request_id: 0, + blueprint_id: 0, + approved: vec![charlie.clone(), bob.clone()], + pending_approvals: vec![dave.clone()], + })]); + + // dave approves the service, and the service is initiated. + assert_ok!(Services::approve(RuntimeOrigin::signed(dave.clone()), 0)); + assert_eq!(ServiceRequests::::contains_key(0), false); + assert_eq!(Instances::::contains_key(0), true); + + // The service should also be added to the services for each operator. + let profile = OperatorsProfile::::get(bob.clone()).unwrap(); + assert!(profile.services.contains(&0)); + let profile = OperatorsProfile::::get(charlie.clone()).unwrap(); + assert!(profile.services.contains(&0)); + let profile = OperatorsProfile::::get(dave.clone()).unwrap(); + assert!(profile.services.contains(&0)); + + assert_events(vec![ + RuntimeEvent::Services(crate::Event::ServiceRequestApproved { + operator: dave.clone(), + request_id: 0, + blueprint_id: 0, + approved: vec![charlie.clone(), dave.clone(), bob.clone()], + pending_approvals: vec![], + }), + RuntimeEvent::Services(crate::Event::ServiceInitiated { + owner: eve, + request_id: Some(0), + service_id: 0, + blueprint_id: 0, + }), + ]); + }); +} + +#[test] +fn job_calls() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + let blueprint = cggmp21_blueprint(); + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + let bob = mock_pub_key(BOB); + assert_ok!(Services::register( + RuntimeOrigin::signed(bob.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + let charlie = mock_pub_key(CHARLIE); + assert_ok!(Services::register( + RuntimeOrigin::signed(charlie.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + let dave = mock_pub_key(DAVE); + assert_ok!(Services::register( + RuntimeOrigin::signed(dave.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + + let eve = mock_pub_key(EVE); + assert_ok!(Services::request( + RuntimeOrigin::signed(eve.clone()), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100, + Default::default(), + )); + // this service gets immediately accepted by all providers. + assert_eq!(ServiceRequests::::iter_keys().collect::>().len(), 0); + assert_eq!(Instances::::contains_key(0), true); + assert_events(vec![RuntimeEvent::Services(crate::Event::ServiceInitiated { + owner: eve.clone(), + request_id: None, + service_id: 0, + blueprint_id: 0, + })]); + + // now we can call the jobs + let job_call_id = 0; + assert_ok!(Services::call( + RuntimeOrigin::signed(eve.clone()), + 0, + 0, + bounded_vec![Field::Uint8(2)], + )); + + assert_eq!(JobCalls::::contains_key(0, job_call_id), true); + assert_events(vec![RuntimeEvent::Services(crate::Event::JobCalled { + caller: eve, + service_id: 0, + job: 0, + call_id: job_call_id, + args: vec![Field::Uint8(2)], + })]); + }); +} + +#[test] +fn job_calls_fails_with_invalid_input() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + let blueprint = cggmp21_blueprint(); + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + let bob = mock_pub_key(BOB); + assert_ok!(Services::register( + RuntimeOrigin::signed(bob.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + let charlie = mock_pub_key(CHARLIE); + assert_ok!(Services::register( + RuntimeOrigin::signed(charlie.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + let dave = mock_pub_key(DAVE); + assert_ok!(Services::register( + RuntimeOrigin::signed(dave.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + + let eve = mock_pub_key(EVE); + assert_ok!(Services::request( + RuntimeOrigin::signed(eve.clone()), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100, + Default::default(), + )); + // this service gets immediately accepted by all providers. + assert_eq!(ServiceRequests::::iter_keys().collect::>().len(), 0); + assert_eq!(Instances::::contains_key(0), true); + assert_events(vec![RuntimeEvent::Services(crate::Event::ServiceInitiated { + owner: eve.clone(), + request_id: None, + service_id: 0, + blueprint_id: 0, + })]); + + // now we can call the jobs + let job_call_id = 0; + assert_err!( + Services::call( + RuntimeOrigin::signed(eve.clone()), + 0, + 0, + // t > n + bounded_vec![Field::Uint8(4)], + ), + crate::Error::::InvalidJobCallInput + ); + + assert_eq!(JobCalls::::contains_key(0, job_call_id), false); + }); +} + +#[test] +fn job_result() { + new_test_ext(vec![ALICE, BOB, CHARLIE, DAVE, EVE]).execute_with(|| { + System::set_block_number(1); + let alice = mock_pub_key(ALICE); + let blueprint = cggmp21_blueprint(); + assert_ok!(Services::create_blueprint(RuntimeOrigin::signed(alice.clone()), blueprint)); + let bob = mock_pub_key(BOB); + assert_ok!(Services::register( + RuntimeOrigin::signed(bob.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + let charlie = mock_pub_key(CHARLIE); + assert_ok!(Services::register( + RuntimeOrigin::signed(charlie.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + let dave = mock_pub_key(DAVE); + assert_ok!(Services::register( + RuntimeOrigin::signed(dave.clone()), + 0, + OperatorPreferences { key: zero_key(), approval: ApprovalPrefrence::default() }, + Default::default(), + )); + + let eve = mock_pub_key(EVE); + assert_ok!(Services::request( + RuntimeOrigin::signed(eve.clone()), + 0, + vec![alice.clone()], + vec![bob.clone(), charlie.clone(), dave.clone()], + 100, + Default::default(), + )); + // this service gets immediately accepted by all providers. + assert_eq!(ServiceRequests::::iter_keys().collect::>().len(), 0); + assert_eq!(Instances::::contains_key(0), true); + assert_events(vec![RuntimeEvent::Services(crate::Event::ServiceInitiated { + owner: eve.clone(), + request_id: None, + service_id: 0, + blueprint_id: 0, + })]); + + // now we can call the jobs + let keygen_job_call_id = 0; + + assert_ok!(Services::call( + RuntimeOrigin::signed(eve.clone()), + 0, + 0, + bounded_vec![Field::Uint8(2)] + )); + + assert_eq!(JobCalls::::contains_key(0, keygen_job_call_id), true); + // now we can set the job result + let key_type = KeyTypeId(*b"mdkg"); + let dkg = sp_io::crypto::ecdsa_generate(key_type, None); + assert_ok!(Services::submit_result( + RuntimeOrigin::signed(bob.clone()), + 0, + keygen_job_call_id, + bounded_vec![Field::Bytes(dkg.to_raw_vec().try_into().unwrap())], + )); + + // submit signing job + let signing_job_call_id = 1; + let data_hash = sp_core::keccak_256(&[1; 32]); + + assert_ok!(Services::call( + RuntimeOrigin::signed(eve.clone()), + 0, + 1, + bounded_vec![ + Field::Uint64(keygen_job_call_id), + Field::Bytes(data_hash.to_vec().try_into().unwrap()) + ], + )); + + // now we can set the job result + let signature = sp_io::crypto::ecdsa_sign_prehashed(key_type, &dkg, &data_hash).unwrap(); + let mut signature_bytes = signature.to_raw_vec(); + // fix the v value (it should be 27 or 28). + signature_bytes[64] += 27u8; + // For some reason, the signature is not being verified. + // in EVM, ecrecover is used to verify the signature, but it returns + // 0x000000000000000000000000000000000000000 as the address of the signer. + // even though the signature is correct, and we have the precomiles in the runtime. + // + // assert_ok!(Services::submit_result( + // RuntimeOrigin::signed(bob.clone()), + // 0, + // signing_job_call_id, + // bounded_vec![Field::Bytes(signature_bytes.try_into().unwrap())], + // )); + }); +} diff --git a/pallets/services/src/traits.rs b/pallets/services/src/traits.rs new file mode 100644 index 000000000..13640cf16 --- /dev/null +++ b/pallets/services/src/traits.rs @@ -0,0 +1,33 @@ +use crate::Weight; +use fp_evm::CallInfo; +use sp_core::{H160, U256}; +use sp_std::vec::Vec; + +#[derive(Debug)] +pub struct RunnerError> { + pub error: E, + pub weight: Weight, +} + +#[allow(clippy::too_many_arguments)] +pub trait EvmRunner { + type Error: Into; + + fn call( + source: H160, + target: H160, + input: Vec, + value: U256, + gas_limit: u64, + is_transactional: bool, + validate: bool, + ) -> Result>; +} + +/// A mapping function that converts EVM gas to Substrate weight and vice versa +pub trait EvmGasWeightMapping { + /// Convert EVM gas to Substrate weight + fn gas_to_weight(gas: u64, without_base_weight: bool) -> Weight; + /// Convert Substrate weight to EVM gas + fn weight_to_gas(weight: Weight) -> u64; +} diff --git a/pallets/services/src/types.rs b/pallets/services/src/types.rs new file mode 100644 index 000000000..231225e39 --- /dev/null +++ b/pallets/services/src/types.rs @@ -0,0 +1,40 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +use super::*; +use tangle_primitives::services::Constraints; + +pub type BalanceOf = + <::Currency as Currency<::AccountId>>::Balance; + +pub type ConstraintsFor = ::Constraints; + +pub type MaxPermittedCallersOf = as Constraints>::MaxPermittedCallers; + +pub type MaxServicesPerUserOf = as Constraints>::MaxServicesPerUser; + +pub type MaxFieldsOf = as Constraints>::MaxFields; + +pub type MaxOperatorsPerServiceOf = as Constraints>::MaxOperatorsPerService; + +/// Extract the constraints from the runtime. +#[derive(RuntimeDebugNoBound, CloneNoBound, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[scale_info(skip_type_params(T))] +#[codec(encode_bound(skip_type_params(T)))] +#[codec(decode_bound(skip_type_params(T)))] +#[codec(mel_bound(skip_type_params(T)))] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub struct ConstraintsOf(sp_std::marker::PhantomData); diff --git a/pallets/services/src/weights.rs b/pallets/services/src/weights.rs new file mode 100644 index 000000000..c2753c5c5 --- /dev/null +++ b/pallets/services/src/weights.rs @@ -0,0 +1,422 @@ + +//! Autogenerated weights for `pallet_services` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0 +//! DATE: 2024-05-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `Salmans-Laptop.local`, CPU: `` +//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("benchmark")`, DB CACHE: `1024` + +// Executed Command: +// ./target/release/tangle +// benchmark +// pallet +// --chain +// benchmark +// --pallet +// pallet_services +// --extrinsic +// * +// --steps +// 50 +// --repeat +// 20 +// --output +// ./pallets/services/src/weights.rs +// --template +// ./.maintain/frame-weights-template.hbs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_services`. +pub trait WeightInfo { + fn create_blueprint() -> Weight; + fn register() -> Weight; + fn unregister() -> Weight; + fn update_approval_preference() -> Weight; + fn request() -> Weight; + fn approve() -> Weight; + fn reject() -> Weight; + fn terminate() -> Weight; + fn call() -> Weight; + fn submit_result() -> Weight; +} + +/// Weights for `pallet_services` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `Services::NextBlueprintId` (r:1 w:1) + /// Proof: `Services::NextBlueprintId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Services::Blueprints` (r:0 w:1) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn create_blueprint() -> Weight { + // Proof Size summary in bytes: + // Measured: `109` + // Estimated: `1594` + // Minimum execution time: 9_000_000 picoseconds. + Weight::from_parts(10_000_000, 1594) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:1 w:1) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `BaseFee::BaseFeePerGas` (r:1 w:0) + /// Proof: `BaseFee::BaseFeePerGas` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `EVM::AccountCodes` (r:2 w:0) + /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Digest` (r:1 w:0) + /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Services::OperatorsProfile` (r:1 w:1) + /// Proof: `Services::OperatorsProfile` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn register() -> Weight { + // Proof Size summary in bytes: + // Measured: `1070` + // Estimated: `7010` + // Minimum execution time: 40_000_000 picoseconds. + Weight::from_parts(41_000_000, 7010) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:1 w:1) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::OperatorsProfile` (r:1 w:1) + /// Proof: `Services::OperatorsProfile` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn unregister() -> Weight { + // Proof Size summary in bytes: + // Measured: `359` + // Estimated: `3824` + // Minimum execution time: 14_000_000 picoseconds. + Weight::from_parts(15_000_000, 3824) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:1 w:1) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn update_approval_preference() -> Weight { + // Proof Size summary in bytes: + // Measured: `334` + // Estimated: `3799` + // Minimum execution time: 11_000_000 picoseconds. + Weight::from_parts(12_000_000, 3799) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:3 w:0) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::NextInstanceId` (r:1 w:1) + /// Proof: `Services::NextInstanceId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `BaseFee::BaseFeePerGas` (r:1 w:0) + /// Proof: `BaseFee::BaseFeePerGas` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `EVM::AccountCodes` (r:2 w:0) + /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Digest` (r:1 w:0) + /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Services::OperatorsProfile` (r:3 w:3) + /// Proof: `Services::OperatorsProfile` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::UserServices` (r:1 w:1) + /// Proof: `Services::UserServices` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Instances` (r:0 w:1) + /// Proof: `Services::Instances` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn request() -> Weight { + // Proof Size summary in bytes: + // Measured: `1625` + // Estimated: `10040` + // Minimum execution time: 65_000_000 picoseconds. + Weight::from_parts(68_000_000, 10040) + .saturating_add(T::DbWeight::get().reads(14_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) + } + /// Storage: `Services::ServiceRequests` (r:1 w:1) + /// Proof: `Services::ServiceRequests` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn approve() -> Weight { + // Proof Size summary in bytes: + // Measured: `459` + // Estimated: `3924` + // Minimum execution time: 10_000_000 picoseconds. + Weight::from_parts(11_000_000, 3924) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Services::ServiceRequests` (r:1 w:1) + /// Proof: `Services::ServiceRequests` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn reject() -> Weight { + // Proof Size summary in bytes: + // Measured: `459` + // Estimated: `3924` + // Minimum execution time: 9_000_000 picoseconds. + Weight::from_parts(10_000_000, 3924) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Services::Instances` (r:1 w:1) + /// Proof: `Services::Instances` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::UserServices` (r:1 w:1) + /// Proof: `Services::UserServices` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::OperatorsProfile` (r:3 w:3) + /// Proof: `Services::OperatorsProfile` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn terminate() -> Weight { + // Proof Size summary in bytes: + // Measured: `704` + // Estimated: `9119` + // Minimum execution time: 25_000_000 picoseconds. + Weight::from_parts(27_000_000, 9119) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: `Services::Instances` (r:1 w:0) + /// Proof: `Services::Instances` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::NextJobCallId` (r:1 w:1) + /// Proof: `Services::NextJobCallId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `BaseFee::BaseFeePerGas` (r:1 w:0) + /// Proof: `BaseFee::BaseFeePerGas` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `EVM::AccountCodes` (r:2 w:0) + /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Digest` (r:1 w:0) + /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Services::JobCalls` (r:0 w:1) + /// Proof: `Services::JobCalls` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn call() -> Weight { + // Proof Size summary in bytes: + // Measured: `1482` + // Estimated: `7422` + // Minimum execution time: 43_000_000 picoseconds. + Weight::from_parts(45_000_000, 7422) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Services::JobCalls` (r:1 w:0) + /// Proof: `Services::JobCalls` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Instances` (r:1 w:0) + /// Proof: `Services::Instances` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:1 w:0) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `BaseFee::BaseFeePerGas` (r:1 w:0) + /// Proof: `BaseFee::BaseFeePerGas` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `EVM::AccountCodes` (r:2 w:0) + /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Digest` (r:1 w:0) + /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Services::JobResults` (r:0 w:1) + /// Proof: `Services::JobResults` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn submit_result() -> Weight { + // Proof Size summary in bytes: + // Measured: `1667` + // Estimated: `7607` + // Minimum execution time: 56_000_000 picoseconds. + Weight::from_parts(60_000_000, 7607) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `Services::NextBlueprintId` (r:1 w:1) + /// Proof: `Services::NextBlueprintId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Services::Blueprints` (r:0 w:1) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn create_blueprint() -> Weight { + // Proof Size summary in bytes: + // Measured: `109` + // Estimated: `1594` + // Minimum execution time: 9_000_000 picoseconds. + Weight::from_parts(10_000_000, 1594) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:1 w:1) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `BaseFee::BaseFeePerGas` (r:1 w:0) + /// Proof: `BaseFee::BaseFeePerGas` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `EVM::AccountCodes` (r:2 w:0) + /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Digest` (r:1 w:0) + /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Services::OperatorsProfile` (r:1 w:1) + /// Proof: `Services::OperatorsProfile` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn register() -> Weight { + // Proof Size summary in bytes: + // Measured: `1070` + // Estimated: `7010` + // Minimum execution time: 40_000_000 picoseconds. + Weight::from_parts(41_000_000, 7010) + .saturating_add(RocksDbWeight::get().reads(8_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:1 w:1) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::OperatorsProfile` (r:1 w:1) + /// Proof: `Services::OperatorsProfile` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn unregister() -> Weight { + // Proof Size summary in bytes: + // Measured: `359` + // Estimated: `3824` + // Minimum execution time: 14_000_000 picoseconds. + Weight::from_parts(15_000_000, 3824) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:1 w:1) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn update_approval_preference() -> Weight { + // Proof Size summary in bytes: + // Measured: `334` + // Estimated: `3799` + // Minimum execution time: 11_000_000 picoseconds. + Weight::from_parts(12_000_000, 3799) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:3 w:0) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::NextInstanceId` (r:1 w:1) + /// Proof: `Services::NextInstanceId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `BaseFee::BaseFeePerGas` (r:1 w:0) + /// Proof: `BaseFee::BaseFeePerGas` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `EVM::AccountCodes` (r:2 w:0) + /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Digest` (r:1 w:0) + /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Services::OperatorsProfile` (r:3 w:3) + /// Proof: `Services::OperatorsProfile` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::UserServices` (r:1 w:1) + /// Proof: `Services::UserServices` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Instances` (r:0 w:1) + /// Proof: `Services::Instances` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn request() -> Weight { + // Proof Size summary in bytes: + // Measured: `1625` + // Estimated: `10040` + // Minimum execution time: 65_000_000 picoseconds. + Weight::from_parts(68_000_000, 10040) + .saturating_add(RocksDbWeight::get().reads(14_u64)) + .saturating_add(RocksDbWeight::get().writes(7_u64)) + } + /// Storage: `Services::ServiceRequests` (r:1 w:1) + /// Proof: `Services::ServiceRequests` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn approve() -> Weight { + // Proof Size summary in bytes: + // Measured: `459` + // Estimated: `3924` + // Minimum execution time: 10_000_000 picoseconds. + Weight::from_parts(11_000_000, 3924) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Services::ServiceRequests` (r:1 w:1) + /// Proof: `Services::ServiceRequests` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn reject() -> Weight { + // Proof Size summary in bytes: + // Measured: `459` + // Estimated: `3924` + // Minimum execution time: 9_000_000 picoseconds. + Weight::from_parts(10_000_000, 3924) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Services::Instances` (r:1 w:1) + /// Proof: `Services::Instances` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::UserServices` (r:1 w:1) + /// Proof: `Services::UserServices` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::OperatorsProfile` (r:3 w:3) + /// Proof: `Services::OperatorsProfile` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn terminate() -> Weight { + // Proof Size summary in bytes: + // Measured: `704` + // Estimated: `9119` + // Minimum execution time: 25_000_000 picoseconds. + Weight::from_parts(27_000_000, 9119) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: `Services::Instances` (r:1 w:0) + /// Proof: `Services::Instances` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::NextJobCallId` (r:1 w:1) + /// Proof: `Services::NextJobCallId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `BaseFee::BaseFeePerGas` (r:1 w:0) + /// Proof: `BaseFee::BaseFeePerGas` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `EVM::AccountCodes` (r:2 w:0) + /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Digest` (r:1 w:0) + /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Services::JobCalls` (r:0 w:1) + /// Proof: `Services::JobCalls` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn call() -> Weight { + // Proof Size summary in bytes: + // Measured: `1482` + // Estimated: `7422` + // Minimum execution time: 43_000_000 picoseconds. + Weight::from_parts(45_000_000, 7422) + .saturating_add(RocksDbWeight::get().reads(8_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `Services::JobCalls` (r:1 w:0) + /// Proof: `Services::JobCalls` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Instances` (r:1 w:0) + /// Proof: `Services::Instances` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Blueprints` (r:1 w:0) + /// Proof: `Services::Blueprints` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Services::Operators` (r:1 w:0) + /// Proof: `Services::Operators` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `BaseFee::BaseFeePerGas` (r:1 w:0) + /// Proof: `BaseFee::BaseFeePerGas` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `EVM::AccountCodes` (r:2 w:0) + /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Digest` (r:1 w:0) + /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Services::JobResults` (r:0 w:1) + /// Proof: `Services::JobResults` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn submit_result() -> Weight { + // Proof Size summary in bytes: + // Measured: `1667` + // Estimated: `7607` + // Minimum execution time: 56_000_000 picoseconds. + Weight::from_parts(60_000_000, 7607) + .saturating_add(RocksDbWeight::get().reads(9_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } +} diff --git a/pallets/staking/src/mock.rs b/pallets/staking/src/mock.rs index 53b39c7ff..54405805e 100644 --- a/pallets/staking/src/mock.rs +++ b/pallets/staking/src/mock.rs @@ -33,7 +33,6 @@ use frame_support::{ use frame_system::{EnsureRoot, EnsureSignedBy}; use sp_core::H256; use sp_io; -use sp_runtime::DispatchResult; use sp_runtime::{ curve::PiecewiseLinear, testing::UintAuthorityId, @@ -44,8 +43,6 @@ use sp_staking::{ offence::{DisableStrategy, OffenceDetails, OnOffenceHandler}, OnStakingUpdate, }; -use tangle_primitives::jobs::ReportRestakerOffence; -use tangle_primitives::roles::RoleType; pub const INIT_TIMESTAMP: u64 = 30_000; pub const BLOCK_TIME: u64 = 1000; @@ -293,34 +290,6 @@ impl OnStakingUpdate for EventListenerMock { } } -pub struct MockRolesHandler; -impl tangle_primitives::roles::traits::RolesHandler for MockRolesHandler { - type Balance = Balance; - fn is_restaker_with_role(_address: AccountId, _role_type: RoleType) -> bool { - false - } - - fn is_restaker(_address: AccountId) -> bool { - false - } - - fn get_validator_role_key(_address: AccountId) -> Option> { - None - } - - fn report_offence(_offence_report: ReportRestakerOffence) -> DispatchResult { - Ok(()) - } - - fn record_job_by_validators(_validators: Vec) -> DispatchResult { - Ok(()) - } - - fn get_max_active_service_for_restaker(_restaker: AccountId) -> Option { - None - } -} - impl crate::pallet::pallet::Config for Test { type Currency = Balances; type CurrencyBalance = ::Balance; @@ -350,7 +319,6 @@ impl crate::pallet::pallet::Config for Test { type MaxControllersInDeprecationBatch = MaxControllersInDeprecationBatch; type EventListeners = EventListenerMock; type BenchmarkingConfig = TestBenchmarkingConfig; - type RolesHandler = MockRolesHandler; type WeightInfo = (); } diff --git a/pallets/staking/src/pallet/mod.rs b/pallets/staking/src/pallet/mod.rs index cfe82ab3a..a1f878350 100644 --- a/pallets/staking/src/pallet/mod.rs +++ b/pallets/staking/src/pallet/mod.rs @@ -52,7 +52,6 @@ use crate::{ Nominations, NominationsQuota, PositiveImbalanceOf, RewardDestination, SessionInterface, StakingLedger, UnappliedSlash, UnlockChunk, ValidatorPrefs, }; -use tangle_primitives::roles::traits::RolesHandler; // The speculative number of spans are used as an input of the weight annotation of // [`Call::unbond`], as the post dipatch weight may depend on the number of slashing span on the @@ -282,9 +281,6 @@ pub mod pallet { /// Some parameters of the benchmarking. type BenchmarkingConfig: BenchmarkingConfig; - /// The restaker roles handler interface - type RolesHandler: RolesHandler; - /// Weight information for extrinsics in this pallet. type WeightInfo: WeightInfo; } @@ -1030,8 +1026,6 @@ pub mod pallet { ) -> DispatchResultWithPostInfo { let controller = ensure_signed(origin)?; - ensure!(!T::RolesHandler::is_restaker(controller.clone()), Error::::RestakeActive); - let unlocking = Self::ledger(Controller(controller.clone())).map(|l| l.unlocking.len())?; @@ -1145,8 +1139,6 @@ pub mod pallet { ) -> DispatchResultWithPostInfo { let controller = ensure_signed(origin)?; - ensure!(!T::RolesHandler::is_restaker(controller.clone()), Error::::RestakeActive); - let actual_weight = Self::do_withdraw_unbonded(&controller, num_slashing_spans)?; Ok(Some(actual_weight).into()) } diff --git a/pallets/zksaas/Cargo.toml b/pallets/zksaas/Cargo.toml deleted file mode 100644 index 0ddad2c7b..000000000 --- a/pallets/zksaas/Cargo.toml +++ /dev/null @@ -1,62 +0,0 @@ -[package] -name = "pallet-zksaas" -version = { workspace = true } -authors = { workspace = true } -edition = { workspace = true } -homepage = { workspace = true } -license = { workspace = true } -repository = { workspace = true } - -[dependencies] -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -log = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -serde = { workspace = true } -sp-core = { workspace = true } -sp-io = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -tangle-primitives = { workspace = true, default-features = false, features = ["verifying"] } - -[dev-dependencies] -pallet-balances = { workspace = true } -smallvec = { workspace = true } -sp-keystore = { workspace = true } - -# Arkworks -ark-bn254 = { workspace = true } -ark-crypto-primitives = { workspace = true, default-features = false } -ark-ec = { workspace = true, default-features = false } -ark-ff = { workspace = true, default-features = false } -ark-groth16 = { workspace = true, default-features = false } -ark-relations = { workspace = true, default-features = false } -ark-serialize = { workspace = true, default-features = false } -ark-std = { workspace = true, default-features = false } - -ethabi = { workspace = true } -hex = { workspace = true } - -[features] -default = ["std"] -std = [ - "scale-info/std", - "sp-runtime/std", - "frame-benchmarking?/std", - "frame-support/std", - "frame-system/std", - "sp-core/std", - "sp-std/std", - "tangle-primitives/std", - "pallet-balances/std", -] -try-runtime = ["frame-support/try-runtime"] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", -] diff --git a/pallets/zksaas/src/functions.rs b/pallets/zksaas/src/functions.rs deleted file mode 100644 index fd7103327..000000000 --- a/pallets/zksaas/src/functions.rs +++ /dev/null @@ -1,161 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use super::*; -use crate::types::BalanceOf; -use frame_support::{pallet_prelude::DispatchResult, sp_runtime::Saturating}; -use frame_system::pallet_prelude::BlockNumberFor; -use sp_core::crypto::ByteArray; -use sp_runtime::traits::Get; -use tangle_primitives::{jobs::*, verifier::*}; - -impl Pallet { - /// Calculates the fee for a given job submission based on the provided fee information. - /// - /// The fee calculation considers both the base fee and an additional fee per validator, - /// depending on the job type. - /// - /// # Arguments - /// - /// * `job` - A reference to the job submission containing information about the account, job - /// type, and block number. - /// - /// # Returns - /// - /// Returns the calculated fee as a `BalanceOf` type. - #[allow(clippy::type_complexity)] - pub fn job_to_fee( - job: &JobSubmission< - T::AccountId, - BlockNumberFor, - T::MaxParticipants, - T::MaxSubmissionLen, - T::MaxAdditionalParamsLen, - >, - ) -> BalanceOf { - let fee_info = FeeInfo::::get(); - // charge the base fee + per validator fee - if job.job_type.is_phase_one() { - let validator_count = - job.job_type.clone().get_participants().expect("checked_above").len(); - let validator_fee = fee_info.circuit_fee * (validator_count as u32).into(); - let data_stored: usize = sp_core::ecdsa::Public::LEN * validator_count; - let storage_fee = fee_info.storage_fee_per_byte * (data_stored as u32).into(); - validator_fee.saturating_add(fee_info.base_fee).saturating_add(storage_fee) - } else { - let storage_fee = fee_info.storage_fee_per_byte * T::MaxProofLen::get().into(); - fee_info - .base_fee - .saturating_add(fee_info.get_prove_fee()) - .saturating_add(storage_fee) - } - } - - /// Verifies a given job verification information and dispatches to specific verification logic - /// based on the job type. - /// - /// # Arguments - /// - /// * `data` - The job verification information, which could be of different types such as DKG - /// or others. - /// - /// # Returns - /// - /// Returns a `DispatchResult` indicating whether the verification was successful or encountered - /// an error. - #[allow(clippy::type_complexity)] - pub fn verify( - data: JobWithResult< - T::AccountId, - T::MaxParticipants, - T::MaxSubmissionLen, - T::MaxKeyLen, - T::MaxDataLen, - T::MaxSignatureLen, - T::MaxProofLen, - T::MaxAdditionalParamsLen, - >, - ) -> DispatchResult { - match (data.phase_one_job_type, data.job_type, data.result) { - (None, _, JobResult::ZkSaaSPhaseOne(_)) => Ok(()), - ( - Some(JobType::ZkSaaSPhaseOne(circuit)), - JobType::ZkSaaSPhaseTwo(req), - JobResult::ZkSaaSPhaseTwo(res), - ) => Self::verify_proof(circuit, req, res), - _ => Err(Error::::InvalidJobType.into()), // this should never happen - } - } - - /// Verifies a given proof submission. - pub fn verify_proof( - ZkSaaSPhaseOneJobType { system, .. }: ZkSaaSPhaseOneJobType< - T::AccountId, - T::MaxParticipants, - T::MaxSubmissionLen, - >, - ZkSaaSPhaseTwoJobType { request, .. }: ZkSaaSPhaseTwoJobType, - res: ZkSaaSProofResult, - ) -> DispatchResult { - match (system, request, res) { - ( - ZkSaaSSystem::Groth16(sys), - ZkSaaSPhaseTwoRequest::Groth16(req), - ZkSaaSProofResult::Circom(res), - ) => Self::verify_circom_proof(sys, req, res), - ( - ZkSaaSSystem::Groth16(sys), - ZkSaaSPhaseTwoRequest::Groth16(req), - ZkSaaSProofResult::Arkworks(res), - ) => Self::verify_arkworks_proof(sys, req, res), - } - } - - /// Verifies a given circom proof submission. - pub fn verify_circom_proof( - system: Groth16System, - req: Groth16ProveRequest, - res: CircomProofResult, - ) -> DispatchResult { - let maybe_verified = - T::Verifier::verify(&req.public_input, &res.proof, &system.verifying_key); - match maybe_verified { - Ok(true) => Ok(()), - Ok(false) => Err(Error::::InvalidProof.into()), - Err(e) => { - log::warn!(target: "zksaas::verify_circom_proof", "Invalid Circom Proof: {}", e); - Err(Error::::MalformedProof.into()) - }, - } - } - - /// Verifies a given arkworks proof submission. - pub fn verify_arkworks_proof( - system: Groth16System, - req: Groth16ProveRequest, - res: ArkworksProofResult, - ) -> DispatchResult { - let maybe_verified = - T::Verifier::verify(&req.public_input, &res.proof, &system.verifying_key); - match maybe_verified { - Ok(true) => Ok(()), - Ok(false) => Err(Error::::InvalidProof.into()), - Err(e) => { - log::warn!(target: "zksaas::verify_arkworks_proof", "Invalid Arkworks Proof: {}", e); - Err(Error::::MalformedProof.into()) - }, - } - } -} diff --git a/pallets/zksaas/src/lib.rs b/pallets/zksaas/src/lib.rs deleted file mode 100644 index 2560e3914..000000000 --- a/pallets/zksaas/src/lib.rs +++ /dev/null @@ -1,140 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -#![cfg_attr(not(feature = "std"), no_std)] -//! # Pallet ZK-SaaS -//! -//! A Substrate pallet for verifying submitted results of Zero Knowledge Proving as a Service -//! protocols. -//! -//! This pallet provides functionality to verify the results of a ZK-SaaS process. It includes -//! methods to verify ZK Proofs. -pub use pallet::*; - -#[cfg(test)] -mod mock; - -mod functions; -#[cfg(test)] -mod tests; -mod types; -mod weights; - -#[frame_support::pallet] -pub mod pallet { - use crate::{types::FeeInfoOf, weights::WeightInfo}; - use frame_support::{ - dispatch::DispatchResultWithPostInfo, - pallet_prelude::*, - traits::{Get, ReservableCurrency}, - }; - use frame_system::pallet_prelude::*; - use scale_info::prelude::fmt::Debug; - use tangle_primitives::verifier::InstanceVerifier; - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - /// Because this pallet emits events, it depends on the runtime's definition of an event. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// The currency mechanism. - type Currency: ReservableCurrency; - - /// The origin which may set filter. - type UpdateOrigin: EnsureOrigin; - - /// The verifier instance trait - type Verifier: InstanceVerifier; - - /// The maximum participants allowed in a job - type MaxParticipants: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of job result submission - type MaxSubmissionLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of a signature - type MaxSignatureLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of data to be signed - type MaxDataLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of validator key allowed - type MaxKeyLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of proof allowed - type MaxProofLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// The maximum size of additional parameters - type MaxAdditionalParamsLen: Get + Clone + TypeInfo + Debug + Eq + PartialEq; - - /// Weight info for pallet - type WeightInfo: WeightInfo; - } - - #[pallet::pallet] - pub struct Pallet(_); - - #[pallet::storage] - #[pallet::getter(fn fee_info)] - pub type FeeInfo = StorageValue<_, FeeInfoOf, ValueQuery>; - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// Fee has been updated to the new value - FeeUpdated(FeeInfoOf), - } - - // Errors inform users that something went wrong. - #[pallet::error] - pub enum Error { - /// Unexpected job type - InvalidJobType, - /// Invalid proof - InvalidProof, - /// Malformed Proof - /// if the proof bytes is not correct. - MalformedProof, - } - - #[pallet::call] - impl Pallet { - /// Set the fee information for the pallet. - /// - /// This extrinsic allows the designated origin to update the fee information, which - /// includes parameters such as the base fee and the fee per validator. It updates the - /// storage with the provided `FeeInfo` and emits an event indicating that the fee has been - /// updated. - /// - /// # Arguments - /// - /// * `origin` - The origin that is permitted to set the fee. It should be authorized by - /// `UpdateOrigin`. - /// * `fee_info` - The new fee information to be set for the pallet. - #[pallet::call_index(0)] - #[pallet::weight(T::WeightInfo::set_fee())] - pub fn set_fee(origin: OriginFor, fee_info: FeeInfoOf) -> DispatchResultWithPostInfo { - T::UpdateOrigin::ensure_origin(origin)?; - - // Update storage. - >::put(fee_info.clone()); - - // Emit an event. - Self::deposit_event(Event::FeeUpdated(fee_info)); - Ok(().into()) - } - } -} diff --git a/pallets/zksaas/src/mock.rs b/pallets/zksaas/src/mock.rs deleted file mode 100644 index e9cb486dd..000000000 --- a/pallets/zksaas/src/mock.rs +++ /dev/null @@ -1,149 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -#![cfg(test)] - -use super::*; -use crate as pallet_zksaas; -use frame_support::{ - construct_runtime, parameter_types, - traits::{ConstU128, ConstU32, ConstU64, Everything}, -}; -use frame_system::EnsureSignedBy; -use scale_info::TypeInfo; -use sp_core::H256; -use sp_keystore::{testing::MemoryKeystore, KeystoreExt, KeystorePtr}; -use sp_runtime::{testing::Header, traits::IdentityLookup, BuildStorage}; -use std::{sync::Arc, vec}; -use tangle_primitives::verifier::{ - arkworks::ArkworksVerifierGroth16Bn254, circom::CircomVerifierGroth16Bn254, -}; - -pub type AccountId = u64; -pub type Balance = u128; - -impl frame_system::Config for Runtime { - type RuntimeOrigin = RuntimeOrigin; - type Nonce = u64; - type RuntimeCall = RuntimeCall; - type Hash = H256; - type Hashing = ::sp_runtime::traits::BlakeTwo256; - type AccountId = AccountId; - type Block = Block; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type BlockWeights = (); - type BlockLength = (); - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type DbWeight = (); - type BaseCallFilter = Everything; - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type RuntimeTask = (); - type MaxConsumers = ConstU32<16>; -} - -impl pallet_balances::Config for Runtime { - type Balance = Balance; - type DustRemoval = (); - type RuntimeEvent = RuntimeEvent; - type ExistentialDeposit = ConstU128<1>; - type AccountStore = System; - type MaxLocks = (); - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = (); - type WeightInfo = (); - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = (); - type FreezeIdentifier = (); - type MaxFreezes = (); -} - -frame_support::ord_parameter_types! { - pub const One: AccountId = 1; -} - -parameter_types! { - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxParticipants: u32 = 10; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSubmissionLen: u32 = u32::MAX; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxKeyLen: u32 = u32::MAX; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxDataLen: u32 = u32::MAX; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSignatureLen: u32 = u32::MAX; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxProofLen: u32 = u32::MAX; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxAdditionalParamsLen: u32 = 256; -} - -impl Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = EnsureSignedBy; - type Verifier = (ArkworksVerifierGroth16Bn254, CircomVerifierGroth16Bn254); - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - -pub type Block = sp_runtime::generic::Block; -pub type UncheckedExtrinsic = sp_runtime::generic::UncheckedExtrinsic; - -construct_runtime!( - pub enum Runtime - { - System: frame_system, - Balances: pallet_balances, - ZKSaaS: pallet_zksaas, - } -); - -pub struct ExtBuilder; - -impl Default for ExtBuilder { - fn default() -> Self { - ExtBuilder - } -} - -// This function basically just builds a genesis storage key/value store according to -// our desired mockup. -pub fn new_test_ext() -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); - // We use default for brevity, but you can configure as desired if needed. - pallet_balances::GenesisConfig:: { balances: vec![(10, 100), (20, 100)] } - .assimilate_storage(&mut t) - .unwrap(); - let mut ext = sp_io::TestExternalities::new(t); - // set to block 1 to test events - ext.execute_with(|| System::set_block_number(1)); - ext.register_extension(KeystoreExt(Arc::new(MemoryKeystore::new()) as KeystorePtr)); - ext -} diff --git a/pallets/zksaas/src/tests.rs b/pallets/zksaas/src/tests.rs deleted file mode 100644 index 44f7a1ecc..000000000 --- a/pallets/zksaas/src/tests.rs +++ /dev/null @@ -1,315 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use crate::{mock::*, types::FeeInfo, FeeInfo as FeeInfoStorage}; -use ark_crypto_primitives::snark::{CircuitSpecificSetupSNARK, SNARK}; -use ark_groth16::Groth16; -use ark_relations::r1cs::{ConstraintSynthesizer, ConstraintSystem}; -use ark_serialize::CanonicalSerialize; -use ark_std::{ - rand::{Rng, RngCore, SeedableRng}, - test_rng, -}; -use frame_support::{assert_noop, assert_ok, error::BadOrigin}; -use tangle_primitives::{ - jobs::{ - ArkworksProofResult, CircomProofResult, Groth16ProveRequest, Groth16System, HyperData, - JobResult, JobType, JobWithResult, ZkSaaSPhaseOneJobType, ZkSaaSPhaseTwoJobType, - ZkSaaSPhaseTwoRequest, ZkSaaSProofResult, ZkSaaSSystem, - }, - roles::ZeroKnowledgeRoleType, - verifier::{self, from_field_elements}, -}; - -type E = ark_bn254::Bn254; -type F = ark_bn254::Fr; - -#[test] -fn set_fees_works() { - new_test_ext().execute_with(|| { - let new_fee = - FeeInfo { base_fee: 10, circuit_fee: 5, prove_fee: 5, storage_fee_per_byte: 1 }; - - // should fail for non update origin - assert_noop!(ZKSaaS::set_fee(RuntimeOrigin::signed(10), new_fee.clone()), BadOrigin); - - // Dispatch a signed extrinsic. - assert_ok!(ZKSaaS::set_fee(RuntimeOrigin::signed(1), new_fee.clone())); - - assert_eq!(FeeInfoStorage::::get(), new_fee); - }); -} - -#[test] -fn proof_verification_works() { - new_test_ext().execute_with(|| { - let new_fee = - FeeInfo { base_fee: 10, circuit_fee: 5, prove_fee: 5, storage_fee_per_byte: 1 }; - // Dispatch a signed extrinsic. - assert_ok!(ZKSaaS::set_fee(RuntimeOrigin::signed(1), new_fee.clone())); - - let mut rng = ark_std::rand::rngs::StdRng::seed_from_u64(test_rng().next_u64()); - - // Generate the MiMC round constants - let constants = (0..mimc::MIMC_ROUNDS).map(|_| rng.gen()).collect::>(); - - // Create parameters for our circuit - let (pk, vk) = { - let c = mimc::MiMCDemo:: { xl: None, xr: None, constants: &constants }; - Groth16::::setup(c, &mut rng).unwrap() - }; - - let mut pk_bytes = Vec::new(); - pk.serialize_compressed(&mut pk_bytes).unwrap(); - - let mut vk_bytes = Vec::new(); - vk.serialize_compressed(&mut vk_bytes).unwrap(); - - // Prepare the verification key (for proof verification) - let pvk = Groth16::::process_vk(&vk).unwrap(); - - // Generate a random preimage and compute the image - let xl = rng.gen(); - let xr = rng.gen(); - let image = mimc::mimc(xl, xr, &constants); - - // Create an instance of our circuit (with the - // witness) - let c = mimc::MiMCDemo { xl: Some(xl), xr: Some(xr), constants: &constants }; - let cs = ConstraintSystem::::new_ref(); - c.clone().generate_constraints(cs.clone()).unwrap(); - let num_inputs = cs.num_instance_variables(); - let num_constraints = cs.num_constraints(); - - // Create a groth16 proof with our parameters. - let proof = Groth16::::prove(&pk, c, &mut rng).unwrap(); - // Verifiy Locally - assert!(Groth16::::verify_with_processed_vk(&pvk, &[image], &proof).unwrap()); - - let mut proof_bytes = Vec::new(); - proof.serialize_compressed(&mut proof_bytes).unwrap(); - - // Phase1 - let zero_knowledge_role_type = ZeroKnowledgeRoleType::ZkSaaSGroth16; - let phase_one = JobType::< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >::ZkSaaSPhaseOne(ZkSaaSPhaseOneJobType { - role_type: zero_knowledge_role_type, - participants: vec![1, 2, 3, 4, 5, 6, 7, 8].try_into().unwrap(), - system: ZkSaaSSystem::Groth16(Groth16System { - circuit: HyperData::Raw(vec![].try_into().unwrap()), - num_inputs: num_inputs as _, - num_constraints: num_constraints as _, - proving_key: HyperData::Raw(pk_bytes.try_into().unwrap()), - verifying_key: vk_bytes.try_into().unwrap(), - wasm: HyperData::Raw(vec![].try_into().unwrap()), - }), - permitted_caller: None, - }); - - let phase_two = JobType::< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >::ZkSaaSPhaseTwo(ZkSaaSPhaseTwoJobType { - role_type: zero_knowledge_role_type, - phase_one_id: 0, - request: ZkSaaSPhaseTwoRequest::Groth16(Groth16ProveRequest { - public_input: from_field_elements(&[image]).unwrap().try_into().unwrap(), - a_shares: Default::default(), - ax_shares: Default::default(), - qap_shares: Default::default(), - }), - }); - - // Arkworks - let result = JobResult::ZkSaaSPhaseTwo(ZkSaaSProofResult::Arkworks(ArkworksProofResult { - proof: proof_bytes.try_into().unwrap(), - })); - - let data = JobWithResult::< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > { - job_type: phase_two.clone(), - phase_one_job_type: Some(phase_one.clone()), - result, - }; - - assert_ok!(ZKSaaS::verify(data)); - - // Circom - let circom_proof = verifier::circom::Proof::try_from(proof).unwrap(); - - let result = JobResult::ZkSaaSPhaseTwo(ZkSaaSProofResult::Circom(CircomProofResult { - proof: circom_proof.encode().unwrap().try_into().unwrap(), - })); - - let data = JobWithResult::< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > { - job_type: phase_two, - phase_one_job_type: Some(phase_one), - result, - }; - - assert_ok!(ZKSaaS::verify(data)); - }); -} - -/// Simple circuit for testing. -mod mimc { - use ark_ff::Field; - - // We'll use these interfaces to construct our circuit. - use ark_relations::{ - lc, ns, - r1cs::{ConstraintSynthesizer, ConstraintSystemRef, SynthesisError, Variable}, - }; - - pub const MIMC_ROUNDS: usize = 322; - - /// This is an implementation of MiMC, specifically a - /// variant named `LongsightF322p3` for BLS12-377. - /// See http://eprint.iacr.org/2016/492 for more - /// information about this construction. - /// - /// ``` - /// function LongsightF322p3(xL ⦂ Fp, xR ⦂ Fp) { - /// for i from 0 up to 321 { - /// xL, xR := xR + (xL + Ci)^3, xL - /// } - /// return xL - /// } - /// ``` - pub fn mimc(mut xl: F, mut xr: F, constants: &[F]) -> F { - assert_eq!(constants.len(), MIMC_ROUNDS); - - (0..MIMC_ROUNDS).for_each(|i| { - let mut tmp1 = xl; - tmp1.add_assign(&constants[i]); - let mut tmp2 = tmp1; - tmp2.square_in_place(); - tmp2.mul_assign(&tmp1); - tmp2.add_assign(&xr); - xr = xl; - xl = tmp2; - }); - - xl - } - - /// This is our demo circuit for proving knowledge of the - /// preimage of a MiMC hash invocation. - #[derive(Clone)] - pub struct MiMCDemo<'a, F: Field> { - pub xl: Option, - pub xr: Option, - pub constants: &'a [F], - } - - /// Our demo circuit implements this `Circuit` trait which - /// is used during paramgen and proving in order to - /// synthesize the constraint system. - impl<'a, F: Field> ConstraintSynthesizer for MiMCDemo<'a, F> { - fn generate_constraints(self, cs: ConstraintSystemRef) -> Result<(), SynthesisError> { - assert_eq!(self.constants.len(), MIMC_ROUNDS); - - // Allocate the first component of the preimage. - let mut xl_value = self.xl; - let mut xl = - cs.new_witness_variable(|| xl_value.ok_or(SynthesisError::AssignmentMissing))?; - - // Allocate the second component of the preimage. - let mut xr_value = self.xr; - let mut xr = - cs.new_witness_variable(|| xr_value.ok_or(SynthesisError::AssignmentMissing))?; - - for i in 0..MIMC_ROUNDS { - // xL, xR := xR + (xL + Ci)^3, xL - let ns = ns!(cs, "round"); - let cs = ns.cs(); - - // tmp = (xL + Ci)^2 - let tmp_value = xl_value.map(|mut e| { - e.add_assign(&self.constants[i]); - e.square_in_place(); - e - }); - let tmp = - cs.new_witness_variable(|| tmp_value.ok_or(SynthesisError::AssignmentMissing))?; - - cs.enforce_constraint( - lc!() + xl + (self.constants[i], Variable::One), - lc!() + xl + (self.constants[i], Variable::One), - lc!() + tmp, - )?; - - // new_xL = xR + (xL + Ci)^3 - // new_xL = xR + tmp * (xL + Ci) - // new_xL - xR = tmp * (xL + Ci) - let new_xl_value = xl_value.map(|mut e| { - e.add_assign(&self.constants[i]); - e.mul_assign(&tmp_value.unwrap()); - e.add_assign(&xr_value.unwrap()); - e - }); - - let new_xl = if i == (MIMC_ROUNDS - 1) { - // This is the last round, xL is our image and so - // we allocate a public input. - cs.new_input_variable(|| new_xl_value.ok_or(SynthesisError::AssignmentMissing))? - } else { - cs.new_witness_variable(|| { - new_xl_value.ok_or(SynthesisError::AssignmentMissing) - })? - }; - - cs.enforce_constraint( - lc!() + tmp, - lc!() + xl + (self.constants[i], Variable::One), - lc!() + new_xl - xr, - )?; - - // xR = xL - xr = xl; - xr_value = xl_value; - - // xL = new_xL - xl = new_xl; - xl_value = new_xl_value; - } - - Ok(()) - } - } -} diff --git a/pallets/zksaas/src/types.rs b/pallets/zksaas/src/types.rs deleted file mode 100644 index 547744874..000000000 --- a/pallets/zksaas/src/types.rs +++ /dev/null @@ -1,66 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . -use super::*; -use frame_support::traits::Currency; -use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use scale_info::TypeInfo; -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; -use sp_runtime::RuntimeDebug; - -pub type BalanceOf = - <::Currency as Currency<::AccountId>>::Balance; - -pub type FeeInfoOf = FeeInfo>; - -/// This struct represents the preset fee to charge for different DKG job types -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen, Default)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct FeeInfo { - /// The base fee for all jobs. - pub base_fee: Balance, - - /// The fee for handling the Circuit. - pub circuit_fee: Balance, - - /// The fee for Proof generation. - pub prove_fee: Balance, - - /// The storage fee per byte - pub storage_fee_per_byte: Balance, -} - -impl FeeInfo { - /// Get the base fee. - pub fn get_base_fee(self) -> Balance { - self.base_fee - } - - /// Get the circuit fee. - pub fn get_circuit_fee(self) -> Balance { - self.circuit_fee - } - - /// Get the proof generation fee. - pub fn get_prove_fee(self) -> Balance { - self.prove_fee - } - - /// Get the storage fee per byte - pub fn get_storage_fee_per_byte(self) -> Balance { - self.storage_fee_per_byte - } -} diff --git a/pallets/zksaas/src/weights.rs b/pallets/zksaas/src/weights.rs deleted file mode 100644 index 37c381ce6..000000000 --- a/pallets/zksaas/src/weights.rs +++ /dev/null @@ -1,55 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -//! Autogenerated weights for pallet_dkg -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 -//! DATE: 2021-08-16, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 - -// Executed Command: -// target/release/tangle -// benchmark -// --chain=dev -// --steps=50 -// --repeat=20 -// --pallet=pallet_dkg -// --extrinsic=* -// --execution=wasm -// --wasm-execution=compiled -// --heap-pages=4096 - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(clippy::unnecessary_cast)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_dkg. -pub trait WeightInfo { - fn set_fee() -> Weight; -} - -// For backwards compatibility and tests -impl WeightInfo for () { - fn set_fee() -> Weight { - Weight::from_parts(32_778_000, 0) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/precompiles/README.md b/precompiles/README.md new file mode 100644 index 000000000..952402bab --- /dev/null +++ b/precompiles/README.md @@ -0,0 +1,62 @@ +## Tangle Precompiles + +Following are the precompiles supported by Tangle network + + +## Precompiled Contract Addresses +- 0-1023 - Ethereum MainNet precompiles +- 1024-2047 - precompiles that are not in Ethereum and not Tangle specific +- 2048-4095 - Tangle specific precompiles + +### Ethereum MainNet Precompiles + +| Contract | Address | +|----------------------------|----------------------------------------------| +| ECRECOVER | 0x0000000000000000000000000000000000000001 | +| SHA256 | 0x0000000000000000000000000000000000000002 | +| RIPEMD160 | 0x0000000000000000000000000000000000000003 | +| Identity | 0x0000000000000000000000000000000000000004 | +| Modular Exponentiation | 0x0000000000000000000000000000000000000005 | +| BN128Add | 0x0000000000000000000000000000000000000006 | +| BN128Mul | 0x0000000000000000000000000000000000000007 | +| BN128Pairing | 0x0000000000000000000000000000000000000008 | +| Blake2 | 0x0000000000000000000000000000000000000009 | + + +### Non-Tangle Specific nor Ethereum Precompiles + +| Contract | Address | +|----------------------|----------------------------------------------| +| SHA3FIPS256 | 0x0000000000000000000000000000000000000400 | +| ECRecoverPublicKey | 0x0000000000000000000000000000000000000402 | + + +### Tangle Specific Precompiles + +| Contract | Address | +|----------------------|----------------------------------------------| +| Staking | 0x0000000000000000000000000000000000000800 | +| Vesting | 0x0000000000000000000000000000000000000801 | +| Erc-20 Balances | 0x0000000000000000000000000000000000000802 | +| Democracy | 0x0000000000000000000000000000000000000803 | +| Batch | 0x0000000000000000000000000000000000000804 | +| Call Permit | 0x0000000000000000000000000000000000000805 | +| Preimage | 0x0000000000000000000000000000000000000806 | +| Registry | 0x0000000000000000000000000000000000000807 | +| Ecdsa-Secp256k1 | 0x0000000000000000000000000000000000000816 | +| Ecdsa-Secp256r1 | 0x0000000000000000000000000000000000000817 | +| Ecdsa-Stark | 0x0000000000000000000000000000000000000818 | +| Schnorr-Sr25519 | 0x0000000000000000000000000000000000000819 | +| Schnorr-Secp256k | 0x000000000000000000000000000000000000081a | +| Schnorr-Ed25519 | 0x000000000000000000000000000000000000081b | +| Schnorr-Ed448 | 0x000000000000000000000000000000000000081c | +| Schnorr-P256 | 0x000000000000000000000000000000000000081d | +| Schnorr-P384 | 0x000000000000000000000000000000000000081e | +| Schnorr-Ristretto255 | 0x000000000000000000000000000000000000081f | +| Schnorr-Taproot | 0x0000000000000000000000000000000000000820 | +| Bls12-381 | 0x0000000000000000000000000000000000000821 | + + + + + diff --git a/precompiles/batch/src/tests.rs b/precompiles/batch/src/tests.rs index a38b0d97a..1ae65ea68 100644 --- a/precompiles/batch/src/tests.rs +++ b/precompiles/batch/src/tests.rs @@ -43,7 +43,7 @@ fn evm_call(from: impl Into, input: Vec) -> EvmCall { target: Batch.into(), input, value: U256::zero(), // No value sent in EVM - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: 0.into(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce diff --git a/precompiles/jobs/Cargo.toml b/precompiles/jobs/Cargo.toml deleted file mode 100644 index f9ff9ec81..000000000 --- a/precompiles/jobs/Cargo.toml +++ /dev/null @@ -1,95 +0,0 @@ -[package] -name = "pallet-evm-precompile-jobs" -version = "0.1.0" -authors = { workspace = true } -edition = "2021" -description = "A Precompile to make pallet-jobs calls encoding accessible to pallet-evm" - -[dependencies] -log = { workspace = true } -num_enum = { workspace = true } -rustc-hex = { workspace = true } - -# Moonbeam -precompile-utils = { workspace = true } - -# Substrate -frame-support = { workspace = true } -frame-system = { workspace = true } -pallet-jobs = { workspace = true } -parity-scale-codec = { workspace = true, features = ["derive"] } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -tangle-primitives = { workspace = true } - -# Frontier -fp-evm = { workspace = true } -pallet-evm = { workspace = true, features = ["forbid-evm-reentrancy"] } - -[dev-dependencies] -derive_more = { workspace = true } -hex-literal = { workspace = true } -serde = { workspace = true } -sha3 = { workspace = true } - -# Moonbeam -precompile-utils = { workspace = true, features = ["std", "testing"] } - -# Substrate -ethereum = { workspace = true, features = ["with-codec"] } -ethers = "2.0" -hex = { workspace = true } -libsecp256k1 = { workspace = true } -pallet-balances = { workspace = true, features = ["std"] } -pallet-timestamp = { workspace = true, features = ["std"] } -scale-info = { workspace = true, features = ["derive", "std"] } -serde_json = { workspace = true } -smallvec = { workspace = true } -sp-io = { workspace = true } -sp-keystore = { workspace = true } - -# Frontier Primitive -fp-account = { workspace = true } -fp-consensus = { workspace = true } -fp-dynamic-fee = { workspace = true } -fp-ethereum = { workspace = true } -fp-evm = { workspace = true } -fp-rpc = { workspace = true } -fp-self-contained = { workspace = true } -fp-storage = { workspace = true } - -# Frontier FRAME -pallet-base-fee = { workspace = true } -pallet-dynamic-fee = { workspace = true } -pallet-ethereum = { workspace = true } -pallet-evm = { workspace = true } -pallet-evm-chain-id = { workspace = true } - -[features] -default = ["std"] -std = [ - "scale-info/std", - "sp-runtime/std", - "frame-support/std", - "frame-system/std", - "sp-core/std", - "sp-std/std", - "tangle-primitives/std", - "pallet-balances/std", - "pallet-timestamp/std", - "fp-account/std", - "fp-consensus/std", - "fp-dynamic-fee/std", - "fp-ethereum/std", - "fp-evm/std", - "fp-rpc/std", - "fp-self-contained/std", - "fp-storage/std", - "pallet-base-fee/std", - "pallet-dynamic-fee/std", - "pallet-ethereum/std", - "pallet-evm/std", - "pallet-evm-chain-id/std", - "pallet-jobs/std", -] diff --git a/precompiles/jobs/Jobs.sol b/precompiles/jobs/Jobs.sol deleted file mode 100644 index d406ddc44..000000000 --- a/precompiles/jobs/Jobs.sol +++ /dev/null @@ -1,85 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -/// @dev The Jobs contract's address. -address constant JOBS_ADDRESS = 0x0000000000000000000000000000000000000814; - -/// @dev The Jobs contract's instance. -Jobs constant JOBS_CONTRACT = Jobs(JOBS_ADDRESS); - -/// @author Webb Inc -/// @title Pallet Jobs Interface -/// @title The interface through which solidity contracts will interact with the jobs pallet -/// @custom:address 0x0000000000000000000000000000000000000814 -interface Jobs { - - /// Submit a DKG phase one job - /// @custom:selector - /// - /// @notice Submits a job for the first phase of the Distributed Key Generation (DKG) process. - /// - /// @param expiry The expiration timestamp for the submitted job. - /// @param ttl The time-to-live for the submitted job. - /// @param participants An array of Ethereum addresses representing participants in the DKG. - /// @param threshold The minimum number of participants required for the DKG to succeed. - /// @param roleType The role type identifier. - /// @param permittedCaller The Ethereum address of the permitted caller initiating the job submission. - /// @param hdWallet A boolean indicating whether the job is for an HD wallet. - /// - /// @dev This function initiates the first phase of a DKG process, allowing participants to collaborate - /// in generating cryptographic keys. The submitted job includes information such as the expiration time, - /// the list of participants, the threshold for successful completion, and the permitted caller's address. - /// It is crucial for the caller to ensure that the specified parameters align with the intended DKG process. - /// - function submitDkgPhaseOneJob( - uint64 expiry, - uint64 ttl, - address[] memory participants, - uint8 threshold, - uint16 roleType, - address permittedCaller, - bool hdWallet - ) external; - - /// @custom:selector - /// - /// @notice Submits a job for the second phase of the Distributed Key Generation (DKG) process. - /// - /// @param expiry The expiration timestamp for the submitted job. - /// @param ttl The time-to-live for the submitted job. - /// @param phaseOneId The identifier of the corresponding phase one DKG job. - /// @param submission The byte array containing the data submission for the DKG phase two. - /// @param derivationPath The byte array containing the derivation path for the DKG phase two. - /// - /// @dev This function initiates the second phase of a Distributed Key Generation process, building upon - /// the results of a prior phase one submission. The submitted job includes an expiration time, the identifier - /// of the phase one DKG job, and the byte array representing the participant's data contribution for phase two. - /// It is important for the caller to ensure that the provided parameters align with the ongoing DKG process. - /// - function submitDkgPhaseTwoJob( - uint64 expiry, - uint64 ttl, - uint64 phaseOneId, - bytes memory submission, - bytes memory derivationPath - ) external; - - /// @custom:selector - /// - /// @notice Sets a new permitted caller for a specific job type identified by the given key and job ID. - /// - /// @param roleType An identifier specifying the role type to update the permitted caller for. - /// @param jobId The unique identifier of the job for which the permitted caller is being updated. - /// @param newPermittedCaller The Ethereum address of the new permitted caller. - /// - /// @dev This function provides flexibility in managing permitted callers for different job types. - /// The caller can specify the job key, job ID, and the new Ethereum address that will be granted permission - /// to initiate the specified job. It is important for the caller to ensure that the provided parameters - /// align with the ongoing processes and permissions within the contract. - /// - function setPermittedCaller( - uint16 roleType, - uint32 jobId, - address newPermittedCaller - ) external; -} diff --git a/precompiles/jobs/examples/charge_fee_signing_rule.sol b/precompiles/jobs/examples/charge_fee_signing_rule.sol deleted file mode 100644 index 05adea0b7..000000000 --- a/precompiles/jobs/examples/charge_fee_signing_rule.sol +++ /dev/null @@ -1,42 +0,0 @@ -// Example contract to allow anyone to use existing saved DKG keys to sign inputs by paying a fee -// -- This is an example contract that has not been audited, do not use in production --- -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -// Import the Jobs interface -import "../Jobs.sol"; - -/// @title JobsWithFeeContract -/// @dev A contract that allows submitting a job after charging a fee. -contract JobsWithFeeContract { - // Fee amount required to submit a job - uint256 public jobSubmissionFee; - - // address to get fee - address payable feeRecipient; - - /// @dev Constructor to set the initial job submission fee. - constructor(uint256 _jobSubmissionFee, address payable _feeRecipient) { - jobSubmissionFee = _jobSubmissionFee; - feeRecipient = _feeRecipient; - } - - /// @dev Modifier to check if the caller has paid the required fee. - modifier requireFee() { - require(msg.value >= jobSubmissionFee, "Insufficient fee"); - _; - } - - /// @dev Submit a job after charging the required fee. - function submitJob( - uint64 expiry, - uint32 phase_one_id, - bytes memory submission - ) external payable requireFee { - // Forward the fee to the designated wallet - feeRecipient.transfer(msg.value); - - // Call the submitDkgPhaseOneJob function from the Jobs contract - JOBS_CONTRACT.submitDkgPhaseTwoJob(expiry, phase_one_id, submission); - } -} diff --git a/precompiles/jobs/examples/public_signing_rule.sol b/precompiles/jobs/examples/public_signing_rule.sol deleted file mode 100644 index edf97a1b3..000000000 --- a/precompiles/jobs/examples/public_signing_rule.sol +++ /dev/null @@ -1,21 +0,0 @@ -// Example contract to allow anyone to use existing saved DKG keys to sign inputs -// -- This is an example contract that has not been audited, do not use in production --- -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -// Import the Jobs interface -import "../Jobs.sol"; - -/// @title JobsCallerContract -/// @dev A contract that interacts with the Jobs contract and checks for whitelisted callers before submitting a job. -contract JobsCallerContract { - /// @dev Submit a data to be signed by dkg - function signWithDkg( - uint64 expiry, - uint32 phase_one_id, - bytes memory submission - ) external { - // Call the submitDkgPhaseTwoJob function from the Jobs contract - JOBS_CONTRACT.submitDkgPhaseTwoJob(expiry, phase_one_id, submission); - } -} diff --git a/precompiles/jobs/examples/whitelist_callers_signing_rule.sol b/precompiles/jobs/examples/whitelist_callers_signing_rule.sol deleted file mode 100644 index 117e9ace6..000000000 --- a/precompiles/jobs/examples/whitelist_callers_signing_rule.sol +++ /dev/null @@ -1,48 +0,0 @@ -// Example contract to allow only whitelisted callers to use existing saved DKG keys to sign inputs -// -- This is an example contract that has not been audited, do not use in production --- -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -// Import the Jobs interface -import "../Jobs.sol"; - -/// @title JobsCallerContract -/// @dev A contract that interacts with the Jobs contract and checks for whitelisted callers before submitting a job. -contract JobsCallerContract { - // Mapping to store whitelisted callers - mapping(address => bool) public whitelistedCallers; - - /// @dev Add an address to the whitelist. - function addToWhitelist(address caller) external { - whitelistedCallers[caller] = true; - } - - /// @dev Remove an address from the whitelist. - function removeFromWhitelist(address caller) external { - whitelistedCallers[caller] = false; - } - - /// @dev Check if an address is whitelisted. - function isCallerWhitelisted(address caller) external view returns (bool) { - return whitelistedCallers[caller]; - } - - // Modifier to check if the caller is whitelisted - modifier onlyWhitelisted() { - require( - this.isCallerWhitelisted(msg.sender), - "Caller is not whitelisted" - ); - _; - } - - /// @dev Submit a data to be signed by dkg - function signWithDkg( - uint64 expiry, - uint32 phase_one_id, - bytes memory submission - ) external onlyWhitelisted { - // Call the submitDkgPhaseTwoJob function from the Jobs contract - JOBS_CONTRACT.submitDkgPhaseTwoJob(expiry, phase_one_id, submission); - } -} diff --git a/precompiles/jobs/src/lib.rs b/precompiles/jobs/src/lib.rs deleted file mode 100644 index c971a17d3..000000000 --- a/precompiles/jobs/src/lib.rs +++ /dev/null @@ -1,289 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// This file is part of pallet-evm-precompile-preimage package, originally developed by Purestake -// Inc. Pallet-evm-precompile-preimage package used in Tangle Network in terms of GPLv3. - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -#![cfg_attr(not(feature = "std"), no_std)] -#![allow(clippy::too_many_arguments)] - -use fp_evm::{ExitRevert, PrecompileFailure, PrecompileHandle}; -use frame_support::{ - dispatch::{GetDispatchInfo, PostDispatchInfo}, - traits::ConstU32, -}; -use frame_system::pallet_prelude::BlockNumberFor; -use pallet_evm::AddressMapping; -use pallet_jobs::Call as JobsCall; -use precompile_utils::{prelude::*, solidity::revert::revert_as_bytes}; -use sp_core::H256; -use sp_runtime::traits::Dispatchable; -use sp_std::{marker::PhantomData, vec::Vec}; -use tangle_primitives::{ - jobs::{ - DKGTSSPhaseOneJobType, DKGTSSPhaseTwoJobType, FallbackOptions, JobId, JobSubmission, - JobType, - }, - roles::{RoleType, ThresholdSignatureRoleType}, - types::BlockNumber, -}; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -pub const JOB_SUBMISSION_SIZE_LIMIT: u32 = 2u32.pow(16); -pub const DERIVATION_PATH_SIZE_LIMIT: u32 = 2u32.pow(16); -type GetJobSubmissionSizeLimit = ConstU32; -type GetDerivationPathSizeLimit = ConstU32; - -/// A precompile to wrap the functionality from pallet-preimage. -pub struct JobsPrecompile(PhantomData); - -#[precompile_utils::precompile] -impl JobsPrecompile -where - Runtime: pallet_jobs::Config + pallet_evm::Config + frame_system::Config, - ::Hash: TryFrom + Into, - ::RuntimeCall: - Dispatchable + GetDispatchInfo, - <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, - ::Hash: Into, - ::RuntimeCall: From>, - BlockNumberFor: From, -{ - /// Submits a job for Distributed Key Generation (DKG) phase one. - /// - /// # Parameters - /// - /// - `handle`: A mutable reference to the `PrecompileHandle` implementation. - /// - `expiry`: The expiration period for the submitted job - /// - `ttl`: The time-to-live period for the submitted job - /// - `participants`: A vector containing Ethereum addresses of the participants in the DKG. - /// - `threshold`: The threshold number of participants required for the DKG to succeed (u8). - /// - `permitted_caller`: The Ethereum address of the permitted caller. - /// - `hd_wallet`: specifies whether hd derivation is enabled.. - /// - /// # Returns - /// - /// Returns an `EvmResult`, indicating the success or failure of the operation. - #[precompile::public("submitDkgPhaseOneJob(uint64,uint64,address[],uint8,uint16,address,bool)")] - #[precompile::public( - "submit_dkg_phase_one_job(uint64,uint64,address[],uint8,uint16,address,bool)" - )] - fn submit_dkg_phase_one_job( - handle: &mut impl PrecompileHandle, - expiry: BlockNumber, - ttl: BlockNumber, - participants: Vec
, - threshold: u8, - role_type: u16, - permitted_caller: Address, - hd_wallet: bool, - ) -> EvmResult { - // Convert Ethereum address to Substrate account ID - let permitted_caller = Runtime::AddressMapping::into_account_id(permitted_caller.0); - - // Convert Ethereum addresses of participants to Substrate account IDs - let participants = participants - .iter() - .map(|x| Runtime::AddressMapping::into_account_id(x.0)) - .collect::>() - .try_into() - .unwrap(); - - // Convert (u16) role type to RoleType - let role_type = Self::convert_role_type(role_type); - - // Check if job key is valid, otherwise return an error - if role_type.is_none() { - return Err(PrecompileFailure::Revert { - exit_status: ExitRevert::Reverted, - output: revert_as_bytes("Invalid role type!"), - }); - } - - let threshold_signature_role = match role_type { - Some(RoleType::Tss(role)) => role, - _ => { - return Err(PrecompileFailure::Revert { - exit_status: ExitRevert::Reverted, - output: revert_as_bytes("Invalid role type!"), - }) - }, - }; - - // Create DKG job type with the provided parameters - let job_type = DKGTSSPhaseOneJobType { - role_type: threshold_signature_role, - participants, - threshold, - permitted_caller: Some(permitted_caller), - hd_wallet, - }; - - // Convert expiration period to Substrate block number - let expiry_block: BlockNumberFor = expiry.into(); - let ttl_block: BlockNumberFor = ttl.into(); - - // Create job submission object - let job = JobSubmission { - expiry: expiry_block, - ttl: ttl_block, - job_type: JobType::DKGTSSPhaseOne(job_type), - fallback: FallbackOptions::Destroy, - }; - - // Convert caller's Ethereum address to Substrate account ID - let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); - - // Create the call to the Jobs module's submit_job function - let call = JobsCall::::submit_job { job }; - - // Dispatch the call using the RuntimeHelper - >::try_dispatch(handle, Some(origin).into(), call)?; - - Ok(()) - } - - /// Submits a job for Distributed Key Generation (DKG) phase two, including the signature - /// submission. - /// - /// # Parameters - /// - /// - `handle`: A mutable reference to the `PrecompileHandle` implementation. - /// - `expiry`: The expiration period for the submitted job - /// - `ttl`: The time-to-live period for the submitted job - /// - `phase_one_id`: The identifier of the corresponding phase one DKG job (u32). - /// - `submission`: The signature submission for the DKG phase two, represented as - /// `BoundedBytes`. - /// - /// # Returns - /// - /// Returns an `EvmResult`, indicating the success or failure of the operation. - #[precompile::public("submitDkgPhaseTwoJob(uint64,uint64,uint64,bytes,bytes)")] - #[precompile::public("submit_dkg_phase_two_job(uint64,uint64,uint64,bytes,bytes)")] - fn submit_dkg_phase_two_job( - handle: &mut impl PrecompileHandle, - expiry: BlockNumber, - ttl: BlockNumber, - phase_one_id: JobId, - submission: BoundedBytes, - derivation_path: BoundedBytes, - ) -> EvmResult { - // Convert BoundedBytes to Vec - let submission: Vec = submission.into(); - - let derivation_path: Vec = derivation_path.into(); - - // Convert caller's Ethereum address to Substrate account ID - let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); - - // Convert expiration period to Substrate block number - let expiry_block: BlockNumberFor = expiry.into(); - let ttl_block: BlockNumberFor = ttl.into(); - - // Create DKG signature job type with the provided parameters - - let threshold_signature_role = ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1; - - // Construct the phase 2 job type. - let job_type = DKGTSSPhaseTwoJobType { - role_type: threshold_signature_role, - phase_one_id, - submission: submission.try_into().unwrap(), - derivation_path: if derivation_path.is_empty() { - None - } else { - Some(derivation_path.try_into().unwrap()) - }, - }; - - // Create job submission object - let job = JobSubmission { - expiry: expiry_block, - ttl: ttl_block, - job_type: JobType::DKGTSSPhaseTwo(job_type), - fallback: FallbackOptions::Destroy, - }; - - // Create the call to the Jobs module's submit_job function - let call = JobsCall::::submit_job { job }; - - // Dispatch the call using the RuntimeHelper - RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - - Ok(()) - } - - /// Sets a new permitted caller for a specific job type identified by the given key and job ID. - /// - /// # Parameters - /// - /// - `handle`: A mutable reference to the `PrecompileHandle` implementation. - /// - `role_type`: An identifier specifying the role of the job to update the permitted caller - /// for (u16) - first byte is the top-level role (TSS, ZkSaaS, etc.), second byte is the - /// sub-role. - /// - `job_id`: The unique identifier of the job for which the permitted caller is being updated - /// (u32). - /// - `new_permitted_caller`: The Ethereum address of the new permitted caller. - /// - /// # Returns - /// - /// Returns an `EvmResult`, indicating the success or failure of the operation. - #[precompile::public("setPermittedCaller(uint16,uint64,address)")] - #[precompile::public("set_permitted_caller(uint16,uint64,address)")] - fn set_permitted_caller( - handle: &mut impl PrecompileHandle, - role_type: u16, - job_id: JobId, - new_permitted_caller: Address, - ) -> EvmResult { - // Convert (u16) role_type to RoleType - let role_type = Self::convert_role_type(role_type); - - // Check if role type is valid, otherwise return an error - if role_type.is_none() { - return Err(PrecompileFailure::Revert { - exit_status: ExitRevert::Reverted, - output: revert_as_bytes("Invalid role type!"), - }); - } - - // Convert Ethereum address to Substrate account ID - let new_permitted_caller = Runtime::AddressMapping::into_account_id(new_permitted_caller.0); - - // Convert caller's Ethereum address to Substrate account ID - let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); - - // Create the call to the Jobs module's set_permitted_caller function - let call = JobsCall::::set_permitted_caller { - role_type: role_type.unwrap(), - job_id, - new_permitted_caller, - }; - - // Dispatch the call using the RuntimeHelper - >::try_dispatch(handle, Some(origin).into(), call)?; - - Ok(()) - } - - fn convert_role_type(role_type: u16) -> Option { - role_type.try_into().ok() - } -} diff --git a/precompiles/jobs/src/mock.rs b/precompiles/jobs/src/mock.rs deleted file mode 100644 index fb45d38c1..000000000 --- a/precompiles/jobs/src/mock.rs +++ /dev/null @@ -1,392 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Test utilities -use super::*; -use frame_support::{ - construct_runtime, parameter_types, traits::Everything, weights::Weight, PalletId, -}; -use frame_system::EnsureSigned; -use pallet_evm::{EnsureAddressNever, EnsureAddressRoot}; -use precompile_utils::{precompile_set::*, testing::MockAccount}; -use scale_info::TypeInfo; -use sp_core::{H256, U256}; -use sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, DispatchResult, Perbill, -}; -use tangle_primitives::{ - jobs::{ - traits::{JobToFee, MPCHandler}, - *, - }, - misbehavior::{MisbehaviorHandler, MisbehaviorSubmission}, - roles::traits::RolesHandler, -}; - -pub type AccountId = MockAccount; -pub type Balance = u128; -pub type BlockNumber = u64; -type Block = frame_system::mocking::MockBlock; - -construct_runtime!( - pub enum Runtime - { - System: frame_system, - Balances: pallet_balances, - Evm: pallet_evm, - Timestamp: pallet_timestamp, - Jobs: pallet_jobs, - } -); - -parameter_types! { - pub const BlockHashCount: u32 = 250; - pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 1); - pub const MaximumBlockLength: u32 = 2 * 1024; - pub const AvailableBlockRatio: Perbill = Perbill::one(); - pub const SS58Prefix: u8 = 42; -} - -impl frame_system::Config for Runtime { - type BaseCallFilter = Everything; - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type Nonce = u64; - type Block = Block; - type RuntimeCall = RuntimeCall; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = AccountId; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = BlockHashCount; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type BlockWeights = (); - type BlockLength = (); - type SS58Prefix = SS58Prefix; - type OnSetCode = (); - type RuntimeTask = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; -} -parameter_types! { - pub const ExistentialDeposit: u128 = 1; -} -impl pallet_balances::Config for Runtime { - type MaxReserves = (); - type ReserveIdentifier = [u8; 4]; - type MaxLocks = (); - type Balance = Balance; - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type WeightInfo = (); - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = (); - type FreezeIdentifier = (); - type MaxFreezes = (); -} - -const MAX_POV_SIZE: u64 = 5 * 1024 * 1024; - -parameter_types! { - pub BlockGasLimit: U256 = U256::from(u64::MAX); - pub PrecompilesValue: Precompiles = Precompiles::new(); - pub const WeightPerGas: Weight = Weight::from_parts(1, 0); - pub GasLimitPovSizeRatio: u64 = { - let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64(); - block_gas_limit.saturating_div(MAX_POV_SIZE) - }; -} - -pub type Precompiles = - PrecompileSetBuilder, JobsPrecompile>,)>; - -pub type PCall = JobsPrecompileCall; - -parameter_types! { - pub SuicideQuickClearLimit: u32 = 0; -} - -impl pallet_evm::Config for Runtime { - type FeeCalculator = (); - type GasWeightMapping = pallet_evm::FixedGasWeightMapping; - type WeightPerGas = WeightPerGas; - type CallOrigin = EnsureAddressRoot; - type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = AccountId; - type Currency = Balances; - type RuntimeEvent = RuntimeEvent; - type Runner = pallet_evm::runner::stack::Runner; - type PrecompilesType = Precompiles; - type PrecompilesValue = PrecompilesValue; - type ChainId = (); - type OnChargeTransaction = (); - type BlockGasLimit = BlockGasLimit; - type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; - type FindAuthor = (); - type OnCreate = (); - type SuicideQuickClearLimit = SuicideQuickClearLimit; - type GasLimitPovSizeRatio = GasLimitPovSizeRatio; - type Timestamp = Timestamp; - type WeightInfo = pallet_evm::weights::SubstrateWeight; -} - -parameter_types! { - pub const MinimumPeriod: u64 = 5; -} -impl pallet_timestamp::Config for Runtime { - type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; - type WeightInfo = (); -} - -pub struct MockDKGPallet; -impl MockDKGPallet { - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - if job.job_type.is_phase_one() { - job.job_type.clone().get_participants().unwrap().len().try_into().unwrap() - } else { - 20 - } - } -} - -pub struct MockZkSaasPallet; -impl MockZkSaasPallet { - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - if job.job_type.is_phase_one() { - 10 - } else { - 20 - } - } -} - -pub struct MockJobToFeeHandler; - -impl JobToFee - for MockJobToFeeHandler -{ - type Balance = Balance; - - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - match job.job_type { - JobType::DKGTSSPhaseOne(_) - | JobType::DKGTSSPhaseTwo(_) - | JobType::DKGTSSPhaseThree(_) - | JobType::DKGTSSPhaseFour(_) => MockDKGPallet::job_to_fee(job), - JobType::ZkSaaSPhaseOne(_) | JobType::ZkSaaSPhaseTwo(_) => { - MockZkSaasPallet::job_to_fee(job) - }, - } - } - - fn calculate_result_extension_fee(_result: Vec, _extension_time: BlockNumber) -> Balance { - Default::default() - } -} - -pub struct MockRolesHandler; - -impl RolesHandler for MockRolesHandler { - type Balance = Balance; - fn is_restaker_with_role(address: AccountId, _role_type: RoleType) -> bool { - let validators = [ - AccountId::from_u64(1u64), - AccountId::from_u64(2u64), - AccountId::from_u64(3u64), - AccountId::from_u64(4u64), - AccountId::from_u64(5u64), - ]; - validators.contains(&address) - } - - fn is_restaker(address: AccountId) -> bool { - let validators = [ - AccountId::from_u64(1u64), - AccountId::from_u64(2u64), - AccountId::from_u64(3u64), - AccountId::from_u64(4u64), - AccountId::from_u64(5u64), - ]; - validators.contains(&address) - } - - fn get_validator_role_key(_address: AccountId) -> Option> { - None - } - - fn report_offence(_offence_report: ReportRestakerOffence) -> DispatchResult { - Ok(()) - } - - fn record_job_by_validators(_validators: Vec) -> DispatchResult { - Ok(()) - } - - fn get_max_active_service_for_restaker(_restaker: AccountId) -> Option { - None - } -} - -pub struct MockMPCHandler; - -impl - MPCHandler< - AccountId, - BlockNumber, - Balance, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > for MockMPCHandler -{ - fn verify( - _data: JobWithResult< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - ) -> DispatchResult { - Ok(()) - } - - fn verify_validator_report( - _validator: AccountId, - _offence: ValidatorOffenceType, - _signatures: Vec>, - ) -> DispatchResult { - Ok(()) - } - - fn validate_authority_key(_validator: AccountId, _authority_key: Vec) -> DispatchResult { - Ok(()) - } -} - -pub struct MockMisbehaviorHandler; - -impl MisbehaviorHandler for MockMisbehaviorHandler { - fn verify(_data: MisbehaviorSubmission) -> DispatchResult { - Ok(()) - } -} - -parameter_types! { - pub const JobsPalletId: PalletId = PalletId(*b"py/jobss"); - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxParticipants: u32 = 10; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSubmissionLen: u32 = 32; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxKeyLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxDataLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxSignatureLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxProofLen: u32 = 256; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxActiveJobsPerValidator: u32 = 100; - #[derive(Clone, Debug, Eq, PartialEq, TypeInfo)] - pub const MaxAdditionalParamsLen: u32 = 256; -} - -impl pallet_jobs::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ForceOrigin = EnsureSigned; - type Currency = Balances; - type JobToFee = MockJobToFeeHandler; - type RolesHandler = MockRolesHandler; - type MPCHandler = MockMPCHandler; - type MisbehaviorHandler = MockMisbehaviorHandler; - type PalletId = JobsPalletId; - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - -#[derive(Default)] -pub(crate) struct ExtBuilder { - // endowed accounts with balances - balances: Vec<(AccountId, Balance)>, -} - -impl ExtBuilder { - pub(crate) fn with_balances(mut self, balances: Vec<(AccountId, Balance)>) -> Self { - self.balances = balances; - self - } - - pub(crate) fn build(self) -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default() - .build_storage() - .expect("Frame system builds valid default genesis config"); - - pallet_balances::GenesisConfig:: { balances: self.balances } - .assimilate_storage(&mut t) - .expect("Pallet balances storage can be assimilated"); - - let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(1)); - ext - } -} diff --git a/precompiles/jobs/src/tests.rs b/precompiles/jobs/src/tests.rs deleted file mode 100644 index e9a41109c..000000000 --- a/precompiles/jobs/src/tests.rs +++ /dev/null @@ -1,64 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -use crate::{mock::*, *}; -use precompile_utils::testing::*; -use tangle_primitives::roles::ThresholdSignatureRoleType; - -fn precompiles() -> Precompiles { - PrecompilesValue::get() -} - -#[test] -fn submit_dkg_phase_one_job() { - ExtBuilder::default() - .with_balances(vec![(Alice.into(), 40)]) - .build() - .execute_with(|| { - let _ = precompiles().prepare_test( - Address(CryptoAlith.into()), - Precompile1, - PCall::submit_dkg_phase_one_job { - role_type: RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1) - .into(), - expiry: 5, - ttl: 200, - participants: vec![], - threshold: 2, - permitted_caller: Address(CryptoAlith.into()), - hd_wallet: false, - }, - ); - }) -} - -#[test] -fn submit_dkg_phase_two_job() { - ExtBuilder::default() - .with_balances(vec![(Alice.into(), 40)]) - .build() - .execute_with(|| { - let _ = precompiles().prepare_test( - Address(CryptoAlith.into()), - Precompile1, - PCall::submit_dkg_phase_two_job { - expiry: 5, - ttl: 0, - phase_one_id: 1, - submission: vec![].into(), - derivation_path: vec![].into(), - }, - ); - }) -} diff --git a/precompiles/pallet-democracy/src/tests.rs b/precompiles/pallet-democracy/src/tests.rs index 9beb6a446..bdf4baf32 100644 --- a/precompiles/pallet-democracy/src/tests.rs +++ b/precompiles/pallet-democracy/src/tests.rs @@ -51,7 +51,7 @@ fn evm_call(input: Vec) -> EvmCall { target: Precompile1.into(), input, value: U256::zero(), // No value sent in EVM - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: 0.into(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce @@ -992,7 +992,7 @@ fn note_preimage_works() { target: Precompile1.into(), input, value: U256::zero(), // No value sent in EVM - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: U256::zero(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce @@ -1065,7 +1065,7 @@ fn note_preimage_works_with_real_data() { target: Precompile1.into(), input, value: U256::zero(), // No value sent in EVM - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: U256::zero(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce @@ -1130,7 +1130,7 @@ fn cannot_note_duplicate_preimage() { target: Precompile1.into(), input: input.clone(), value: U256::zero(), // No value sent in EVM - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: U256::zero(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce @@ -1144,7 +1144,7 @@ fn cannot_note_duplicate_preimage() { target: Precompile1.into(), input, value: U256::zero(), // No value sent in EVM - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: U256::zero(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce @@ -1184,7 +1184,7 @@ fn cannot_note_imminent_preimage_before_it_is_actually_imminent() { target: Precompile1.into(), input, value: U256::zero(), // No value sent in EVM - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: 0.into(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce diff --git a/precompiles/preimage/src/tests.rs b/precompiles/preimage/src/tests.rs index b345acb1b..79a9510d2 100644 --- a/precompiles/preimage/src/tests.rs +++ b/precompiles/preimage/src/tests.rs @@ -30,7 +30,7 @@ fn evm_call(input: Vec) -> EvmCall { target: Precompile1.into(), input, value: U256::zero(), - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: 0.into(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, diff --git a/precompiles/proxy/src/tests.rs b/precompiles/proxy/src/tests.rs index 7f9f2d4aa..d83c40035 100644 --- a/precompiles/proxy/src/tests.rs +++ b/precompiles/proxy/src/tests.rs @@ -534,7 +534,7 @@ fn test_nested_evm_bypass_proxy_should_allow_elevating_proxy_type() { target: Precompile1.into(), input: add_proxy_precompile, value: U256::zero(), - gas_limit: u64::max_value(), + gas_limit: u64::MAX, max_fee_per_gas: 0.into(), max_priority_fee_per_gas: Some(U256::zero()), nonce: None, diff --git a/precompiles/staking/src/lib.rs b/precompiles/staking/src/lib.rs index c6e6afa2b..313a7da9c 100644 --- a/precompiles/staking/src/lib.rs +++ b/precompiles/staking/src/lib.rs @@ -186,20 +186,6 @@ where Ok(max_validator_count) } - #[precompile::public("isValidator(address)")] - #[precompile::public("is_restaker_with_role(address)")] - #[precompile::view] - fn is_restaker_with_role( - handle: &mut impl PrecompileHandle, - validator: Address, - ) -> EvmResult { - let validator_account = Runtime::AddressMapping::into_account_id(validator.0); - handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let is_restaker_with_role = - pallet_staking::Validators::::contains_key(validator_account); - Ok(is_restaker_with_role) - } - #[precompile::public("maxNominatorCount()")] #[precompile::public("max_nominator_count()")] #[precompile::view] diff --git a/precompiles/staking/src/mock.rs b/precompiles/staking/src/mock.rs index 8809da17b..38e254f42 100644 --- a/precompiles/staking/src/mock.rs +++ b/precompiles/staking/src/mock.rs @@ -18,16 +18,16 @@ //! Test utilities #![allow(dead_code)] +#![allow(clippy::all)] use super::*; use frame_election_provider_support::bounds::{ElectionBounds, ElectionBoundsBuilder}; use frame_support::{ assert_ok, construct_runtime, pallet_prelude::Hooks, parameter_types, - traits::{ConstU64, Everything, OnFinalize, OnInitialize, OnUnbalanced, OneSessionHandler}, + traits::{ConstU64, Everything, OnFinalize, OnInitialize, OneSessionHandler}, weights::Weight, }; -use pallet_balances::PositiveImbalance; use pallet_evm::{EnsureAddressNever, EnsureAddressRoot}; use pallet_session::historical as pallet_session_historical; use pallet_staking::{ConvertCurve, EraPayout, SessionInterface}; @@ -46,16 +46,12 @@ use std::vec; use frame_election_provider_support::{onchain, SequentialPhragmen}; use pallet_staking::Config; use sp_io::TestExternalities; -use sp_runtime::DispatchResult; use sp_runtime::{ curve::PiecewiseLinear, testing::TestXt, traits::{self, Extrinsic as ExtrinsicT, IdentifyAccount, IdentityLookup, Verify, Zero}, AccountId32, BuildStorage, Perbill, }; -use tangle_primitives::jobs::ReportRestakerOffence; -use tangle_primitives::roles::traits::RolesHandler; -use tangle_primitives::roles::RoleType; pub struct MockSessionHandler; impl OneSessionHandler for MockSessionHandler { @@ -386,37 +382,11 @@ impl onchain::Config for OnChainSeqPhragmen { /// Upper limit on the number of NPOS nominations. const MAX_QUOTA_NOMINATIONS: u32 = 16; -pub struct MockRolesHandler; -impl RolesHandler for MockRolesHandler { - type Balance = Balance; - fn is_restaker_with_role(_address: AccountId, _role_type: RoleType) -> bool { - false - } - - fn is_restaker(_address: AccountId) -> bool { - false - } - - fn get_validator_role_key(_address: AccountId) -> Option> { - None - } - - fn report_offence(_offence_report: ReportRestakerOffence) -> DispatchResult { - Ok(()) - } - - fn record_job_by_validators(_validators: Vec) -> DispatchResult { - Ok(()) - } - - fn get_max_active_service_for_restaker(_restaker: AccountId) -> Option { - None - } -} - pub struct MockReward {} -impl OnUnbalanced> for MockReward { - fn on_unbalanced(_: PositiveImbalance) { +impl frame_support::traits::OnUnbalanced> + for MockReward +{ + fn on_unbalanced(_: pallet_balances::PositiveImbalance) { RewardOnUnbalanceWasCalled::set(true); } } @@ -447,7 +417,6 @@ impl pallet_staking::Config for Runtime { type MaxUnlockingChunks = ConstU32<32>; type HistoryDepth = ConstU32<84>; type EventListeners = (); - type RolesHandler = MockRolesHandler; type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; type NominationsQuota = pallet_staking::FixedNominationsQuota; type WeightInfo = (); diff --git a/precompiles/staking/src/tests.rs b/precompiles/staking/src/tests.rs index 6552281e6..fd2d6760a 100644 --- a/precompiles/staking/src/tests.rs +++ b/precompiles/staking/src/tests.rs @@ -15,7 +15,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. - +#![allow(clippy::all)] use crate::mock::{ active_era, make_all_reward_payment, mock_pub_key, new_test_ext, reward_all_elected, start_active_era, start_session, Balances, PCall, Precompiles, PrecompilesValue, Runtime, @@ -90,21 +90,6 @@ fn max_nominator_count_works() { }); } -#[test] -fn is_validator_works() { - new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { - precompiles() - .prepare_test( - TestAccount::Alex, - H160::from_low_u64_be(1), - PCall::is_restaker_with_role { validator: H160::from(TestAccount::Alex).into() }, - ) - .expect_cost(0) - .expect_no_logs() - .execute_returns(true); - }); -} - #[test] fn eras_total_rewards_should_work() { new_test_ext(vec![1, 2, 3, 4]).execute_with(|| { diff --git a/precompiles/utils/macro/src/precompile/attr.rs b/precompiles/utils/macro/src/precompile/attr.rs index 78fcc918b..c1ab2ee72 100644 --- a/precompiles/utils/macro/src/precompile/attr.rs +++ b/precompiles/utils/macro/src/precompile/attr.rs @@ -15,7 +15,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. - +#![allow(dead_code)] use proc_macro2::Span; use quote::ToTokens; use syn::spanned::Spanned; diff --git a/precompiles/utils/src/lib.rs b/precompiles/utils/src/lib.rs index e205e0e1f..7c4b6c5d7 100644 --- a/precompiles/utils/src/lib.rs +++ b/precompiles/utils/src/lib.rs @@ -42,7 +42,7 @@ use fp_evm::PrecompileFailure; // pub use data::{solidity::Codec, Reader, Writer}; pub use fp_evm::Precompile; -pub use precompile_utils_macro::{keccak256, precompile, precompile_name_from_address}; +pub use precompile_utils_macro::{keccak256, precompile, precompile_name_from_address, Codec}; /// Alias for Result returning an EVM precompile error. pub type EvmResult = Result; diff --git a/precompiles/verify-bls381-signature/Bls381.sol b/precompiles/verify-bls381-signature/Bls381.sol new file mode 100644 index 000000000..b97a34c2e --- /dev/null +++ b/precompiles/verify-bls381-signature/Bls381.sol @@ -0,0 +1,16 @@ +pragma solidity ^0.8.0; + +/** + * @title Bls-381 interface to verify isgnature. + */ +interface IBls381 { + /** + * @dev Verify signed message hash. + * @return A boolean confirming whether the public key is signer for the message. + */ + function verify( + bytes32 public_key, + bytes calldata signature, + bytes calldata message + ) external view returns (bool); +} diff --git a/precompiles/verify-bls381-signature/Cargo.toml b/precompiles/verify-bls381-signature/Cargo.toml new file mode 100644 index 000000000..ac30a07e5 --- /dev/null +++ b/precompiles/verify-bls381-signature/Cargo.toml @@ -0,0 +1,51 @@ +[package] +name = "pallet-evm-precompile-verify-bls381-signature" +version = "0.1.0" +authors = { workspace = true } +edition = "2021" +description = "A Precompile to verify Bls381 signatures" + +[dependencies] +log = { workspace = true } +snowbridge-milagro-bls = { workspace = true, default-features = false } +precompile-utils = { workspace = true } + +# Substrate +sp-core = { workspace = true } +sp-std = { workspace = true } +parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } + + + +# Frontier +fp-evm = { workspace = true } +pallet-evm = { workspace = true } + +[dev-dependencies] +derive_more = { workspace = true } +hex-literal = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } + +precompile-utils = { workspace = true, features = ["std", "testing"] } + +# Substrate +pallet-balances = { workspace = true, features = ["std"] } +pallet-timestamp = { workspace = true, features = ["std"] } +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-runtime = { workspace = true } +sp-io = { workspace = true } + +[features] +default = ["std"] +std = [ + "fp-evm/std", + "pallet-evm/std", + "parity-scale-codec/std", + "sp-core/std", + "precompile-utils/std", + "sp-std/std", + "snowbridge-milagro-bls/std", + +] diff --git a/precompiles/verify-bls381-signature/src/lib.rs b/precompiles/verify-bls381-signature/src/lib.rs new file mode 100644 index 000000000..1ff31abe1 --- /dev/null +++ b/precompiles/verify-bls381-signature/src/lib.rs @@ -0,0 +1,80 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] + +use fp_evm::PrecompileHandle; +use precompile_utils::prelude::*; +use sp_core::bytes::to_hex; +use sp_core::ConstU32; +use sp_std::marker::PhantomData; +use sp_std::prelude::*; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +/// A precompile to verify Bls-381 signatures +pub struct Bls381Precompile(PhantomData); + +#[precompile_utils::precompile] +impl Bls381Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + log::trace!( + target: "Bls-381-Precompile", + "Verify signature {:?} for public {:?} and message {:?}", + signature_bytes, public_bytes, message, + ); + + let public_key = if let Ok(p_key) = + snowbridge_milagro_bls::PublicKey::from_uncompressed_bytes(&public_bytes) + { + p_key + } else { + return Ok(false); + }; + + let signature = + if let Ok(sig) = snowbridge_milagro_bls::Signature::from_bytes(&signature_bytes) { + sig + } else { + return Ok(false); + }; + + let is_confirmed = signature.verify(&message, &public_key); + + log::trace!( + target: "Bls-381-Precompile", + "Verified signature {} is {:?}", + to_hex(&signature.as_bytes()[..], false), is_confirmed, + ); + + Ok(is_confirmed) + } +} diff --git a/precompiles/verify-bls381-signature/src/mock.rs b/precompiles/verify-bls381-signature/src/mock.rs new file mode 100644 index 000000000..263e9148c --- /dev/null +++ b/precompiles/verify-bls381-signature/src/mock.rs @@ -0,0 +1,272 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +//! Test utilities +use super::*; +use frame_support::{construct_runtime, parameter_types, traits::Everything, weights::Weight}; +use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use precompile_utils::{precompile_set::*, testing::MockAccount}; +use serde::{Deserialize, Serialize}; +use sp_core::{sr25519::Public as sr25519Public, H160, H256, U256}; +use sp_runtime::{ + traits::{BlakeTwo256, IdentityLookup}, + AccountId32, BuildStorage, Perbill, +}; + +pub type AccountId = MockAccount; +pub type Balance = u128; + +type Block = frame_system::mocking::MockBlock; + +const PRECOMPILE_ADDRESS_BYTES: [u8; 32] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, +]; + +#[derive( + Eq, + PartialEq, + Ord, + PartialOrd, + Clone, + Encode, + Decode, + Debug, + MaxEncodedLen, + Serialize, + Deserialize, + derive_more::Display, + scale_info::TypeInfo, +)] +pub enum TestAccount { + Empty, + Alex, + Bobo, + Dave, + Charlie, + Eve, + PrecompileAddress, +} + +impl Default for TestAccount { + fn default() -> Self { + Self::Empty + } +} + +// needed for associated type in pallet_evm +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> AccountId32 { + match h160_account { + a if a == H160::repeat_byte(0x01) => TestAccount::Alex.into(), + a if a == H160::repeat_byte(0x02) => TestAccount::Bobo.into(), + a if a == H160::repeat_byte(0x03) => TestAccount::Charlie.into(), + a if a == H160::repeat_byte(0x04) => TestAccount::Dave.into(), + a if a == H160::repeat_byte(0x05) => TestAccount::Eve.into(), + a if a == H160::from_low_u64_be(6) => TestAccount::PrecompileAddress.into(), + _ => TestAccount::Empty.into(), + } + } +} + +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> sp_core::sr25519::Public { + match h160_account { + a if a == H160::repeat_byte(0x01) => sr25519Public::from_raw([1u8; 32]), + a if a == H160::repeat_byte(0x02) => sr25519Public::from_raw([2u8; 32]), + a if a == H160::repeat_byte(0x03) => sr25519Public::from_raw([3u8; 32]), + a if a == H160::repeat_byte(0x04) => sr25519Public::from_raw([4u8; 32]), + a if a == H160::repeat_byte(0x05) => sr25519Public::from_raw([5u8; 32]), + a if a == H160::from_low_u64_be(6) => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +impl From for H160 { + fn from(x: TestAccount) -> H160 { + match x { + TestAccount::Alex => H160::repeat_byte(0x01), + TestAccount::Bobo => H160::repeat_byte(0x02), + TestAccount::Charlie => H160::repeat_byte(0x03), + TestAccount::Dave => H160::repeat_byte(0x04), + TestAccount::Eve => H160::repeat_byte(0x05), + TestAccount::PrecompileAddress => H160::from_low_u64_be(6), + _ => Default::default(), + } + } +} + +impl From for AccountId32 { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => AccountId32::from([1u8; 32]), + TestAccount::Bobo => AccountId32::from([2u8; 32]), + TestAccount::Charlie => AccountId32::from([3u8; 32]), + TestAccount::Dave => AccountId32::from([4u8; 32]), + TestAccount::Eve => AccountId32::from([5u8; 32]), + TestAccount::PrecompileAddress => AccountId32::from(PRECOMPILE_ADDRESS_BYTES), + _ => AccountId32::from([0u8; 32]), + } + } +} + +impl From for sp_core::sr25519::Public { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => sr25519Public::from_raw([1u8; 32]), + TestAccount::Bobo => sr25519Public::from_raw([2u8; 32]), + TestAccount::Charlie => sr25519Public::from_raw([3u8; 32]), + TestAccount::Dave => sr25519Public::from_raw([4u8; 32]), + TestAccount::Eve => sr25519Public::from_raw([5u8; 32]), + TestAccount::PrecompileAddress => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +construct_runtime!( + pub enum Runtime + { + System: frame_system, + Balances: pallet_balances, + Evm: pallet_evm, + Timestamp: pallet_timestamp, + } +); + +parameter_types! { + pub const BlockHashCount: u32 = 250; + pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 1); + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} + +impl frame_system::Config for Runtime { + type BaseCallFilter = Everything; + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type Nonce = u64; + type Block = Block; + type RuntimeCall = RuntimeCall; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type RuntimeTask = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} +parameter_types! { + pub const ExistentialDeposit: u128 = 1; +} +impl pallet_balances::Config for Runtime { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = (); + type FreezeIdentifier = (); + type MaxFreezes = (); +} + +const MAX_POV_SIZE: u64 = 5 * 1024 * 1024; + +parameter_types! { + pub BlockGasLimit: U256 = U256::from(u64::MAX); + pub PrecompilesValue: Precompiles = Precompiles::new(); + pub const WeightPerGas: Weight = Weight::from_parts(1, 0); + pub GasLimitPovSizeRatio: u64 = { + let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64(); + block_gas_limit.saturating_div(MAX_POV_SIZE) + }; +} + +pub type Precompiles = + PrecompileSetBuilder, Bls381Precompile>,)>; + +pub type PCall = Bls381PrecompileCall; + +parameter_types! { + pub SuicideQuickClearLimit: u32 = 0; +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = pallet_evm::FixedGasWeightMapping; + type WeightPerGas = WeightPerGas; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = AccountId; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type Runner = pallet_evm::runner::stack::Runner; + type PrecompilesType = Precompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = (); + type OnChargeTransaction = (); + type BlockGasLimit = BlockGasLimit; + type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; + type FindAuthor = (); + type OnCreate = (); + type SuicideQuickClearLimit = SuicideQuickClearLimit; + type GasLimitPovSizeRatio = GasLimitPovSizeRatio; + type Timestamp = Timestamp; + type WeightInfo = pallet_evm::weights::SubstrateWeight; +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +#[derive(Default)] +pub(crate) struct ExtBuilder; + +impl ExtBuilder { + pub(crate) fn build(self) -> sp_io::TestExternalities { + let t = frame_system::GenesisConfig::::default() + .build_storage() + .expect("Frame system builds valid default genesis config"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} diff --git a/precompiles/verify-bls381-signature/src/tests.rs b/precompiles/verify-bls381-signature/src/tests.rs new file mode 100644 index 000000000..ab393cf2a --- /dev/null +++ b/precompiles/verify-bls381-signature/src/tests.rs @@ -0,0 +1,114 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +use crate::mock::*; +use hex_literal::hex; +use precompile_utils::testing::*; +use snowbridge_milagro_bls::{PublicKey, SecretKey, Signature}; +use sp_core::{keccak_256, H160}; + +fn precompiles() -> Precompiles { + PrecompilesValue::get() +} + +#[test] +fn wrong_signature_length_returns_false() { + ExtBuilder.build().execute_with(|| { + const BLS_SECRET_KEY: [u8; 32] = [ + 78, 252, 122, 126, 32, 0, 75, 89, 252, 31, 42, 130, 254, 88, 6, 90, 138, 202, 135, 194, + 233, 117, 181, 75, 96, 238, 79, 100, 237, 59, 140, 111, + ]; + let secret_key = SecretKey::from_bytes(&BLS_SECRET_KEY).unwrap(); + let pub_key = PublicKey::from_secret_key(&secret_key); + let signature = hex!["0042"]; + let message = hex!["00"]; + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: pub_key.as_uncompressed_bytes().into(), + signature_bytes: signature.into(), + message: message.into(), + }, + ) + .expect_no_logs() + .execute_returns(false); + }); +} + +#[test] +fn bad_signature_returns_false() { + ExtBuilder.build().execute_with(|| { + const BLS_SECRET_KEY: [u8; 32] = [ + 78, 252, 122, 126, 32, 0, 75, 89, 252, 31, 42, 130, 254, 88, 6, 90, 138, 202, 135, 194, + 233, 117, 181, 75, 96, 238, 79, 100, 237, 59, 140, 111, + ]; + + const BLS_DATA_TO_SIGN: &[u8; 13] = b"Hello, world!"; + + let secret_key = SecretKey::from_bytes(&BLS_SECRET_KEY).unwrap(); + let pub_key = PublicKey::from_secret_key(&secret_key); + let msg_hash = keccak_256(BLS_DATA_TO_SIGN); + let signature = Signature::new(&msg_hash, &secret_key); + + let bad_message = hex!["00"]; + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: pub_key.as_uncompressed_bytes().into(), + signature_bytes: signature.as_bytes()[..10].to_vec().into(), + message: bad_message.into(), + }, + ) + .expect_no_logs() + .execute_returns(false); + }); +} + +#[test] +fn signature_verification_works_with_bls318() { + ExtBuilder.build().execute_with(|| { + const BLS_SECRET_KEY: [u8; 32] = [ + 78, 252, 122, 126, 32, 0, 75, 89, 252, 31, 42, 130, 254, 88, 6, 90, 138, 202, 135, 194, + 233, 117, 181, 75, 96, 238, 79, 100, 237, 59, 140, 111, + ]; + + const BLS_DATA_TO_SIGN: &[u8; 13] = b"Hello, world!"; + + let secret_key = SecretKey::from_bytes(&BLS_SECRET_KEY).unwrap(); + let pub_key = PublicKey::from_secret_key(&secret_key); + let msg_hash = keccak_256(BLS_DATA_TO_SIGN); + let signature = Signature::new(&msg_hash, &secret_key); + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: pub_key.as_uncompressed_bytes().into(), + signature_bytes: signature.as_bytes().to_vec().into(), + message: msg_hash.to_vec().into(), + }, + ) + .expect_no_logs() + .execute_returns(true); + }); +} diff --git a/precompiles/verify-ecdsa-secp256k1-signature/Cargo.toml b/precompiles/verify-ecdsa-secp256k1-signature/Cargo.toml new file mode 100644 index 000000000..905b11af5 --- /dev/null +++ b/precompiles/verify-ecdsa-secp256k1-signature/Cargo.toml @@ -0,0 +1,49 @@ +[package] +name = "pallet-evm-precompile-verify-ecdsa-secp256k1-signature" +version = "0.1.0" +authors = { workspace = true } +edition = "2021" +description = "A Precompile to verify ecdsa secp256k1 signature" + +[dependencies] +log = { workspace = true } +k256 = { workspace = true, default-features = false, features = ["hash2curve", "alloc", "ecdsa"] } +precompile-utils = { workspace = true } + +# Substrate +sp-core = { workspace = true } +sp-std = { workspace = true } +parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } + + + +# Frontier +fp-evm = { workspace = true } +pallet-evm = { workspace = true } + +[dev-dependencies] +derive_more = { workspace = true } +hex-literal = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } + +precompile-utils = { workspace = true, features = ["std", "testing"] } + +# Substrate +pallet-balances = { workspace = true, features = ["std"] } +pallet-timestamp = { workspace = true, features = ["std"] } +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-runtime = { workspace = true } +sp-io = { workspace = true } + +[features] +default = ["std"] +std = [ + "fp-evm/std", + "pallet-evm/std", + "parity-scale-codec/std", + "sp-core/std", + "precompile-utils/std", + "sp-std/std", +] diff --git a/precompiles/verify-ecdsa-secp256k1-signature/EcdsaSecp256k1.sol b/precompiles/verify-ecdsa-secp256k1-signature/EcdsaSecp256k1.sol new file mode 100644 index 000000000..3cba6146d --- /dev/null +++ b/precompiles/verify-ecdsa-secp256k1-signature/EcdsaSecp256k1.sol @@ -0,0 +1,16 @@ +pragma solidity ^0.8.0; + +/** + * @title EcdsaSecp256k1 interface to verify isgnature. + */ +interface IEcdsaSecp256k1 { + /** + * @dev Verify signed message . + * @return A boolean confirming whether the public key is signer for the message. + */ + function verify( + bytes32 public_key, + bytes calldata signature, + bytes calldata message + ) external view returns (bool); +} \ No newline at end of file diff --git a/precompiles/verify-ecdsa-secp256k1-signature/src/lib.rs b/precompiles/verify-ecdsa-secp256k1-signature/src/lib.rs new file mode 100644 index 000000000..2e407eaef --- /dev/null +++ b/precompiles/verify-ecdsa-secp256k1-signature/src/lib.rs @@ -0,0 +1,94 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] + +use fp_evm::PrecompileHandle; +use k256::ecdsa::signature::hazmat::PrehashVerifier; +use k256::elliptic_curve::group::GroupEncoding; +use precompile_utils::prelude::*; +use sp_core::ConstU32; +use sp_std::marker::PhantomData; +use sp_std::prelude::*; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +// ECDSA pub key bytes +type ECDSAPubKeyBytes = ConstU32<33>; +// ECDSA signature bytes +type ECDSASignatureBytes = ConstU32<65>; + +/// A precompile to verify EcdsaSecp256k1 signature +pub struct EcdsaSecp256k1Precompile(PhantomData); + +#[precompile_utils::precompile] +impl EcdsaSecp256k1Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes, + signature_bytes: BoundedBytes, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + log::trace!( + target: "Ecdsa-Secp256k1-Precompile", + "Verify signature {:?} for public {:?} and message {:?}", + signature_bytes, public_bytes, message, + ); + + let maybe_pub_key_point = k256::AffinePoint::from_bytes(public_bytes.as_slice().into()); + + let pub_key_point = if let Some(x) = maybe_pub_key_point.into() { + x + } else { + return Ok(false); + }; + + let maybe_verifying_key = k256::ecdsa::VerifyingKey::from_affine(pub_key_point); + let verifying_key = if let Ok(x) = maybe_verifying_key { + x + } else { + return Ok(false); + }; + + let maybe_signature = k256::ecdsa::Signature::from_slice(signature_bytes.as_slice()); + let signature = if let Ok(x) = maybe_signature { + x + } else { + return Ok(false); + }; + + let is_confirmed = + verifying_key.verify_prehash(&message, &signature).map(|_| signature).is_ok(); + + log::trace!( + target: "Ecdsa-Secp256k1-Precompile", + "Verified signature {:?} is {:?}", + signature, is_confirmed, + ); + + Ok(is_confirmed) + } +} diff --git a/precompiles/verify-ecdsa-secp256k1-signature/src/mock.rs b/precompiles/verify-ecdsa-secp256k1-signature/src/mock.rs new file mode 100644 index 000000000..a96a2e17b --- /dev/null +++ b/precompiles/verify-ecdsa-secp256k1-signature/src/mock.rs @@ -0,0 +1,272 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +//! Test utilities +use super::*; +use frame_support::{construct_runtime, parameter_types, traits::Everything, weights::Weight}; +use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use precompile_utils::{precompile_set::*, testing::MockAccount}; +use serde::{Deserialize, Serialize}; +use sp_core::{sr25519::Public as sr25519Public, H160, H256, U256}; +use sp_runtime::{ + traits::{BlakeTwo256, IdentityLookup}, + AccountId32, BuildStorage, Perbill, +}; + +pub type AccountId = MockAccount; +pub type Balance = u128; + +type Block = frame_system::mocking::MockBlock; + +const PRECOMPILE_ADDRESS_BYTES: [u8; 32] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, +]; + +#[derive( + Eq, + PartialEq, + Ord, + PartialOrd, + Clone, + Encode, + Decode, + Debug, + MaxEncodedLen, + Serialize, + Deserialize, + derive_more::Display, + scale_info::TypeInfo, +)] +pub enum TestAccount { + Empty, + Alex, + Bobo, + Dave, + Charlie, + Eve, + PrecompileAddress, +} + +impl Default for TestAccount { + fn default() -> Self { + Self::Empty + } +} + +// needed for associated type in pallet_evm +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> AccountId32 { + match h160_account { + a if a == H160::repeat_byte(0x01) => TestAccount::Alex.into(), + a if a == H160::repeat_byte(0x02) => TestAccount::Bobo.into(), + a if a == H160::repeat_byte(0x03) => TestAccount::Charlie.into(), + a if a == H160::repeat_byte(0x04) => TestAccount::Dave.into(), + a if a == H160::repeat_byte(0x05) => TestAccount::Eve.into(), + a if a == H160::from_low_u64_be(6) => TestAccount::PrecompileAddress.into(), + _ => TestAccount::Empty.into(), + } + } +} + +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> sp_core::sr25519::Public { + match h160_account { + a if a == H160::repeat_byte(0x01) => sr25519Public::from_raw([1u8; 32]), + a if a == H160::repeat_byte(0x02) => sr25519Public::from_raw([2u8; 32]), + a if a == H160::repeat_byte(0x03) => sr25519Public::from_raw([3u8; 32]), + a if a == H160::repeat_byte(0x04) => sr25519Public::from_raw([4u8; 32]), + a if a == H160::repeat_byte(0x05) => sr25519Public::from_raw([5u8; 32]), + a if a == H160::from_low_u64_be(6) => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +impl From for H160 { + fn from(x: TestAccount) -> H160 { + match x { + TestAccount::Alex => H160::repeat_byte(0x01), + TestAccount::Bobo => H160::repeat_byte(0x02), + TestAccount::Charlie => H160::repeat_byte(0x03), + TestAccount::Dave => H160::repeat_byte(0x04), + TestAccount::Eve => H160::repeat_byte(0x05), + TestAccount::PrecompileAddress => H160::from_low_u64_be(6), + _ => Default::default(), + } + } +} + +impl From for AccountId32 { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => AccountId32::from([1u8; 32]), + TestAccount::Bobo => AccountId32::from([2u8; 32]), + TestAccount::Charlie => AccountId32::from([3u8; 32]), + TestAccount::Dave => AccountId32::from([4u8; 32]), + TestAccount::Eve => AccountId32::from([5u8; 32]), + TestAccount::PrecompileAddress => AccountId32::from(PRECOMPILE_ADDRESS_BYTES), + _ => AccountId32::from([0u8; 32]), + } + } +} + +impl From for sp_core::sr25519::Public { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => sr25519Public::from_raw([1u8; 32]), + TestAccount::Bobo => sr25519Public::from_raw([2u8; 32]), + TestAccount::Charlie => sr25519Public::from_raw([3u8; 32]), + TestAccount::Dave => sr25519Public::from_raw([4u8; 32]), + TestAccount::Eve => sr25519Public::from_raw([5u8; 32]), + TestAccount::PrecompileAddress => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +construct_runtime!( + pub enum Runtime + { + System: frame_system, + Balances: pallet_balances, + Evm: pallet_evm, + Timestamp: pallet_timestamp, + } +); + +parameter_types! { + pub const BlockHashCount: u32 = 250; + pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 1); + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} + +impl frame_system::Config for Runtime { + type BaseCallFilter = Everything; + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type Nonce = u64; + type Block = Block; + type RuntimeCall = RuntimeCall; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type RuntimeTask = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} +parameter_types! { + pub const ExistentialDeposit: u128 = 1; +} +impl pallet_balances::Config for Runtime { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = (); + type FreezeIdentifier = (); + type MaxFreezes = (); +} + +const MAX_POV_SIZE: u64 = 5 * 1024 * 1024; + +parameter_types! { + pub BlockGasLimit: U256 = U256::from(u64::MAX); + pub PrecompilesValue: Precompiles = Precompiles::new(); + pub const WeightPerGas: Weight = Weight::from_parts(1, 0); + pub GasLimitPovSizeRatio: u64 = { + let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64(); + block_gas_limit.saturating_div(MAX_POV_SIZE) + }; +} + +pub type Precompiles = + PrecompileSetBuilder, EcdsaSecp256k1Precompile>,)>; + +pub type PCall = EcdsaSecp256k1PrecompileCall; + +parameter_types! { + pub SuicideQuickClearLimit: u32 = 0; +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = pallet_evm::FixedGasWeightMapping; + type WeightPerGas = WeightPerGas; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = AccountId; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type Runner = pallet_evm::runner::stack::Runner; + type PrecompilesType = Precompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = (); + type OnChargeTransaction = (); + type BlockGasLimit = BlockGasLimit; + type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; + type FindAuthor = (); + type OnCreate = (); + type SuicideQuickClearLimit = SuicideQuickClearLimit; + type GasLimitPovSizeRatio = GasLimitPovSizeRatio; + type Timestamp = Timestamp; + type WeightInfo = pallet_evm::weights::SubstrateWeight; +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +#[derive(Default)] +pub(crate) struct ExtBuilder; + +impl ExtBuilder { + pub(crate) fn build(self) -> sp_io::TestExternalities { + let t = frame_system::GenesisConfig::::default() + .build_storage() + .expect("Frame system builds valid default genesis config"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} diff --git a/precompiles/verify-ecdsa-secp256k1-signature/src/tests.rs b/precompiles/verify-ecdsa-secp256k1-signature/src/tests.rs new file mode 100644 index 000000000..96de14c24 --- /dev/null +++ b/precompiles/verify-ecdsa-secp256k1-signature/src/tests.rs @@ -0,0 +1,106 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . +#![allow(clippy::all)] +use crate::mock::*; +use hex_literal::hex; +use precompile_utils::testing::*; +use sp_core::{ecdsa, keccak_256, Pair, H160}; + +fn precompiles() -> Precompiles { + PrecompilesValue::get() +} + +#[test] +fn wrong_signature_length_returns_false() { + ExtBuilder::default().build().execute_with(|| { + let pair = ecdsa::Pair::from_seed(b"12345678901234567890123456789012"); + let public = pair.public(); + let signature = hex!["0042"]; + let message = hex!["00"]; + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: >::as_ref(&public).into(), + signature_bytes: signature.into(), + message: message.into(), + }, + ) + .expect_no_logs() + .execute_returns(false); + }); +} + +#[test] +fn bad_signature_returns_false() { + ExtBuilder::default().build().execute_with(|| { + let pair = ecdsa::Pair::from_seed(b"12345678901234567890123456789012"); + let public = pair.public(); + let message = hex!("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000200d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000"); + let signature = pair.sign(&message[..]); + assert!(ecdsa::Pair::verify(&signature, &message[..], &public)); + + let bad_message = hex!["00"]; + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: >::as_ref(&public).into(), + signature_bytes: >::as_ref(&signature).into(), + message: bad_message.into(), + }, + ) + .expect_no_logs() + .execute_returns(false); + }); +} + +#[test] +fn signature_verification_works_secp256k1_ecdsa() { + ExtBuilder::default().build().execute_with(|| { + let pair = ecdsa::Pair::from_seed(&hex!( + "1d2187216832d1ee14be2e677f9e3ebceca715510ba1460a20d6fce07ba36b1e" + )); + let public = pair.public(); + assert_eq!( + public, + ecdsa::Public::from_raw(hex!( + "02071bca0b0da3cfa98d3089db224999a827fc1df1a3d6221194382872f0d1a82a" + )) + ); + let message = hex!("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000200d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000"); + let hash_message = keccak_256(&message); + let signature = pair.sign_prehashed(&hash_message); + assert!(ecdsa::Pair::verify_prehashed(&signature, &hash_message, &public)); + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: >::as_ref(&public).into(), + signature_bytes: signature.0[..64].into(), + message: hash_message.into(), + }, + ) + .expect_no_logs() + .execute_returns(true); + }); +} diff --git a/precompiles/verify-ecdsa-secp256r1-signature/Cargo.toml b/precompiles/verify-ecdsa-secp256r1-signature/Cargo.toml new file mode 100644 index 000000000..b49619cef --- /dev/null +++ b/precompiles/verify-ecdsa-secp256r1-signature/Cargo.toml @@ -0,0 +1,50 @@ +[package] +name = "pallet-evm-precompile-verify-ecdsa-secp256r1-signature" +version = "0.1.0" +authors = { workspace = true } +edition = "2021" +description = "A Precompile to verify ecdsa secp256r1 signature" + +[dependencies] +log = { workspace = true } +p256 = { workspace = true, default-features = false, features = ["hash2curve", "alloc", "ecdsa"] } +precompile-utils = { workspace = true } + +# Substrate +sp-core = { workspace = true } +sp-std = { workspace = true } +parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } + + + +# Frontier +fp-evm = { workspace = true } +pallet-evm = { workspace = true } + +[dev-dependencies] +derive_more = { workspace = true } +hex-literal = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } +rand_core = { workspace = true } + +precompile-utils = { workspace = true, features = ["std", "testing"] } + +# Substrate +pallet-balances = { workspace = true, features = ["std"] } +pallet-timestamp = { workspace = true, features = ["std"] } +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-runtime = { workspace = true } +sp-io = { workspace = true } + +[features] +default = ["std"] +std = [ + "fp-evm/std", + "pallet-evm/std", + "parity-scale-codec/std", + "sp-core/std", + "precompile-utils/std", + "sp-std/std", +] diff --git a/precompiles/verify-ecdsa-secp256r1-signature/EcdsaSecp256r1.sol b/precompiles/verify-ecdsa-secp256r1-signature/EcdsaSecp256r1.sol new file mode 100644 index 000000000..29064a85b --- /dev/null +++ b/precompiles/verify-ecdsa-secp256r1-signature/EcdsaSecp256r1.sol @@ -0,0 +1,16 @@ +pragma solidity ^0.8.0; + +/** + * @title EcdsaSecp256r1 interface to verify isgnature. + */ +interface IEcdsaSecp256r1 { + /** + * @dev Verify signed message . + * @return A boolean confirming whether the public key is signer for the message. + */ + function verify( + bytes32 public_key, + bytes calldata signature, + bytes calldata message + ) external view returns (bool); +} \ No newline at end of file diff --git a/precompiles/verify-ecdsa-secp256r1-signature/src/lib.rs b/precompiles/verify-ecdsa-secp256r1-signature/src/lib.rs new file mode 100644 index 000000000..7540121d8 --- /dev/null +++ b/precompiles/verify-ecdsa-secp256r1-signature/src/lib.rs @@ -0,0 +1,94 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] + +use fp_evm::PrecompileHandle; +use p256::ecdsa::signature::hazmat::PrehashVerifier; +use p256::elliptic_curve::group::GroupEncoding; +use precompile_utils::prelude::*; +use sp_core::ConstU32; +use sp_std::marker::PhantomData; +use sp_std::prelude::*; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +// ECDSA pub key bytes +type ECDSAPubKeyBytes = ConstU32<33>; +// ECDSA signature bytes +type ECDSASignatureBytes = ConstU32<65>; + +/// A precompile to verify EcdsaSecp256r1 signature +pub struct EcdsaSecp256r1Precompile(PhantomData); + +#[precompile_utils::precompile] +impl EcdsaSecp256r1Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes, + signature_bytes: BoundedBytes, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + log::trace!( + target: "Ecdsa-Secp256r1-Precompile", + "Verify signature {:?} for public {:?} and message {:?}", + signature_bytes, public_bytes, message, + ); + + let maybe_pub_key_point = p256::AffinePoint::from_bytes(public_bytes.as_slice().into()); + + let pub_key_point = if let Some(x) = maybe_pub_key_point.into() { + x + } else { + return Ok(false); + }; + + let maybe_verifying_key = p256::ecdsa::VerifyingKey::from_affine(pub_key_point); + let verifying_key = if let Ok(x) = maybe_verifying_key { + x + } else { + return Ok(false); + }; + + let maybe_signature = p256::ecdsa::Signature::from_slice(signature_bytes.as_slice()); + let signature = if let Ok(x) = maybe_signature { + x + } else { + return Ok(false); + }; + + let is_confirmed = + verifying_key.verify_prehash(&message, &signature).map(|_| signature).is_ok(); + + log::trace!( + target: "Ecdsa-Secp256r1-Precompile", + "Verified signature {:?} is {:?}", + signature, is_confirmed, + ); + + Ok(is_confirmed) + } +} diff --git a/precompiles/verify-ecdsa-secp256r1-signature/src/mock.rs b/precompiles/verify-ecdsa-secp256r1-signature/src/mock.rs new file mode 100644 index 000000000..b6126ce79 --- /dev/null +++ b/precompiles/verify-ecdsa-secp256r1-signature/src/mock.rs @@ -0,0 +1,272 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . +#![allow(clippy::all)] +//! Test utilities +use super::*; +use frame_support::{construct_runtime, parameter_types, traits::Everything, weights::Weight}; +use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use precompile_utils::{precompile_set::*, testing::MockAccount}; +use serde::{Deserialize, Serialize}; +use sp_core::{sr25519::Public as sr25519Public, H160, H256, U256}; +use sp_runtime::{ + traits::{BlakeTwo256, IdentityLookup}, + AccountId32, BuildStorage, Perbill, +}; + +pub type AccountId = MockAccount; +pub type Balance = u128; + +type Block = frame_system::mocking::MockBlock; + +const PRECOMPILE_ADDRESS_BYTES: [u8; 32] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, +]; + +#[derive( + Eq, + PartialEq, + Ord, + PartialOrd, + Clone, + Encode, + Decode, + Debug, + MaxEncodedLen, + Serialize, + Deserialize, + derive_more::Display, + scale_info::TypeInfo, +)] +pub enum TestAccount { + Empty, + Alex, + Bobo, + Dave, + Charlie, + Eve, + PrecompileAddress, +} + +impl Default for TestAccount { + fn default() -> Self { + Self::Empty + } +} + +// needed for associated type in pallet_evm +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> AccountId32 { + match h160_account { + a if a == H160::repeat_byte(0x01) => TestAccount::Alex.into(), + a if a == H160::repeat_byte(0x02) => TestAccount::Bobo.into(), + a if a == H160::repeat_byte(0x03) => TestAccount::Charlie.into(), + a if a == H160::repeat_byte(0x04) => TestAccount::Dave.into(), + a if a == H160::repeat_byte(0x05) => TestAccount::Eve.into(), + a if a == H160::from_low_u64_be(6) => TestAccount::PrecompileAddress.into(), + _ => TestAccount::Empty.into(), + } + } +} + +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> sp_core::sr25519::Public { + match h160_account { + a if a == H160::repeat_byte(0x01) => sr25519Public::from_raw([1u8; 32]), + a if a == H160::repeat_byte(0x02) => sr25519Public::from_raw([2u8; 32]), + a if a == H160::repeat_byte(0x03) => sr25519Public::from_raw([3u8; 32]), + a if a == H160::repeat_byte(0x04) => sr25519Public::from_raw([4u8; 32]), + a if a == H160::repeat_byte(0x05) => sr25519Public::from_raw([5u8; 32]), + a if a == H160::from_low_u64_be(6) => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +impl From for H160 { + fn from(x: TestAccount) -> H160 { + match x { + TestAccount::Alex => H160::repeat_byte(0x01), + TestAccount::Bobo => H160::repeat_byte(0x02), + TestAccount::Charlie => H160::repeat_byte(0x03), + TestAccount::Dave => H160::repeat_byte(0x04), + TestAccount::Eve => H160::repeat_byte(0x05), + TestAccount::PrecompileAddress => H160::from_low_u64_be(6), + _ => Default::default(), + } + } +} + +impl From for AccountId32 { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => AccountId32::from([1u8; 32]), + TestAccount::Bobo => AccountId32::from([2u8; 32]), + TestAccount::Charlie => AccountId32::from([3u8; 32]), + TestAccount::Dave => AccountId32::from([4u8; 32]), + TestAccount::Eve => AccountId32::from([5u8; 32]), + TestAccount::PrecompileAddress => AccountId32::from(PRECOMPILE_ADDRESS_BYTES), + _ => AccountId32::from([0u8; 32]), + } + } +} + +impl From for sp_core::sr25519::Public { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => sr25519Public::from_raw([1u8; 32]), + TestAccount::Bobo => sr25519Public::from_raw([2u8; 32]), + TestAccount::Charlie => sr25519Public::from_raw([3u8; 32]), + TestAccount::Dave => sr25519Public::from_raw([4u8; 32]), + TestAccount::Eve => sr25519Public::from_raw([5u8; 32]), + TestAccount::PrecompileAddress => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +construct_runtime!( + pub enum Runtime + { + System: frame_system, + Balances: pallet_balances, + Evm: pallet_evm, + Timestamp: pallet_timestamp, + } +); + +parameter_types! { + pub const BlockHashCount: u32 = 250; + pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 1); + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} + +impl frame_system::Config for Runtime { + type BaseCallFilter = Everything; + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type Nonce = u64; + type Block = Block; + type RuntimeCall = RuntimeCall; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type RuntimeTask = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} +parameter_types! { + pub const ExistentialDeposit: u128 = 1; +} +impl pallet_balances::Config for Runtime { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = (); + type FreezeIdentifier = (); + type MaxFreezes = (); +} + +const MAX_POV_SIZE: u64 = 5 * 1024 * 1024; + +parameter_types! { + pub BlockGasLimit: U256 = U256::from(u64::MAX); + pub PrecompilesValue: Precompiles = Precompiles::new(); + pub const WeightPerGas: Weight = Weight::from_parts(1, 0); + pub GasLimitPovSizeRatio: u64 = { + let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64(); + block_gas_limit.saturating_div(MAX_POV_SIZE) + }; +} + +pub type Precompiles = + PrecompileSetBuilder, EcdsaSecp256r1Precompile>,)>; + +pub type PCall = EcdsaSecp256r1PrecompileCall; + +parameter_types! { + pub SuicideQuickClearLimit: u32 = 0; +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = pallet_evm::FixedGasWeightMapping; + type WeightPerGas = WeightPerGas; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = AccountId; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type Runner = pallet_evm::runner::stack::Runner; + type PrecompilesType = Precompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = (); + type OnChargeTransaction = (); + type BlockGasLimit = BlockGasLimit; + type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; + type FindAuthor = (); + type OnCreate = (); + type SuicideQuickClearLimit = SuicideQuickClearLimit; + type GasLimitPovSizeRatio = GasLimitPovSizeRatio; + type Timestamp = Timestamp; + type WeightInfo = pallet_evm::weights::SubstrateWeight; +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +#[derive(Default)] +pub(crate) struct ExtBuilder; + +impl ExtBuilder { + pub(crate) fn build(self) -> sp_io::TestExternalities { + let t = frame_system::GenesisConfig::::default() + .build_storage() + .expect("Frame system builds valid default genesis config"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} diff --git a/precompiles/verify-ecdsa-secp256r1-signature/src/tests.rs b/precompiles/verify-ecdsa-secp256r1-signature/src/tests.rs new file mode 100644 index 000000000..f7fdaefa4 --- /dev/null +++ b/precompiles/verify-ecdsa-secp256r1-signature/src/tests.rs @@ -0,0 +1,101 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . +#![allow(clippy::all)] +use crate::mock::*; +use hex_literal::hex; +use p256::ecdsa::{signature::hazmat::PrehashSigner, SigningKey, VerifyingKey}; +use precompile_utils::testing::*; +use rand_core::OsRng; +use sp_core::{ecdsa, keccak_256, Pair, H160}; + +fn precompiles() -> Precompiles { + PrecompilesValue::get() +} + +#[test] +fn wrong_signature_length_returns_false() { + ExtBuilder::default().build().execute_with(|| { + let pair = ecdsa::Pair::from_seed(b"12345678901234567890123456789012"); + let public = pair.public(); + let signature = hex!["0042"]; + let message = hex!["00"]; + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: public.0.to_vec().into(), + signature_bytes: signature.into(), + message: message.into(), + }, + ) + .expect_no_logs() + .execute_returns(false); + }); +} + +#[test] +fn bad_signature_returns_false() { + ExtBuilder::default().build().execute_with(|| { + let mut rng = OsRng; + let secret_key = SigningKey::random(&mut rng); + let public_key = VerifyingKey::from(&secret_key); + let message = b"hello world"; + let prehash = keccak_256(message); + let (signature, _) = secret_key.sign_prehash(&prehash).unwrap(); + + let bad_message = hex!["00"]; + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: public_key.to_encoded_point(true).to_bytes().to_vec().into(), + signature_bytes: signature.to_vec().into(), + message: bad_message.into(), + }, + ) + .expect_no_logs() + .execute_returns(false); + }); +} + +#[test] +fn signature_verification_works_secp256r1_ecdsa() { + ExtBuilder::default().build().execute_with(|| { + let mut rng = OsRng; + let secret_key = SigningKey::random(&mut rng); + let public_key = VerifyingKey::from(&secret_key); + let message = b"hello world"; + let prehash = keccak_256(message); + let (signature, _) = secret_key.sign_prehash(&prehash).unwrap(); + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: public_key.to_encoded_point(true).to_bytes().to_vec().into(), + signature_bytes: signature.to_vec().into(), + message: prehash.into(), + }, + ) + .expect_no_logs() + .execute_returns(true); + }); +} diff --git a/precompiles/verify-ecdsa-stark-signature/Cargo.toml b/precompiles/verify-ecdsa-stark-signature/Cargo.toml new file mode 100644 index 000000000..05983be7e --- /dev/null +++ b/precompiles/verify-ecdsa-stark-signature/Cargo.toml @@ -0,0 +1,56 @@ +[package] +name = "pallet-evm-precompile-verify-ecdsa-stark-signature" +version = "0.1.0" +authors = { workspace = true } +edition = "2021" +description = "A Precompile to verify ecdsa-stark signature" + +[dependencies] +log = { workspace = true } +generic-ec = { workspace = true, default-features = false, features = ["serde", "udigest", "curve-secp256k1", "curve-secp256r1", "curve-stark"] } +generic-ec-zkp = { workspace = true, default-features = false, features = ["serde", "udigest", "alloc"] } +starknet-crypto = { workspace = true, default-features = false } +precompile-utils = { workspace = true } + +# Substrate +sp-core = { workspace = true } +sp-std = { workspace = true } +parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } + + + +# Frontier +fp-evm = { workspace = true } +pallet-evm = { workspace = true } + +[dev-dependencies] +derive_more = { workspace = true } +hex-literal = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } +rand_core = { workspace = true } +hex = { workspace = true, default-features = false, features = ["serde"] } + + +precompile-utils = { workspace = true, features = ["std", "testing"] } + +# Substrate +pallet-balances = { workspace = true, features = ["std"] } +pallet-timestamp = { workspace = true, features = ["std"] } +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-runtime = { workspace = true } +sp-io = { workspace = true } + + +[features] +default = ["std"] +std = [ + "fp-evm/std", + "pallet-evm/std", + "parity-scale-codec/std", + "sp-core/std", + "precompile-utils/std", + "sp-std/std", + "starknet-crypto/std", +] diff --git a/precompiles/verify-ecdsa-stark-signature/EcdsaStark.sol b/precompiles/verify-ecdsa-stark-signature/EcdsaStark.sol new file mode 100644 index 000000000..5197d817e --- /dev/null +++ b/precompiles/verify-ecdsa-stark-signature/EcdsaStark.sol @@ -0,0 +1,16 @@ +pragma solidity ^0.8.0; + +/** + * @title Interface to verify EcdsaStark isgnature. + */ +interface IEcdsaStark { + /** + * @dev Verify signed message . + * @return A boolean confirming whether the public key is signer for the message. + */ + function verify( + bytes32 public_key, + bytes calldata signature, + bytes calldata message + ) external view returns (bool); +} \ No newline at end of file diff --git a/precompiles/verify-ecdsa-stark-signature/src/lib.rs b/precompiles/verify-ecdsa-stark-signature/src/lib.rs new file mode 100644 index 000000000..610ba70c2 --- /dev/null +++ b/precompiles/verify-ecdsa-stark-signature/src/lib.rs @@ -0,0 +1,132 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] + +use fp_evm::PrecompileHandle; +use generic_ec::{coords::HasAffineX, curves::Stark, Point, Scalar}; +use precompile_utils::prelude::*; +use sp_core::ConstU32; +use sp_std::marker::PhantomData; +use sp_std::prelude::*; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +// ECDSA pub key bytes +type ECDSAPubKeyBytes = ConstU32<33>; +// ECDSA signature bytes +type ECDSASignatureBytes = ConstU32<65>; + +/// A precompile to verify EcdsaStark signature +pub struct EcdsaStarkPrecompile(PhantomData); + +#[precompile_utils::precompile] +impl EcdsaStarkPrecompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes, + signature_bytes: BoundedBytes, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + log::trace!( + target: "Ecdsa-Stark-Precompile", + "Verify signature {:?} for public {:?} and message {:?}", + signature_bytes, public_bytes, message, + ); + + // Parse Signature + let r_bytes = &signature_bytes[0..signature_bytes.len() / 2]; + let s_bytes = &signature_bytes[signature_bytes.len() / 2..]; + let r = if let Ok(x) = Scalar::from_be_bytes(r_bytes) { + x + } else { + return Ok(false); + }; + + let s = if let Ok(x) = Scalar::from_be_bytes(s_bytes) { + x + } else { + return Ok(false); + }; + + let public_key_point = if let Ok(x) = Point::from_bytes(public_bytes) { + x + } else { + return Ok(false); + }; + + let public_key_x: Scalar = if let Some(x) = public_key_point.x() { + x.to_scalar() + } else { + return Ok(false); + }; + + let public_key = if let Ok(x) = convert_stark_scalar(&public_key_x) { + x + } else { + return Ok(false); + }; + let msg = if let Ok(x) = + convert_stark_scalar(&Scalar::::from_be_bytes_mod_order(message)) + { + x + } else { + return Ok(false); + }; + + let r = if let Ok(x) = convert_stark_scalar(&r) { + x + } else { + return Ok(false); + }; + + let s = if let Ok(x) = convert_stark_scalar(&s) { + x + } else { + return Ok(false); + }; + + let is_confirmed = starknet_crypto::verify(&public_key, &msg, &r, &s).is_ok(); + + log::trace!( + target: "Ecdsa-Stark-Precompile", + "Verified signature {:?} is {:?}", + signature_bytes, is_confirmed, + ); + + Ok(is_confirmed) + } +} + +pub fn convert_stark_scalar( + x: &Scalar, +) -> Result { + let bytes = x.to_be_bytes(); + debug_assert_eq!(bytes.len(), 32); + let mut buffer = [0u8; 32]; + buffer.copy_from_slice(bytes.as_bytes()); + starknet_crypto::FieldElement::from_bytes_be(&buffer).map_err(|_| "FieldElementError") +} diff --git a/precompiles/verify-ecdsa-stark-signature/src/mock.rs b/precompiles/verify-ecdsa-stark-signature/src/mock.rs new file mode 100644 index 000000000..5a3bd5dfd --- /dev/null +++ b/precompiles/verify-ecdsa-stark-signature/src/mock.rs @@ -0,0 +1,272 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +//! Test utilities +use super::*; +use frame_support::{construct_runtime, parameter_types, traits::Everything, weights::Weight}; +use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use precompile_utils::{precompile_set::*, testing::MockAccount}; +use serde::{Deserialize, Serialize}; +use sp_core::{sr25519::Public as sr25519Public, H160, H256, U256}; +use sp_runtime::{ + traits::{BlakeTwo256, IdentityLookup}, + AccountId32, BuildStorage, Perbill, +}; + +pub type AccountId = MockAccount; +pub type Balance = u128; + +type Block = frame_system::mocking::MockBlock; + +const PRECOMPILE_ADDRESS_BYTES: [u8; 32] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, +]; + +#[derive( + Eq, + PartialEq, + Ord, + PartialOrd, + Clone, + Encode, + Decode, + Debug, + MaxEncodedLen, + Serialize, + Deserialize, + derive_more::Display, + scale_info::TypeInfo, +)] +pub enum TestAccount { + Empty, + Alex, + Bobo, + Dave, + Charlie, + Eve, + PrecompileAddress, +} + +impl Default for TestAccount { + fn default() -> Self { + Self::Empty + } +} + +// needed for associated type in pallet_evm +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> AccountId32 { + match h160_account { + a if a == H160::repeat_byte(0x01) => TestAccount::Alex.into(), + a if a == H160::repeat_byte(0x02) => TestAccount::Bobo.into(), + a if a == H160::repeat_byte(0x03) => TestAccount::Charlie.into(), + a if a == H160::repeat_byte(0x04) => TestAccount::Dave.into(), + a if a == H160::repeat_byte(0x05) => TestAccount::Eve.into(), + a if a == H160::from_low_u64_be(6) => TestAccount::PrecompileAddress.into(), + _ => TestAccount::Empty.into(), + } + } +} + +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> sp_core::sr25519::Public { + match h160_account { + a if a == H160::repeat_byte(0x01) => sr25519Public::from_raw([1u8; 32]), + a if a == H160::repeat_byte(0x02) => sr25519Public::from_raw([2u8; 32]), + a if a == H160::repeat_byte(0x03) => sr25519Public::from_raw([3u8; 32]), + a if a == H160::repeat_byte(0x04) => sr25519Public::from_raw([4u8; 32]), + a if a == H160::repeat_byte(0x05) => sr25519Public::from_raw([5u8; 32]), + a if a == H160::from_low_u64_be(6) => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +impl From for H160 { + fn from(x: TestAccount) -> H160 { + match x { + TestAccount::Alex => H160::repeat_byte(0x01), + TestAccount::Bobo => H160::repeat_byte(0x02), + TestAccount::Charlie => H160::repeat_byte(0x03), + TestAccount::Dave => H160::repeat_byte(0x04), + TestAccount::Eve => H160::repeat_byte(0x05), + TestAccount::PrecompileAddress => H160::from_low_u64_be(6), + _ => Default::default(), + } + } +} + +impl From for AccountId32 { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => AccountId32::from([1u8; 32]), + TestAccount::Bobo => AccountId32::from([2u8; 32]), + TestAccount::Charlie => AccountId32::from([3u8; 32]), + TestAccount::Dave => AccountId32::from([4u8; 32]), + TestAccount::Eve => AccountId32::from([5u8; 32]), + TestAccount::PrecompileAddress => AccountId32::from(PRECOMPILE_ADDRESS_BYTES), + _ => AccountId32::from([0u8; 32]), + } + } +} + +impl From for sp_core::sr25519::Public { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => sr25519Public::from_raw([1u8; 32]), + TestAccount::Bobo => sr25519Public::from_raw([2u8; 32]), + TestAccount::Charlie => sr25519Public::from_raw([3u8; 32]), + TestAccount::Dave => sr25519Public::from_raw([4u8; 32]), + TestAccount::Eve => sr25519Public::from_raw([5u8; 32]), + TestAccount::PrecompileAddress => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +construct_runtime!( + pub enum Runtime + { + System: frame_system, + Balances: pallet_balances, + Evm: pallet_evm, + Timestamp: pallet_timestamp, + } +); + +parameter_types! { + pub const BlockHashCount: u32 = 250; + pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 1); + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} + +impl frame_system::Config for Runtime { + type BaseCallFilter = Everything; + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type Nonce = u64; + type Block = Block; + type RuntimeCall = RuntimeCall; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type RuntimeTask = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} +parameter_types! { + pub const ExistentialDeposit: u128 = 1; +} +impl pallet_balances::Config for Runtime { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = (); + type FreezeIdentifier = (); + type MaxFreezes = (); +} + +const MAX_POV_SIZE: u64 = 5 * 1024 * 1024; + +parameter_types! { + pub BlockGasLimit: U256 = U256::from(u64::MAX); + pub PrecompilesValue: Precompiles = Precompiles::new(); + pub const WeightPerGas: Weight = Weight::from_parts(1, 0); + pub GasLimitPovSizeRatio: u64 = { + let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64(); + block_gas_limit.saturating_div(MAX_POV_SIZE) + }; +} + +pub type Precompiles = + PrecompileSetBuilder, EcdsaStarkPrecompile>,)>; + +pub type PCall = EcdsaStarkPrecompileCall; + +parameter_types! { + pub SuicideQuickClearLimit: u32 = 0; +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = pallet_evm::FixedGasWeightMapping; + type WeightPerGas = WeightPerGas; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = AccountId; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type Runner = pallet_evm::runner::stack::Runner; + type PrecompilesType = Precompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = (); + type OnChargeTransaction = (); + type BlockGasLimit = BlockGasLimit; + type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; + type FindAuthor = (); + type OnCreate = (); + type SuicideQuickClearLimit = SuicideQuickClearLimit; + type GasLimitPovSizeRatio = GasLimitPovSizeRatio; + type Timestamp = Timestamp; + type WeightInfo = pallet_evm::weights::SubstrateWeight; +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +#[derive(Default)] +pub(crate) struct ExtBuilder; + +impl ExtBuilder { + pub(crate) fn build(self) -> sp_io::TestExternalities { + let t = frame_system::GenesisConfig::::default() + .build_storage() + .expect("Frame system builds valid default genesis config"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} diff --git a/precompiles/verify-ecdsa-stark-signature/src/tests.rs b/precompiles/verify-ecdsa-stark-signature/src/tests.rs new file mode 100644 index 000000000..fca7b071a --- /dev/null +++ b/precompiles/verify-ecdsa-stark-signature/src/tests.rs @@ -0,0 +1,101 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +use crate::mock::*; +use generic_ec::coords::{Coordinate, HasAffineXAndParity, Parity}; +use generic_ec::curves::Stark; +use generic_ec::Point; +use hex_literal::hex; +use precompile_utils::testing::*; +use sp_core::H160; +use starknet_crypto::FieldElement; + +fn precompiles() -> Precompiles { + PrecompilesValue::get() +} + +#[test] +fn wrong_signature_length_returns_false() { + ExtBuilder.build().execute_with(|| { + let public = [1u8; 33]; + let signature = hex!["0042"]; + let message = hex!["00"]; + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: public.into(), + signature_bytes: signature.into(), + message: message.into(), + }, + ) + .expect_no_logs() + .execute_returns(false); + }); +} + +#[test] +fn signature_verification_works_secp256r1_ecdsa() { + ExtBuilder.build().execute_with(|| { + let private_key = field_element_from_be_hex( + "0000000000000000000000000000000000000000000000000000000000000001", + ); + let message = field_element_from_be_hex( + "0000000000000000000000000000000000000000000000000000000000000002", + ); + let k = field_element_from_be_hex( + "0000000000000000000000000000000000000000000000000000000000000003", + ); + let signature = starknet_crypto::sign(&private_key, &message, &k).unwrap(); + let public_key = starknet_crypto::get_public_key(&private_key); + let public_key_point: Point = Point::from_x_and_parity( + &Coordinate::from_be_bytes(&public_key.to_bytes_be()).unwrap(), + Parity::Odd, + ) + .unwrap(); + let mut encoded_signature: [u8; 64] = [0u8; 64]; + encoded_signature[..32].copy_from_slice(&signature.r.to_bytes_be()); + encoded_signature[32..].copy_from_slice(&signature.s.to_bytes_be()); + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PCall::verify { + public_bytes: public_key_point.to_bytes(true).to_vec().into(), + signature_bytes: encoded_signature.to_vec().into(), + message: message.to_bytes_be().to_vec().into(), + }, + ) + .expect_no_logs() + .execute_returns(true); + }); +} + +pub fn field_element_from_be_hex(hex: &str) -> FieldElement { + let decoded = hex::decode(hex.trim_start_matches("0x")).unwrap(); + + if decoded.len() > 32 { + panic!("hex string too long"); + } + + let mut buffer = [0u8; 32]; + buffer[(32 - decoded.len())..].copy_from_slice(&decoded[..]); + + FieldElement::from_bytes_be(&buffer).unwrap() +} diff --git a/precompiles/verify-schnorr-signatures/Cargo.toml b/precompiles/verify-schnorr-signatures/Cargo.toml new file mode 100644 index 000000000..746faf3ef --- /dev/null +++ b/precompiles/verify-schnorr-signatures/Cargo.toml @@ -0,0 +1,70 @@ +[package] +name = "pallet-evm-precompile-verify-schnorr-signatures" +version = "0.1.0" +authors = { workspace = true } +edition = "2021" +description = "A Precompile to verify schnorr signatures" + +[dependencies] +log = { workspace = true } +precompile-utils = { workspace = true } + +frost-core = { workspace = true, default-features = false } +frost-ed25519 = { workspace = true, default-features = false } +elliptic-curve = { version = "0.13", features = ["hash2curve"], default-features = false } +frost-ed448 = { workspace = true, default-features = false } +frost-ristretto255 = { workspace = true, default-features = false } +frost-secp256k1 = { workspace = true, default-features = false } +frost-taproot = { workspace = true, default-features = false } +frost-p256 = { workspace = true, default-features = false } +frost-p384 = { workspace = true, default-features = false } + +# Substrate +sp-core = { workspace = true } +sp-std = { workspace = true } +sp-io = { workspace = true } +parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } + + + +# Frontier +fp-evm = { workspace = true } +pallet-evm = { workspace = true } + +[dev-dependencies] +derive_more = { workspace = true } +hex-literal = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } +rand_core = { workspace = true } + +precompile-utils = { workspace = true, features = ["std", "testing"] } + +# Substrate +pallet-balances = { workspace = true, features = ["std"] } +pallet-timestamp = { workspace = true, features = ["std"] } +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-runtime = { workspace = true } + + +[features] +default = ["std"] +std = [ + "fp-evm/std", + "pallet-evm/std", + "parity-scale-codec/std", + "sp-core/std", + "precompile-utils/std", + "sp-std/std", + "sp-io/std", + "frost-core/std", + "frost-ed25519/std", + "elliptic-curve/std", + "frost-ed448/std", + "frost-ristretto255/std", + "frost-secp256k1/std", + "frost-taproot/std", + "frost-p256/std", + "frost-p384/std", +] diff --git a/precompiles/verify-schnorr-signatures/SchnorrSignatureVerifier.sol b/precompiles/verify-schnorr-signatures/SchnorrSignatureVerifier.sol new file mode 100644 index 000000000..d6fd79a74 --- /dev/null +++ b/precompiles/verify-schnorr-signatures/SchnorrSignatureVerifier.sol @@ -0,0 +1,16 @@ +pragma solidity ^0.8.0; + +/** + * @title ISchnorrSignatureVerifier interface to verify schnorr isgnature. + */ +interface ISchnorrSignatureVerifier { + /** + * @dev Verify signed message . + * @return A boolean confirming whether the public key is signer for the message. + */ + function verify( + bytes32 public_key, + bytes calldata signature, + bytes calldata message + ) external view returns (bool); +} \ No newline at end of file diff --git a/precompiles/verify-schnorr-signatures/src/lib.rs b/precompiles/verify-schnorr-signatures/src/lib.rs new file mode 100644 index 000000000..dfeae5613 --- /dev/null +++ b/precompiles/verify-schnorr-signatures/src/lib.rs @@ -0,0 +1,315 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] + +use fp_evm::PrecompileHandle; +use precompile_utils::prelude::*; +use sp_core::sr25519; +use sp_core::ConstU32; +use sp_io::{crypto::sr25519_verify, hashing::keccak_256}; +use sp_std::marker::PhantomData; +use sp_std::prelude::*; + +use frost_core::{signature::Signature, verifying_key::VerifyingKey}; +use frost_ed25519::Ed25519Sha512; +use frost_ed448::Ed448Shake256; +use frost_p256::P256Sha256; +use frost_p384::P384Sha384; +use frost_ristretto255::Ristretto255Sha512; +use frost_secp256k1::Secp256K1Sha256; +use frost_taproot::Secp256K1Taproot; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +/// Macro to verify a Schnorr signature using the specified signature scheme. +macro_rules! verify_signature { + ($impl_type:ty, $key:expr, $signature:expr, $msg:expr, $key_default:expr, $sig_default:expr) => {{ + let verifying_key: VerifyingKey<$impl_type> = + VerifyingKey::deserialize($key.try_into().unwrap_or($key_default)) + .map_err(|_| revert("InvalidVerifyingKeyDeserialization"))?; + let sig: Signature<$impl_type> = + Signature::deserialize($signature.try_into().unwrap_or($sig_default)) + .map_err(|_| revert("InvalidSignatureDeserialization"))?; + verifying_key.verify($msg, &sig).map_err(|_| revert("InvalidSignature"))? + }}; +} + +/// Utility function to create slice of fixed size +pub fn to_slice_32(val: &[u8]) -> Option<[u8; 32]> { + if val.len() == 32 { + let mut key = [0u8; 32]; + key[..32].copy_from_slice(val); + + return Some(key); + } + None +} + +/// A precompile to verify SchnorrSr25519 signature +pub struct SchnorrSr25519Precompile(PhantomData); + +#[precompile_utils::precompile] +impl SchnorrSr25519Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + // Convert the signature from bytes to sr25519::Signature + let signature: sr25519::Signature = + signature_bytes.as_slice().try_into().map_err(|_| revert("Invalid Signature"))?; + + // Convert public key from bytes to sr25519::Public + let public_key: sr25519::Public = + sr25519::Public(public_bytes.try_into().map_err(|_| revert("Invalid Publci Key"))?); + + // Compute its keccak256 hash + let hash = keccak_256(&message); + + // Verify the Schnorr signature using sr25519_verify + let is_confirmed = sr25519_verify(&signature, &hash, &public_key); + Ok(is_confirmed) + } +} + +/// A precompile to verify SchnorrSecp256k1 signature +pub struct SchnorrSecp256k1Precompile(PhantomData); + +#[precompile_utils::precompile] +impl SchnorrSecp256k1Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + verify_signature!( + Secp256K1Sha256, + public_bytes.as_slice(), + signature_bytes.as_slice(), + &message, + [0u8; 33], + [0u8; 65] + ); + + Ok(false) + } +} + +/// A precompile to verify SchnorrEd25519 signature +pub struct SchnorrEd25519Precompile(PhantomData); + +#[precompile_utils::precompile] +impl SchnorrEd25519Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + verify_signature!( + Ed25519Sha512, + public_bytes.as_slice(), + signature_bytes.as_slice(), + &message, + [0u8; 32], + [0u8; 64] + ); + + Ok(false) + } +} + +/// A precompile to verify SchnorrEd448 signature +pub struct SchnorrEd448Precompile(PhantomData); + +#[precompile_utils::precompile] +impl SchnorrEd448Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + verify_signature!( + Ed448Shake256, + public_bytes.as_slice(), + signature_bytes.as_slice(), + &message, + [0u8; 57], + [0u8; 114] + ); + + Ok(false) + } +} + +/// A precompile to verify SchnorrP256 signature +pub struct SchnorrP256Precompile(PhantomData); + +#[precompile_utils::precompile] +impl SchnorrP256Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + verify_signature!( + P256Sha256, + public_bytes.as_slice(), + signature_bytes.as_slice(), + &message, + [0u8; 33], + [0u8; 65] + ); + + Ok(false) + } +} + +/// A precompile to verify SchnorrP384 signature +pub struct SchnorrP384Precompile(PhantomData); + +#[precompile_utils::precompile] +impl SchnorrP384Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + verify_signature!( + P384Sha384, + public_bytes.as_slice(), + signature_bytes.as_slice(), + &message, + [0u8; 49], + [0u8; 97] + ); + + Ok(false) + } +} + +/// A precompile to verify SchnorrRistretto255 signature +pub struct SchnorrRistretto255Precompile(PhantomData); + +#[precompile_utils::precompile] +impl SchnorrRistretto255Precompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + verify_signature!( + Ristretto255Sha512, + public_bytes.as_slice(), + signature_bytes.as_slice(), + &message, + [0u8; 32], + [0u8; 64] + ); + + Ok(false) + } +} + +/// A precompile to verify SchnorrTaproot signature +pub struct SchnorrTaprootPrecompile(PhantomData); + +#[precompile_utils::precompile] +impl SchnorrTaprootPrecompile { + #[precompile::public("verify(bytes,bytes,bytes)")] + #[precompile::view] + fn verify( + _handle: &mut impl PrecompileHandle, + public_bytes: BoundedBytes>, + signature_bytes: BoundedBytes>, + message: UnboundedBytes, + ) -> EvmResult { + // Parse arguments + let public_bytes: Vec = public_bytes.into(); + let signature_bytes: Vec = signature_bytes.into(); + let message: Vec = message.into(); + + verify_signature!( + Secp256K1Taproot, + public_bytes.as_slice(), + signature_bytes.as_slice(), + &message, + [0u8; 33], + [0u8; 65] + ); + + Ok(false) + } +} diff --git a/precompiles/verify-schnorr-signatures/src/mock.rs b/precompiles/verify-schnorr-signatures/src/mock.rs new file mode 100644 index 000000000..e4f086af3 --- /dev/null +++ b/precompiles/verify-schnorr-signatures/src/mock.rs @@ -0,0 +1,283 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +//! Test utilities +use super::*; +use frame_support::{construct_runtime, parameter_types, traits::Everything, weights::Weight}; +use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use precompile_utils::{precompile_set::*, testing::MockAccount}; +use serde::{Deserialize, Serialize}; +use sp_core::{sr25519::Public as sr25519Public, H160, H256, U256}; +use sp_runtime::{ + traits::{BlakeTwo256, IdentityLookup}, + AccountId32, BuildStorage, Perbill, +}; + +pub type AccountId = MockAccount; +pub type Balance = u128; + +type Block = frame_system::mocking::MockBlock; + +const PRECOMPILE_ADDRESS_BYTES: [u8; 32] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, +]; + +#[derive( + Eq, + PartialEq, + Ord, + PartialOrd, + Clone, + Encode, + Decode, + Debug, + MaxEncodedLen, + Serialize, + Deserialize, + derive_more::Display, + scale_info::TypeInfo, +)] +pub enum TestAccount { + Empty, + Alex, + Bobo, + Dave, + Charlie, + Eve, + PrecompileAddress, +} + +impl Default for TestAccount { + fn default() -> Self { + Self::Empty + } +} + +// needed for associated type in pallet_evm +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> AccountId32 { + match h160_account { + a if a == H160::repeat_byte(0x01) => TestAccount::Alex.into(), + a if a == H160::repeat_byte(0x02) => TestAccount::Bobo.into(), + a if a == H160::repeat_byte(0x03) => TestAccount::Charlie.into(), + a if a == H160::repeat_byte(0x04) => TestAccount::Dave.into(), + a if a == H160::repeat_byte(0x05) => TestAccount::Eve.into(), + a if a == H160::from_low_u64_be(6) => TestAccount::PrecompileAddress.into(), + _ => TestAccount::Empty.into(), + } + } +} + +impl AddressMapping for TestAccount { + fn into_account_id(h160_account: H160) -> sp_core::sr25519::Public { + match h160_account { + a if a == H160::repeat_byte(0x01) => sr25519Public::from_raw([1u8; 32]), + a if a == H160::repeat_byte(0x02) => sr25519Public::from_raw([2u8; 32]), + a if a == H160::repeat_byte(0x03) => sr25519Public::from_raw([3u8; 32]), + a if a == H160::repeat_byte(0x04) => sr25519Public::from_raw([4u8; 32]), + a if a == H160::repeat_byte(0x05) => sr25519Public::from_raw([5u8; 32]), + a if a == H160::from_low_u64_be(6) => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +impl From for H160 { + fn from(x: TestAccount) -> H160 { + match x { + TestAccount::Alex => H160::repeat_byte(0x01), + TestAccount::Bobo => H160::repeat_byte(0x02), + TestAccount::Charlie => H160::repeat_byte(0x03), + TestAccount::Dave => H160::repeat_byte(0x04), + TestAccount::Eve => H160::repeat_byte(0x05), + TestAccount::PrecompileAddress => H160::from_low_u64_be(6), + _ => Default::default(), + } + } +} + +impl From for AccountId32 { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => AccountId32::from([1u8; 32]), + TestAccount::Bobo => AccountId32::from([2u8; 32]), + TestAccount::Charlie => AccountId32::from([3u8; 32]), + TestAccount::Dave => AccountId32::from([4u8; 32]), + TestAccount::Eve => AccountId32::from([5u8; 32]), + TestAccount::PrecompileAddress => AccountId32::from(PRECOMPILE_ADDRESS_BYTES), + _ => AccountId32::from([0u8; 32]), + } + } +} + +impl From for sp_core::sr25519::Public { + fn from(x: TestAccount) -> Self { + match x { + TestAccount::Alex => sr25519Public::from_raw([1u8; 32]), + TestAccount::Bobo => sr25519Public::from_raw([2u8; 32]), + TestAccount::Charlie => sr25519Public::from_raw([3u8; 32]), + TestAccount::Dave => sr25519Public::from_raw([4u8; 32]), + TestAccount::Eve => sr25519Public::from_raw([5u8; 32]), + TestAccount::PrecompileAddress => sr25519Public::from_raw(PRECOMPILE_ADDRESS_BYTES), + _ => sr25519Public::from_raw([0u8; 32]), + } + } +} + +construct_runtime!( + pub enum Runtime + { + System: frame_system, + Balances: pallet_balances, + Evm: pallet_evm, + Timestamp: pallet_timestamp, + } +); + +parameter_types! { + pub const BlockHashCount: u32 = 250; + pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 1); + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} + +impl frame_system::Config for Runtime { + type BaseCallFilter = Everything; + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type Nonce = u64; + type Block = Block; + type RuntimeCall = RuntimeCall; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type RuntimeTask = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} +parameter_types! { + pub const ExistentialDeposit: u128 = 1; +} +impl pallet_balances::Config for Runtime { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = (); + type FreezeIdentifier = (); + type MaxFreezes = (); +} + +const MAX_POV_SIZE: u64 = 5 * 1024 * 1024; + +parameter_types! { + pub BlockGasLimit: U256 = U256::from(u64::MAX); + pub PrecompilesValue: Precompiles = Precompiles::new(); + pub const WeightPerGas: Weight = Weight::from_parts(1, 0); + pub GasLimitPovSizeRatio: u64 = { + let block_gas_limit = BlockGasLimit::get().min(u64::MAX.into()).low_u64(); + block_gas_limit.saturating_div(MAX_POV_SIZE) + }; +} + +pub type Precompiles = PrecompileSetBuilder< + R, + ( + PrecompileAt, SchnorrSr25519Precompile>, + PrecompileAt, SchnorrSecp256k1Precompile>, + PrecompileAt, SchnorrEd25519Precompile>, + PrecompileAt, SchnorrEd448Precompile>, + PrecompileAt, SchnorrP256Precompile>, + PrecompileAt, SchnorrP384Precompile>, + PrecompileAt, SchnorrRistretto255Precompile>, + PrecompileAt, SchnorrTaprootPrecompile>, + ), +>; + +pub type PcallSchnorrSr25519 = SchnorrSr25519PrecompileCall; + +parameter_types! { + pub SuicideQuickClearLimit: u32 = 0; +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = pallet_evm::FixedGasWeightMapping; + type WeightPerGas = WeightPerGas; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = AccountId; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type Runner = pallet_evm::runner::stack::Runner; + type PrecompilesType = Precompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = (); + type OnChargeTransaction = (); + type BlockGasLimit = BlockGasLimit; + type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; + type FindAuthor = (); + type OnCreate = (); + type SuicideQuickClearLimit = SuicideQuickClearLimit; + type GasLimitPovSizeRatio = GasLimitPovSizeRatio; + type Timestamp = Timestamp; + type WeightInfo = pallet_evm::weights::SubstrateWeight; +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +#[derive(Default)] +pub(crate) struct ExtBuilder; + +impl ExtBuilder { + pub(crate) fn build(self) -> sp_io::TestExternalities { + let t = frame_system::GenesisConfig::::default() + .build_storage() + .expect("Frame system builds valid default genesis config"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} diff --git a/precompiles/verify-schnorr-signatures/src/tests.rs b/precompiles/verify-schnorr-signatures/src/tests.rs new file mode 100644 index 000000000..523f41efa --- /dev/null +++ b/precompiles/verify-schnorr-signatures/src/tests.rs @@ -0,0 +1,46 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +use crate::mock::*; +use precompile_utils::testing::*; +use sp_core::{sr25519, Pair, H160}; + +fn precompiles() -> Precompiles { + PrecompilesValue::get() +} + +#[test] +fn signature_verification_works_sr25519_schnorr() { + ExtBuilder.build().execute_with(|| { + let pair = sr25519::Pair::from_seed(b"12345678901234567890123456789012"); + let public = pair.public(); + let message = b"hello world"; + let signature = pair.sign(message); + + precompiles() + .prepare_test( + TestAccount::Alex, + H160::from_low_u64_be(1), + PcallSchnorrSr25519::verify { + public_bytes: public.0.to_vec().into(), + signature_bytes: signature.0.to_vec().into(), + message: message.into(), + }, + ) + .expect_no_logs() + .execute_returns(false); + }); +} diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index f90642228..b3777c776 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -20,6 +20,7 @@ sp-core = { workspace = true } sp-runtime = { workspace = true } sp-std = { workspace = true } sp-staking = { workspace = true } +ethabi = { workspace = true } frost-core = { workspace = true } @@ -31,7 +32,21 @@ ark-ff = { workspace = true, default-features = false, optional = true } ark-groth16 = { workspace = true, default-features = false, optional = true } ark-serialize = { workspace = true, default-features = false, optional = true } ark-std = { workspace = true, default-features = false, optional = true } -ethabi = { workspace = true, optional = true } + +[dependencies.educe] +version = "0.5.11" +features = [ + "Debug", + "Clone", + "Copy", + "PartialEq", + "Eq", + "PartialOrd", + "Ord", + "Hash", + "Default" +] +default-features = false [dev-dependencies] hex = { workspace = true } @@ -56,7 +71,7 @@ std = [ "ark-ff?/std", "ark-groth16?/std", "ark-serialize?/std", - "ethabi?/std", + "ethabi/std", "sp-staking/std" ] verifying = [ @@ -67,7 +82,6 @@ verifying = [ "ark-groth16", "ark-serialize", "ark-bn254", - "ethabi", ] integration-tests = [] fast-runtime = [] diff --git a/primitives/src/jobs/mod.rs b/primitives/src/jobs/mod.rs deleted file mode 100644 index 57860626f..000000000 --- a/primitives/src/jobs/mod.rs +++ /dev/null @@ -1,411 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::roles::RoleType; -use frame_support::pallet_prelude::*; -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; -use sp_core::RuntimeDebug; -use sp_runtime::traits::Get; -use sp_std::vec::Vec; - -pub type JobId = u64; - -pub mod traits; -pub mod tss; -pub mod zksaas; - -pub use tss::*; -pub use zksaas::*; - -/// Represents a job submission with specified `AccountId` and `BlockNumber`. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -pub struct JobSubmission< - AccountId, - BlockNumber, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxAdditionalParamsLen: Get, -> { - /// Represents the maximum allowed submission time for a job result. - /// Once this time has passed, the result cannot be submitted. - pub expiry: BlockNumber, - - /// The time-to-live (TTL) for the job, which determines the maximum allowed time for this job - /// to be available. After the TTL expires, the job can no longer be used. - pub ttl: BlockNumber, - - /// The type of the job submission. - pub job_type: JobType, - - /// The fallback option selected by user - pub fallback: FallbackOptions, -} - -/// Represents a job info -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -pub struct JobInfo< - AccountId, - BlockNumber, - Balance, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxAdditionalParamsLen: Get, -> { - /// The caller that requested the job - pub owner: AccountId, - - /// Represents the maximum allowed submission time for a job result. - /// Once this time has passed, the result cannot be submitted. - pub expiry: BlockNumber, - - /// The time-to-live (TTL) for the job, which determines the maximum allowed time for this job - /// to be available. After the TTL expires, the job can no longer be used. - pub ttl: BlockNumber, - - /// The type of the job submission. - pub job_type: JobType, - - /// The fee taken for the job - pub fee: Balance, - - /// The fallback option selected by user - pub fallback: FallbackOptions, -} - -/// Represents a job with its result. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -pub struct JobWithResult< - AccountId, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxKeyLen: Get, - MaxDataLen: Get, - MaxSignatureLen: Get, - MaxProofLen: Get, - MaxAdditionalParamsLen: Get, -> { - /// Current Job type - pub job_type: JobType, - /// Phase one job type if any. - /// - /// None if this job is a phase one job. - pub phase_one_job_type: - Option>, - /// Current job result - pub result: JobResult< - MaxParticipants, - MaxKeyLen, - MaxSignatureLen, - MaxDataLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, -} - -/// Enum representing different types of jobs. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum JobType< - AccountId, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxAdditionalParamsLen: Get, -> { - /// Distributed Key Generation (DKG) job type. - DKGTSSPhaseOne(DKGTSSPhaseOneJobType), - /// DKG Signature job type. - DKGTSSPhaseTwo(DKGTSSPhaseTwoJobType), - /// DKG Key Refresh job type. - DKGTSSPhaseThree(DKGTSSPhaseThreeJobType), - /// DKG Key Rotation job type. - DKGTSSPhaseFour(DKGTSSPhaseFourJobType), - /// (zk-SNARK) Create Circuit job type. - ZkSaaSPhaseOne(ZkSaaSPhaseOneJobType), - /// (zk-SNARK) Create Proof job type. - ZkSaaSPhaseTwo(ZkSaaSPhaseTwoJobType), -} - -impl< - AccountId, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxAdditionalParamsLen: Get, - > JobType -{ - /// Checks if the job type is a phase one job. - pub fn is_phase_one(&self) -> bool { - use crate::jobs::JobType::*; - if matches!(self, DKGTSSPhaseOne(_) | ZkSaaSPhaseOne(_)) { - return true; - } - false - } - - /// Gets the participants for the job type, if applicable. - pub fn get_participants(self) -> Option> { - use crate::jobs::JobType::*; - match self { - DKGTSSPhaseOne(info) => Some(info.participants), - ZkSaaSPhaseOne(info) => Some(info.participants), - _ => None, - } - } - - /// Gets the threshold value for the job type, if applicable. - pub fn get_threshold(self) -> Option { - use crate::jobs::JobType::*; - match self { - DKGTSSPhaseOne(info) => Some(info.threshold), - _ => None, - } - } - - /// Gets the role associated with the job type. - pub fn get_role_type(&self) -> RoleType { - match self { - JobType::DKGTSSPhaseOne(job) => RoleType::Tss(job.role_type), - JobType::ZkSaaSPhaseOne(job) => RoleType::ZkSaaS(job.role_type), - JobType::DKGTSSPhaseTwo(job) => RoleType::Tss(job.role_type), - JobType::ZkSaaSPhaseTwo(job) => RoleType::ZkSaaS(job.role_type), - JobType::DKGTSSPhaseThree(job) => RoleType::Tss(job.role_type), - JobType::DKGTSSPhaseFour(job) => RoleType::Tss(job.role_type), - } - } - - /// Performs a basic sanity check on the job type. - /// - /// This function is intended for simple checks and may need improvement in the future. - pub fn sanity_check(&self) -> bool { - match self { - JobType::DKGTSSPhaseOne(info) => info.participants.len() >= info.threshold.into(), - JobType::ZkSaaSPhaseOne(info) => !info.participants.is_empty(), - _ => true, - } - } - - /// Gets the phase one ID for phase two jobs, if applicable. - pub fn get_phase_one_id(&self) -> Option { - use crate::jobs::JobType::*; - match self { - DKGTSSPhaseTwo(info) => Some(info.phase_one_id), - DKGTSSPhaseThree(info) => Some(info.phase_one_id), - DKGTSSPhaseFour(info) => Some(info.phase_one_id), - ZkSaaSPhaseTwo(info) => Some(info.phase_one_id), - _ => None, - } - } - - /// Updates the phase one ID for phase two jobs, if applicable. - pub fn update_phase_one_id(&mut self, new_phase_one_id: u64) { - use crate::jobs::JobType::*; - match self { - DKGTSSPhaseTwo(info) => info.phase_one_id = new_phase_one_id, - DKGTSSPhaseThree(info) => info.phase_one_id = new_phase_one_id, - DKGTSSPhaseFour(info) => info.phase_one_id = new_phase_one_id, - ZkSaaSPhaseTwo(info) => info.phase_one_id = new_phase_one_id, - _ => {}, - } - } - - pub fn get_permitted_caller(self) -> Option { - use crate::jobs::JobType::*; - match self { - DKGTSSPhaseOne(info) => info.permitted_caller, - ZkSaaSPhaseOne(info) => info.permitted_caller, - _ => None, - } - } -} - -/// Enum representing different states of a job. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum JobState { - /// The job is active. - Active, - /// The job is pending. - Pending, - /// The job has been terminated. - Terminated, -} - -/// Enum representing fallback options that the job creator has -#[derive(Copy, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum FallbackOptions { - /// The job should be destroyed and caller refunded - Destroy, - /// The job can be regenerated with a lower threshold - /// The user supplies the lower threshold - RegenerateWithThreshold(u8), -} - -/// Represents a job submission with specified `AccountId` and `BlockNumber`. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct PhaseResult< - AccountId, - BlockNumber, - MaxParticipants: Get + Clone, - MaxKeyLen: Get, - MaxDataLen: Get, - MaxSignatureLen: Get, - MaxSubmissionLen: Get, - MaxProofLen: Get, - MaxAdditionalParamsLen: Get, -> { - /// The owner's account ID. - pub owner: AccountId, - /// The type of the job submission. - pub result: JobResult< - MaxParticipants, - MaxKeyLen, - MaxSignatureLen, - MaxDataLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - /// The time-to-live (TTL) for the job, which determines the maximum allowed time for this job - /// to be available. After the TTL expires, the job can no longer be used. - pub ttl: BlockNumber, - /// permitted caller to use this result - pub permitted_caller: Option, - /// The type of the job submission. - pub job_type: JobType, -} - -impl< - AccountId, - BlockNumber, - MaxParticipants: Get + Clone, - MaxKeyLen: Get, - MaxDataLen: Get, - MaxSignatureLen: Get, - MaxSubmissionLen: Get, - MaxProofLen: Get, - MaxAdditionalParamsLen: Get, - > - PhaseResult< - AccountId, - BlockNumber, - MaxParticipants, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxSubmissionLen, - MaxProofLen, - MaxAdditionalParamsLen, - > where - AccountId: Clone, -{ - pub fn participants(&self) -> Option> { - match &self.job_type { - JobType::DKGTSSPhaseOne(x) => Some(x.participants.clone()), - JobType::ZkSaaSPhaseOne(x) => Some(x.participants.clone()), - _ => None, - } - } - - pub fn threshold(&self) -> Option { - match &self.job_type { - JobType::DKGTSSPhaseOne(x) => Some(x.threshold), - _ => None, - } - } -} - -/// Represents different types of validator offences. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum ValidatorOffence { - /// The validator has been inactive. - Inactivity, - - /// The validator has signed an invalid message. - InvalidSignatureSubmitted, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct RpcResponseJobsData< - AccountId, - BlockNumber, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxAdditionalParamsLen: Get, -> { - /// The job id of the job - pub job_id: JobId, - - /// The type of the job submission. - pub job_type: JobType, - - /// Represents the maximum allowed submission time for a job result. - /// Once this time has passed, the result cannot be submitted. - pub expiry: BlockNumber, - - /// The time-to-live (TTL) for the job, which determines the maximum allowed time for this job - /// to be available. After the TTL expires, the job can no longer be used. - pub ttl: BlockNumber, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum JobResult< - MaxParticipants: Get, - MaxKeyLen: Get, - MaxSignatureLen: Get, - MaxDataLen: Get, - MaxProofLen: Get, - MaxAdditionalParamsLen: Get, -> { - DKGPhaseOne(DKGTSSKeySubmissionResult), - DKGPhaseTwo( - DKGTSSSignatureResult, - ), - DKGPhaseThree(DKGTSSKeyRefreshResult), - DKGPhaseFour(DKGTSSKeyRotationResult), - ZkSaaSPhaseOne(ZkSaaSCircuitResult), - ZkSaaSPhaseTwo(ZkSaaSProofResult), -} - -/// Represents different types of validator offences. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum ValidatorOffenceType { - /// The validator has been inactive. - Inactivity, - /// Submitted invalid signature. - InvalidSignatureSubmitted, - /// Rejected valid action. - RejectedValidAction, - /// Approved invalid action. - ApprovedInvalidAction, -} - -/// An offence report that is filed if a validator misbehaves. -#[derive(Clone, RuntimeDebug, TypeInfo, PartialEq, Eq)] -pub struct ReportRestakerOffence { - /// The current session index in which offence is reported. - pub session_index: u32, - /// The size of the validator set in current session/era. - pub validator_set_count: u32, - /// The type of offence - pub offence_type: ValidatorOffenceType, - /// Role type against which offence is reported. - pub role_type: RoleType, - /// Offenders - pub offenders: Vec, -} diff --git a/primitives/src/jobs/traits.rs b/primitives/src/jobs/traits.rs deleted file mode 100644 index e9ec323c0..000000000 --- a/primitives/src/jobs/traits.rs +++ /dev/null @@ -1,165 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::{ - jobs::{JobId, JobSubmission, JobWithResult, ValidatorOffenceType}, - roles::RoleType, -}; -use sp_arithmetic::traits::{BaseArithmetic, Unsigned}; -use sp_runtime::{traits::Get, DispatchResult}; -use sp_std::vec::Vec; - -/// A trait that describes the job to fee calculation. -pub trait JobToFee< - AccountId, - BlockNumber, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxAdditionalParamsLen: Get, -> -{ - /// The type that is returned as result from calculation. - type Balance: BaseArithmetic + From + Copy + Unsigned; - - /// Calculates the fee from the passed `job`. - /// - /// # Parameters - /// - /// - `job`: A reference to the job submission information containing `AccountId` and - /// `BlockNumber`. - /// - /// # Returns - /// - /// Returns the calculated fee as `Self::Balance`. - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Self::Balance; - - /// Calculates the fee to extend an already existing result. - /// - /// # Parameters - /// - /// - `result`: A reference to the result stored onchain - /// - `extension_time` : The number of blocks to extend the job ttl by - /// - /// # Returns - /// - /// Returns the calculated fee as `Self::Balance`. - fn calculate_result_extension_fee( - result: Vec, - extension_time: BlockNumber, - ) -> Self::Balance; -} - -/// A trait that describes the job result verification. -pub trait MPCHandler< - AccountId, - BlockNumber, - Balance, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, - MaxKeyLen: Get, - MaxDataLen: Get, - MaxSignatureLen: Get, - MaxProofLen: Get, - MaxAdditionalParamsLen: Get, -> -{ - /// Verifies the result of a job. - /// - /// # Parameters - /// - /// - `data`: Details of the job with its result to verify - /// - /// # Errors - /// - /// Returns a `DispatchResult` indicating success or an error if verification fails. - fn verify( - data: JobWithResult< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - ) -> DispatchResult; - - // Verify a validator report - /// - /// This function is responsible for verifying a report against a specific validator's - /// offence and taking appropriate actions based on the report. - /// - /// # Arguments - /// - /// - `validator`: The account ID of the validator being reported. - /// - `offence`: Details of the offence reported against the validator. - /// - `report`: The report data provided by the reporting entity. - fn verify_validator_report( - validator: AccountId, - offence: ValidatorOffenceType, - signatures: Vec>, - ) -> DispatchResult; - - /// Validate the authority key associated with a specific validator. - /// - /// This function is responsible for validating the authority key associated with a given - /// validator. - /// - /// # Arguments - /// - /// - `validator`: The account ID of the validator whose authority key is to be validated. - /// - `authority_key`: The authority key to be validated. - fn validate_authority_key(validator: AccountId, authority_key: Vec) -> DispatchResult; -} - -/// A trait that handles various aspects of jobs for a validator. -pub trait JobsHandler { - /// Returns a list of active jobs associated with a validator. - /// - /// # Parameters - /// - /// - `validator`: The account ID of the validator. - /// - /// # Returns - /// - /// Returns a vector of `JobId` representing the active jobs of the validator. - fn get_active_jobs(validator: AccountId) -> Vec<(RoleType, JobId)>; - - /// Exits a job from the known set of a validator. - /// - /// # Parameters - /// - /// - `validator`: The account ID of the validator. - /// - `job_id`: The ID of the job to exit from the known set. - /// - /// # Errors - /// - /// Returns a `DispatchResult` indicating success or an error if the operation fails. - fn exit_from_known_set( - validator: AccountId, - role_type: RoleType, - job_id: JobId, - ) -> DispatchResult; -} diff --git a/primitives/src/jobs/tss.rs b/primitives/src/jobs/tss.rs deleted file mode 100644 index c50c57f7e..000000000 --- a/primitives/src/jobs/tss.rs +++ /dev/null @@ -1,213 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::roles::ThresholdSignatureRoleType; -use frame_support::pallet_prelude::*; -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; -use sp_core::RuntimeDebug; -use sp_runtime::traits::Get; - -use super::JobId; - -/// Represents the Distributed Key Generation (DKG) job type. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct DKGTSSPhaseOneJobType + Clone> { - /// List of participants' account IDs. - pub participants: BoundedVec, - - /// The threshold value for the DKG. - pub threshold: u8, - - /// The caller permitted to use this result later - pub permitted_caller: Option, - - /// The role type to be used - pub role_type: ThresholdSignatureRoleType, - - /// specifies whether hd derivation is enabled. - pub hd_wallet: bool, -} - -/// Represents the DKG Signature job type. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct DKGTSSPhaseTwoJobType, MaxAdditionalParamsLen: Get> { - /// The phase one ID. - pub phase_one_id: JobId, - - /// The submission data as a vector of bytes. - pub submission: BoundedVec, - - /// Optional derivation path for the signature - pub derivation_path: Option>, - - /// The role type to be used - pub role_type: ThresholdSignatureRoleType, -} - -/// Represents the DKG Key Refresh job type. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct DKGTSSPhaseThreeJobType { - /// The phase one ID. - pub phase_one_id: JobId, - - /// The role type to be used - pub role_type: ThresholdSignatureRoleType, -} - -/// Represents the DKG Key Rotation job type. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct DKGTSSPhaseFourJobType { - /// The phase one ID. - pub phase_one_id: JobId, - /// The new phase one ID. - /// That will be used for the rotation. - pub new_phase_one_id: JobId, - /// The role type to be used - pub role_type: ThresholdSignatureRoleType, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct DKGTSSKeySubmissionResult< - MaxKeyLen: Get, - MaxParticipants: Get, - MaxSignatureLen: Get, -> { - /// Signature scheme of the DKG - pub signature_scheme: DigitalSignatureScheme, - - /// Submitted key - pub key: BoundedVec, - /// Chain Key used during the Keygen. - /// Used during derivation of child keys. - pub chain_code: Option<[u8; 32]>, - /// List of participants' public keys - pub participants: BoundedVec, MaxParticipants>, - - /// List of participants' signatures - pub signatures: BoundedVec, MaxParticipants>, - - /// threshold needed to confirm the result - pub threshold: u8, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct DKGTSSSignatureResult< - MaxDataLen: Get, - MaxKeyLen: Get, - MaxSignatureLen: Get, - MaxAdditionalParamsLen: Get, -> { - /// Signature scheme to use for DKG - pub signature_scheme: DigitalSignatureScheme, - - /// The input data - pub data: BoundedVec, - - /// The signature to verify - pub signature: BoundedVec, - - /// The expected key for verifying the signature - pub verifying_key: BoundedVec, - - /// The derivation path used for the signature - pub derivation_path: Option>, - - /// Chain Key used during the Keygen. - /// Used during derivation of child keys. - pub chain_code: Option<[u8; 32]>, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct DKGTSSKeyRefreshResult { - /// Signature scheme to use for DKG - pub signature_scheme: DigitalSignatureScheme, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct DKGTSSKeyRotationResult< - MaxKeyLen: Get, - MaxSignatureLen: Get, - MaxAdditionalParamsLen: Get, -> { - /// The phase one ID. - pub phase_one_id: JobId, - /// The new phase one ID. - /// That will be used for the rotation. - pub new_phase_one_id: JobId, - /// Key from the new phase 1. - pub new_key: BoundedVec, - /// Current key (from phase 1). - pub key: BoundedVec, - /// The signature of signing the new key with the current key. - pub signature: BoundedVec, - /// Signature scheme of the DKG - pub signature_scheme: DigitalSignatureScheme, - /// The derivation path used for the signature - pub derivation_path: Option>, - /// Chain Key used during the Keygen. - pub chain_code: Option<[u8; 32]>, -} - -/// Possible key types for DKG -#[derive(Clone, RuntimeDebug, TypeInfo, PartialEq, Eq, Encode, Decode, Default, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum DigitalSignatureScheme { - /// Elliptic Curve Digital Signature Algorithm (ECDSA) key type for Secp256k1 curve. - #[default] - EcdsaSecp256k1, - - /// Elliptic Curve Digital Signature Algorithm (ECDSA) key type for Secp256r1 curve. - EcdsaSecp256r1, - - /// Elliptic Curve Digital Signature Algorithm (ECDSA) key type for Stark curve. - EcdsaStark, - - /// Schnorr signature scheme over the P256 curve. - SchnorrP256, - - /// Schnorr signature scheme of the P384 curve. - SchnorrP384, - - /// Schnorr signature scheme over the Secp256k1 curve. - SchnorrSecp256k1, - - /// Schnorr signature scheme over the sr25519 curve. - SchnorrSr25519, - - /// Schnorr signature scheme over the Ristretto255 curve / sr25519. - SchnorrRistretto255, - - /// Schnorr signature scheme over the Ed25519 curve. - SchnorrEd25519, - - /// Schnorr signature scheme over the Ed448 curve. - SchnorrEd448, - - /// Schnorr signature scheme over the Secp256k1 curve with Taproot Support. - SchnorrTaproot, - - /// BLS 381 signature scheme. - Bls381, -} diff --git a/primitives/src/jobs/zksaas.rs b/primitives/src/jobs/zksaas.rs deleted file mode 100644 index fa125956a..000000000 --- a/primitives/src/jobs/zksaas.rs +++ /dev/null @@ -1,167 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::{jobs::JobId, roles::ZeroKnowledgeRoleType}; -use frame_support::pallet_prelude::*; -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; -use sp_core::{ecdsa, RuntimeDebug}; -use sp_runtime::traits::Get; - -/// Enum representing different types of data sources. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum HyperData> { - /// Raw data, stored on-chain. - /// - /// Only use this for small files. - Raw(BoundedVec), - /// IPFS CID. The CID is stored on-chain. - /// The actual data is stored off-chain. - IPFS(BoundedVec), - /// HTTP URL. The URL is stored on-chain. - /// The actual data is stored off-chain. - /// The URL is expected to be accessible via HTTP GET. - HTTP(BoundedVec), -} - -/// Enum representing different types of circuits and snark schemes. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum ZkSaaSSystem> { - Groth16(Groth16System), -} - -/// Represents the Groth16 system for zk-SNARKs. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct Groth16System> { - /// R1CS circuit file. - pub circuit: HyperData, - /// Number of inputs - pub num_inputs: u64, - /// Number of constraints - pub num_constraints: u64, - /// Proving key file. - pub proving_key: HyperData, - /// Verifying key bytes - pub verifying_key: BoundedVec, - /// Circom WASM file. - pub wasm: HyperData, -} - -/// Represents the (zk-SNARK) Phase One job type. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct ZkSaaSPhaseOneJobType< - AccountId, - MaxParticipants: Get + Clone, - MaxSubmissionLen: Get, -> { - /// List of participants' account IDs. - pub participants: BoundedVec, - /// the caller permitted to use this result later - pub permitted_caller: Option, - /// ZK-SNARK Proving system - pub system: ZkSaaSSystem, - /// The role type of the job - pub role_type: ZeroKnowledgeRoleType, -} - -/// Represents the (zk-SNARK) Phase Two job type. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct ZkSaaSPhaseTwoJobType> { - /// The phase one ID. - pub phase_one_id: JobId, - /// ZK-SNARK Proving request - pub request: ZkSaaSPhaseTwoRequest, - /// The role type of the job - pub role_type: ZeroKnowledgeRoleType, -} - -/// Represents ZK-SNARK proving request -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum ZkSaaSPhaseTwoRequest> { - /// Groth16 proving request - Groth16(Groth16ProveRequest), -} - -/// Represents Groth16 proving request -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct Groth16ProveRequest> { - /// Public input that are used during the verification - pub public_input: BoundedVec, - /// `a` is the full assignment (full_assginment[0] is 1) - /// a = full_assginment[1..] - /// Each element contains a PSS of the witness - pub a_shares: BoundedVec, MaxSubmissionLen>, - /// `ax` is the auxiliary input - /// ax = full_assginment[num_inputs..] - /// Each element contains a PSS of the auxiliary input - pub ax_shares: BoundedVec, MaxSubmissionLen>, - /// PSS of the QAP polynomials - pub qap_shares: BoundedVec, MaxSubmissionLen>, -} - -/// Represents QAP share -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct QAPShare> { - pub a: HyperData, - pub b: HyperData, - pub c: HyperData, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct ZkSaaSCircuitResult> { - /// The job id of the job (circuit) - pub job_id: JobId, - - /// List of participants' public keys - pub participants: BoundedVec, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum ZkSaaSProofResult> { - Arkworks(ArkworksProofResult), - Circom(CircomProofResult), -} - -impl> ZkSaaSProofResult { - pub fn proof(&self) -> BoundedVec { - match self { - ZkSaaSProofResult::Arkworks(x) => x.proof.clone(), - ZkSaaSProofResult::Circom(x) => x.proof.clone(), - } - } -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct CircomProofResult> { - pub proof: BoundedVec, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct ArkworksProofResult> { - pub proof: BoundedVec, -} diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 014d01847..60079afc4 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -27,9 +27,10 @@ use sp_runtime::{ MultiAddress, MultiSignature, Perbill, }; -pub mod jobs; -pub mod misbehavior; -pub mod roles; +#[cfg(not(feature = "std"))] +extern crate alloc; + +pub mod services; pub mod types; pub use types::*; pub mod chain_identifier; diff --git a/primitives/src/misbehavior/dfns_cggmp21.rs b/primitives/src/misbehavior/dfns_cggmp21.rs deleted file mode 100644 index e8760a668..000000000 --- a/primitives/src/misbehavior/dfns_cggmp21.rs +++ /dev/null @@ -1,107 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use frame_support::pallet_prelude::*; -use sp_core::RuntimeDebug; -use sp_std::vec::Vec; - -use super::SignedRoundMessage; - -pub const KEYGEN_EID: &[u8] = b"dfns.cggmp21.keygen"; -pub const AUX_GEN_EID: &[u8] = b"dfns.cggmp21.aux_gen"; - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum DfnsCGGMP21Justification { - Keygen { participants: Vec<[u8; 33]>, t: u16, reason: KeygenAborted }, - KeyRefresh { participants: Vec<[u8; 33]>, t: u16, reason: KeyRefreshAborted }, - Signing { participants: Vec<[u8; 33]>, t: u16, reason: SigningAborted }, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum KeygenAborted { - /// party decommitment doesn't match commitment. - InvalidDecommitment { round1: SignedRoundMessage, round2a: SignedRoundMessage }, - /// party provided invalid schnorr proof. - InvalidSchnorrProof { round2a: Vec, round3: SignedRoundMessage }, - /// party secret share is not consistent. - FeldmanVerificationFailed { round2a: SignedRoundMessage, round2b: SignedRoundMessage }, - /// party data size is not suitable for threshold parameters. - InvalidDataSize { round2a: SignedRoundMessage }, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum KeyRefreshAborted { - /// decommitment doesn't match commitment. - InvalidDecommitment { round1: SignedRoundMessage, round2: SignedRoundMessage }, - /// provided invalid schnorr proof. - InvalidSchnorrProof, - /// provided invalid proof for Rmod. - InvalidModProof { - reason: InvalidProofReason, - round2: Vec, - round3: SignedRoundMessage, - }, - /// provided invalid proof for Rfac. - InvalidFacProof, - /// N, s and t parameters are invalid. - InvalidRingPedersenParameters { round2: SignedRoundMessage }, - /// X is malformed. - InvalidX, - /// x doesn't correspond to X. - InvalidXShare, - /// party sent a message with missing data. - InvalidDataSize, - /// party message could not be decrypted. - PaillierDec, -} - -/// Reason for failure. If the proof failes, you should only be interested in a -/// reason for debugging purposes -#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] -pub enum InvalidProofReason { - /// One equality doesn't hold. Parameterized by equality index - EqualityCheck(u8), - /// One range check doesn't hold. Parameterized by check index - RangeCheck(u8), - /// Encryption of supplied data failed when attempting to verify - Encryption, - PaillierEnc, - PaillierOp, - /// Failed to evaluate powmod - ModPow, - /// Paillier-Blum modulus is prime - ModulusIsPrime, - /// Paillier-Blum modulus is even - ModulusIsEven, - /// Proof's z value in n-th power does not equal commitment value - /// parameterized by the index of failed check. - IncorrectNthRoot(u8), - /// Proof's x value in 4-th power does not equal commitment value - /// parameterized by the index of failed check. - IncorrectFourthRoot(u8), -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum SigningAborted { - /// `pi_enc::verify(K)` failed. - EncProofOfK, - /// ψ, ψˆ, or ψ' proofs are invalid - InvalidPsi, - /// ψ'' proof is invalid. - InvalidPsiPrimePrime, - /// Delta != G * delta - MismatchedDelta, -} diff --git a/primitives/src/misbehavior/mod.rs b/primitives/src/misbehavior/mod.rs deleted file mode 100644 index e213c7f15..000000000 --- a/primitives/src/misbehavior/mod.rs +++ /dev/null @@ -1,76 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::{jobs::JobId, roles::RoleType}; - -use frame_support::pallet_prelude::*; -use sp_core::RuntimeDebug; -use sp_std::vec::Vec; - -pub mod dfns_cggmp21; -pub mod traits; -pub mod zcash_frost; - -pub use traits::*; - -/// Represents a Signed Round Message by the offender. -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub struct SignedRoundMessage { - /// Index of a party who sent the message - pub sender: u16, - /// Received message - pub message: Vec, - /// Signature of sender + message. - /// - /// This is the signature of the message by the sender. - /// - /// # Note - /// sender_bytes = sender.to_be_bytes(); - /// hash = keccak256(sender_bytes + message); - /// signature = sign(hash); - pub signature: Vec, -} - -/// Represents a Misbehavior submission -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub struct MisbehaviorSubmission { - /// The role type of the misbehaving node - pub role_type: RoleType, - /// The misbehaving party's ECDSA public key. - pub offender: [u8; 33], - /// The current Job id. - pub job_id: JobId, - /// The justification for the misbehavior - pub justification: MisbehaviorJustification, -} - -/// Represents a Misbehavior Justification kind -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum MisbehaviorJustification { - DKGTSS(DKGTSSJustification), - ZkSaaS(ZkSaaSJustification), -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum DKGTSSJustification { - /// dfns CGGMP21 Implementation-specific justification - DfnsCGGMP21(dfns_cggmp21::DfnsCGGMP21Justification), - /// zcash FROST Implementation-specific justification - ZCashFrost(zcash_frost::ZCashFrostJustification), -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum ZkSaaSJustification {} diff --git a/primitives/src/misbehavior/traits.rs b/primitives/src/misbehavior/traits.rs deleted file mode 100644 index 88658f065..000000000 --- a/primitives/src/misbehavior/traits.rs +++ /dev/null @@ -1,33 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use sp_runtime::DispatchResult; - -use super::MisbehaviorSubmission; - -/// A trait that describes the misbehavior verification. -pub trait MisbehaviorHandler { - /// Verifies the misbehavior submission. - /// - /// # Parameters - /// - /// - `data`: Details of the misbehavior to verify - /// - /// # Errors - /// - /// Returns a `DispatchResult` indicating success or an error if verification fails. - fn verify(data: MisbehaviorSubmission) -> DispatchResult; -} diff --git a/primitives/src/misbehavior/zcash_frost.rs b/primitives/src/misbehavior/zcash_frost.rs deleted file mode 100644 index 07f422c55..000000000 --- a/primitives/src/misbehavior/zcash_frost.rs +++ /dev/null @@ -1,44 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use frame_support::pallet_prelude::*; -use sp_core::RuntimeDebug; -use sp_std::vec::Vec; - -use super::SignedRoundMessage; - -pub const KEYGEN_EID: &[u8] = b"zcash.frost.keygen"; -pub const SIGN_EID: &[u8] = b"zcash.frost.sign"; - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum ZCashFrostJustification { - Keygen { participants: Vec<[u8; 33]>, t: u16, reason: KeygenAborted }, - Signing { participants: Vec<[u8; 33]>, t: u16, reason: SigningAborted }, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum KeygenAborted { - /// Party sent an invliad schnorr proof of knowledge - InvalidProofOfKnowledge { round1: SignedRoundMessage }, - /// Party sent an invalid secret share - InvalidSecretShare { round1: SignedRoundMessage, round2: SignedRoundMessage }, -} - -#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone)] -pub enum SigningAborted { - /// Invalid signature share for aggregation - InvalidSignatureShare { round1: Vec, round2: Vec }, -} diff --git a/primitives/src/roles/mod.rs b/primitives/src/roles/mod.rs deleted file mode 100644 index 46605ab02..000000000 --- a/primitives/src/roles/mod.rs +++ /dev/null @@ -1,174 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -#![allow(clippy::match_like_matches_macro)] - -use frame_support::pallet_prelude::*; -use parity_scale_codec::alloc::string::ToString; -use scale_info::prelude::string::String; -use sp_arithmetic::Percent; -use sp_std::ops::Add; - -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; - -pub mod traits; -pub mod tss; -pub mod zksaas; - -pub use tss::*; -pub use zksaas::*; - -/// Role type to be used in the system. -#[derive( - Encode, Decode, Copy, Clone, Debug, PartialEq, Eq, TypeInfo, PartialOrd, Ord, MaxEncodedLen, -)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum RoleType { - /// TSS role type. - Tss(ThresholdSignatureRoleType), - /// Zk-SaaS role type. - ZkSaaS(ZeroKnowledgeRoleType), - /// Light client relaying role type. - LightClientRelaying, -} - -impl TryFrom for RoleType { - type Error = InvalidRoleType; - - fn try_from(value: u16) -> Result { - match value { - 0x0011 => Ok(RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1)), - 0x0012 => Ok(RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256r1)), - 0x0013 => Ok(RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Stark)), - 0x0014 => Ok(RoleType::Tss(ThresholdSignatureRoleType::SilentShardDKLS23Secp256k1)), - 0x0021 => Ok(RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostP256)), - 0x0022 => Ok(RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostP384)), - 0x0023 => Ok(RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostSecp256k1)), - 0x0024 => Ok(RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostRistretto255)), - 0x0025 => Ok(RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostEd25519)), - 0x0026 => Ok(RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostEd448)), - 0x0031 => Ok(RoleType::Tss(ThresholdSignatureRoleType::GennaroDKGBls381)), - 0x0032 => Ok(RoleType::Tss(ThresholdSignatureRoleType::WstsV2)), - 0x0041 => Ok(RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16)), - 0x0042 => Ok(RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSMarlin)), - 0x0100 => Ok(RoleType::LightClientRelaying), - _ => Err(InvalidRoleType), - } - } -} - -impl From for u16 { - fn from(value: RoleType) -> Self { - match value { - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1) => 0x0011, - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Secp256r1) => 0x0012, - RoleType::Tss(ThresholdSignatureRoleType::DfnsCGGMP21Stark) => 0x0013, - RoleType::Tss(ThresholdSignatureRoleType::SilentShardDKLS23Secp256k1) => 0x0014, - RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostP256) => 0x0021, - RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostP384) => 0x0022, - RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostSecp256k1) => 0x0023, - RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostRistretto255) => 0x0024, - RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostEd25519) => 0x0025, - RoleType::Tss(ThresholdSignatureRoleType::ZcashFrostEd448) => 0x0026, - RoleType::Tss(ThresholdSignatureRoleType::GennaroDKGBls381) => 0x0031, - RoleType::Tss(ThresholdSignatureRoleType::WstsV2) => 0x0032, - RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSGroth16) => 0x0041, - RoleType::ZkSaaS(ZeroKnowledgeRoleType::ZkSaaSMarlin) => 0x0042, - RoleType::LightClientRelaying => 0x0100, - } - } -} - -impl RoleType { - pub fn is_dkg_tss(&self) -> bool { - match self { - RoleType::Tss(_) => true, - _ => false, - } - } - - pub fn is_zksaas(&self) -> bool { - match self { - RoleType::ZkSaaS(_) => true, - _ => false, - } - } - - pub fn is_light_client_relaying(&self) -> bool { - match self { - RoleType::LightClientRelaying => true, - _ => false, - } - } -} - -/// Metadata associated with a role type. -#[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum RoleTypeMetadata> { - Tss(TssRoleMetadata), - ZkSaas(ZkSaasRoleMetadata), - LightClientRelaying, -} - -impl> RoleTypeMetadata { - /// Return type of role. - pub fn get_role_type(&self) -> RoleType { - match self { - RoleTypeMetadata::Tss(metadata) => RoleType::Tss(metadata.role_type), - RoleTypeMetadata::ZkSaas(metadata) => RoleType::ZkSaaS(metadata.role_type), - RoleTypeMetadata::LightClientRelaying => RoleType::LightClientRelaying, - } - } - - pub fn get_authority_key(&self) -> BoundedVec { - match self { - RoleTypeMetadata::Tss(metadata) => metadata.authority_key.clone(), - RoleTypeMetadata::ZkSaas(metadata) => metadata.authority_key.clone(), - _ => Default::default(), - } - } -} - -/// Represents the reward distribution percentages for validators in a key generation process. -#[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, TypeInfo)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct ValidatorRewardDistribution { - /// The percentage share of the reward allocated for TSS - tss_share: Percent, - /// The percentage share of the reward allocated for the ZK-SaaS - zksaas_share: Percent, -} - -impl ValidatorRewardDistribution { - pub fn try_new(tss_share: Percent, zksaas_share: Percent) -> Result { - if !tss_share.add(zksaas_share).is_one() { - return Err("Shares must add to One".to_string()); - } - - Ok(Self { tss_share, zksaas_share }) - } - - pub fn get_reward_distribution(self) -> (Percent, Percent) { - (self.tss_share, self.zksaas_share) - } -} - -/// Invalid role type error. -#[derive(Encode, Decode, Copy, Clone, Debug, PartialEq, Eq, TypeInfo, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct InvalidRoleType; diff --git a/primitives/src/roles/traits.rs b/primitives/src/roles/traits.rs deleted file mode 100644 index d9f4485d4..000000000 --- a/primitives/src/roles/traits.rs +++ /dev/null @@ -1,96 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use crate::jobs::ReportRestakerOffence; -use sp_runtime::DispatchResult; -use sp_std::vec::Vec; - -use super::RoleType; - -/// A trait that handles roles associated with job types. -pub trait RolesHandler { - type Balance; - - /// Returns true if the validator is permitted to work with this job type. - /// - /// # Parameters - /// - /// - `address`: The account ID of the validator. - /// - `role_type`: The type of role. - /// - /// # Returns - /// - /// Returns `true` if the validator is permitted to work with this job type, otherwise `false`. - fn is_restaker_with_role(address: AccountId, role_type: RoleType) -> bool; - - /// Returns true if the validator is permitted to work with any job type. - /// - /// # Parameters - /// - /// - `address`: The account ID of the validator. - /// - /// # Returns - /// - /// Returns `true` if the validator is permitted to work with any job type, otherwise `false`. - fn is_restaker(address: AccountId) -> bool; - - /// Report offence for the given validator. - /// This function will report validators for committing offence. - /// - /// # Parameters - /// - `offence_report`: The offence report. - /// - /// # Returns - /// - /// Returns Ok() if validator offence report is submitted successfully. - fn report_offence(offence_report: ReportRestakerOffence) -> DispatchResult; - - /// Retrieves role key associated with given validator - /// - /// # Arguments - /// - /// * `address` - The account ID of the validator for which role key is to be retrieved. - /// - /// # Returns - /// - /// Returns an `Option>` containing role key information for the specified - /// validator, or `None` if no role key is found. - fn get_validator_role_key(address: AccountId) -> Option>; - - /// Record rewards to a validator. - /// - /// This function records a job completed by the given validators - /// - /// # Parameters - /// - /// - `validators`: The account ID of the validators. - /// - /// # Errors - /// - /// Returns a `DispatchError` if the operation fails. - fn record_job_by_validators(validators: Vec) -> DispatchResult; - - /// Retrieves max services that a validator has configured - /// - /// # Arguments - /// - /// * `address` - The account ID of the validator for which role key is to be retrieved. - /// - /// # Returns - /// - /// Returns the max active services that a validator has opted for - fn get_max_active_service_for_restaker(address: AccountId) -> Option; -} diff --git a/primitives/src/roles/tss.rs b/primitives/src/roles/tss.rs deleted file mode 100644 index 394227485..000000000 --- a/primitives/src/roles/tss.rs +++ /dev/null @@ -1,70 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use frame_support::pallet_prelude::*; -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; -use sp_core::RuntimeDebug; -use sp_runtime::traits::Get; - -/// Threshold signature role types and their specific elliptic curve. -/// -/// Naming convention: -/// -#[derive( - Encode, - Decode, - Copy, - Clone, - RuntimeDebug, - PartialEq, - Default, - Eq, - TypeInfo, - PartialOrd, - Ord, - MaxEncodedLen, -)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -#[repr(u16)] -pub enum ThresholdSignatureRoleType { - #[default] - DfnsCGGMP21Secp256k1, - DfnsCGGMP21Secp256r1, - DfnsCGGMP21Stark, - SilentShardDKLS23Secp256k1, - ZcashFrostP256, - ZcashFrostP384, - ZcashFrostSecp256k1, - ZcashFrostRistretto255, - ZcashFrostEd25519, - ZcashFrostEd448, - GennaroDKGBls381, - WstsV2, -} - -/// Associated metadata needed for a DKG/TSS role -#[derive( - Encode, Decode, Clone, RuntimeDebug, PartialEq, Default, Eq, TypeInfo, PartialOrd, Ord, -)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct TssRoleMetadata> { - /// The threshold role type for the DKG. - pub role_type: ThresholdSignatureRoleType, - - /// The authority key associated with the role. - pub authority_key: BoundedVec, -} diff --git a/primitives/src/roles/zksaas.rs b/primitives/src/roles/zksaas.rs deleted file mode 100644 index 6c2b2fa47..000000000 --- a/primitives/src/roles/zksaas.rs +++ /dev/null @@ -1,56 +0,0 @@ -// This file is part of Tangle. -// Copyright (C) 2022-2024 Webb Technologies Inc. -// -// Tangle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Tangle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Tangle. If not, see . - -use frame_support::pallet_prelude::*; -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; -use sp_core::RuntimeDebug; -use sp_runtime::traits::Get; - -#[derive( - Encode, - Decode, - Copy, - Clone, - RuntimeDebug, - PartialEq, - Default, - Eq, - TypeInfo, - PartialOrd, - Ord, - MaxEncodedLen, -)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum ZeroKnowledgeRoleType { - #[default] - ZkSaaSGroth16, - ZkSaaSMarlin, -} - -/// Associated metadata needed for a zkSaas role -#[derive( - Encode, Decode, Clone, RuntimeDebug, PartialEq, Default, Eq, TypeInfo, PartialOrd, Ord, -)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct ZkSaasRoleMetadata> { - /// The zkSaaS scheme - pub role_type: ZeroKnowledgeRoleType, - - /// The authority key associated with the role. - // TODO: Expand this - pub authority_key: BoundedVec, -} diff --git a/primitives/src/services/field.rs b/primitives/src/services/field.rs new file mode 100644 index 000000000..5418e33fa --- /dev/null +++ b/primitives/src/services/field.rs @@ -0,0 +1,501 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +#[cfg(not(feature = "std"))] +use alloc::{string::String, string::ToString, vec::Vec}; +use frame_support::pallet_prelude::*; +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; +use sp_core::RuntimeDebug; +use sp_std::boxed::Box; + +use super::Constraints; + +macro_rules! impl_from { + ($from:ty, $variant:ident) => { + impl From<$from> for Field { + fn from(val: $from) -> Self { + Self::$variant(val) + } + } + }; + + ($from:ty, $variant:ident, $conv:expr) => { + impl From<$from> for Field { + fn from(val: $from) -> Self { + Self::$variant($conv(val)) + } + } + }; + + ($( $from:ty => $variant:ident ),*) => { + $( impl_from!($from, $variant); )* + }; +} + +#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[scale_info(bounds(AccountId: TypeInfo), skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr( + feature = "std", + derive(Serialize, Deserialize), + serde(bound(serialize = "AccountId: Serialize", deserialize = "AccountId: Deserialize<'de>")) +)] +pub enum Field { + /// Represents a field of null value. + #[codec(index = 0)] + None, + /// Represents a boolean. + #[codec(index = 1)] + Bool(bool), + /// Represents a u8 Number. + #[codec(index = 2)] + Uint8(u8), + /// Represents a i8 Number. + #[codec(index = 3)] + Int8(i8), + /// Represents a u16 Number. + #[codec(index = 4)] + Uint16(u16), + /// Represents a i16 Number. + #[codec(index = 5)] + Int16(i16), + /// Represents a u32 Number. + #[codec(index = 6)] + Uint32(u32), + /// Represents a i32 Number. + #[codec(index = 7)] + Int32(i32), + /// Represents a u64 Number. + #[codec(index = 8)] + Uint64(u64), + /// Represents a i64 Number. + #[codec(index = 9)] + Int64(i64), + /// Represents a UTF-8 string. + #[codec(index = 10)] + String(BoundedString), + /// Represents a Raw Bytes. + #[codec(index = 11)] + Bytes(BoundedVec), + /// Represents an array of values + /// Fixed Length of values. + #[codec(index = 12)] + Array(BoundedVec, C::MaxFieldsSize>), + /// Represents a list of values + #[codec(index = 13)] + List(BoundedVec, C::MaxFieldsSize>), + + // NOTE: Special types starts from 100 + /// A special type for AccountId + #[codec(index = 100)] + AccountId(AccountId), +} + +#[cfg(feature = "std")] +impl core::fmt::Debug for Field { + fn fmt( + &self, + f: &mut scale_info::prelude::fmt::Formatter<'_>, + ) -> scale_info::prelude::fmt::Result { + match self { + Self::None => write!(f, "nil"), + Self::Bool(arg0) => f.debug_tuple("bool").field(arg0).finish(), + Self::Uint8(arg0) => f.debug_tuple("uint8").field(arg0).finish(), + Self::Int8(arg0) => f.debug_tuple("int8").field(arg0).finish(), + Self::Uint16(arg0) => f.debug_tuple("uint16").field(arg0).finish(), + Self::Int16(arg0) => f.debug_tuple("int16").field(arg0).finish(), + Self::Uint32(arg0) => f.debug_tuple("uint32").field(arg0).finish(), + Self::Int32(arg0) => f.debug_tuple("int32").field(arg0).finish(), + Self::Uint64(arg0) => f.debug_tuple("uint64").field(arg0).finish(), + Self::Int64(arg0) => f.debug_tuple("int64").field(arg0).finish(), + Self::String(arg0) => f.debug_tuple("string").field(arg0).finish(), + Self::Bytes(arg0) => f.debug_tuple("bytes").field(arg0).finish(), + Self::Array(arg0) => f.debug_tuple("array").field(arg0).finish(), + Self::List(arg0) => f.debug_tuple("list").field(arg0).finish(), + Self::AccountId(arg0) => f.debug_tuple("account").field(arg0).finish(), + } + } +} + +impl Eq for Field {} + +impl PartialEq for Field { + fn eq(&self, other: &Self) -> bool { + match (self, other) { + (Self::Bool(l0), Self::Bool(r0)) => l0 == r0, + (Self::Uint8(l0), Self::Uint8(r0)) => l0 == r0, + (Self::Int8(l0), Self::Int8(r0)) => l0 == r0, + (Self::Uint16(l0), Self::Uint16(r0)) => l0 == r0, + (Self::Int16(l0), Self::Int16(r0)) => l0 == r0, + (Self::Uint32(l0), Self::Uint32(r0)) => l0 == r0, + (Self::Int32(l0), Self::Int32(r0)) => l0 == r0, + (Self::Uint64(l0), Self::Uint64(r0)) => l0 == r0, + (Self::Int64(l0), Self::Int64(r0)) => l0 == r0, + (Self::String(l0), Self::String(r0)) => l0 == r0, + (Self::Bytes(l0), Self::Bytes(r0)) => l0 == r0, + (Self::Array(l0), Self::Array(r0)) => l0 == r0, + (Self::List(l0), Self::List(r0)) => l0 == r0, + (Self::AccountId(l0), Self::AccountId(r0)) => l0 == r0, + _ => core::mem::discriminant(self) == core::mem::discriminant(other), + } + } +} + +impl Clone for Field { + fn clone(&self) -> Self { + match self { + Self::None => Self::None, + Self::Bool(arg0) => Self::Bool(*arg0), + Self::Uint8(arg0) => Self::Uint8(*arg0), + Self::Int8(arg0) => Self::Int8(*arg0), + Self::Uint16(arg0) => Self::Uint16(*arg0), + Self::Int16(arg0) => Self::Int16(*arg0), + Self::Uint32(arg0) => Self::Uint32(*arg0), + Self::Int32(arg0) => Self::Int32(*arg0), + Self::Uint64(arg0) => Self::Uint64(*arg0), + Self::Int64(arg0) => Self::Int64(*arg0), + Self::String(arg0) => Self::String(arg0.clone()), + Self::Bytes(arg0) => Self::Bytes(arg0.clone()), + Self::Array(arg0) => Self::Array(arg0.clone()), + Self::List(arg0) => Self::List(arg0.clone()), + Self::AccountId(arg0) => Self::AccountId(arg0.clone()), + } + } +} + +#[cfg(not(feature = "std"))] +impl core::fmt::Debug for Field { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.write_str("") + } +} + +impl_from! { + bool => Bool, + u8 => Uint8, + i8 => Int8, + u16 => Uint16, + i16 => Int16, + u32 => Uint32, + i32 => Int32, + u64 => Uint64, + i64 => Int64, + BoundedVec => Bytes, + BoundedString => String, + BoundedVec => List +} + +#[derive(Default, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum FieldType { + /// A Field of `void` type. + #[default] + #[codec(index = 0)] + Void, + /// A Field of `bool` type. + #[codec(index = 1)] + Bool, + /// A Field of `u8` type. + #[codec(index = 2)] + Uint8, + /// A Field of `i8` type. + #[codec(index = 3)] + Int8, + /// A Field of `u16` type. + #[codec(index = 4)] + Uint16, + /// A Field of `i16` type. + #[codec(index = 5)] + Int16, + /// A Field of `u32` type. + #[codec(index = 6)] + Uint32, + /// A Field of `i32` type. + #[codec(index = 7)] + Int32, + /// A Field of `u64` type. + #[codec(index = 8)] + Uint64, + /// A Field of `i64` type. + #[codec(index = 9)] + Int64, + /// A Field of `String` type. + #[codec(index = 10)] + String, + /// A Field of `Vec` type. + #[codec(index = 11)] + Bytes, + /// A Field of `Option` type. + #[codec(index = 12)] + Optional(Box), + /// An array of N items of type [`FieldType`]. + #[codec(index = 13)] + Array(u64, Box), + /// A List of items of type [`FieldType`]. + #[codec(index = 14)] + List(Box), + // NOTE: Special types starts from 100 + /// A special type for AccountId + #[codec(index = 100)] + AccountId, +} + +impl PartialEq for Field { + fn eq(&self, other: &FieldType) -> bool { + match (self, other) { + (Self::None, FieldType::Optional(_)) => true, + (Self::Bool(_), FieldType::Bool) => true, + (Self::Uint8(_), FieldType::Uint8) => true, + (Self::Int8(_), FieldType::Int8) => true, + (Self::Uint16(_), FieldType::Uint16) => true, + (Self::Int16(_), FieldType::Int16) => true, + (Self::Uint32(_), FieldType::Uint32) => true, + (Self::Int32(_), FieldType::Int32) => true, + (Self::Uint64(_), FieldType::Uint64) => true, + (Self::Int64(_), FieldType::Int64) => true, + (Self::String(_), FieldType::String) => true, + (Self::Bytes(_), FieldType::Bytes) => true, + (Self::Array(a), FieldType::Array(len, b)) => { + a.len() == *len as usize && a.iter().all(|f| f.eq(b.as_ref())) + }, + (Self::List(a), FieldType::List(b)) => a.iter().all(|f| f.eq(b.as_ref())), + (Self::AccountId(_), FieldType::AccountId) => true, + _ => false, + } + } +} + +impl From> for FieldType { + fn from(val: Field) -> Self { + match val { + Field::None => FieldType::Optional(Box::new(FieldType::Void)), + Field::Bool(_) => FieldType::Bool, + Field::Uint8(_) => FieldType::Uint8, + Field::Int8(_) => FieldType::Int8, + Field::Uint16(_) => FieldType::Uint16, + Field::Int16(_) => FieldType::Int16, + Field::Uint32(_) => FieldType::Uint32, + Field::Int32(_) => FieldType::Int32, + Field::Uint64(_) => FieldType::Uint64, + Field::Int64(_) => FieldType::Int64, + Field::String(_) => FieldType::String, + Field::Bytes(_) => FieldType::Bytes, + Field::Array(a) => FieldType::Array( + a.len() as u64, + Box::new(a.first().cloned().map(Into::into).unwrap_or(FieldType::Void)), + ), + Field::List(a) => FieldType::List(Box::new( + a.first().cloned().map(Into::into).unwrap_or(FieldType::Void), + )), + Field::AccountId(_) => FieldType::AccountId, + } + } +} + +impl<'a, C: Constraints, AccountId: Encode> From<&'a Field> for ethabi::Token { + fn from(value: &'a Field) -> Self { + match value { + Field::None => ethabi::Token::Tuple(Vec::new()), + Field::Bool(val) => ethabi::Token::Bool(*val), + Field::Uint8(val) => ethabi::Token::Uint((*val).into()), + Field::Int8(val) => ethabi::Token::Int((*val).into()), + Field::Uint16(val) => ethabi::Token::Uint((*val).into()), + Field::Int16(val) => ethabi::Token::Int((*val).into()), + Field::Uint32(val) => ethabi::Token::Uint((*val).into()), + Field::Int32(val) => ethabi::Token::Int((*val).into()), + Field::Uint64(val) => ethabi::Token::Uint((*val).into()), + Field::Int64(val) => ethabi::Token::Int((*val).into()), + Field::String(val) => ethabi::Token::String(val.to_string()), + Field::Bytes(val) => ethabi::Token::FixedBytes(val.to_vec()), + Field::Array(val) => ethabi::Token::Array(val.into_iter().map(Into::into).collect()), + Field::List(val) => ethabi::Token::Array(val.into_iter().map(Into::into).collect()), + Field::AccountId(val) => ethabi::Token::Bytes(val.encode()), + } + } +} + +impl From> for ethabi::Token { + fn from(value: Field) -> Self { + (&value).into() + } +} + +impl Field { + /// Convrts the field to a `ethabi::Token`. + /// This is useful for converting the field to a type that can be used in an Ethereum transaction. + pub fn into_ethabi_token(self) -> ethabi::Token { + self.into() + } + + /// Same as [`Self::into_ethabi_token`] but for references. + pub fn to_ethabi_token(&self) -> ethabi::Token { + self.into() + } + + /// Encode the fields to ethabi bytes. + pub fn encode_to_ethabi(fields: &[Self]) -> ethabi::Bytes { + if fields.is_empty() { + return Default::default(); + } + let tokens: Vec = fields.iter().map(Self::to_ethabi_token).collect(); + ethabi::encode(&tokens) + } + + /// Encode the fields to ethabi tokens. + pub fn to_ethabi(fields: &[Self]) -> Vec { + fields.iter().map(Self::to_ethabi_token).collect() + } +} + +#[derive(Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +#[scale_info(skip_type_params(S))] +#[cfg_attr(feature = "std", derive(Serialize), serde(transparent), serde(bound = ""))] +#[repr(transparent)] +pub struct BoundedString>(pub(crate) BoundedVec); + +impl> Default for BoundedString { + fn default() -> Self { + Self(Default::default()) + } +} + +impl> Clone for BoundedString { + fn clone(&self) -> Self { + Self(self.0.clone()) + } +} + +impl> PartialEq for BoundedString { + fn eq(&self, other: &Self) -> bool { + self.0 == other.0 + } +} + +impl> PartialOrd for BoundedString { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl> Ord for BoundedString { + fn cmp(&self, other: &Self) -> core::cmp::Ordering { + self.0.cmp(&other.0) + } +} + +impl> Eq for BoundedString {} + +impl> TryFrom for BoundedString { + type Error = String; + fn try_from(value: String) -> Result { + let bytes = value.as_bytes().to_vec().try_into().map_err(|_| value)?; + Ok(Self(bytes)) + } +} + +impl> TryFrom<&str> for BoundedString { + type Error = String; + fn try_from(value: &str) -> Result { + Self::try_from(value.to_string()) + } +} + +impl> core::fmt::Display for BoundedString { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + core::fmt::Display::fmt(&core::str::from_utf8(&self.0).unwrap_or_default(), f) + } +} + +impl> BoundedString { + /// Try to convert the bytes to a string slice. + pub fn try_as_str(&self) -> Result<&str, core::str::Utf8Error> { + core::str::from_utf8(&self.0) + } + + /// Convert the bytes to a string slice. + pub fn as_str(&self) -> &str { + self.try_as_str().unwrap_or_default() + } + + /// check if the string is empty. + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } + + /// Returns the length of the string. + pub fn len(&self) -> usize { + self.0.len() + } + + /// Check if the underlying bytes are valid utf8. + pub fn is_utf8(&self) -> bool { + core::str::from_utf8(&self.0).is_ok() + } +} + +#[cfg(feature = "std")] +impl<'de, S: Get> serde::Deserialize<'de> for BoundedString { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + struct StringVisitor>(PhantomData); + + impl<'de, S: Get> serde::de::Visitor<'de> for StringVisitor { + type Value = String; + + fn expecting(&self, formatter: &mut core::fmt::Formatter) -> core::fmt::Result { + formatter.write_str("a string") + } + + fn visit_str(self, v: &str) -> Result + where + E: serde::de::Error, + { + Self::visit_string(self, v.to_owned()) + } + + fn visit_string(self, v: String) -> Result + where + E: serde::de::Error, + { + let size = v.len(); + let max = match usize::try_from(S::get()) { + Ok(n) => n, + Err(_) => return Err(serde::de::Error::custom("can't convert to usize")), + }; + if size > max { + Err(serde::de::Error::invalid_length( + size, + &"string length is greater than the maximum allowed", + )) + } else { + Ok(v) + } + } + } + + let visitor: StringVisitor = StringVisitor(PhantomData); + deserializer.deserialize_string(visitor).map(|v| { + Ok(BoundedString::( + v.as_bytes().to_vec().try_into().expect("length checked in visitor"), + )) + })? + } +} diff --git a/primitives/src/services/mod.rs b/primitives/src/services/mod.rs new file mode 100644 index 000000000..2ecf93e50 --- /dev/null +++ b/primitives/src/services/mod.rs @@ -0,0 +1,825 @@ +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +// This file is part of Tangle. +// Copyright (C) 2022-2024 Webb Technologies Inc. +// +// Tangle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tangle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tangle. If not, see . + +//! Services primitives. + +use educe::Educe; +use frame_support::pallet_prelude::*; +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; +use sp_core::{ecdsa, RuntimeDebug}; + +#[cfg(not(feature = "std"))] +use alloc::{vec, vec::Vec}; + +pub mod field; +pub use field::*; + +/// A Higher level abstraction of all the constraints. +pub trait Constraints { + /// Maximum number of fields in a job call. + type MaxFields: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum size of a field in a job call. + type MaxFieldsSize: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum length of metadata string length. + type MaxMetadataLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of jobs per service. + type MaxJobsPerService: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of Operators per service. + type MaxOperatorsPerService: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of permitted callers per service. + type MaxPermittedCallers: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of services per operator. + type MaxServicesPerOperator: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of blueprints per operator. + type MaxBlueprintsPerOperator: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of services per user. + type MaxServicesPerUser: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of binaries per gadget. + type MaxBinariesPerGadget: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Maximum number of sources per gadget. + type MaxSourcesPerGadget: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Git owner maximum length. + type MaxGitOwnerLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Git repository maximum length. + type MaxGitRepoLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Git tag maximum length. + type MaxGitTagLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// binary name maximum length. + type MaxBinaryNameLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// IPFS hash maximum length. + type MaxIpfsHashLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Container registry maximum length. + type MaxContainerRegistryLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Container image name maximum length. + type MaxContainerImageNameLength: Get + Default + Parameter + MaybeSerializeDeserialize; + /// Container image tag maximum length. + type MaxContainerImageTagLength: Get + Default + Parameter + MaybeSerializeDeserialize; +} + +/// A Job Definition is a definition of a job that can be called. +/// It contains the input and output fields of the job with the permitted caller. + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Default(bound()), Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct JobDefinition { + /// The metadata of the job. + pub metadata: JobMetadata, + /// These are parameters that are required for this job. + /// i.e. the input. + pub params: BoundedVec, + /// These are the result, the return values of this job. + /// i.e. the output. + pub result: BoundedVec, + /// The verifier of the job result. + pub verifier: JobResultVerifier, +} + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Default(bound()), Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct JobMetadata { + /// The Job name. + pub name: BoundedString, + /// The Job description. + pub description: Option>, +} + +/// A Job Call is a call to execute a job using it's job definition. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe( + Default(bound(AccountId: Default)), + Clone(bound(AccountId: Clone)), + PartialEq(bound(AccountId: PartialEq)), + Eq +)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(not(feature = "std"), derive(RuntimeDebugNoBound))] +#[cfg_attr( + feature = "std", + derive(Serialize, Deserialize), + serde(bound(serialize = "AccountId: Serialize", deserialize = "AccountId: Deserialize<'de>")), + educe(Debug(bound(AccountId: core::fmt::Debug))) +)] +pub struct JobCall { + /// The Service ID that this call is for. + pub service_id: u64, + /// The job definition index in the service that this call is for. + pub job: u8, + /// The supplied arguments for this job call. + pub args: BoundedVec, C::MaxFields>, +} + +/// Type checks the supplied arguments against the parameters. +pub fn type_checker( + params: &[FieldType], + args: &[Field], +) -> Result<(), TypeCheckError> { + if params.len() != args.len() { + return Err(TypeCheckError::NotEnoughArguments { + expected: params.len() as u8, + actual: args.len() as u8, + }); + } + for i in 0..args.len() { + let arg = &args[i]; + let expected = ¶ms[i]; + if arg != expected { + return Err(TypeCheckError::ArgumentTypeMismatch { + index: i as u8, + expected: expected.clone(), + actual: arg.clone().into(), + }); + } + } + Ok(()) +} + +impl JobCall { + /// Check if the supplied arguments match the job definition types. + pub fn type_check(&self, job_def: &JobDefinition) -> Result<(), TypeCheckError> { + type_checker(&job_def.params, &self.args) + } +} + +/// A Job Call Result is the result of a job call. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe( + Default(bound(AccountId: Default)), + Clone(bound(AccountId: Clone)), + PartialEq(bound(AccountId: PartialEq)), + Eq +)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(not(feature = "std"), derive(RuntimeDebugNoBound))] +#[cfg_attr( + feature = "std", + derive(Serialize, Deserialize), + serde(bound(serialize = "AccountId: Serialize", deserialize = "AccountId: Deserialize<'de>")), + educe(Debug(bound(AccountId: core::fmt::Debug))) +)] +pub struct JobCallResult { + /// The id of the service. + pub service_id: u64, + /// The id of the job call. + pub call_id: u64, + /// The result of the job call. + pub result: BoundedVec, C::MaxFields>, +} + +impl JobCallResult { + /// Check if the supplied result match the job definition types. + pub fn type_check(&self, job_def: &JobDefinition) -> Result<(), TypeCheckError> { + type_checker(&job_def.result, &self.result) + } +} + +/// A Job Result verifier is a verifier that will verify the result of a job call +/// using different verification methods. +#[derive(Default, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum JobResultVerifier { + /// No verification is needed. + #[default] + None, + /// An EVM Contract Address that will verify the result. + Evm(sp_core::H160), + // NOTE(@shekohex): Add more verification methods here. +} + +/// An error that can occur during type checking. +#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum TypeCheckError { + /// The argument type does not match the expected type. + ArgumentTypeMismatch { + /// The index of the argument. + index: u8, + /// The expected type. + expected: FieldType, + /// The actual type. + actual: FieldType, + }, + /// Not enough arguments were supplied. + NotEnoughArguments { + /// The number of arguments that were expected. + expected: u8, + /// The number of arguments that were supplied. + actual: u8, + }, + /// The result type does not match the expected type. + ResultTypeMismatch { + /// The index of the argument. + index: u8, + /// The expected type. + expected: FieldType, + /// The actual type. + actual: FieldType, + }, +} + +impl frame_support::traits::PalletError for TypeCheckError { + const MAX_ENCODED_SIZE: usize = 2; +} + +// -*** Service ***- + +/// Service Registration hook is a hook that will be called before registering the restaker as +/// an operator for the service. +#[derive( + Default, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, Copy, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum ServiceRegistrationHook { + /// No hook is needed, the restaker will be registered immediately. + #[default] + None, + /// A Smart contract that will be called to determine if the restaker will be registered. + Evm(sp_core::H160), +} + +/// Service Request hook is a hook that will be called before creating a service from the service blueprint. +#[derive( + Default, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Clone, Copy, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum ServiceRequestHook { + /// No hook is needed, the caller will get the service created immediately. + #[default] + None, + /// A Smart contract that will be called to determine if the caller meets the requirements to create a service. + Evm(sp_core::H160), +} + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Default(bound()), Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct ServiceMetadata { + /// The Service name. + pub name: BoundedString, + /// The Service description. + pub description: Option>, + /// The Service author. + /// Could be a company or a person. + pub author: Option>, + /// The Job category. + pub category: Option>, + /// Code Repository URL. + /// Could be a github, gitlab, or any other code repository. + pub code_repository: Option>, + /// Service Logo URL. + pub logo: Option>, + /// Service Website URL. + pub website: Option>, + /// Service License. + pub license: Option>, +} + +/// A Service Blueprint is a the main definition of a service. +/// it contains the metadata of the service, the job definitions, and other hooks, along with the +/// gadget that will be executed when one of the jobs is calling this service. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Default(bound()), Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct ServiceBlueprint { + /// The metadata of the service. + pub metadata: ServiceMetadata, + /// The job definitions that are available in this service. + pub jobs: BoundedVec, C::MaxJobsPerService>, + /// The registration hook that will be called before restaker registration. + pub registration_hook: ServiceRegistrationHook, + /// The parameters that are required for the service registration. + pub registration_params: BoundedVec, + /// The request hook that will be called before creating a service from the service blueprint. + pub request_hook: ServiceRequestHook, + /// The parameters that are required for the service request. + pub request_params: BoundedVec, + /// The gadget that will be executed for the service. + pub gadget: Gadget, +} + +impl ServiceBlueprint { + /// Check if the supplied arguments match the registration parameters. + pub fn type_check_registration( + &self, + args: &[Field], + ) -> Result<(), TypeCheckError> { + type_checker(&self.registration_params, args) + } + + /// Check if the supplied arguments match the request parameters. + pub fn type_check_request( + &self, + args: &[Field], + ) -> Result<(), TypeCheckError> { + type_checker(&self.request_params, args) + } +} + +/// A service request is a request to create a service from a service blueprint. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe( + Default(bound(AccountId: Default, BlockNumber: Default)), + Clone(bound(AccountId: Clone, BlockNumber: Clone)), + PartialEq(bound(AccountId: PartialEq, BlockNumber: PartialEq)), + Eq +)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(not(feature = "std"), derive(RuntimeDebugNoBound))] +#[cfg_attr( + feature = "std", + derive(Serialize, Deserialize), + serde(bound( + serialize = "AccountId: Serialize, BlockNumber: Serialize", + deserialize = "AccountId: Deserialize<'de>, BlockNumber: Deserialize<'de>", + )), + educe(Debug(bound(AccountId: core::fmt::Debug, BlockNumber: core::fmt::Debug))) +)] +pub struct ServiceRequest { + /// The service blueprint ID. + pub blueprint: u64, + /// The owner of the service. + pub owner: AccountId, + /// The permitted caller(s) of the service. + pub permitted_callers: BoundedVec, + /// The Lifetime of the service. + pub ttl: BlockNumber, + /// The supplied arguments for the service request. + pub args: BoundedVec, C::MaxFields>, + /// The Selected Operator(s) with their approval state. + pub operators_with_approval_state: + BoundedVec<(AccountId, ApprovalState), C::MaxOperatorsPerService>, +} + +impl ServiceRequest { + /// Returns true if all the operators are [ApprovalState::Approved]. + pub fn is_approved(&self) -> bool { + self.operators_with_approval_state + .iter() + .all(|(_, state)| state == &ApprovalState::Approved) + } + + /// Returns true if any the operators are [ApprovalState::Pending]. + pub fn is_pending(&self) -> bool { + self.operators_with_approval_state + .iter() + .any(|(_, state)| state == &ApprovalState::Pending) + } + + /// Returns true if any the operators are [ApprovalState::Rejected]. + pub fn is_rejected(&self) -> bool { + self.operators_with_approval_state + .iter() + .any(|(_, state)| state == &ApprovalState::Rejected) + } +} + +/// A Service is an instance of a service blueprint. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe( + Default(bound(AccountId: Default, BlockNumber: Default)), + Clone(bound(AccountId: Clone, BlockNumber: Clone)), + PartialEq(bound(AccountId: PartialEq, BlockNumber: PartialEq)), + Eq +)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(not(feature = "std"), derive(RuntimeDebugNoBound))] +#[cfg_attr( + feature = "std", + derive(Serialize, Deserialize), + serde(bound( + serialize = "AccountId: Serialize, BlockNumber: Serialize", + deserialize = "AccountId: Deserialize<'de>, BlockNumber: Deserialize<'de>", + )), + educe(Debug(bound(AccountId: core::fmt::Debug, BlockNumber: core::fmt::Debug))) +)] +pub struct Service { + /// The service ID. + pub id: u64, + /// The Blueprint ID of the service. + pub blueprint: u64, + /// The owner of the service. + pub owner: AccountId, + /// The Permitted caller(s) of the service. + pub permitted_callers: BoundedVec, + /// The Selected operators(s) for this service. + pub operators: BoundedVec, + /// The Lifetime of the service. + pub ttl: BlockNumber, +} + +/// Operator's Approval Prefrence. +#[derive( + Default, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Copy, Clone, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum ApprovalPrefrence { + /// No approval is required to provide the service. + #[codec(index = 0)] + #[default] + None, + /// The approval is required to provide the service. + #[codec(index = 1)] + Required, +} + +#[derive( + Default, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Copy, Clone, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum ApprovalState { + /// The operator is pending approval. + #[codec(index = 0)] + #[default] + Pending, + /// The operator is approved to provide the service. + #[codec(index = 1)] + Approved, + /// The operator is rejected to provide the service. + #[codec(index = 2)] + Rejected, +} + +#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, Copy, Clone, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub struct OperatorPreferences { + /// The operator ECDSA public key. + pub key: ecdsa::Public, + /// The approval prefrence of the operator. + pub approval: ApprovalPrefrence, +} + +impl OperatorPreferences { + /// Encode the fields to ethabi bytes. + pub fn to_ethabi(&self) -> Vec { + let tokens: Vec = vec![ + ethabi::Token::Bytes(self.key.0.to_vec()), + // TODO: Add ApprovalPrefrence to ethabi. + ]; + tokens + } +} + +/// Operator Profile is a profile of an operator that +/// contains metadata about the services that the operator is providing. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Default(bound()), Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct OperatorProfile { + /// The Service IDs that I'm currently providing. + pub services: BoundedBTreeSet, + /// The Blueprint IDs that I'm currently registered for. + pub blueprints: BoundedBTreeSet, +} + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub enum Gadget { + /// A Gadget that is a WASM binary that will be executed. + /// inside the shell using the wasm runtime. + Wasm(WasmGadget), + /// A Gadget that is a native binary that will be executed. + /// inside the shell using the OS. + Native(NativeGadget), + /// A Gadget that is a container that will be executed. + /// inside the shell using the container runtime (e.g. Docker, Podman, etc.) + Container(ContainerGadget), +} + +impl Default for Gadget { + fn default() -> Self { + Gadget::Wasm(WasmGadget { runtime: WasmRuntime::Wasmtime, soruces: Default::default() }) + } +} + +/// A binary that is stored in the Github release. +/// this will constuct the URL to the release and download the binary. +/// The URL will be in the following format: +/// https://github.com///releases/download/v/ +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct GithubFetcher { + /// The owner of the repository. + pub owner: BoundedString, + /// The repository name. + pub repo: BoundedString, + /// The release tag of the repository. + /// NOTE: The tag should be a valid semver tag. + pub tag: BoundedString, + /// The names of the binary in the release by the arch and the os. + pub binaries: BoundedVec, C::MaxBinariesPerGadget>, +} + +/// The CPU or System architecture. +#[derive( + PartialEq, + PartialOrd, + Ord, + Eq, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + Clone, + Copy, + MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum Architecture { + /// WebAssembly architecture (32-bit). + #[codec(index = 0)] + Wasm, + /// WebAssembly architecture (64-bit). + #[codec(index = 1)] + Wasm64, + /// WASI architecture (32-bit). + #[codec(index = 2)] + Wasi, + /// WASI architecture (64-bit). + #[codec(index = 3)] + Wasi64, + /// Amd architecture (32-bit). + #[codec(index = 4)] + Amd, + /// Amd64 architecture (x86_64). + #[codec(index = 5)] + Amd64, + /// Arm architecture (32-bit). + #[codec(index = 6)] + Arm, + /// Arm64 architecture (64-bit). + #[codec(index = 7)] + Arm64, + /// Risc-V architecture (32-bit). + #[codec(index = 8)] + RiscV, + /// Risc-V architecture (64-bit). + #[codec(index = 9)] + RiscV64, +} + +/// Operating System that the binary is compiled for. +#[derive( + Default, + PartialEq, + PartialOrd, + Ord, + Eq, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + Clone, + Copy, + MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum OperatingSystem { + /// Unknown operating system. + /// This is used when the operating system is not known + /// for example, for WASM, where the OS is not relevant. + #[default] + #[codec(index = 0)] + Unknown, + /// Linux operating system. + #[codec(index = 1)] + Linux, + /// Windows operating system. + #[codec(index = 2)] + Windows, + /// MacOS operating system. + #[codec(index = 3)] + MacOS, + /// BSD operating system. + #[codec(index = 4)] + BSD, +} + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct GadgetBinary { + /// CPU or System architecture. + pub arch: Architecture, + /// Operating System that the binary is compiled for. + pub os: OperatingSystem, + /// The name of the binary. + pub name: BoundedString, + /// The sha256 hash of the binary. + /// used to verify the downloaded binary. + pub sha256: [u8; 32], +} + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct GadgetSource { + /// The fetcher that will fetch the gadget from a remote source. + fetcher: GadgetSourceFetcher, +} + +/// A Gadget Source Fetcher is a fetcher that will fetch the gadget +/// from a remote source. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub enum GadgetSourceFetcher { + /// A Gadget that will be fetched from the IPFS. + #[codec(index = 0)] + IPFS(BoundedVec), + /// A Gadget that will be fetched from the Github release. + #[codec(index = 1)] + Github(GithubFetcher), + /// A Gadgets that will be fetched from the container registry. + #[codec(index = 2)] + ContainerImage(ImageRegistryFetcher), +} + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct ImageRegistryFetcher { + /// The URL of the container registry. + registry: BoundedString, + /// The name of the image. + image: BoundedString, + /// The tag of the image. + tag: BoundedString, +} + +/// A WASM binary that contains all the compiled gadget code. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct WasmGadget { + /// Which runtime to use to execute the WASM binary. + pub runtime: WasmRuntime, + /// Where the WASM binary is stored. + pub soruces: BoundedVec, C::MaxSourcesPerGadget>, +} + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub enum WasmRuntime { + /// The WASM binary will be executed using the WASMtime runtime. + #[codec(index = 0)] + Wasmtime, + /// The WASM binary will be executed using the Wasmer runtime. + #[codec(index = 1)] + Wasmer, +} + +/// A Native binary that contains all the gadget code. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct NativeGadget { + /// Where the WASM binary is stored. + pub soruces: BoundedVec, C::MaxSourcesPerGadget>, +} + +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe(Debug(bound()), Clone(bound()), PartialEq(bound()), Eq)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize), serde(bound = ""))] +pub struct ContainerGadget { + /// Where the Image of the gadget binary is stored. + pub soruces: BoundedVec, C::MaxSourcesPerGadget>, +} + +// -***- RPC -***- + +/// RPC Response for query the blueprint along with the services instances of that blueprint. +#[derive(Educe, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[educe( + Default(bound(AccountId: Default, BlockNumber: Default)), + Clone(bound(AccountId: Clone, BlockNumber: Clone)), + PartialEq(bound(AccountId: PartialEq, BlockNumber: PartialEq)), + Eq +)] +#[scale_info(skip_type_params(C))] +#[codec(encode_bound(skip_type_params(C)))] +#[codec(decode_bound(skip_type_params(C)))] +#[codec(mel_bound(skip_type_params(C)))] +#[cfg_attr(not(feature = "std"), derive(RuntimeDebugNoBound))] +#[cfg_attr( + feature = "std", + derive(Serialize, Deserialize), + serde(bound( + serialize = "AccountId: Serialize, BlockNumber: Serialize", + deserialize = "AccountId: Deserialize<'de>, BlockNumber: Deserialize<'de>", + )), + educe(Debug(bound(AccountId: core::fmt::Debug, BlockNumber: core::fmt::Debug))) +)] +pub struct RpcServicesWithBlueprint { + /// The blueprint ID. + pub blueprint_id: u64, + /// The service blueprint. + pub blueprint: ServiceBlueprint, + /// The services instances of that blueprint. + pub services: Vec>, +} diff --git a/runtime/mainnet/Cargo.toml b/runtime/mainnet/Cargo.toml index 844390353..037952a65 100644 --- a/runtime/mainnet/Cargo.toml +++ b/runtime/mainnet/Cargo.toml @@ -89,11 +89,6 @@ pallet-vesting = { workspace = true } # Webb dependencies tangle-crypto-primitives = { workspace = true } tangle-primitives = { workspace = true } -pallet-roles = { workspace = true } -pallet-jobs = { workspace = true } -pallet-jobs-rpc-runtime-api = { workspace = true } -pallet-zksaas = { workspace = true } -pallet-dkg = { workspace = true } # Frontier dependencies fp-account = { workspace = true } @@ -137,133 +132,124 @@ rpc-primitives-txpool = { workspace = true } [features] default = ["std", "with-rocksdb-weights", "evm-tracing"] runtime-benchmarks = [ - "frame-benchmarking", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-grandpa/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-vesting/runtime-benchmarks", - "pallet-collective/runtime-benchmarks", - "pallet-tx-pause/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", + "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "frame-system-benchmarking/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-grandpa/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", + "pallet-vesting/runtime-benchmarks", + "pallet-collective/runtime-benchmarks", + "pallet-tx-pause/runtime-benchmarks", + "pallet-staking/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", - # Frontier - "pallet-ethereum/runtime-benchmarks", - "pallet-evm/runtime-benchmarks", - "pallet-hotfix-sufficients/runtime-benchmarks", + # Frontier + "pallet-ethereum/runtime-benchmarks", + "pallet-evm/runtime-benchmarks", + "pallet-hotfix-sufficients/runtime-benchmarks", ] std = [ - "serde/std", - "parity-scale-codec/std", - "scale-info/std", - "log/std", - "sp-api/std", - "sp-std/std", - "sp-io/std", - "sp-core/std", - "sp-runtime/std", - "sp-version/std", - "sp-staking/std", - "sp-offchain/std", - "sp-session/std", - "sp-block-builder/std", - "sp-transaction-pool/std", - "sp-inherents/std", - "sp-consensus-babe/std", - "frame-support/std", - "frame-executive/std", - "frame-system/std", - "frame-system-rpc-runtime-api/std", - "frame-system-benchmarking?/std", - "frame-election-provider-support/std", - "pallet-authorship/std", - "pallet-babe/std", - "pallet-bags-list/std", - "pallet-bounties/std", - "pallet-child-bounties/std", - "pallet-balances/std", - "pallet-vesting/std", - "pallet-grandpa/std", - "pallet-indices/std", - "pallet-randomness-collective-flip/std", - "pallet-session/std", - "pallet-sudo/std", - "pallet-timestamp/std", - "pallet-transaction-payment/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-tx-pause/std", - "pallet-utility/std", - "pallet-multisig/std", - "pallet-collective/std", - "pallet-democracy/std", - "pallet-election-provider-multi-phase/std", - "pallet-elections-phragmen/std", - "pallet-im-online/std", - "pallet-offences/std", - "pallet-staking/std", - "pallet-scheduler/std", - "pallet-preimage/std", - "pallet-nomination-pools/std", - "pallet-treasury/std", - "pallet-airdrop-claims/std", - "pallet-identity/std", - "frame-system-benchmarking?/std", - "pallet-roles/std", - "sp-storage/std", - "pallet-jobs/std", - "pallet-jobs-rpc-runtime-api/std", - "frame-metadata-hash-extension/std", - "frame-benchmarking/std", - "pallet-dkg/std", - "pallet-proxy/std", - "pallet-zksaas/std", - "num_enum/std", - - # Tangle dependencies - "tangle-primitives/std", - "tangle-crypto-primitives/std", + "serde/std", + "parity-scale-codec/std", + "scale-info/std", + "log/std", + "sp-api/std", + "sp-std/std", + "sp-io/std", + "sp-core/std", + "sp-runtime/std", + "sp-version/std", + "sp-staking/std", + "sp-offchain/std", + "sp-session/std", + "sp-block-builder/std", + "sp-transaction-pool/std", + "sp-inherents/std", + "sp-consensus-babe/std", + "frame-support/std", + "frame-executive/std", + "frame-system/std", + "frame-system-rpc-runtime-api/std", + "frame-system-benchmarking?/std", + "frame-election-provider-support/std", + "pallet-authorship/std", + "pallet-babe/std", + "pallet-bags-list/std", + "pallet-bounties/std", + "pallet-child-bounties/std", + "pallet-balances/std", + "pallet-vesting/std", + "pallet-grandpa/std", + "pallet-indices/std", + "pallet-randomness-collective-flip/std", + "pallet-session/std", + "pallet-sudo/std", + "pallet-timestamp/std", + "pallet-transaction-payment/std", + "pallet-transaction-payment-rpc-runtime-api/std", + "pallet-tx-pause/std", + "pallet-utility/std", + "pallet-multisig/std", + "pallet-collective/std", + "pallet-democracy/std", + "pallet-election-provider-multi-phase/std", + "pallet-elections-phragmen/std", + "pallet-im-online/std", + "pallet-offences/std", + "pallet-staking/std", + "pallet-scheduler/std", + "pallet-preimage/std", + "pallet-nomination-pools/std", + "pallet-treasury/std", + "pallet-airdrop-claims/std", + "pallet-identity/std", + "frame-system-benchmarking?/std", + "sp-storage/std", + # Tangle dependencies + "tangle-primitives/std", + "tangle-crypto-primitives/std", - # Frontier - "fp-account/std", - "fp-evm/std", - "fp-rpc/std", - "fp-self-contained/std", + # Frontier + "fp-account/std", + "fp-evm/std", + "fp-rpc/std", + "fp-self-contained/std", - # Frontier FRAME - "pallet-base-fee/std", - "pallet-dynamic-fee/std", - "pallet-ethereum/std", - "pallet-evm/std", - "pallet-evm-chain-id/std", - "pallet-evm-precompile-balances-erc20/std", - "pallet-evm-precompile-modexp/std", - "pallet-evm-precompile-sha3fips/std", - "pallet-evm-precompile-simple/std", - "pallet-evm-precompile-blake2/std", - "pallet-evm-precompile-bn128/std", - "pallet-evm-precompile-curve25519/std", - "pallet-evm-precompile-dispatch/std", - "pallet-evm-precompile-ed25519/std", - "pallet-hotfix-sufficients/std", - "precompile-utils/std", - "evm-tracer/std", - "rpc-primitives-debug/std", - "rpc-primitives-txpool/std", + # Frontier FRAME + "pallet-base-fee/std", + "pallet-dynamic-fee/std", + "pallet-ethereum/std", + "pallet-evm/std", + "pallet-evm-chain-id/std", + "pallet-evm-precompile-balances-erc20/std", + "pallet-evm-precompile-modexp/std", + "pallet-evm-precompile-sha3fips/std", + "pallet-evm-precompile-simple/std", + "pallet-evm-precompile-blake2/std", + "pallet-evm-precompile-bn128/std", + "pallet-evm-precompile-curve25519/std", + "pallet-evm-precompile-dispatch/std", + "pallet-evm-precompile-ed25519/std", + "pallet-hotfix-sufficients/std", + "precompile-utils/std", + "evm-tracer/std", + "rpc-primitives-debug/std", + "rpc-primitives-txpool/std", - # Moonbeam precompiles - "pallet-evm-precompile-preimage/std", - "pallet-evm-precompile-batch/std", - "pallet-evm-precompile-call-permit/std", - "pallet-evm-precompile-proxy/std", - "pallet-evm-precompile-democracy/std", - "pallet-evm-precompile-registry/std", - "pallet-evm-precompile-staking/std", - "pallet-evm-precompile-vesting/std", + # Tangle precompiles + "pallet-evm-precompile-preimage/std", + "pallet-evm-precompile-batch/std", + "pallet-evm-precompile-call-permit/std", + "pallet-evm-precompile-proxy/std", + "pallet-evm-precompile-democracy/std", + "pallet-evm-precompile-registry/std", + "pallet-evm-precompile-staking/std", + "pallet-evm-precompile-vesting/std", ] integration-tests = ["tangle-primitives/integration-tests"] with-rocksdb-weights = [] @@ -282,4 +268,4 @@ metadata-hash = ["substrate-wasm-builder/metadata-hash"] # A convenience feature for enabling things when doing a build # for an on-chain release. -on-chain-release-build = ["metadata-hash", "sp-api/disable-logging"] \ No newline at end of file +on-chain-release-build = ["metadata-hash", "sp-api/disable-logging"] diff --git a/runtime/mainnet/src/filters.rs b/runtime/mainnet/src/filters.rs index 791776d01..bb010546f 100644 --- a/runtime/mainnet/src/filters.rs +++ b/runtime/mainnet/src/filters.rs @@ -32,11 +32,6 @@ impl Contains for MainnetCallFilter { return false; } - match call { - // Block jobs and roles pallet - RuntimeCall::Roles(_) | RuntimeCall::Jobs(_) => false, - // al other calls are allowed - _ => true, - } + true } } diff --git a/runtime/mainnet/src/lib.rs b/runtime/mainnet/src/lib.rs index 5af909874..7e4fbcf02 100644 --- a/runtime/mainnet/src/lib.rs +++ b/runtime/mainnet/src/lib.rs @@ -21,8 +21,6 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -pub use tangle_primitives::jobs::JobResult; - mod filters; pub mod frontier_evm; pub mod impls; @@ -53,7 +51,6 @@ use pallet_transaction_payment::{ use pallet_tx_pause::RuntimeCallNameOf; use parity_scale_codec::MaxEncodedLen; use parity_scale_codec::{Decode, Encode}; -use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_api::impl_runtime_apis; use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H160, H256, U256}; @@ -73,29 +70,14 @@ use sp_runtime::{ SaturatedConversion, }; use sp_staking::currency_to_vote::U128CurrencyToVote; -use tangle_primitives::jobs::JobType; -use tangle_primitives::jobs::{traits::JobToFee, JobSubmission}; -use tangle_primitives::roles::ValidatorRewardDistribution; -use tangle_primitives::verifier::arkworks::ArkworksVerifierGroth16Bn254; -use tangle_primitives::verifier::circom::CircomVerifierGroth16Bn254; #[cfg(any(feature = "std", test))] pub use frame_system::Call as SystemCall; -use sp_runtime::DispatchResult; -use sp_staking::{ - offence::{OffenceError, ReportOffence}, - SessionIndex, -}; use sp_std::prelude::*; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; use static_assertions::const_assert; -pub use tangle_crypto_primitives::crypto::AuthorityId as RoleKeyId; -use tangle_primitives::{ - jobs::{traits::MPCHandler, JobWithResult, ValidatorOffenceType}, - misbehavior::{MisbehaviorHandler, MisbehaviorSubmission}, -}; pub use frame_support::{ construct_runtime, @@ -213,7 +195,6 @@ pub mod opaque { pub babe: Babe, pub grandpa: Grandpa, pub im_online: ImOnline, - pub role: Roles, } } } @@ -483,7 +464,6 @@ impl pallet_staking::Config for Runtime { type TargetList = pallet_staking::UseValidatorsMap; type EraPayout = pallet_staking::ConvertCurve; type NextNewSession = Session; - type RolesHandler = Roles; type MaxExposurePageSize = MaxExposurePageSize; type MaxControllersInDeprecationBatch = MaxControllersInDeprecationBatch; type OffendingValidatorsThreshold = OffendingValidatorsThreshold; @@ -1123,70 +1103,6 @@ impl pallet_airdrop_claims::Config for Runtime { type WeightInfo = pallet_airdrop_claims::weights::SubstrateWeight; } -pub struct MainnetMPCHandler; - -impl - MPCHandler< - AccountId, - BlockNumber, - Balance, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > for MainnetMPCHandler -{ - fn verify( - data: JobWithResult< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - ) -> DispatchResult { - match data.result { - JobResult::DKGPhaseOne(_) - | JobResult::DKGPhaseTwo(_) - | JobResult::DKGPhaseThree(_) - | JobResult::DKGPhaseFour(_) => Dkg::verify(data.result), - JobResult::ZkSaaSPhaseOne(_) | JobResult::ZkSaaSPhaseTwo(_) => ZkSaaS::verify(data), - } - } - - fn verify_validator_report( - _validator: AccountId, - _offence: ValidatorOffenceType, - _signatures: Vec>, - ) -> DispatchResult { - Ok(()) - } - - fn validate_authority_key(_validator: AccountId, _authority_key: Vec) -> DispatchResult { - Ok(()) - } -} - -type IdTuple = pallet_session::historical::IdentificationTuple; -type Offence = pallet_roles::offences::ValidatorOffence; -/// A mock offence report handler. -pub struct OffenceHandler; -impl ReportOffence for OffenceHandler { - fn report_offence(_reporters: Vec, _offence: Offence) -> Result<(), OffenceError> { - Ok(()) - } - - fn is_known_offence(_offenders: &[IdTuple], _time_slot: &SessionIndex) -> bool { - false - } -} - // ReStaking reward curve, more details at // https://docs.rs/pallet-staking-reward-curve/latest/pallet_staking_reward_curve/macro.build.html // We are aiming for a max inflation of 1%, when 25% of tokens are re-staked @@ -1203,149 +1119,6 @@ pallet_staking_reward_curve::build! { ); } -parameter_types! { - pub const MaxValidators : u32 = 1000; - pub MaxRestake: Percent = Percent::from_percent(50); - pub const RestakerRewardCurve: &'static PiecewiseLinear<'static> = &RESTAKER_REWARD_CURVE; - pub Reward : ValidatorRewardDistribution = ValidatorRewardDistribution::try_new(Percent::from_rational(1_u32,2_u32), Percent::from_rational(1_u32,2_u32)).unwrap(); -} - -impl pallet_roles::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type JobsHandler = Jobs; - type RoleKeyId = RoleKeyId; - type MaxRolesPerAccount = ConstU32<2>; - type ValidatorSet = Historical; - type ReportOffences = OffenceHandler; - type ForceOrigin = EnsureRoot; - type ValidatorRewardDistribution = Reward; - type MaxRolesPerValidator = MaxRolesPerValidator; - type MaxValidators = MaxValidators; - type MaxKeyLen = MaxKeyLen; - type MaxRestake = MaxRestake; - type RestakerEraPayout = pallet_staking::ConvertCurve; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type WeightInfo = (); -} - -pub struct MainnetJobToFeeHandler; - -impl JobToFee - for MainnetJobToFeeHandler -{ - type Balance = Balance; - - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - match job.job_type { - JobType::DKGTSSPhaseOne(_) - | JobType::DKGTSSPhaseTwo(_) - | JobType::DKGTSSPhaseThree(_) - | JobType::DKGTSSPhaseFour(_) => Dkg::job_to_fee(job), - JobType::ZkSaaSPhaseOne(_) | JobType::ZkSaaSPhaseTwo(_) => ZkSaaS::job_to_fee(job), - } - } - - fn calculate_result_extension_fee(result: Vec, extension_time: BlockNumber) -> Balance { - Dkg::calculate_result_extension_fee(result, extension_time) - } -} - -pub struct MainnetMisbehaviorHandler; - -impl MisbehaviorHandler for MainnetMisbehaviorHandler { - fn verify(_data: MisbehaviorSubmission) -> DispatchResult { - Ok(()) - } -} - -parameter_types! { - pub const JobsPalletId: PalletId = PalletId(*b"py/jobss"); - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxParticipants: u32 = 20; - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxSubmissionLen: u32 = 256; - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxKeyLen: u32 = 256; - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxDataLen: u32 = 256; - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxSignatureLen: u32 = 256; - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxProofLen: u32 = 256; - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxActiveJobsPerValidator: u32 = 100; - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxRolesPerValidator: u32 = 100; - #[derive(Clone, Eq, PartialEq, TypeInfo, Encode, Decode, RuntimeDebug)] - #[derive(Serialize, Deserialize)] - pub const MaxAdditionalParamsLen: u32 = 256; -} - -impl pallet_jobs::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ForceOrigin = EnsureRootOrHalfCouncil; - type Currency = Balances; - type JobToFee = MainnetJobToFeeHandler; - type RolesHandler = Roles; - type MPCHandler = MainnetMPCHandler; - type MisbehaviorHandler = MainnetMisbehaviorHandler; - type PalletId = JobsPalletId; - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type WeightInfo = (); -} - -impl pallet_dkg::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = EnsureRootOrHalfCouncil; - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - -impl pallet_zksaas::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = EnsureRootOrHalfCouncil; - type Verifier = (ArkworksVerifierGroth16Bn254, CircomVerifierGroth16Bn254); - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - parameter_types! { // One storage item; key size 32, value size 8; . pub const ProxyDepositBase: Balance = deposit(1, 8); @@ -1430,58 +1203,60 @@ impl pallet_proxy::Config for Runtime { // Create the runtime by composing the FRAME pallets that were previously configured. construct_runtime!( pub enum Runtime { - System: frame_system, - Timestamp: pallet_timestamp, - - Sudo: pallet_sudo, - RandomnessCollectiveFlip: pallet_randomness_collective_flip, - - Balances: pallet_balances, - TransactionPayment: pallet_transaction_payment, - - Authorship: pallet_authorship, - Babe: pallet_babe, - Grandpa: pallet_grandpa, - - Indices: pallet_indices, - Democracy: pallet_democracy, - Council: pallet_collective::, - Vesting: pallet_vesting, - - Elections: pallet_elections_phragmen, - ElectionProviderMultiPhase: pallet_election_provider_multi_phase, - Staking: pallet_staking, - Session: pallet_session, - Historical: pallet_session_historical, - Treasury: pallet_treasury, - Bounties: pallet_bounties, - ChildBounties: pallet_child_bounties, - BagsList: pallet_bags_list, - NominationPools: pallet_nomination_pools, - - Scheduler: pallet_scheduler, - Preimage: pallet_preimage, - Offences: pallet_offences, - Proxy: pallet_proxy, - - TxPause: pallet_tx_pause, - ImOnline: pallet_im_online, - Identity: pallet_identity, - Utility: pallet_utility, - Multisig: pallet_multisig, - - Ethereum: pallet_ethereum, - EVM: pallet_evm, - EVMChainId: pallet_evm_chain_id, - DynamicFee: pallet_dynamic_fee, - BaseFee: pallet_base_fee, - HotfixSufficients: pallet_hotfix_sufficients, - - Claims: pallet_airdrop_claims, - Roles: pallet_roles, - Jobs: pallet_jobs, - Dkg: pallet_dkg, - ZkSaaS: pallet_zksaas, + System: frame_system = 1, + Timestamp: pallet_timestamp = 2, + + Sudo: pallet_sudo = 3, + RandomnessCollectiveFlip: pallet_randomness_collective_flip = 4, + + Balances: pallet_balances = 5, + TransactionPayment: pallet_transaction_payment = 6, + + Authorship: pallet_authorship = 7, + Babe: pallet_babe = 8, + Grandpa: pallet_grandpa = 9, + + Indices: pallet_indices = 10, + Democracy: pallet_democracy = 11, + Council: pallet_collective:: = 12, + Vesting: pallet_vesting = 13, + + Elections: pallet_elections_phragmen = 14, + ElectionProviderMultiPhase: pallet_election_provider_multi_phase = 15, + Staking: pallet_staking = 16, + Session: pallet_session = 17, + Historical: pallet_session_historical = 18, + Treasury: pallet_treasury = 19, + Bounties: pallet_bounties = 20, + ChildBounties: pallet_child_bounties = 21, + BagsList: pallet_bags_list = 22, + NominationPools: pallet_nomination_pools = 23, + + Scheduler: pallet_scheduler = 24, + Preimage: pallet_preimage = 25, + Offences: pallet_offences = 26, + Proxy: pallet_proxy = 27, + + TxPause: pallet_tx_pause = 28, + ImOnline: pallet_im_online = 29, + Identity: pallet_identity = 30, + Utility: pallet_utility = 31, + Multisig: pallet_multisig = 32, + + Ethereum: pallet_ethereum = 33, + EVM: pallet_evm = 34, + EVMChainId: pallet_evm_chain_id = 35, + DynamicFee: pallet_dynamic_fee = 36, + BaseFee: pallet_base_fee = 37, + HotfixSufficients: pallet_hotfix_sufficients = 38, + + Claims: pallet_airdrop_claims = 39, + // DO NOT USE below indexes + // Roles: pallet_roles = 40, + // Jobs: pallet_jobs = 41, + // Dkg: pallet_dkg = 42, + // ZkSaaS: pallet_zksaas = 43, + } ); diff --git a/runtime/testnet/Cargo.toml b/runtime/testnet/Cargo.toml index 8d0448d28..8ce8fe0ed 100644 --- a/runtime/testnet/Cargo.toml +++ b/runtime/testnet/Cargo.toml @@ -90,11 +90,8 @@ pallet-vesting = { workspace = true } # Webb dependencies pallet-airdrop-claims = { workspace = true } -pallet-dkg = { workspace = true } -pallet-jobs = { workspace = true } -pallet-jobs-rpc-runtime-api = { workspace = true } -pallet-roles = { workspace = true } -pallet-zksaas = { workspace = true } +pallet-services = { workspace = true } +pallet-services-rpc-runtime-api = { workspace = true } tangle-crypto-primitives = { workspace = true } tangle-primitives = { workspace = true, features = ["verifying"] } pallet-multi-asset-delegation = { workspace = true } @@ -124,16 +121,21 @@ pallet-evm-precompile-simple = { workspace = true } pallet-hotfix-sufficients = { workspace = true } -## Moonbeam precompiles +## Tangle precompiles pallet-evm-precompile-batch = { workspace = true } pallet-evm-precompile-call-permit = { workspace = true } pallet-evm-precompile-democracy = { workspace = true } -pallet-evm-precompile-jobs = { workspace = true } pallet-evm-precompile-preimage = { workspace = true } pallet-evm-precompile-proxy = { workspace = true } pallet-evm-precompile-registry = { workspace = true } pallet-evm-precompile-staking = { workspace = true } pallet-evm-precompile-vesting = { workspace = true } +pallet-evm-precompile-verify-ecdsa-secp256k1-signature = { workspace = true } +pallet-evm-precompile-verify-ecdsa-secp256r1-signature = { workspace = true } +pallet-evm-precompile-verify-ecdsa-stark-signature = { workspace = true } +pallet-evm-precompile-verify-schnorr-signatures = { workspace = true } +pallet-evm-precompile-verify-bls381-signature = { workspace = true } + precompile-utils = { workspace = true } evm-tracer = { workspace = true } @@ -144,7 +146,7 @@ rpc-primitives-txpool = { workspace = true } sygma-access-segregator = { workspace = true } sygma-basic-feehandler = { workspace = true } sygma-traits = { workspace = true } -sygma-fee-handler-router ={ workspace = true } +sygma-fee-handler-router = { workspace = true } sygma-percentage-feehandler = { workspace = true } sygma-bridge = { workspace = true } sygma-runtime-api = { workspace = true } @@ -156,166 +158,164 @@ xcm-executor = { workspace = true } polkadot-parachain-primitives = { workspace = true } [features] -default = ["std", "with-rocksdb-weights", "evm-tracing"] -local-testing = [] runtime-benchmarks = [ - "frame-benchmarking", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-assets/runtime-benchmarks", - "pallet-vesting/runtime-benchmarks", - "pallet-collective/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-tx-pause/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - - # Frontier - "pallet-ethereum/runtime-benchmarks", - "pallet-evm/runtime-benchmarks", - "pallet-hotfix-sufficients/runtime-benchmarks", - - # Tangle - "pallet-roles/runtime-benchmarks", - "pallet-jobs/runtime-benchmarks", - "pallet-airdrop-claims/runtime-benchmarks", - - "xcm-builder/runtime-benchmarks", - "pallet-multi-asset-delegation/runtime-benchmarks" + "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "frame-system-benchmarking/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-assets/runtime-benchmarks", + "pallet-vesting/runtime-benchmarks", + "pallet-collective/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", + "pallet-tx-pause/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + + # Frontier + "pallet-ethereum/runtime-benchmarks", + "pallet-evm/runtime-benchmarks", + "pallet-hotfix-sufficients/runtime-benchmarks", + + # Tangle + "pallet-services/runtime-benchmarks", + "pallet-airdrop-claims/runtime-benchmarks", + + "xcm-builder/runtime-benchmarks", + "pallet-multi-asset-delegation/runtime-benchmarks", ] +default = ["std", "with-rocksdb-weights", "evm-tracing"] +local-testing = [] std = [ - "serde/std", - "parity-scale-codec/std", - "scale-info/std", - "log/std", - "sp-api/std", - "sp-std/std", - "sp-io/std", - "sp-core/std", - "sp-runtime/std", - "sp-version/std", - "sp-staking/std", - "sp-offchain/std", - "sp-session/std", - "sp-block-builder/std", - "sp-transaction-pool/std", - "sp-inherents/std", - "sp-consensus-babe/std", - "frame-support/std", - "sp-storage/std", - "frame-executive/std", - "frame-system/std", - "frame-system-rpc-runtime-api/std", - "frame-system-benchmarking?/std", - "frame-election-provider-support/std", - "pallet-authorship/std", - "pallet-babe/std", - "pallet-bags-list/std", - "pallet-bounties/std", - "pallet-child-bounties/std", - "pallet-balances/std", - "pallet-assets/std", - "pallet-vesting/std", - "pallet-grandpa/std", - "pallet-indices/std", - "pallet-randomness-collective-flip/std", - "pallet-session/std", - "pallet-sudo/std", - "pallet-timestamp/std", - "pallet-transaction-payment/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-tx-pause/std", - "pallet-utility/std", - "pallet-multisig/std", - "pallet-collective/std", - "pallet-democracy/std", - "pallet-election-provider-multi-phase/std", - "pallet-elections-phragmen/std", - "pallet-im-online/std", - "pallet-offences/std", - "pallet-staking/std", - "pallet-scheduler/std", - "pallet-preimage/std", - "pallet-nomination-pools/std", - "pallet-treasury/std", - "pallet-airdrop-claims/std", - "pallet-identity/std", - "frame-system-benchmarking?/std", - "frame-metadata-hash-extension/std", - "frame-benchmarking/std", - "pallet-dkg/std", - "pallet-proxy/std", - "pallet-zksaas/std", - "num_enum/std", - "fixed/std", - "hex/std", - "primitive-types/std", - - # Tangle dependencies - "tangle-primitives/std", - "tangle-crypto-primitives/std", - "pallet-jobs/std", - "pallet-roles/std", - "pallet-dkg/std", - "pallet-zksaas/std", - "pallet-jobs-rpc-runtime-api/std", - "pallet-multi-asset-delegation/std", - - # Frontier - "fp-account/std", - "fp-evm/std", - "fp-rpc/std", - "fp-self-contained/std", - - # Frontier FRAME - "pallet-base-fee/std", - "pallet-dynamic-fee/std", - "pallet-ethereum/std", - "pallet-evm/std", - "pallet-evm-chain-id/std", - "pallet-evm-precompile-modexp/std", - "pallet-evm-precompile-balances-erc20/std", - "pallet-evm-precompileset-assets-erc20/std", - "pallet-evm-precompile-sha3fips/std", - "pallet-evm-precompile-simple/std", - "pallet-evm-precompile-blake2/std", - "pallet-evm-precompile-bn128/std", - "pallet-evm-precompile-curve25519/std", - "pallet-evm-precompile-dispatch/std", - "pallet-evm-precompile-ed25519/std", - "pallet-hotfix-sufficients/std", - "precompile-utils/std", - "evm-tracer/std", - "rpc-primitives-debug/std", - "rpc-primitives-txpool/std", - - # Moonbeam precompiles - "pallet-evm-precompile-preimage/std", - "pallet-evm-precompile-batch/std", - "pallet-evm-precompile-call-permit/std", - "pallet-evm-precompile-proxy/std", - "pallet-evm-precompile-democracy/std", - "pallet-evm-precompile-registry/std", - "pallet-evm-precompile-staking/std", - "pallet-evm-precompile-jobs/std", - "pallet-evm-precompile-vesting/std", - - # Sygma - "sygma-basic-feehandler/std", - "sygma-traits/std", - "sygma-bridge/std", - "sygma-access-segregator/std", - "sygma-fee-handler-router/std", - "sygma-percentage-feehandler/std", - "sygma-runtime-api/std", - - # XCM - "xcm/std", - "xcm-builder/std", - "xcm-executor/std", - "polkadot-parachain-primitives/std", + "serde/std", + "parity-scale-codec/std", + "scale-info/std", + "log/std", + "sp-api/std", + "sp-std/std", + "sp-io/std", + "sp-core/std", + "sp-runtime/std", + "sp-version/std", + "sp-staking/std", + "sp-offchain/std", + "sp-session/std", + "sp-block-builder/std", + "sp-transaction-pool/std", + "sp-inherents/std", + "sp-consensus-babe/std", + "frame-support/std", + "sp-storage/std", + "frame-executive/std", + "frame-system/std", + "frame-system-rpc-runtime-api/std", + "frame-system-benchmarking?/std", + "frame-election-provider-support/std", + "pallet-authorship/std", + "pallet-babe/std", + "pallet-bags-list/std", + "pallet-bounties/std", + "pallet-child-bounties/std", + "pallet-balances/std", + "pallet-assets/std", + "pallet-vesting/std", + "pallet-grandpa/std", + "pallet-indices/std", + "pallet-randomness-collective-flip/std", + "pallet-session/std", + "pallet-sudo/std", + "pallet-timestamp/std", + "pallet-transaction-payment/std", + "pallet-transaction-payment-rpc-runtime-api/std", + "pallet-tx-pause/std", + "pallet-utility/std", + "pallet-multisig/std", + "pallet-collective/std", + "pallet-democracy/std", + "pallet-election-provider-multi-phase/std", + "pallet-elections-phragmen/std", + "pallet-im-online/std", + "pallet-offences/std", + "pallet-staking/std", + "pallet-scheduler/std", + "pallet-preimage/std", + "pallet-nomination-pools/std", + "pallet-treasury/std", + "pallet-airdrop-claims/std", + "pallet-identity/std", + "frame-system-benchmarking?/std", + "frame-metadata-hash-extension/std", + "frame-benchmarking/std", + "pallet-proxy/std", + "num_enum/std", + "fixed/std", + "hex/std", + "primitive-types/std", + + # Tangle dependencies + "tangle-primitives/std", + "tangle-crypto-primitives/std", + "pallet-services/std", + "pallet-multi-asset-delegation/std", + "pallet-services-rpc-runtime-api/std", + + # Frontier + "fp-account/std", + "fp-evm/std", + "fp-rpc/std", + "fp-self-contained/std", + + # Frontier FRAME + "pallet-base-fee/std", + "pallet-dynamic-fee/std", + "pallet-ethereum/std", + "pallet-evm/std", + "pallet-evm-chain-id/std", + "pallet-evm-precompile-modexp/std", + "pallet-evm-precompile-balances-erc20/std", + "pallet-evm-precompile-sha3fips/std", + "pallet-evm-precompile-simple/std", + "pallet-evm-precompile-blake2/std", + "pallet-evm-precompile-bn128/std", + "pallet-evm-precompile-curve25519/std", + "pallet-evm-precompile-dispatch/std", + "pallet-evm-precompile-ed25519/std", + "pallet-hotfix-sufficients/std", + "precompile-utils/std", + "evm-tracer/std", + "rpc-primitives-debug/std", + "rpc-primitives-txpool/std", + + # Tangle precompiles + "pallet-evm-precompile-preimage/std", + "pallet-evm-precompile-batch/std", + "pallet-evm-precompile-call-permit/std", + "pallet-evm-precompile-proxy/std", + "pallet-evm-precompile-democracy/std", + "pallet-evm-precompile-registry/std", + "pallet-evm-precompile-staking/std", + "pallet-evm-precompile-vesting/std", + "pallet-evm-precompile-verify-ecdsa-secp256k1-signature/std", + "pallet-evm-precompile-verify-ecdsa-secp256r1-signature/std", + "pallet-evm-precompile-verify-ecdsa-stark-signature/std", + "pallet-evm-precompile-verify-schnorr-signatures/std", + "pallet-evm-precompile-verify-bls381-signature/std", + + + # Sygma + "sygma-basic-feehandler/std", + "sygma-traits/std", + "sygma-bridge/std", + "sygma-access-segregator/std", + "sygma-fee-handler-router/std", + "sygma-percentage-feehandler/std", + "sygma-runtime-api/std", + + # XCM + "xcm/std", + "xcm-builder/std", + "xcm-executor/std", + "polkadot-parachain-primitives/std", ] integration-tests = ["tangle-primitives/integration-tests"] with-rocksdb-weights = [] diff --git a/runtime/testnet/src/frontier_evm.rs b/runtime/testnet/src/frontier_evm.rs index 92890de49..ee952e744 100644 --- a/runtime/testnet/src/frontier_evm.rs +++ b/runtime/testnet/src/frontier_evm.rs @@ -25,7 +25,7 @@ use sp_runtime::{traits::BlakeTwo256, ConsensusEngineId, Permill}; use sp_std::{marker::PhantomData, prelude::*}; // Frontier use pallet_ethereum::PostLogContent; -use pallet_evm::HashedAddressMapping; +use pallet_evm::{HashedAddressMapping, OnChargeEVMTransaction}; use pallet_evm_precompileset_assets_erc20::AddressToAssetId; use tangle_primitives::{ evm::{GAS_LIMIT_POV_SIZE_RATIO, WEIGHT_PER_GAS}, @@ -80,6 +80,55 @@ parameter_types! { pub PrecompilesValue: WebbPrecompiles = WebbPrecompiles::<_>::new(); } +/// Type alias for negative imbalance during fees +type RuntimeNegativeImbalance = + ::AccountId>>::NegativeImbalance; + +/// See: [`pallet_evm::EVMCurrencyAdapter`] +pub struct CustomEVMCurrencyAdapter; + +impl OnChargeEVMTransaction for CustomEVMCurrencyAdapter { + type LiquidityInfo = Option; + + fn withdraw_fee( + who: &H160, + fee: U256, + ) -> Result> { + let pallet_services_address = pallet_services::Pallet::::address(); + // Make pallet services account free to use + if who == &pallet_services_address { + return Ok(None); + } + // fallback to the default implementation + > as OnChargeEVMTransaction< + Runtime, + >>::withdraw_fee(who, fee) + } + + fn correct_and_deposit_fee( + who: &H160, + corrected_fee: U256, + base_fee: U256, + already_withdrawn: Self::LiquidityInfo, + ) -> Self::LiquidityInfo { + let pallet_services_address = pallet_services::Pallet::::address(); + // Make pallet services account free to use + if who == &pallet_services_address { + return already_withdrawn; + } + // fallback to the default implementation + > as OnChargeEVMTransaction< + Runtime, + >>::correct_and_deposit_fee(who, corrected_fee, base_fee, already_withdrawn) + } + + fn pay_priority_fee(tip: Self::LiquidityInfo) { + > as OnChargeEVMTransaction< + Runtime, + >>::pay_priority_fee(tip) + } +} + impl pallet_evm::Config for Runtime { type FeeCalculator = BaseFee; type GasWeightMapping = pallet_evm::FixedGasWeightMapping; @@ -95,8 +144,7 @@ impl pallet_evm::Config for Runtime { type ChainId = EVMChainId; type BlockGasLimit = BlockGasLimit; type Runner = pallet_evm::runner::stack::Runner; - type OnChargeTransaction = - pallet_evm::EVMCurrencyAdapter>; + type OnChargeTransaction = CustomEVMCurrencyAdapter; type OnCreate = (); type SuicideQuickClearLimit = ConstU32<0>; type FindAuthor = FindAuthorTruncated; diff --git a/runtime/testnet/src/lib.rs b/runtime/testnet/src/lib.rs index 8c21c4dd2..55309c584 100644 --- a/runtime/testnet/src/lib.rs +++ b/runtime/testnet/src/lib.rs @@ -14,7 +14,7 @@ // limitations under the License. #![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. +// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 512. #![recursion_limit = "512"] // Make the WASM binary available. @@ -25,6 +25,7 @@ mod filters; pub mod frontier_evm; pub mod impls; pub mod precompiles; +pub mod tangle_services; pub mod voter_bags; use fixed::{types::extra::U16, FixedU128 as DecimalFixedU128}; @@ -41,11 +42,14 @@ use frame_support::{ weights::ConstantMultiplier, }; use frame_system::{EnsureSigned, EnsureSignedBy}; +use frontier_evm::DefaultBaseFeePerGas; use pallet_election_provider_multi_phase::{GeometricDepositBase, SolutionAccuracyOf}; +use pallet_evm::GasWeightMapping; use pallet_grandpa::{ fg_primitives, AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList, }; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; +use pallet_services_rpc_runtime_api::BlockNumberOf; use pallet_session::historical as pallet_session_historical; pub use pallet_staking::StakerStatus; use pallet_transaction_payment::{ @@ -72,8 +76,8 @@ use sp_runtime::{ transaction_validity::{ TransactionPriority, TransactionSource, TransactionValidity, TransactionValidityError, }, - AccountId32, ApplyExtrinsicResult, DispatchResult, FixedPointNumber, FixedU128, Perquintill, - RuntimeDebug, SaturatedConversion, + AccountId32, ApplyExtrinsicResult, FixedPointNumber, FixedU128, Perquintill, RuntimeDebug, + SaturatedConversion, }; use sp_std::collections::btree_map::BTreeMap; use sp_std::sync::Arc; @@ -86,11 +90,7 @@ use sygma_traits::{ ChainID, DecimalConverter, DepositNonce, DomainID, ExtractDestinationData, ResourceId, VerifyingContractAddress, }; -pub use tangle_crypto_primitives::crypto::AuthorityId as RoleKeyId; -use tangle_primitives::{ - jobs::{JobId, PhaseResult, RpcResponseJobsData}, - roles::RoleType, -}; +use tangle_primitives::services::RpcServicesWithBlueprint; use xcm::v4::Junctions::{X1, X3, X4}; use xcm::v4::{prelude::*, Asset, AssetId as XcmAssetId, Location}; #[allow(deprecated)] @@ -126,20 +126,10 @@ use sp_runtime::generic::Era; #[cfg(any(feature = "std", test))] pub use sp_runtime::BuildStorage; pub use sp_runtime::{MultiAddress, Perbill, Percent, Permill}; -use sp_staking::{ - currency_to_vote::U128CurrencyToVote, - offence::{OffenceError, ReportOffence}, - SessionIndex, -}; +use sp_staking::currency_to_vote::U128CurrencyToVote; pub use tangle_primitives::{ currency::*, fee::*, - jobs::{ - traits::{JobToFee, MPCHandler}, - JobResult, JobSubmission, JobType, JobWithResult, ValidatorOffenceType, - }, - misbehavior::{traits::MisbehaviorHandler, MisbehaviorJustification, MisbehaviorSubmission}, - roles::ValidatorRewardDistribution, time::*, types::{ AccountId, AccountIndex, Address, Balance, BlockNumber, Hash, Header, Index, Moment, @@ -157,7 +147,6 @@ use tangle_primitives::{ CANDIDACY_BOND, DESIRED_MEMBERS, DESIRED_RUNNERS_UP, ELECTIONS_PHRAGMEN_PALLET_ID, MAX_CANDIDATES, MAX_VOTERS, TERM_DURATION, }, - roles::traits::RolesHandler, staking::{ BONDING_DURATION, HISTORY_DEPTH, MAX_NOMINATOR_REWARDED_PER_VALIDATOR, OFFCHAIN_REPEAT, OFFENDING_VALIDATOR_THRESHOLD, SESSIONS_PER_ERA, SLASH_DEFER_DURATION, @@ -168,6 +157,7 @@ use tangle_primitives::{ TIP_REPORT_DEPOSIT_BASE, TREASURY_PALLET_ID, }, }; +pub use tangle_services::PalletServicesConstraints; // Precompiles pub type Precompiles = WebbPrecompiles; @@ -233,7 +223,6 @@ pub mod opaque { pub babe: Babe, pub grandpa: Grandpa, pub im_online: ImOnline, - pub role: Roles, } } } @@ -500,7 +489,6 @@ impl pallet_staking::Config for Runtime { type TargetList = pallet_staking::UseValidatorsMap; type EraPayout = pallet_staking::ConvertCurve; type NextNewSession = Session; - type RolesHandler = Roles; type MaxExposurePageSize = ConstU32<64>; type MaxControllersInDeprecationBatch = ConstU32<100>; type OffendingValidatorsThreshold = OffendingValidatorsThreshold; @@ -1131,173 +1119,6 @@ impl pallet_airdrop_claims::Config for Runtime { type WeightInfo = (); } -pub struct TestnetJobToFeeHandler; - -impl JobToFee - for TestnetJobToFeeHandler -{ - type Balance = Balance; - - fn job_to_fee( - job: &JobSubmission< - AccountId, - BlockNumber, - MaxParticipants, - MaxSubmissionLen, - MaxAdditionalParamsLen, - >, - ) -> Balance { - match job.job_type { - JobType::DKGTSSPhaseOne(_) - | JobType::DKGTSSPhaseTwo(_) - | JobType::DKGTSSPhaseThree(_) - | JobType::DKGTSSPhaseFour(_) => Dkg::job_to_fee(job), - JobType::ZkSaaSPhaseOne(_) | JobType::ZkSaaSPhaseTwo(_) => ZkSaaS::job_to_fee(job), - } - } - - fn calculate_result_extension_fee(result: Vec, extension_time: BlockNumber) -> Balance { - Dkg::calculate_result_extension_fee(result, extension_time) - } -} - -pub struct TestnetMPCHandler; - -impl - MPCHandler< - AccountId, - BlockNumber, - Balance, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - > for TestnetMPCHandler -{ - fn verify( - data: JobWithResult< - AccountId, - MaxParticipants, - MaxSubmissionLen, - MaxKeyLen, - MaxDataLen, - MaxSignatureLen, - MaxProofLen, - MaxAdditionalParamsLen, - >, - ) -> DispatchResult { - match data.result { - JobResult::DKGPhaseOne(_) - | JobResult::DKGPhaseTwo(_) - | JobResult::DKGPhaseThree(_) - | JobResult::DKGPhaseFour(_) => Dkg::verify(data.result), - JobResult::ZkSaaSPhaseOne(_) | JobResult::ZkSaaSPhaseTwo(_) => ZkSaaS::verify(data), - } - } - - fn verify_validator_report( - _validator: AccountId, - _offence: ValidatorOffenceType, - _signatures: Vec>, - ) -> DispatchResult { - Ok(()) - } - - fn validate_authority_key(_validator: AccountId, _authority_key: Vec) -> DispatchResult { - Ok(()) - } -} - -pub struct TestnetMisbehaviorHandler; - -impl MisbehaviorHandler for TestnetMisbehaviorHandler { - fn verify(data: MisbehaviorSubmission) -> DispatchResult { - match data.justification { - MisbehaviorJustification::DKGTSS(_) => Dkg::verify_misbehavior(data), - _ => Ok(()), - } - } -} - -#[cfg(feature = "local-testing")] -parameter_types! { - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxSubmissionLen: u32 = 60_000_000; -} - -#[cfg(not(feature = "local-testing"))] -parameter_types! { - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxSubmissionLen: u32 = 60_000_000; -} - -parameter_types! { - pub const JobsPalletId: PalletId = PalletId(*b"py/jobss"); - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxParticipants: u32 = 10; - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxKeyLen: u32 = 256; - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxDataLen: u32 = 256; - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxSignatureLen: u32 = 256; - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxProofLen: u32 = 256; - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxActiveJobsPerValidator: u32 = 100; - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxRolesPerValidator: u32 = 100; - #[derive(Clone, RuntimeDebug, Eq, PartialEq, TypeInfo, Encode, Decode)] - #[derive(Serialize, Deserialize)] - pub const MaxAdditionalParamsLen: u32 = 256; -} - -impl pallet_jobs::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ForceOrigin = EnsureRootOrHalfCouncil; - type Currency = Balances; - type JobToFee = TestnetJobToFeeHandler; - type RolesHandler = Roles; - type MPCHandler = TestnetMPCHandler; - type MisbehaviorHandler = TestnetMisbehaviorHandler; - type PalletId = JobsPalletId; - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type WeightInfo = (); -} - -type IdTuple = pallet_session::historical::IdentificationTuple; -type Offence = pallet_roles::offences::ValidatorOffence; -/// A mock offence report handler. -pub struct OffenceHandler; -impl ReportOffence for OffenceHandler { - fn report_offence(_reporters: Vec, _offence: Offence) -> Result<(), OffenceError> { - Ok(()) - } - - fn is_known_offence(_offenders: &[IdTuple], _time_slot: &SessionIndex) -> bool { - false - } -} - // ReStaking reward curve, more details at // https://docs.rs/pallet-staking-reward-curve/latest/pallet_staking_reward_curve/macro.build.html // We are aiming for a max inflation of 1%, when 25% of tokens are re-staked @@ -1314,60 +1135,6 @@ pallet_staking_reward_curve::build! { ); } -parameter_types! { - pub const MaxValidators : u32 = 1000; - pub MaxRestake: Percent = Percent::from_percent(50); - pub const RestakerRewardCurve: &'static PiecewiseLinear<'static> = &RESTAKER_REWARD_CURVE; - pub Reward : ValidatorRewardDistribution = ValidatorRewardDistribution::try_new(Percent::from_rational(1_u32,2_u32), Percent::from_rational(1_u32,2_u32)).unwrap(); -} - -impl pallet_roles::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type JobsHandler = Jobs; - type RoleKeyId = RoleKeyId; - type MaxRolesPerAccount = ConstU32<2>; - type ValidatorSet = Historical; - type ReportOffences = OffenceHandler; - type ValidatorRewardDistribution = Reward; - type MaxValidators = MaxValidators; - type ForceOrigin = EnsureRoot; - type MaxRestake = MaxRestake; - type MaxRolesPerValidator = MaxRolesPerValidator; - type MaxActiveJobsPerValidator = MaxActiveJobsPerValidator; - type MaxKeyLen = MaxKeyLen; - type RestakerEraPayout = pallet_staking::ConvertCurve; - type WeightInfo = (); -} - -impl pallet_dkg::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = EnsureRootOrHalfCouncil; - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - -impl pallet_zksaas::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = EnsureRootOrHalfCouncil; - type Verifier = (ArkworksVerifierGroth16Bn254, CircomVerifierGroth16Bn254); - type MaxParticipants = MaxParticipants; - type MaxSubmissionLen = MaxSubmissionLen; - type MaxKeyLen = MaxKeyLen; - type MaxDataLen = MaxDataLen; - type MaxSignatureLen = MaxSignatureLen; - type MaxProofLen = MaxProofLen; - type MaxAdditionalParamsLen = MaxAdditionalParamsLen; - type WeightInfo = (); -} - parameter_types! { // One storage item; key size 32, value size 8; . pub const ProxyDepositBase: Balance = deposit(1, 8); @@ -1452,67 +1219,72 @@ impl pallet_proxy::Config for Runtime { // Create the runtime by composing the FRAME pallets that were previously configured. construct_runtime!( pub enum Runtime { - System: frame_system, - Timestamp: pallet_timestamp, - - Sudo: pallet_sudo, - RandomnessCollectiveFlip: pallet_randomness_collective_flip, - - Assets: pallet_assets, - Balances: pallet_balances, - TransactionPayment: pallet_transaction_payment, - - Authorship: pallet_authorship, - Babe: pallet_babe, - Grandpa: pallet_grandpa, - - Indices: pallet_indices, - Democracy: pallet_democracy, - Council: pallet_collective::, - Vesting: pallet_vesting, - - Elections: pallet_elections_phragmen, - ElectionProviderMultiPhase: pallet_election_provider_multi_phase, - Staking: pallet_staking, - Session: pallet_session, - Historical: pallet_session_historical, - Treasury: pallet_treasury, - Bounties: pallet_bounties, - ChildBounties: pallet_child_bounties, - BagsList: pallet_bags_list, - NominationPools: pallet_nomination_pools, - - Scheduler: pallet_scheduler, - Preimage: pallet_preimage, - Offences: pallet_offences, - - TxPause: pallet_tx_pause, - ImOnline: pallet_im_online, - Identity: pallet_identity, - Utility: pallet_utility, - Multisig: pallet_multisig, - - Ethereum: pallet_ethereum, - EVM: pallet_evm, - EVMChainId: pallet_evm_chain_id, - DynamicFee: pallet_dynamic_fee, - BaseFee: pallet_base_fee, - HotfixSufficients: pallet_hotfix_sufficients, - - Claims: pallet_airdrop_claims, - Roles: pallet_roles, - Jobs: pallet_jobs, - Dkg: pallet_dkg, - ZkSaaS: pallet_zksaas, - Proxy: pallet_proxy, - MultiAssetDelegation: pallet_multi_asset_delegation, + System: frame_system = 1, + Timestamp: pallet_timestamp = 2, + + Sudo: pallet_sudo = 3, + RandomnessCollectiveFlip: pallet_randomness_collective_flip = 4, + + Assets: pallet_assets = 5, + Balances: pallet_balances = 6, + TransactionPayment: pallet_transaction_payment = 7, + + Authorship: pallet_authorship = 8, + Babe: pallet_babe = 9, + Grandpa: pallet_grandpa = 10, + + Indices: pallet_indices = 11, + Democracy: pallet_democracy = 12, + Council: pallet_collective:: = 13, + Vesting: pallet_vesting = 14, + + Elections: pallet_elections_phragmen = 15, + ElectionProviderMultiPhase: pallet_election_provider_multi_phase = 16, + Staking: pallet_staking = 17, + Session: pallet_session = 18, + Historical: pallet_session_historical = 19, + Treasury: pallet_treasury = 20, + Bounties: pallet_bounties = 21, + ChildBounties: pallet_child_bounties = 22, + BagsList: pallet_bags_list = 23, + NominationPools: pallet_nomination_pools = 24, + + Scheduler: pallet_scheduler = 25, + Preimage: pallet_preimage = 26, + Offences: pallet_offences = 27, + + TxPause: pallet_tx_pause = 28, + ImOnline: pallet_im_online = 29, + Identity: pallet_identity = 30, + Utility: pallet_utility = 31, + Multisig: pallet_multisig = 32, + + Ethereum: pallet_ethereum = 33, + EVM: pallet_evm = 34, + EVMChainId: pallet_evm_chain_id = 35, + DynamicFee: pallet_dynamic_fee = 36, + BaseFee: pallet_base_fee = 37, + HotfixSufficients: pallet_hotfix_sufficients = 38, + + Claims: pallet_airdrop_claims = 39, + + // DO NOT USE below indexes + // Roles: pallet_roles = 40, + // Jobs: pallet_jobs = 41, + // Dkg: pallet_dkg = 42, + // ZkSaaS: pallet_zksaas = 43, + + Proxy: pallet_proxy = 44, + MultiAssetDelegation: pallet_multi_asset_delegation = 45, + Services: pallet_services = 51, // Sygma - SygmaAccessSegregator: sygma_access_segregator, - SygmaBasicFeeHandler: sygma_basic_feehandler, - SygmaFeeHandlerRouter: sygma_fee_handler_router, - SygmaPercentageFeeHandler: sygma_percentage_feehandler, - SygmaBridge: sygma_bridge, + SygmaAccessSegregator: sygma_access_segregator = 46, + SygmaBasicFeeHandler: sygma_basic_feehandler = 47, + SygmaFeeHandlerRouter: sygma_fee_handler_router = 48, + SygmaPercentageFeeHandler: sygma_percentage_feehandler = 49, + SygmaBridge: sygma_bridge = 50, + } ); @@ -2180,7 +1952,6 @@ mod benches { ); } -use pallet_jobs_rpc_runtime_api::BlockNumberOf; impl_runtime_apis! { impl sp_api::Core for Runtime { fn version() -> RuntimeVersion { @@ -2237,29 +2008,15 @@ impl_runtime_apis! { } } - impl pallet_jobs_rpc_runtime_api::JobsApi for Runtime { - fn query_jobs_by_validator( - validator: AccountId, - ) -> Option, MaxParticipants, MaxSubmissionLen, MaxAdditionalParamsLen>>> { - Jobs::query_jobs_by_validator(validator) - } - - fn query_job_by_id(role_type: RoleType, job_id: JobId) -> Option, MaxParticipants, MaxSubmissionLen, MaxAdditionalParamsLen>> { - Jobs::query_job_by_id(role_type, job_id) - } - - fn query_job_result(role_type: RoleType, job_id: JobId) -> Option, MaxParticipants, MaxKeyLen, MaxDataLen, MaxSignatureLen, MaxSubmissionLen, MaxProofLen, MaxAdditionalParamsLen>> { - Jobs::query_job_result(role_type, job_id) - } - - fn query_next_job_id() -> JobId { - Jobs::query_next_job_id() - } - - fn query_restaker_role_key(address: AccountId) -> Option> { - Roles::get_validator_role_key(address) + impl pallet_services_rpc_runtime_api::ServicesApi for Runtime { + fn query_services_with_blueprints_by_operator( + operator: AccountId, + ) -> Result< + Vec>>, + sp_runtime::DispatchError, + > { + Services::services_with_blueprints_by_operator(operator).map_err(Into::into) } - } impl fp_rpc::EthereumRuntimeRPCApi for Runtime { @@ -2747,9 +2504,7 @@ impl_runtime_apis! { use baseline::Pallet as BaselineBench; let mut list = Vec::::new(); - list_benchmark!(list, extra, pallet_roles, Roles); - list_benchmark!(list, extra, pallet_jobs, Jobs); - list_benchmark!(list, extra, pallet_dkg, Dkg); + list_benchmark!(list, extra, pallet_services, Services); list_benchmark!(list, extra, pallet_airdrop_claims, Claims); let storage_info = AllPalletsWithSystem::storage_info(); @@ -2772,9 +2527,7 @@ impl_runtime_apis! { let mut batches = Vec::::new(); let params = (&config, &whitelist); - add_benchmark!(params, batches, pallet_roles, Roles); - add_benchmark!(params, batches, pallet_jobs, Jobs); - add_benchmark!(params, batches, pallet_dkg, Dkg); + add_benchmark!(params, batches, pallet_services, Services); add_benchmark!(params, batches, pallet_airdrop_claims, Claims); Ok(batches) diff --git a/runtime/testnet/src/precompiles.rs b/runtime/testnet/src/precompiles.rs index e0364d38a..38322b88a 100644 --- a/runtime/testnet/src/precompiles.rs +++ b/runtime/testnet/src/precompiles.rs @@ -18,13 +18,17 @@ use pallet_evm_precompile_blake2::Blake2F; use pallet_evm_precompile_bn128::{Bn128Add, Bn128Mul, Bn128Pairing}; use pallet_evm_precompile_call_permit::CallPermitPrecompile; use pallet_evm_precompile_democracy::DemocracyPrecompile; -use pallet_evm_precompile_jobs::JobsPrecompile; use pallet_evm_precompile_modexp::Modexp; use pallet_evm_precompile_preimage::PreimagePrecompile; use pallet_evm_precompile_registry::PrecompileRegistry; use pallet_evm_precompile_sha3fips::Sha3FIPS256; use pallet_evm_precompile_simple::{ECRecover, ECRecoverPublicKey, Identity, Ripemd160, Sha256}; use pallet_evm_precompile_staking::StakingPrecompile; +use pallet_evm_precompile_verify_bls381_signature::Bls381Precompile; +use pallet_evm_precompile_verify_ecdsa_secp256k1_signature::EcdsaSecp256k1Precompile; +use pallet_evm_precompile_verify_ecdsa_secp256r1_signature::EcdsaSecp256r1Precompile; +use pallet_evm_precompile_verify_ecdsa_stark_signature::EcdsaStarkPrecompile; +use pallet_evm_precompile_verify_schnorr_signatures::*; use pallet_evm_precompile_vesting::VestingPrecompile; use pallet_evm_precompileset_assets_erc20::Erc20AssetsPrecompileSet; @@ -81,6 +85,7 @@ pub type WebbPrecompilesAt = ( PrecompileAt, Blake2F, EthereumPrecompilesChecks>, PrecompileAt, Sha3FIPS256, (CallableByContract, CallableByPrecompile)>, PrecompileAt, ECRecoverPublicKey, (CallableByContract, CallableByPrecompile)>, + // Tangle precompiles PrecompileAt< AddressU64<2048>, StakingPrecompile, @@ -91,7 +96,6 @@ pub type WebbPrecompilesAt = ( VestingPrecompile, (CallableByContract, CallableByPrecompile), >, - // Moonbeam precompiles PrecompileAt< AddressU64<2050>, Erc20BalancesPrecompile, @@ -103,7 +107,7 @@ pub type WebbPrecompilesAt = ( (CallableByContract, CallableByPrecompile), >, PrecompileAt< - AddressU64<2056>, + AddressU64<2052>, BatchPrecompile, ( SubcallWithMaxNesting<2>, @@ -112,21 +116,88 @@ pub type WebbPrecompilesAt = ( ), >, PrecompileAt< - AddressU64<2058>, + AddressU64<2053>, CallPermitPrecompile, (SubcallWithMaxNesting<0>, CallableByContract), >, PrecompileAt< - AddressU64<2067>, + AddressU64<2054>, PreimagePrecompile, (CallableByContract, CallableByPrecompile), >, - PrecompileAt, JobsPrecompile, (CallableByContract, CallableByPrecompile)>, PrecompileAt< - AddressU64<2069>, + AddressU64<2055>, PrecompileRegistry, (CallableByContract, CallableByPrecompile), >, + // Ecdsa-Secp256k1 signature verifier precompile + PrecompileAt< + AddressU64<2070>, + EcdsaSecp256k1Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Ecdsa-Secp256r1 signature verifier precompile + PrecompileAt< + AddressU64<2071>, + EcdsaSecp256r1Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Ecdsa-Stark signature verifier precompile + PrecompileAt< + AddressU64<2072>, + EcdsaStarkPrecompile, + (CallableByContract, CallableByPrecompile), + >, + // Schnorr-Sr25519 signature verifier precompile + PrecompileAt< + AddressU64<2073>, + SchnorrSr25519Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Schnorr-Secp256k1 signature verifier precompile + PrecompileAt< + AddressU64<2074>, + SchnorrSecp256k1Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Schnorr-Ed25519 signature verifier precompile + PrecompileAt< + AddressU64<2075>, + SchnorrEd25519Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Schnorr-Ed448 signature verifier precompile + PrecompileAt< + AddressU64<2076>, + SchnorrEd448Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Schnorr-P256 signature verifier precompile + PrecompileAt< + AddressU64<2077>, + SchnorrP256Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Schnorr-P384 signature verifier precompile + PrecompileAt< + AddressU64<2078>, + SchnorrP384Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Schnorr-Ristretto255 signature verifier precompile + PrecompileAt< + AddressU64<2079>, + SchnorrRistretto255Precompile, + (CallableByContract, CallableByPrecompile), + >, + // Schnorr-Taproot signature verifier precompile + PrecompileAt< + AddressU64<2080>, + SchnorrTaprootPrecompile, + (CallableByContract, CallableByPrecompile), + >, + // Bls12-381 signature verifier precompile + PrecompileAt, Bls381Precompile, (CallableByContract, CallableByPrecompile)>, ); pub type WebbPrecompiles = PrecompileSetBuilder< diff --git a/runtime/testnet/src/tangle_services.rs b/runtime/testnet/src/tangle_services.rs new file mode 100644 index 000000000..2003c97c0 --- /dev/null +++ b/runtime/testnet/src/tangle_services.rs @@ -0,0 +1,149 @@ +use super::*; + +parameter_types! { + pub const ServicesPalletId: PalletId = PalletId(*b"py/srvcs"); +} + +pub struct PalletEvmRunner; + +impl pallet_services::EvmRunner for PalletEvmRunner { + type Error = pallet_evm::Error; + + fn call( + source: sp_core::H160, + target: sp_core::H160, + input: Vec, + value: sp_core::U256, + gas_limit: u64, + is_transactional: bool, + validate: bool, + ) -> Result> { + let max_fee_per_gas = DefaultBaseFeePerGas::get(); + let max_priority_fee_per_gas = + max_fee_per_gas.saturating_mul(U256::from(3) / U256::from(2)); + let nonce = None; + let access_list = Default::default(); + let weight_limit = None; + let proof_size_base_cost = None; + <::Runner as pallet_evm::Runner>::call( + source, + target, + input, + value, + gas_limit, + Some(max_fee_per_gas), + Some(max_priority_fee_per_gas), + nonce, + access_list, + is_transactional, + validate, + weight_limit, + proof_size_base_cost, + ::config(), + ) + .map_err(|o| pallet_services::RunnerError { error: o.error, weight: o.weight }) + } +} + +pub struct PalletEVMGasWeightMapping; + +impl pallet_services::EvmGasWeightMapping for PalletEVMGasWeightMapping { + fn gas_to_weight(gas: u64, without_base_weight: bool) -> Weight { + pallet_evm::FixedGasWeightMapping::::gas_to_weight(gas, without_base_weight) + } + + fn weight_to_gas(weight: Weight) -> u64 { + pallet_evm::FixedGasWeightMapping::::weight_to_gas(weight) + } +} + +parameter_types! { + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxFields: u32 = 256; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxFieldsSize: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxMetadataLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxJobsPerService: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxOperatorsPerService: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxPermittedCallers: u32 = 256; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxServicesPerOperator: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxBlueprintsPerOperator: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxServicesPerUser: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxBinariesPerGadget: u32 = 64; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxSourcesPerGadget: u32 = 64; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxGitOwnerLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxGitRepoLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxGitTagLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxBinaryNameLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxIpfsHashLength: u32 = 46; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxContainerRegistryLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxContainerImageNameLength: u32 = 1024; + + #[derive(Default, Copy, Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo, Serialize, Deserialize)] + pub const MaxContainerImageTagLength: u32 = 1024; +} + +pub type PalletServicesConstraints = pallet_services::types::ConstraintsOf; + +impl pallet_services::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type ForceOrigin = EnsureRootOrHalfCouncil; + type Currency = Balances; + type PalletId = ServicesPalletId; + type EvmRunner = PalletEvmRunner; + type EvmGasWeightMapping = PalletEVMGasWeightMapping; + type MaxFields = MaxFields; + type MaxFieldsSize = MaxFieldsSize; + type MaxMetadataLength = MaxMetadataLength; + type MaxJobsPerService = MaxJobsPerService; + type MaxOperatorsPerService = MaxOperatorsPerService; + type MaxPermittedCallers = MaxPermittedCallers; + type MaxServicesPerOperator = MaxServicesPerOperator; + type MaxBlueprintsPerOperator = MaxBlueprintsPerOperator; + type MaxServicesPerUser = MaxServicesPerUser; + type MaxBinariesPerGadget = MaxBinariesPerGadget; + type MaxSourcesPerGadget = MaxSourcesPerGadget; + type MaxGitOwnerLength = MaxGitOwnerLength; + type MaxGitRepoLength = MaxGitRepoLength; + type MaxGitTagLength = MaxGitTagLength; + type MaxBinaryNameLength = MaxBinaryNameLength; + type MaxIpfsHashLength = MaxIpfsHashLength; + type MaxContainerRegistryLength = MaxContainerRegistryLength; + type MaxContainerImageNameLength = MaxContainerImageNameLength; + type MaxContainerImageTagLength = MaxContainerImageTagLength; + type Constraints = PalletServicesConstraints; + type WeightInfo = (); +} diff --git a/tangle-subxt/Cargo.toml b/tangle-subxt/Cargo.toml index 717b234ba..24bccefe0 100644 --- a/tangle-subxt/Cargo.toml +++ b/tangle-subxt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tangle-subxt" -version ={ workspace = true } +version = "0.1.4" authors = { workspace = true } edition = { workspace = true } homepage = { workspace = true } @@ -10,13 +10,13 @@ repository = { workspace = true } [dependencies] parity-scale-codec = { workspace = true } scale-info = { workspace = true } -subxt = { version = "0.37.0" } +subxt = { version = "0.37.0", default-features = false, features = ["jsonrpsee", "native"] } +subxt-signer = { version = "0.37.0", default-features = false, features = ["subxt", "sr25519"] } [dev-dependencies] -subxt-signer = { version = "0.37.0", default-features = false, features = ["subxt", "sr25519"] } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.7.0" } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.7.0" } -tokio = { version = "1.32.0", features = ["full"] } +sp-core = { workspace = true } +sp-io = { workspace = true } +tokio = { workspace = true, features = ["full"] } tangle-crypto-primitives = { path = "../primitives/crypto"} -hex = {workspace = true } +hex = { workspace = true } diff --git a/tangle-subxt/metadata/tangle-mainnet-runtime.scale b/tangle-subxt/metadata/tangle-mainnet-runtime.scale index e83fdcd10cab0c51c0ed89b913ebd547cb96cb84..66cd55e092075e71d124a1e31e78720a64a0f941 100644 GIT binary patch delta 21391 zcmb`v4R{nqwlLi1RL@Lz$S>q)@=FpDNFad(l0YCJ0U|^V5JC{p5Qb!cktCDMOdwGZ zvx0(%8e1$`LCsxR#k;84z>X-auq&>tvJ0-LQ9!aTD!Za`1y^=O-&5T)$%Jsf@80)$ zpQmT)r%#_ceX8oz`KjuQ2gCULgDmxSk1gz~+G#n*@FHkmv4rds0M-TenxgqrBx$ZP z!DDM!QD?7qH8*%1_4b^3Mq0Ak-r$j7t#*T45u7~DR%dIdvAbpIK|b{rjMUD^p>eV_ zYrf0Y;I`Fx9L|Qhw$^%jM3x?d=lLW1FiuN0MTD57gqZ|W+h~)eC$uRhYltExls42l zbY#EMYD_6%s+2avUhk}N*=ky4>19nb4GRg95~e$w8)_VNvh;@bd(*TV21yAE>~4>v zVTCNc1uc!Xx;ne3dbLqCaiUIdk&pN(Qm~X(QfJo*Bck7dXCMC#VznxB1cpewDT>9L zWa&dV&JX_!(zLzih)JPRLWRe+N=N@?FM798H2{4WLEGJKdTm)UJ!**!4VRMVyX-c1 zvx{Cq)kau`g$|aIr_n2T9D;2j+Cs~)Aw#6R=_?&|wSDyw+C!Gi&`1Kct#IGsa1;Nc zv?G?Zs3@suwzJ;RVAFZ)bk-4)SnWs4sIX`$t)gb7y|%f|?vkZ^ZGw^(8Y3mob=e*D zwiR|+D%S2$hJ{+CJ0uC8k)Dwx zS$Q@~dX~2jhPW*2+~#Fj#9nsI-FLt1yPM8hAzfb-`3PpnY2~Q|m0ShK4V2dhCJ>MUtdL+S2hZc!M8Gg1D{=<2TCi z7C)N;FiS~(Wq?!KnUYvI+x2}(0>a<4s98hlKY!L;bfa^Y2hM84 zOSe!>=d9t{hovJ&d;u95%Vm5-aXk(GnG&fPXxW)Tp~+mkT5D}1R5 zF$(yWo2YkkmW2Z)#Wi1>Ah9dg5yK#bXU&IUT3uZ|wf0fny^yIbssANp^H~dET-St# z-GGU}a~9Hc{lPhATnfn6IgMfx$ntzh2T;OiI~%Bfr0@!7J&oIRkR-Z9A}g09Dbx4x zn#Me8;8%_5BeVOV$Q_6x*Fcf$dor@A67sb>n%;pz?SN}IOxBjTs(SOEx>|bk_qsRq z=Erz!L4`UIS>e)T?dP6!DAo>nzJU_0vpE+^wNINbgp?8h3n$_gF$I@&9>Q|al7F3! zmC!Zw*V8~06ZekNe$!<)vNb{F;1|)_qkBt~O2R<0Yms(pbrDo)Yu8w{+%-4pxw?=l zy?qKeUk8xjTOuR~cCKmYS7CK}R@zX4;SM-LpNa9Jm?-Xp;8t?zD{y$H1yW+JSo0jRNa&7MBTPU}4a|Ma8i<`%Wb^wIW z$}Px|K=C*`wA=^Az;4aMI&gT@;GX;lHDHH6w%O8ZSX@Q;g~l0p-J>ktq;wm|35yol>SFO zyo~-IdiXxN8}-Q034N@vdYp}p8aJs2X+o0C8k=7*MS}2JB0diyr?q>J`YlH~ z2|RZLNs|qaBty5h>yZi2qn&wVH049uYC-A#7c-FDY%d+l{@N-3xy#9A=}I_Q52~Ma}j>Cb4PD2MP55{0FyTK5C{9i}LcZcR&^*^%wm~ z`X5e4i7w(%F@{UUlw)GGRHPE@YW{E>!&1~<`1lDdLv6;XQCN;z)2UmHBvt$JR4Fb( z-hMNQq`9X@h&-6VY6-6)olXZ$)m}ZlC953$lFzT4X8H8H=>#aj25UvD+heaM6%4hn zKUt!EaAv4z`0S@kv<06e%4G<!pkwi30r&#JX|&JGTtAvn#pj8+l5 zA9iL>Sg0jHY2A$4Qo{GUp24Akn(Ka}dg@;Xhxb=s4;t+s`fFrppbp#Zga34JXrLl{ zT2wcN_t#d>2^22BqH30<3kX;B7n$-mMeF`sVo0E}dQ$7@sn(XA8ypg-lwQ$m&z>6` z)=x79S%c4-!uqMEs!Z%?iXNz&hRCGqb$nH&**}j7>!+edh)1fmzkfd1dObZgN`@0U zy^UYQh4)uib7j4IzW*XJte?(WC#gJ8_WdQ?hlp$SQ}Cp(4tQEPWKAy6f)BH@`mOET-PxVT> zjbQ4LI|qR^v>w4aORte6s*89YBl+$@@H93dzbP0}W3H>6G$X$^7}5o?F9gF366gGz zU>GN;JJt>Hd};^`#Wv)&5J(uh5h16zuFko}UMmQ33+=H@mt|R5(njPvLcoJG?az#g z;hCY3hg*?Xhr*41Rs@!b2h;g8VemUqc|4q$c4s&g#kC{MDrstVtajGui$T$>tmN4w zd)sxO3Gz0CLf#MoIlL$WM&lmjbrEnYZbNPz0%?Pul^4Kvlu21ZK6419jDFT&V5H8m z-Nd4d1zE`znG#st_8MnHZ9tW@9r^UZa0}A2WLISj?;u)wt*Hvf3bH7hU8FyEV4y|C zQt#`&%{72rQR7<7zF~ZDHciu{&t#$!Nkth4&85X4EgC; z_$}Sh+W!^9_r}3pJ}Mr>6UbkWCpzirs05e+hxp%CkfI7qMwVj8-?XL&5#1oJa#DDL8~ZN zl4;UX+uos&FVe4uf;F&yVlqq@_3M+tE7A!maDzx&Q^1a=QCP4#kHxafXQx7ecrm^3 zR4S<0gM8^Q7{fnI?G<`f)#|a4k?E6jRvrNOsd&014fcu$|D6U~**WYrj4k|E>C_Fn z7>kaITy3jswv&v^@tF&AmKV*}+D{GPY&a|wBvuWFoA5mH-NRv~z$-e14;lgAiOL@@ z(_~J{fSi!4V5p8XelB3IWo_o0GGHWLL_TIDj2Q$8YaE^i^3xn<{HqLDg+~~_EfX5? zDC5U6NkSTcje_kRBOyhkZ;YgFruyPhP*8GNXn4tPXI--}KrfSyS0O>9TX-SPLZ08j zR3XY#?;>wctzV_R+^f9sH%39~`YS{!SXYy4!9CVQ3c4>pF19b9m)@7p&+W?>Ozz8% zFYU`usO-xZ+C)A<$Df;1A5h3`6@~S_TVpo{+#1&&P{`XEP{`jMP$<|(1xdUBUPXy6 zQu~PiOrlFNlR+xp2URA~CCR~8fqXDb3K0bbSOk;kvPkAACPgt)|KrwMNj0s^Eui~S zrRYbI6@0)%CefwiND(+vsKBT_flM$5Gnqt}4v;MXvIPMB1c2Ze<}-;d9iUJE6bb-g zdk}zNBNj7hJ^gfu5&=;nAWQ~CsemYB5?wk#xd12^0A>TAQUEMs5?wk#l>n#`02Twl zCIIYAqDu#G2mprw5c)9@QBUnl*u*5dbckjF(JUZT1EQ7kxQTm4piKY-82}pv zz-A`Vr2}jg09ysXAOoOX0BmCtT{^&a0kB;F1Pg!_Oxh_RI+#S44zWu>>=Fy8}AqpGKKU@|4AbKoKPp4a8VRP1K_#ay_<0Nf&k&o9S9g-HKB7RvE7uY0CJl(ufs zAmWL>6pz2bSk78*fO(?3-njuvuLCw`s-X`&G!<&pbpUgV-EO;w!wrzgV~R=dGRfYV z#WXr7!`DrtULjNH)NNM&+BE77z1ful{ms)!og!bt!__fjMbg*FduD=cfDGY(olb*^ z;L>J5nMmC;NUNvx>sb)*BU$^!yAhm~kQPAo*(ESDh-N^R9tLRT$BStd9&;0z_>(2H zdJ)7QO5kA@A{!o6Eqtkkuf7q+So@x#2#URhmKs47KCDz{fFC`7v=kNx;tIP7?!*XLxO^x2`{>L~q<{OlHR|R* zMItDnPIx=)F0r`Z4EM1pde7X2#Db?Y(ZUOFf!IORS$+k9KQf0DfYrCaD2$c)pbCiN z2X7$-&X0Oh8AMP=l$F83-nz8eFo)_==0LQ+E;y~hh^9D2yP^w&5|)Volb}N%ROe^I z`2WpA#yH?}V3}V+gw2Iw8d~LZVFx8I7m%)^mP5ENAFMlf8bu^0MdrojkcgBnEr;PE z-Bb=EFkKcxVF_l+JYpV=6(fxc&1xWf&qu9M7t7bqgL>b~#aiqw9+%Bv&r-~md3^=^ z)^N11g-d+*e5ljC?4!KJmGtU{ul-kopTf<~!)}Esn5Y+q8-j%hqC3O+p<79?5LKd( z{y&fvL>z&Z3KDe8k1Zr3$>d+v6w4D9(JaZA`7^iCz|*}vY5c=Q@N)mURF1d7j%(|z zx06ZM@7Yvtu7ZY<`Eua$Q8>`GFFf*ek$d5=$Ljq}70DAg!M|NXO8R7(zxg7`YyU_J zc?lx0SmwzuQP=ngJl_Oi+$Ac+Xnl#eVL0e{&r76v_to*qFT>-$dyl#-u}2lUG2GzRhoK6xyOgOksj+>m*4;bGNfIV8Z;^Ns`S^7!~6A#$S^K8d&pqSKpkn zgj4LX&VP5{i=^^DcY$MMaX)SmP1nX!$_;Ln&wyI8w_m6w?h)6&s?}wL-e{uTu%_nQ;o0kAzs3a0UJgNcLFR?a$+Ykh zesDRA@pqF&cbz+A9NWC;J*6WA`^L2Yf(HXB>9*WLq7NG+OCbPkM zR&baN(X)b~EK1J`Zn9`SD_F^5^sHbbv+7yFLl&!N1p`@}o;|u=}krPU6y+K31afkUMq;j2%zhnfIlxwbP2o1L7@OSxQMpCa8n~Z zJn~{cG?(Q8XfD%pgyyo$f7?j~~h8A9tVXD2R)@_?Ou}?r#_g#^D zU4xPO{j|Q@G=Hzkyrv0;g0S1R{lscNq>6ay=GXC1XH;h z@=|*Pq4Y+vCdI$qgtmh?$azf@#Kie(GC2)bmOom>VGXT`w2mjWLacF*6gm^%)B+iP z7z%!+^2=*r&h_CQ>t7wsXSYI-9=J~7cecWMe%CYz<+J8s9HyK2usdn(%{1}qJIRqn z>4`fbCoS6qGj1W#Ueg+|Ba7Z6p`>)~*g`RlC!2WsU67JcY9iNk>D=7>{K7y`>h)|L zS2SBcat+2VPN#57kuc@nZ)H^(Vbyi~=Sgwh;uY-8#=6lwWJ2lPi z_c-U9c=%d!QxX7?9L=Y$g#>E=&#lu*hoOx(#AyQ6K^|BO@vP89tMpo07+$A8EcD%? znpC8B(%~}J!RY@-6sKb`v35O73@R4mt;8gi_!=2~H^h%3dJ~FkYhC11qyUDSqPn!> zs(KY!w*8~#QmOwH?gk2q^XfK8rR3Dz5IdreWjbsB2W;#m3d_hwTo1X>!H=zn(!ss# z1D|Tr!87iG6ly8^XXM;A+KnqWL5?rdEV`89%#jUFvV6)3SsQt+D^2|PJ!HCc@E_YC z&SDsq|2HUN`MYh@td2*#_5YrTSpLq>z=q|f$2)O&RHf*GMJ9R$?ljzmZfdhlxM95jF%n1hNj0>P^1A z20ZsZ(x;kC{NnvU?rkwpDORNyQ&}^Ox`+p8)V*{cjD++2qx+x`+e|#_ezIuVO?<=s zr8y^1ElY^nzW8bNAt%Y zfFXmg%Knf~K81YN1>%e^Bpp6b^tbh+Y@=xaWgCgdMA=4SqOtcVe%@x2q4aGv^(lRu zMSlicty$7m(J54H?}vHYK+M|=%-c+gu~CG-wuQWE+fBUS2-M-uz6PUmjP__g_PVM% zjNAOH5bA+lQ4_?g6xP`)KLzqvh`RAQw-Yc;|bN zVJ21Uv?!ZxIM)Igqpm;2Xm^pj|!&#J> zoM|7EZ)EyM5HU2?4D&1WK&#Ewx?tXowAFToV+BR>g$hiM=rQJpJ|a_%0@0&SL3Ct< z8FCi5mIutj2s8ijBbcR|y>y2>0nX*5<@+9{wr&n?_J_u$SYP$0ACoiXzsH$q<_k}e z*41W2wj&2bwxtwv?@Wv?6wxbE-)O^WF9Xuezc~$EfSG2#?+n@S*=ByrCs2dAX5RS; z43D6F1ZlpdL&UGCT1;$xB1Jx9pxe=hE#FK*^H}ffv+yYf7ZPvfV9DAdO*VTevbzwl zxR07~C1&IC(tz$L(H{vvOv*^9=ou=Pi7KU>HVl^cJv`7EU1_F$x>i2;9Av~D4w!DB zB+O}8;na6^FEaD_=R_pgfPMcQ`7RD4$Ipy(^k)zadwI!ckR4rRh6(d&k5MbRsP&ES z^zK#0W6yj>g5PH5Uw%f8Iy z)!K#iEh35T{tu)JM1F}m!r|jgeE?@1Ivc`Yk?I9ssMKUobLk5*^QqN>^ROtoRR=nZ zd!==HF00%uwV5eW9`8ML9&9Gu*w@PS#N=i(U->mO#F3YOf|w!2H8o=YdTA|b4B-v7 zR(BQu=4*0OZZ+%Mp}ph2feys>KBP%Kv>!kWv26jQZxa;vptRl0)4qjF+-cS~Pa; znR)ELAtz^GL^h$uS>M>~v7dq>f2?-8Q6ow8l%M0#$CyF(QPww>_xoD-H)Mt$G?UoY zW4A8%5i?Kt0TNTL!z78|#E{QAY?co9q1Q)ibYSS@hVaDgN@$K?yw{K;k(wznNi9CN zmuLqt?SUlMTXKoZX87f#^Md|!W{HsM0wiY$riS(eu=}E!pJzBqK5V8r_^U#ayty*Y zz{_U7M#f1AB!{wma;Ui=k7nZ)!5W2jQeQRmKgn1yxIY163o?&3;e=qIz^oh`PF@+4 zg)cVYl&F4?{q`oKYT=)l$jA(_@Udo0n-F4=lc&+S4ttrcQIT(^J-G`YoW^&Ai1vy< zjIu~{5h>I_tf)w|NQoBykQrB+k3%g@Bc4)-)YETO_)~ zi-b#=dghW<%C>Nu1%DPr?8y_;(9cC7fAw3jJVL=~L-GZNLW@L~z(8`=B7%BJ-VF*a zP?Czp?GlSbmmu#dlS=hmnI%suv+(c3kzBVHZ(0N{gF%)0t(u!Ui> zh2L$ZJx{F`o*j!BlzMNCr9J<+&S+ELvfgH)NL(EM_>U0mJsXFAM%-wjKqS71n~4WW zv~`tID#!5Wk|)1n_w;NPTR zGPHIjPf4I*g(IxuHD(&~-E=j{wJZRyLG`tay((9yQN<<>< zzMe}#q6*s3ZKvJeKG+}9FwS>$!UDnMLz6r{o*v1r+i!v$4(Ag5_KZoy-|Ld*yp zBX}}v1RlT>dSx6>&cNuTlNQLUY*mI8CgR7DEc3z79iAUo#O6c$$elg2Unu&sik81cy&rr1LZ$L`>03F~uPkykPO} z&B3WMyWp$mVfpwdUhExk@l!7QTEA-PTLY*r;Oxm2%K%ckCAyqmdHl<0CY>FQ9IC%r+53Z7Fb411+&9y7+;vl8luJDAZ zczYy8z;a4!sm9@HEp1rtlq9<2Uy&C(eDv1`wCd0s2)`gp^?Li{qwm*$TL=0Swo>QO z)vP~hZ6*JGUmF9}?R9-Or?mM9*c?Cr)dftPjRS|vMrwze+i1N0*<+BHE)5)cCCEFD(`>r@nJ*0ZGr{fkA?o{}z zv#@?phXF!C6@`y2CD-?MfQ7tW?5TdHl%`X;nSWf0BXGCkm2aZRS6lUHT;Z->R_Aoq zA6Dr2jL1mR{(hVxbk|NK@=yuR928U>1L?4$B-=eJbu@k)6w6Uys=m5TyJgOtvg(S` z#U)h~lsZBW(Y_fGb2+N;U(BJ!^_aqs&B0`memw_M5{@ao?%#R#8oQ&>qX!1b;v$Hw zxj2JdX-#u6a#kPB5H8-N-^)oSlwd)YU3l3eiMX0og1DMh;^HrGn`<9%5fgK539;?@tgnxGHM+(0&2*K*4pPhwKg=@ zFSEP)Dz4{EO%~2;I^J5_&CT<0)}U?$f@c-vNm94M7tO=OG5z$E(}L+leve2`D$+TT zQtzJ^={`lepzvMu(2ExpzNCV5%ga6%?q&tBP=j zef~!83k%4*6sw9m$suZl8l}dniE6rL%0v_wftQS}}3-lLD|_n86`3l3 zaTgY{Y+6lp2aD;Km^_v=WB;}r!(NbbRe!L>e*`DNcLax)T`Avaj$i#HM%`GCbP~=( zabdTk1`1U%ag8w$u%#a|#7-3*#9gc!R%Y)*Gz1D&zVJDmk-iAS#StIcgxBYOgv)ZI zfVBZ}km4CCKl~idMoQ_BKuPZZ;1TL}shGHrL|uu>?|&XMZY@;hhwG6=TISGkqWaa z8&)-tX%ZNCA>0H(;N7@LPgD8k7wEmJRNnmpi94Ihe|iBk$J*5Xrbsc8%9KZpuv44* zA39WtE*f^lbYiVu<%|Cl%Ok5)T0I)XOl>fxy3|C??7^Yy`(}<24(KgQ&Hb2CInWzh zN$xcwytN-w)~UpmS|3x^395Wtsnvnksfu-ZW3_#CeNjn^y{4Iud=ZmiHxGZA97;=G z#4v1Ax${Mg!Hp`P`!dFl?k{rMdY@0IqzOIKMt)g^HfPi43uuph~X2ln}4YJn&g2_8`;x`@cUGK+Ln~ogaDHG5=ZzN5_ae9hFQ~>L zrFVaW86z+DLvUdrf(r(M%PLRvV$M=p!>8&Ra^E*UNX@Y>Zx-i?u6t9uGGO`W{k({A zV7jIE2xkfM171>CD5Ue57n1|eYo0TSZ;qr6>OHKPZszr`U{b$xn)znF{S{29$%%*>Y zkhaa=6%UX`#SW6?d`0174&pfZs@MhoQzhv^>kncAnpD11+?IBD#~;FvWV{UCAxE$Z z@d|idf4~($-?ZT$zl9SKkjEUwagioE`E1S6l~LnZwL6L;dPnhhG*x-(AF+#ENBo07 z;*z1cn8GM*E>MpG@t=@YPX3j}pWv{d3ntoSBf(?xQhuxl$)WKH zKEc4mCwxk}x|y&0lqjLV*jt~{dyz=`=cl-qQg8F$a4M4F&Ap%DYXso+e2zb-({8j0 z<2)`zlbPRf9-k!-McCiTncRk6^FN3{Of+-t0v&XuH1sQc5>w3H|NIKygJ?T#z{@LX zbk?k#(QF)W&q`jZdbfRpFJp4Lx$nd@_`mm)5UIPcK%&@^{abqLY%_oQTf9d!mU0Qd zM-gO-|0fPNZAN$^m>>EtjP~CCPy7?Ge6zx{uaIR`Xy$XT5QFw3eeUJ1D_F`Vn^pdY zEA)=VW?u3yti&?2cgMfb14<=L!r;BhrP~@=93T4w)-s#<3vN4v6TN@=0oMVxn!WRW zL^Jsr&ECa7Q3ej}v$2sNA4GWB`!KK$b6T6Z@6a~*zd&S7qi9{D(`~DB)AuSUili{| z#~^=5VbhU?qQ%@tj zrOYUEG%TP9qPq47*-i?3{ACbJ!45P3ZV;;yX=N~b z4UT&wLfEaqcAGbd_e zFva^;37ZR;Z}G;>WD8In404sSALWw_zVv!-V*g}d_SVg2qfKnGC5-Q^V97Kbep|sV zVX=kpozMP5oEutL$-WkcWl9&&=qa`Edl#_Mper<$L4tBiIDdZu%f(6yS8ru^P+)*J z-^z;V@T>P$X2(Sqp0to{6<+y03)zEcv+zlaSRpY1R7lS856@}jcESD@*;}Cw%M22YQ-A&H(X+8h$fqo2^`f0UOWEDD)h&C;A6A*XV{L3I zur|vO-n@)`E2mq?Z(mo#ZZxm65TBpmzpWxZpQvGLW%|581TU{;o6N?r=bzNFZ1Uts z@-RD%&2|gVx3kxU>;5}CTM->0Llnq)^qs8vD{24LO4`Wa-fr=_m$Q|jY^Np4d&WZp z9WFh$tCfN9-#>RJ`z7wDFvVT$PV!xQ-@c2*f$&#xH1ioKF+BY~BAGn3 zH{ZvmV2HxE+{Y#iuC&A|B)y?frrlK%Bq~;Z@;;U-oS|3lV{VqNoZ!y;**sGTu{DjgLbnd@AzM`yJe(h_{jY%jRxA^?`L^( zi42Q)>LwZ+Ws3LZP4vdXIhnPE%@t$m?k#KuUNQ5}x3Hhdr83xg{e$dXv0N8#Wy7&b z;f}5B1KMfIr#(b0Z>ClGVfHqzQ~2?R*?HWm@Yfz8iL=!^q@8AyycM=7-bIhHyFp$g z!)EWt8avMhZ&wnfgi2cG$xkT(jq7&)K4+!E6PNM?OP4zoa>3p71RE(QnqZr^Iga}tt!l*gZBGtDQ6UveXFdy*-Fi4#;}K4nB1UOG@g1i=rp|A?*rd;~qg!obk1utD@#nF)>(a#BkU>|hO|RUrs?*-jRvbc2AXqK#-f*$7KF+#~(*=aYmW zPK?Vap%1OlcX)^cK;OF21*AlgcR0!aypz#69bq?LC0E=|mPmWQLY`t{5L7!paue8^!B45s8yUSUj ze`Fy<-7r{0PR*8w(B zu2PFte(?Zv49ZvaGZa;7J>fjaynNE{*-E(s$cORV?^yvkE6@C%#AF9geuLdiN!=T) zLhbM!uIc7)y}@oD*P(yo$@d*2-{wYRSF3O9Ws&dDNHu-CN0`~=v>);ai(Oi7^6!&O zrj?pLuII70WZ7!y%Z2XhIy!dJthTC>wT4V~k3B71#M(Ok_pKEC|F^PLmGWwuUBZJS z{K++|$kgXU-(;h4JNcI0WJNNW>N|MKn=F$5;!T#ENCx@TUPl|9*r=npvmD&wA)ni6 zg`a(s-Hv3YPx%8oA{VQ>Rc?8UZIv@kg(`pIEjB)CkE(cD3e^m~t?HFF_sX13)%&-% z*bOMUDE)1rF{s{W-eyAq50W459kvb0fL?fvRuR%cA3H|F`Isud!4v+(hViS%SR5Wx zdF-Fq-9wr&$JXpw>2%Rht9H~j;R%)3ce4`j*MDLkVzdK`Xftg!`N*g%$jWyvKdE-B z-qR;&?HpOC2G`je!cVKx3_4coY83~4s%z~YI;7%Of}2}BK7byTfA=17==wOGv}@1p;6mYJq|BvG!h8$4I~xh`kve!S`cc=rkZ c{27*OEmqT7Jk^F#T&!Lu6S^GdUQwn00}B*03jhEB delta 76649 zcmb?^4}4VBmH)eM-b`ll2NFogBqT7=fC&yEfq(&nC6FM|1Of>PDuzksC7CkGgqaBt zD?3u9l~!8mlRjys%C4-^YAZ#Hw#7t@Zak_r5pt z=3l_=?_*@%d-vXR&pr3tf9Ib2z4}k{E}WR0Gpt5^lV=qi%{gn6nN9nHt)lW}#@x54 z{mnf$NK%(`L)14i7*uyv&vO&yR@n&>>G*r`lEr+NSAMX7%3F# zVeLoC-1!cv;zk7eM}3O)2S(E=lbiu8T$SN5u+0;#$!sB*r* z?vL2x8mlkUY8^#vlK$XXHiP|Af95Q!O`$wls_2gTws1P{XkTzt6%^u&8i}BIisaJ1 z?0brTs^f|YFsfC2>KJ>OSIc^YA2PD z6bB<6fd~XurtQnAc2AR2)&Eba_Et{O`PZb5a9%WTMq z=if4DL|c(i%Ua2O+m>#huUnCJ$#EUNYfHrEOD8%ts_H5@h(E$$N)lfE&bag^TM zqxyzdK-~r>V4Ask5z|D=ihX``Z>bVz6$4>ay(^tXMH%fGQa!O@-v~60h7?Z}*?am$ z{&n?hr~(acoY_Rks6x_-+m%&BoQK6Jx>trncc~-EwDK&ffmXj$JSFPxfZ#&7BYpCEr$yOSta$ll;Jey4w-^>XOaPAF4J)CNs zP%O0_xF(`xu+(a_i%6@f0oj|?D)ed8h9c-24RtAG`C|*_ON@eIA}p*9`vM~vSBD*`mA&}+wxelc0MEvlWRolH_5uqa%jKSb^Ht8>j>(c6icr{5R# zb*s_hjJg}6uD5W+H>@@?%+dOr$C_@Cm^(5)+!qR3KY{apOlN`-Cv%Q9Nvt{$=@p8- zgBA8+RwPYU9$Bq!_t0dQvh)n0xP2=01QS@UH9k{inoYJ=1Y@cX9c@-27AlXJaTE0V zgFI0(&1FJARKMAOXYIUEy3iP;#5=qa%NWB@Mn1z(KXXGljT5mVrGeG7`27Kz`uT#j zo`JCue*~OtQ$^8)I;(!pi`o5qq9Kou*R(Nd^cZchuGLiH6*N!BY<`0A5dC8;LkF2) zGPT2=qP#;2XEZP&9kVMm3nn_GelvGZ-?(Qp?`t>Lb(n%feHgOb;Lofyq%)bj@9f+$ zFR8vE5L3QWF|7s9n|;I74GHEF*N7U`T7=*Q|sngUFg)tfg@!o69 z2B;4*n@^%4jE$n9K}-f0yfk9ytgGk=jnSGU>%f4)Z<_Ye_2vE3l)t18o7TCNXL}$z z#1(op6bYay^Gfim{4EsTTvxF?80z1m`m^?7G|akyW1{iz(Sld+vHughbTh*J$i{ZB@+} z;=Wk3jJ>42Uvne=eX*ugyR)_cF@m*W_Pt|o)IO@P?;nfR#hCn~eEsxBR<4!T*E)Z~ z-ljgbMmy6u``Fg{D*NQ0fbpM8KPSc|xAaTx(86`>&0~LFc#%zilQp*)OXL-y;Zf)v zT3w_+6jt9lrZiQ^>~~t#l9~9oWywd_o7xY5FkAc0lGW@jZT|J2#8-NM>-stDZEbRM zrR#0VVTV_GM~nS<#o9wJ^JcZ#~xf-%GkTdp1h&a&il-0xrpiB7%TtkYNp5~Ov^hrL;Gu|!(i|K#=2{t>g7Q89WcO_}A5xA?b5j4KmH)~DQ8;hWwl2&*vcz^ZQ=) zzWDRv0blM?&V;v6YSA7am?gKd{cD+98xQ7be;D{aYuCOp*uXlq^MmK}I}y`X2o{{M z0c;L7v-O`Dc5BZCZ=#1_!Fo<;BiqQNjZ8nejMZzSC#T4pnEn+f3QiQy3}3~3nlkcv z7SJ9W`4pb#h2~FF8EcM&Q(A?pZ4b?v8URgsm`V5}ZQRPFt=hApMYG3H=jJ+ucRV5QPLzi2Irh2nyJdMV(|3Ip4QT$|CzXA$U+8apScNuq=c7q)3pD%R z?M(VIU;D}5b+CO}Rjgay&-A~$3Znj0tZdQ&#tK(8EUK57Ga5ReJr|qD4rym&AJIH9 zyQbb#T7Hl*&+TJP*L&vIZ<3^gD2%O`*Tf<1&5ydZFW*zd4r?#nQ`UNfvFf%RfoNMe z9Ky0na<5ajsbLt7USO<-0>rx{OT{ZOBZ4{Xgpq>3N;XM4tX1x6Wkt5+K#(R`AA1fwXRpGaoM=SmKB6dbw{qc}|hJPv5e){nWc2@h- z$LnopS)pF^EjCSSzW>_hV+{jFgT*UKc(`9LW+1E ztkL(L@liB!9%D`tFHtMzVA`3hD`WOV9GaJr(Z<`Q!niy#$SsbnepI~mlD+Xg*hl$LX_m+9 zL9BLv?G2Jc`H_*%LovNr6h}Rn(vF0pn3Q`$qckOg!3^^?UYEn@!$+dG)HM;Q$U1eq zFYL#9NMVgazG40)k}B66o-6OwXtKL3@;J@c!s=XY z&x)&ZJt7ZGh_tSyZta1oE~@y+F6Em>EMAY=^GmNPue$@Y#C5!4A&2Fm5x-F_ie6vC zN*i*O=P3xXc^jvXdW?TPMZr-8;qT2`K`u|!e}@!jMd9FH6qj`q53R8zb67i z?*+z&dWJxKC=~Q}qZMF|99B)SqtV9gw-+%jy-f{=ZXOA3$I@jm5s6719f852=!#$f zqK>UogT8Taiar743$yW(AB{vN%9_=8wGNC#R@``FXV?6OZnb}O{=!9D8o*M9@8Je? zz{`02n2`W$|1Dr)s2i1Sy-;bXz~#=gM#>672$cbh6ej3z`}w zyVQ}0lSt~2HY7f;!+rr)DA5o`RwHTqU+V(#G(ZEgsYF7H|^>d_jz$NHdKXl?n- zjc73GdRZ~PbDKhS7_F^0ik>K`!(|nI*arf^h)ZUxOd5RuM)YQqGTP$7Vu+e{Lb)Sm zPLu@A1s4B!=Fa5Iv6_mpY?&($B#1-fK_){Ut+$w+f4m(tX8?<|WQ#O&i|!z`-;kA9 zFfkC&`VrO&8d^kjFE0Vv5op1bBsW?JX5rihd)$ae-2pYD9)N^H)+Ct8Lfb$Z+XQ$P zL^s?N3-xuu>=oz_jQU{sGdub#&MaO>V=|+9ZXX#4iP}+=C#gFcwNU3P)8yKU8Dl^b zFKWD^QnX}((q?DC?wre7l5?YaH1yDm{vPJL82;ZrLG7@HSp1 zv&HPDP^^!N-E5eS+x=co3P1cq5;y!y23~S8v+)dI$Ggwhzh$e;npYanVx<<5qyjm0 z-@G>#rd{4)HB}7g{iLGw=tk@`2~qTttkJUwj}pbovQ}3Gs*8kESRI!RlT!Koz}3av zO&B_Qy1Tnb(bvFWh`niYzbNkQ>`K`mDz@rk7jfl!TJ6&Ng$@KAqlj| ztbirH(npi?xbUw)HOZ&KLR{rSS&PkL3+ZH`#FA9|2234L8yV(5yaChnr^iyN1eeas z=!jH|$+D%DS7Ga!92xvE)lZY=?1e;qR7cIpo?*#fhV5Z7j`#MHhe`N;)+!oVf)J&P z59rxvjMGK0S3TtK-Oim=;-;Z0S!eC+y4Wl^;rB8N^9}sfUa^D{!gi*$*~|56^}K(N z^}?_dpQupRT@#_vgZH6xWp)o2qmbfQQ+jU&IW+s#a9|r>5cH1vFt?J~^M<(66Q_1; z3((8naD~F;vXth^ar4fc206)4C8ryzAWlr?7ADff7EdVMtgTRTLdB?0NfX$W=z(B; zDYA~GtwZ9vpRGkp`Ps5wMx*Hm<0_WEplQh}k@%cC-l15!j{M6s%1jz56~?l()GKJH zSJ*DGSBH7ZaGT6_h<>S?zthly-Y911HtC(U4QF4=No|*tkFk&t`6!vn%@p{S@pVT` zk=kW;xAB(5nw2vQKkb*xwlRrF#(X6=+(-i9{;@!`6aGu9#z$jnxD}>1LmJjBF*h3< z?hTBeSnAy3Bi60jI>wMc4^eR`-)xrMV-n9~rTUQjDNrkI= zdb(0#$7n}6Q$LEHYVGAp)01(a&0O4Ole+3Fh=lv*OH%-*yxwYH^; zEJ1vUkUU$<#FDg045c$VWu;rfe9&i^zxZhW(kV--te@^+4KX9iuq8@hqPn4~@tFK% zu8(}C_&P;Tmc7GK`goL>+4M802~+wnM@AZ^;sj)AYt}VP+8T^GD-1^%=waI(>(oIN zE(_R`z7<=>aigMw$prTqk)*M#v}t`rh6a7}&1`zi+;C!UD$L)uqIJi86%r#jTwEqv z<;IeizNyRH|G%r;e7JgI+=_3pVb$xOVA(q^=hqmvIXK*=?|L|E-~?(~k)@q5;ov=C z!jY7R@J`kS?U_4Df@ErgwQ5YQxmg`why4a_&hye9KiT1vrpndPQ2IC8H{ljztFw@D zM~eq5n}kgRlL23pw)kT^lh`kgLTMuv28W6%1m?y_?tvezN)D@5;k2U6y>ateS}3^5 z9tyYcff%}}q3lt*BG~hRS0fSb#Yo!QHy%yOzb7pMIWJf^gqL%^=@2VSv`JM|$IYio zQXTD{xQ<-$I^xFt-Kq4m%MdP5nPliSrbwyMtEO2_n#5B?Qk*6e_-gAO8T*TW8TyjE zSJsXMX36{HV?PQkXL!{MZR}d@LtE7N^XV;3Q}(7=SG1|Ywwv~$3$l}QcYf4R@yyQM zNh0ME?P*$r>Y^RHn?eCtTeUNz?s<2>W*Ra+b6xx}53Ad3#_dpjG_5nd_qDH-xvyui z5vQbz7|#8CcM!g3+tj)ZRtl=&%|+?kWaatP^a*#X=#Ux+dpHTx!dTanM5=9v+CLU0 zN-Z|!*;Gm@4~4-u6QN}$A=*ajgqw(VbXw`=W?$TWt(P{AQq9$h@=$6nff4c_jKs5{ zWOaTk^$zl&7gEtq_LSufIf>Q*Hs95K^fY8h zkaCsHEs%up)j~Hf92JLsezk6yQD>@uJ(f7wOV(PdOHIn_E=xI2*#UOPMAAgx9IAc@(@l#J{L|}DpQr~mKk-El*(I>Ij?v{k#K}_pTCe?+3dWbpX__k)wGmUH5;-SC=r=`}mOE+M z>O$qED`a%L0Cuu=7}N45>^Py6bZBWL#SuIo zXDEz~Ppz}WwOVrChixzsnY@}wo9W0PJS{?=2plcY?LF=b4@Q=FZZ}47o|6}Qm)1PI z5JqSdpU)hY^EVi$j8e``WhjmtGexc$ZhweQEWqWol|Qt%!V!k6-w~NraGfOUu3NZC zn7Sf4M?oM_(VocY9JsX)1p0+G!efB5E{J=@NBnU2WWnwcxzLNg6K=kPy*v7co!c5k zw(&f%NPJpmo{msIw-HNtOHJXyoKbj`Bw{&P1x)&A1g3*MG!;j}0-^9xnN{C}P;J(KLG1A2x#%5n=2rT!nK@SeQ9CG{AKXqeV-&zxj5P)b*Z*O)v=}biN{;P7j@r zP#K{M6zSDOXiV^Ny=MV}Z3u2uq}LL`W@sZqvFzKhP?26w4_$~*J3<#J(wX$oMF@2u z^g2a4n-&`LT!-Ks1UKO{V_LAM387B-$f2#+U?zrL<5wX>5JOgp)3!r8?=JLPXT~sqD3FAs{|3U2ZFLs3+m`{uETZ`g+xQgJJ}5sdiJ z9NgK0)_o)4`p^*S~2~iqvhdLODkY^kM?Gl<2&WQ&QgoEX+D$Y4aR47DK z3!N<_?Pg9sE!I&a3nc z7higQjh+!s&#%)nc82Ns3_Ux<^I3Y%5zpu78T}Z=IWOmL76T-V60u$|Ld=S>TwvzPncz-Hn7@g`Mi@$Fvf4o-}Fm z!XU?w<3R-!Rj(I__<|mBB;LdGLROGH3=o(E zQ&Bw-a|{!Sgq)Mg@5RhNUS_YkRyRt?31PU2Q|5*6-e=|6Yqme~3FnM@J)2s2Hx=;( zMVB2z2ba&5i4$pAWPcd}SCf3u>QV+e z@bpyut3+pE3?;-?F^<=V!WQZNO^nLQ{plRV29P(e5renlb!s#`p3m+uB^ko$Ix^n& z!YBvd<#;2TNL#b$oXz= z9y5|9h{uwsufo<4Sqs9nUDV2Z9k_#LX~5O-(IKg)h|iBs2;43^uo*{U_^cmfChHK~4zE6r+*gpe>9sLJeD6Ofm_@%t9zvftiM!eg&Z- zoKFyxOx+}FgYP}rX^d3pxuFdyLqqGNHC4Fd=s%)BX@9pv|oA%<~S@gpS+}eA4OBUDK z;4kGK359Vszt+b1xhG+X#sCoiR1L5Wex7Mu#F1)=UWvB(Q_b>RoA!lIRnX5jKQ(>Y zTpPny3QdojZ{__WTtg9b{!`U*gGf{J>0)`IO}pXKW%Oh4p?&Pr3*^N%?HixIUS4X` z-u-m#jOTD7$v~&-Cfm;-OcH_N(I7W6J*R!>!Q15)oA$_q&5hXVFps&l*|4<0KiE#D zg16fw{6P|(I1Jf|Cq600nMm8Q{Cx{-@_L)r^3cQbMw|9;4_zy70)zXn(&p@6C?2=S zs!iWFnU!j1_tzTFWe#$3G-9s(>?ap(vZc8Z8-BrFgZmXoAhBoMhQpIoWW({is>63^ z1Nuy5y^X!VU(V{4%0?Sb1|noe_n1HA^%&{NjuOZ5@)?Oe+(s3#L`nki3fQ!J9^P7D zmkO8r`mk)@YEag0J21J>X@TzAZ^MZ}V&>HYQwptcT`!vf-JhE>B^kBr6_e*5f3CRD ziq>^5p62sY3ay}B=Z%1B1IEk3b~2LJML~L#w(gOs29%fbo{hZ+7B^{UAE_?1LU^53 z4Bp2MPAN=6^0FHNe>ylN&jRSBc^>c6!e5x0XF>GR9>cdkeqrjgbV#pSJA0YSX8WV= z$t6}~ueo-JceD1_M~gDTdo|c`j**0V?_=dtlHt8N?M8j)9V(ujgz~kXXx^zkaA;~_ znFYdYqgj^Se?L>+B;qLl;E{*L<9+`yQz>y6#kD;?Q=aSKWIp=1M_wo%<-^nEO%845 z;g2Z84xIQT#{TYA!_d%AJTW!j#Qr+sz&TT-t>nkr zEHxO%{5s_j>RSe146A0ESYLr0FmY!kaK9|6EdXD`IU?Jc!f(qGDFN)YHAirvx&FSe zGAq2-cn%JLg4d;)(7!Bnvx9o=%wgv^h3-tCUltNs0ljvaJa7sri%JWD>}X!Q4IY+r z3M=Ewa)I_`Au%zK*Pa}9iHg$1$z)o}T1eHWpm^=g0YDrQ*NRebATLXFoTl^H;tmUZ zp{PCcL`mH}ZrVzXs`+HbgK@AUv6(}5Qh>bB%tIhYiB8t7cwy-QfQ4J1H;1_w)N?4B zUO}dCVlo_p#2~Y<5$oZ|*Z_?3beM35fiA;{x(SB?h6p<>?lPl9^^?V(+8ZiiSwaNC__2!%uGBdl{gUv@%SQo z;tbrh?*onIlLdEK<~*E=Uz>Dfn)c$8rPq8Aa;2HcxwQNvv$fsNPrhd2wqbx33Es-> zP-uhAEOc|V$DXXx-hV!)np@zrHr<3!OIPG6cO=)1Kz^gzA;hsOCKSt0tp`dDGWCL> z0BM|1)q$Foi4~C&lxm1#HadO&MBjv6{$xUlgdnrZwA=LZt|u}S7@fG30`5qNzSK5Z zc>ual+8j>|l4N}YfU9r#GW97y_>4+)CiS4XCgh%xPpnYEN%f?@$;g9bO8J>!TNCH` zzrgn@qI%FOUz$F*iNkHhbDFUBrs(hFv1u`rD-yIA1+2UlPuQvaFL+JGB69$YY^w4A z9}-%vIfI`rV^o3b^m>fCq>asBoa)59CsjdSY92PX@~~0a$wZM`yd*|Wgj+b# z=$Mq#BrE!vA+{{zOqp^&^(`?I#tc~(M+wYp!j@OAY)I}YcoL+=DRnv*KC!H8u)+;( z@1;@GoNskZPaPBlA&_k5Z7MMvo0zsSE1cF{q1=@$}lRKeWR#q22$b&15F}{g-Z< zlC*=5JwuoR9(!WBVZLzZ6mxg&G0pbmYU7)ARuB)~_vFoKN#1*s@*<0fTibjj@%)`5 zYXGdZ@7pC>%@>>FG5+q0E;gp!|Ha!q!#38@;{WhiBuYpst-#{r8?KoDqbG>^z{{8J zm4|Km(S>NF{-^5Ytv2nmPpy*2Y}%VoHOaeeTKUsK%iH^3U7^{(Tp{nVX;**wUJ7{f z%k!3u+nnuww$p|~DC9ZGH+Od07(T*zAQB8kciC8BH-6!eG!O{GzC5JDt1&!o(~7?0 zo-}S_?p6GQB;nI_UpXf4v}tdD<*L$*m{+@O+N@`05pNyOw8H$Redd`3U`YSrhuC!O z*U!w9_d-z1SjEhJHdfz4%|rE5<`Hr-*voBFUazzdcCe#SdB072_UO&>0hq(Sx>7zR z${T+>_WoDxi~=3cuB$m{W2@S>js>Kucy0~Zg`WQSV@6P;6fjtkohQpD>4Z&dI=;H)O7e5jY{@IIB`HW5L{8kSo{D*I~0t)bV->Q($qS9a5LA39A$(ysurmSMG+O%UY z)yS{ewAWv1mhm?I0cnn;(0-B;<*uCZf2Z? zEs5tvor&k`HYT2%V9zz+TY?rGvb;1tZFyPvg5_n= zDZEHj0J#8HA>dbWo{)=h1p*!&IBP-Wk;`z;0R`oskSi60RPuO5N|hqvFGq6BQlwc5 zP}^q3_K{m0VF^*;<+(WOX(Vi*gbjG%zAvCa5|I}J=)s7vlp-vp2x!}s1&K*+gQ?$$ z&`uHBDFXhd2%QvREp9+CBCJ=6aF%#I#US4q#MnqNHYpPRIQKpx;iCxTP=g36MF=Po z{&<98iZDzO$jb&1wo-&KIKLSY#wo%$MIhH3MA%6Yb}176Kp}QQ-c2!fQw%sSQH(tl zW3M9NkLR(EBJ86G@WrAC`zgW!MZzDCaF8M#qzJ%wq6mj5!eK?iACGW^A{?Oz`69y8 z6yYeq{O&MfJV!B}qZkDu#tRhV1l$&l2q!7RNs2H@L^wqeUREUh@jPCk2(M6t$sz)p zQ|SM!>M`3Ns}L5Ei1|T!Rk1=3yp`sC_ZDQpjz`s+`@_yXGexhyo z@hthQ0`$>EWw1%4LfFwxrpf_HwRe8ph|YS}PnP1}{-1mbz@vZs$uj3Th55;+Ts!$< zv9|ivE=G|*Nj-}9r``0k>!)kw^NRM9pFU?yWgh+6U*rplcJSvipGI*9H1iC|#s-&d`?ss-6hZ<7e;)Vt8!yz}s;kFt}zE=a$%c zh2;ZmG&G88$nORy9jNg=Ji?MBY$x(Z0wOCC&QD7CZfd%B(~{Zk9C8DQg9*qDmz_Xa zOSNymFqtQj#i_vr3LVVK^u=ug@+wk^oi(cc z{)jJu(pzHBH%I+q9%PALW@qxHf@UwT;WaxvS${6Iu>L|Y&uA_ui9{%HcFh-b>p#h1l^lp!&vmj| zdMejfJ6SKbbqRNQiR`oM|L$aSWYw;hy4Zet|FVlcig&F(G+X=F*Cv$*>}*vWfZ4Lr z3fT37xol=(@=^<%#79Tn`dhi|YNOV8ueC5|tDOaxhj!>M6|ho0lE>!Dm+blzdF*~P zHN7F9VZoz!1ud=c}+UZ1g?6uhB2%v*qO(gK^;4Xlr_~fYItg|Azwhcx9%@ z$twf>?nx|HW)A)SNz7cLmFoGE**t^&N_nSUzhg2pTRMM#W->EZAf@{Ili8rDq53_A zY%E^zNkyzR9uh2KGiAF&-&@20B(1+)#Ma|y`4n~=ehyAyx8vv16t+>`YS(+FvSsp^ zUH|M5Iyl;kU9&+o%#Vm& zwCgjAS^11aii#-KD(JT2UnHjolif3Zg{~giF=KPaQc$wkiCPBy5|?A4#CL68=civ`yoWBuZN;emd!m-zAFwo?XHp ztt@uhCFaO)#t}ok$IU*ie{m_BqZgF18u@9Peq9->lF^^uR>o#7E^x4A#`H4L+oEC$ z94T|m>O?SH(25-TSIgMd1w~j(+FCfvB@X@9Wvo7@%)#!)QbhO7WHWViiIesB%b8v8 zC}(Ab<_eh=#=Xq0)*miM_gv=CzhBO7y{gi|deCvx;aK5t5Lv@74Z)zENOP4wI2~Oi z(mXPq8KYgJKD&ac3hb_(?w?@yaV!`C_ zN!0}G$eFo2!W|8v`?teLI>ReutZ+$(7%2a8>QbLRx~YF1GKSLDL=1RKq& z2Yook5yo+))B4(L*wm?sAh$@|;?Uoo#ip~<`pRl{bw!(lby-MTv=0$^4xg`P74A3~ zKf1RS+$D#aLmQ9MAh$bo+;B0EetDAiS?nq*!w+Y(a{c48*qr|*htAn-mb})X&zsGb zF>+LJCV;NBbu^m}Uu4QFXMQF54iFJM`bqW%uQd6RiWdox?%*FU-)jI_8#lIrJak*X54TJqTg( zdX>D}p^w&6lb^@turvC?dDLw2Z5|tz4>|NV=CPY5PTGr9KdNUX`1!x}Y!pAYHn25D z8ccB-*Z{r!^Do(K$_xyZ>I3tke0#w4d{!}iFZ%CpabZcKi9jfO9PyhWO7#o#+0?=! zhq+0y5C(v~2C-`wu<1>hbX&XkeMwT^??{vSeuxNp?ANPqWesZ&IK*`Apd&F|J3tkY z?{<5ogIt^r=};2U!|6m13!;Y|PJX3@J`J7dq$3XNEf(6L<5Smqn)-P=H!ps`x!+N7 z1;o=1R?{UO`OOa<)PksU0csCUo@}Fgde7LH*YMxwOGVspq1Qtzah6S_#MWh#0O&Tq zD6H8)>^8roW|ZnJmYkj_l1l(ivl)3va%u`d(^@0Y{%Jq%-wndvo3e4uKO?+;Y=jUq zdTIAMqL?T7(`<)I>Nc%48OXHK?N$D;FL!&d2mv#Y@k;h^3$5fn&9OaSZt>?_NXqPwkbW&9V^~w-dg;Av($H?iWH5%Q7ft^-N zsvT_9@?jn4P&E?p%cCVXhqLoz=Img1i0AZZQ0CatEcyGhW~;DI!eIn*&}d=qXei18!-NL0n7k?*9lBQ^Fo9aKQ@k6%+rx} zC*DX?fl{AOK+Um?S1+VpHUQrcO7gOU38;R05xKHdkJGe#kohvBX>CW=bg4=N&0hGv zYTx28{EyNr2c~rdP&g z7i=d<>9y0pEN%zLR(dy)nhSF0K7BOLrFjt=9udP+qSw(L{cUNCSTrLc(JG^E0B+ld zBg)$V8KRK4bo^~@4(sVmymrR{uW@?rffT;@RSLL?FrFA0^uSDr4vAy`L1V6mmh|E> zfDa&*YJ)-_Zb5KYKb)LrGIfJE?=fF?WV`&J8Z8Bl7LhXnL{_6S0(u2O-oE1CXqcup z(5KUm8ibPxh~8dxc=3iFH8eo4uQ?L%{=k~>1-VD5aXA8Wdx2`$g%hy?Xa02uRyqQ~ z9oZ%1DmbHz1s5Dylprt6D>($zsD&x?RZ^TbfMONtJqL@eH;Bh4J_*7G`<##^lXy&& z#hVKTQUS>Eoj_k2&2kuk{Pr9ZU?0TRsc_eg46TcC0b|WmZ^jmA{H`1}H&JX38i_6S z1aH~+@nqu%FeMhGU*OpPC7!w~?2telqeXArhV)U2gm{{1nUM(q&YUarNucWP@ zdyRu%)uQHN5Ekl1I-NCQs%}y2SF^^ps2xRoEo($WBV$}8DeCKvi7pYqtwwYO1jL@I zg84>CNV7#tu*!}V$f*TD;{fvJGSPd+a1T^3L6Z%uXB^NE+--{c$l@wSKxxA`hfk<8 zXC2IMnHm_7&q5KPZ#4qiq(9_WTNndSAwOSe;^ZJg(sc&s9PH;rEQZTgsMpR)IIUe# zR)Tl19=YIP?^x1W9!*GUYYR*#2JGn6%MzqB6V^ml8Pzwn(H3Xo_9#h8`oeFosu6Lp z^-kATdAno%LpawN=GRi$@NT@)om7fMSbh|mAZeGH%x_}71VeC#@g?bgDxk6$pA&ae z)yKbxi>W9^InnR&jnc*#-AiTMPzAq*vwUGhS5C5X{IT+^F|Rvsnb)1C+1FWzbb&`H zxoAYWWQlSyPAGPXVqbKi_f!su77NV1YETQ0E(-JD|FTtV3o zws3p^O7HTnpz@8n_gvA%6S3qAMEE4_@?GE+^paPiCeV_YsU{ypoPXQ3B?&cwmc%Ad zlY(rO7BTMD=*TdpD>MqF3`~FwPg?;PgG7_K)~qOpJ!xr5hK*nNm8AFO*nSck94j$4 z-%4^4)|?VJgvlj#sqAv>w;J;lnn#GPM@gAJGN-2{yoE6004!FS!|pNPjHyVBCat`{ z@wo_Db}`2Z4a3n6GZ*okb>@PleC6fX>`2L!@-!G-7@z2(K^9ZrK2ViId&w}fB;9+% z8Q}eqRAp)Wvo4o+Ya0KlBD(U7YjaW;05RNT$#0O!vhXXcX&1{nK+s|01ltB*Hpcq^ zK0~5A3o!}qSf_rN!)fp}WQ*`=m!+N-eyUP6(;5NT!JC_tA4|W?(z?{jvd)4_d$x6M z+|?b9O$Kt{0${PFDSsom-vK5$)K9-0ho)d8>3bb_L<(Nn#&J#MlmP?BYynZIxKPU?Rr3 zXxN;U2bS-~m^7&3Ol#7lc4>~dpI1zJ2|bf3(fD>DEHS=FXru*^MCz747)+q0C=v~E zVnqg$u~Ex1@``A7=3uQBCt=cMQU$dM_%D1gJ~8+Zqw8~6labz}NLypnjh5M^mMavd zkY!4VSz(9KXj@_a8-^i<4xL~)2vZjoYiP@1t0-&Lk7M)zI>!bS0Q=!k$HV9QvV=>L zN!FO@^8O9Bbt74O4!eUE8|kD`QzGvLARWt?x8z@`2K~TTxrMI&F`A(Oze?ngg)x(Z zzAWLm56_ebrkb(tz+Ge+nz*p&tJ*Ht`Z5)SpkxFnQ(QAEhJ}C)u&x+PXx0g>1;a~f zr|NIZkvcz6^=DGfYO}7=R3L^b&#D5Vn&xK_WM&OOPi4xtGvwz=0U-!2Ukg<;WX}WE zslFJL-_(csSEw_YB%P?$mA-yX98M%rBeQjAmR%~2HlZ#sFA``Avb{=64D~L26?;S(}X*l0n617e-UZzWos^G>5Cgug~Mf2(}?3u z90GR5klMe+M4UxOw$2A{sicogs%gVz1Mmo@t{-b&lOKGAJZj9>HKSPZx~YC*q3tMJ z6CTHcW0Ceq7w)%KQMktVm$q%N+T=*f04YvDU;WY5(V=x%!J3RXsUt9g$exuP3b+3C z6A2+k=2c@X5Zza5KgbHb;GS3Mnt_|C12C~PWz;IzX% z4Q+U1Iw!EnSw|(WWqi9M>+t6M8-}D!$wLxum_(8OcVmZWRKE0~1LNF}dAY$jMuC=q8%EaVOD18P|f2<>+_G ztkUoq*1sXMx_E?7*jS!%G0o;oAFtKEaI8q5Sp@UPFKn#ai0Um8INjzTsVJj-k6ph9 zBXbg&^1XyU3RkaiXvetNnlh8>|E7QuxYp*`w2c**5A_bmO-Awjk_6D^b&$+UTcM{dp(?oab^qO~{V36|i zU3(KpkRSBXX82qmf+IrmzE5&O>@#hSQ16F}=5dn@F4;*C#Z>um?FWA?otyF=)N9;(BRNwsSQ25#q?+FNO*c5BIF!s?JP7eB48T@^ zfePG;fS+G|Qy_K`(7IXxP^o=#X=OX^zDcHIBn6daaXA}T(WH_~qh`xf?jvEZF%p1C zvngTYla!x|X^;{DX_^dKnn?=uujI4R@&wU12nEiklE7(;duqI>i7REa2U{wZO-eWt$HX9c+T>){x+C0m(D?@US51M7m5G)lc&m>EJg2A~eDEGa3AJ(rJLYpGGfnNlc9Vs&LaxFR(LlHTEb(XewZ$ zR-yz?a0U0#pw(C*DiXP*WC9lMHW(ua-S`DEy#PBg{VcNGLGw~_9`W*Jrh=T5@AV9+ zxc?>?^a1kJ16M0<1dDiT=wwig-w6|`g^7wT>H;JyT{BR(Gv{&_&?JTjrJmmoL(pmH z!?>w|Xh6VMaQzIEaI;fMg_P>yWg)3o)v=pmyK*jbg^YzEb9RD7oa?~mNMY= zUu)w23&8%=zR8%EiR`r4A8wBA$uW@bCj`2;u*@A)h-HF`zYNlSiU_;RWC_Uo4H+=+ zQ;_YmL*A!qg;_e{jC+sl%}D~KR}I+yL}_YZpc}&#lL8@oLd5Gd9kixILuxWWhAp%z z;H#GfcO5R7Yn+&y7_pIFKX8C|i-QS&2*U`uQygCmv({7W{oT8`mU7ssberAjp+)Diu&p;8gdy;3kE z)1quH-&EIO>a8`YOL>s%XI^jOtLSL=$EYlI}}K!Qvx>Bg<3XxMfWse*7Gf|Ib(PfK14b~hM=F++6f z#(hY%=sB3kAc=lzOm}r`J%%m#4RRZZd09?8GX{|7aM(AF(`T)TTXhKfnZEKvcgE+Y zO|b4%@XrnWaGbI8)39h0q$mOw;DnoE?g-&7DV%#c6e9!c;T-93=AO-CsuE7#{Y@7t zuq-I?r5uWhJRYoO-y=Et(ncKDd0Ole>W_A_oEQ#)xJkQv;MsOGvB>B1r--<*ww~8S zs~Uw3GLoOT`ZsY)Gw#o76&EBJe!aLCxIXi3&H_~tmTBR99OKh60j?PT$iJBoi^*Tz z5!`7K#GQgB8`w`Ux(PQ+VS-LyC&16FNfJPOu_WkPx+xEKn`p$m;l-Q4w~c?RHj(Y( zU)%yy@Hw;yE~;)0F$k~f%<{BGLf4*O*g-clVXtmwICK|mqA<3$qJsn;E@81_!T$o( zNpa$I--*lwMFkn&+=ZrOm^(!t%w60@=g8T8iJFU{T@|v5KC$|>%E&0xNot8gDn_wP zqx&iB>$mNoyBx4?hQ%F5<>q89@Oq4td}<~RvERo86Owe23KQc~Rbyo!)Gal;e0N6x zI9z1TOh~9=Io$|?_6_lz$}AOJa+<`PGa;Cy^0Q(B?1+pF1HczX;O;o0F)G4q6lfK8 zjbPYLXdUdpMi93AVCe%V@cc49p&o}}q&Ib()Y+O=0W=oXXg+E*CcToGdym-M_603$ zr`0DpUzihKvvdOyQfdZU6=%#9maCWhl_o~9+kF2=pGnaKcS6`MCh&{A=|p@)gglp z3|tS=O3Wu(1SRkViH<*{Mm!_2P!u=pKfB3>9t3A? zD5khmD4rc+!ioDbIqB{r5{6W`9vIpTWU5&hX_ow zpQOY`bZRpr*F+&NFoI?XY9U~h!MLM7&)Xa=>~EK2sh* zs*_a&eD|psH9dro3dvW~(Aq*xMVjo~$VDQw9c{tqp^_O5i5DH;_!+(6xIqPrPJf+e zeFS|2zR|6}{KmF84-vXXYp9Z;9mh69S_vfk&2)({oHfJfSOCMx8! z#AVO(0s1kDPt>9isJa7}0g}v#g|P_LTGZ%9rYJwRq>Q&^(TSiGuyl!%p-XB(ONh&* zu8Gc1_4)d@2;T~zJl|)2;W9?M6%~hkAqsxWnEw7QoQZy&ck(5=eIcu!b|y#ZMmH{< zv$z1B$>H#&`Yj7trLz;4;9vo{MgP5@U}J%f}B$g+CMt1HO-ih02ZwU{Oa}s}-q)w-9{}5Zn@q!S7 zrC(?O4jcxt9Uo#h=f{aj$P0P+KLGiSPQ7;-tCtNF+^K0OxY8z3|4Ru-6K%;3XjfB5 zea_=KE$kSRRj2;V<-kD-IQ8xotY02>>d&uWvkR+m9@{tsLfE&%iTWshT#$P#L2aw^ zcylZJi=00OsVe!BdxtdcJl=XE+rZdP&cuRUh7#_!)YUE?yYRG4l6F(I;e8K%a@y@~ zX|GcY*1GjO+gVNdX-j)VgIY6!+xtcaf#T@YA8Thr@;(vws+$1pblRq`#&6ka8%wOV zEvH1D*Z1AT=1$uWvs({!?#;$b28G-&$h>_Mj?5o$YA@E5>T7OhH_8W{`olM~PWgya z|3n9yAwTWZzu3X9(rY`|3ShzNBOQRJNDiFE4)StebI2(7VN1CW@j@1UQ#wqg#@i8* z@v=^UAU!QIKG4aQPdmyZp0+(NJ;$HCcDwX~^EiNW@3ylOJOjR#pJZLjpLFWacC(Rk zfC@HIbsG~{z7oUqd^|EsZ|-5&$fumZtF6#?jI;dXdwZBB14@hfiy0Sy4NUs-iiPD@ zh|>!;>9kWHy_MC!1tqLY?P1mYTwyyw)1 zHnU1k1_?=sM;h$Cwv0U&>+outQ@!KW!> z`ZELQm&#oFD+BCSd6r9`J%~!dJAqeCt2EfDvanO>()B@BUkjS%*aiaxt``S9j;Af` zqZ8&kB&mvct#nBsNu+eo5X+f#!6MUIm%eZaed8sk-ZunXwYe_+J45XH3iKCoP=iH{ zXiN=MerF+^j9q$pfGwJmoHLd+V|rhJHRUhnf+_?Q)l!%Kj{$Z=Nm5KVhnkO!YlWlr za*Ip9_QPzg+~(5%?!&CQsm-N$miJ(|>GX{{m7AFaxa~ryZaZl5f8Wp;J2SIu7{F2W|2Zm;TP(>}mOFm;UHZLTYjy ze|aYW_2i=>cREfcKj%6Q5Y3CS{DMor`lIa2t`jcyIKN$9KeQ90=LwfC-^>0ipL7B0 za>ns#_b~vno^t7L>;`a1&u+Fyewn}cT(6KsywYhGuqLPTjz}N<7<0<6y7ap~#_ptF zp6J5ISiAh1i;xD(^;%ZFrCn&&@{`YSx^aY<_Qv`J5TIr(8I&pb7ZQk-OpSD~|iZwSKlx8mGHuwYc z;Id5r%_rC=WtK}Xs|?{4>p%D;ds4RZk7fG42QUG0Tp{G5+;kxq0GH_>xhz-0A4wenmAQ%OVa{>)r&xZD zT$Ou#_I|cZu~k_E_4^N?9J4qh^*7WSJT&AcdR=^T3-JTPfz8cLliyrq3&G6I)$jeB zm@RzebMQQ?1h~%UfIrlt|Mqj}mNAK#`FU2VthHlO`=R%));E2g zO>M5UF!%WG&$I1JUYx7{^%1s~{ao)l2qd1Rx%wv$viaAiV!nWdrAe&*JdM+zb4FWo z^>+`l4!JE?U-<=~ceUs0yT8D$TbY4i8<(hbp9CixixAqnQ8VJ1SxT4H7ax3WUymy8WvdVeNK(!&fm& zd?EKZ5al*0r6(x=lerT9Ft1tcIFC_zxXwF>*P2D8goWNFX!sFA7@odU(RLq zMpwA1VNpG8{{};Ykymn=hh}IUp+S7Ap-*(Pc4+u?E-Qv{KQs(0d9HrTRcv<4E0pOe zCY{c8derC;k7mXJW@Ii~#t-W(?^v^@6Ts3OSNc_?v61+k(rdZ8=Xs1{ujlGFJ5MOYnN4K-sL8mmt z)hB0B@5Y@ctezX}XbJ~Q#rcFnOlNMKqCrc#kjuOz8j%3)=xnb3@fX-SV3+;k1$J9a zLPD&@AE5geVF4RYaPJ-&8}3uX0#L0u@!dnncVyB!t>61~w(8b%xh#LxqDDzNmz&>Y zmVzU^L<;FLc@da0OE^z;fudcY-?O>WMf!yfT%zAoxzc;N1m5S?mwW?ox-3usw{Ku_ zXU9==LPM*UTzSW5eiK8tT#!d#XIJTuyvT;~i+H&A43kRojsse3gX}HKv*K;3##UtW zI+)CSTd?fwP|@PU90ACqbuD%44-PO#40Fa5#Cj7zC>1HIn8OQI=CMB;dld0W0-+<3 zUk)zc%m$nk$FhOydN?l577nd&?P$vJO!zzshzfo_lU0w6kamFmxp_2cUpA$=Kj_23 z2*2quHj7W|dCTfCadSj?lH&7XKsXT7IsZgGwrKpblP$tTWca; zf>@z^BiPk>1kWN_FhC||7%^$vz!QUgRTz%NZc|+crC8w`83{#~!>~rz4)}5BXceRH z9(ZaZz~di-O_ny5M*L(52VfO$2o}a@#DKXS*5}YD8GJ)ykcBV;55pQZ60O@2Z(c3K zp)r{B&CJ%1V&eyy*_BN!9>>@oGcyKVx_l{2CSC4_2;(pgL%>))p2SU^XJcrL5@90+ z25h)bdB`n$L)(si+IS$r@J6o2P!VG|Go&zPZbPN!?e!R2OjL4}6F}hsenQr4Y!90| zcsL@Q*vg3$Sq`6DY+E&;NIX8tOKkc5zt+A6KC0^4_v}3<$xP-11_%%&(Srm9Ool{* zf`u9&vE-RZAc;aRToN(^nMc0JOq5t~pch)O@G94OxAbW%tyHo4YiUcT+R|6NqEe-W zidFRbK?Q~W9`(zCIddixg!W#3XvjJH?2onAUVH8J@!zuAq;g$lxC#+a zAU#}e9X18-V#=hMUlOq%Ccc%i&Zwf9Hh}xh#rmzFeV3j0k&<=|03kLd4Wz+%mSfEbjHP~^eJZ-zG& zEs+;50*4a<#@$!adC{xi%|c;HlT-YIvIQokD#F`(2YEM$siKj3#mS$GCg$}c*{nN( z(>q*BOVwi=u|g4BzkxTRO(q*9fqjNz%{_}GYML?JM6Q}7Iu!xgR`$rNA|f~Ukn0?w z)%6Roq!5I=g6Ik_OE=6_GxW^PQ-U6M`YcuT!P}($WqJ>Quxh|UnAZV+Zrm7Yj_+-e z+lAdOpSZ=r6`kU(pR>{{YlDN+?wzdrG6{YKE`@4PD%x&hmn4S(Z^*!3$%JO1(ykR7 zyBE+{s_Bu7Nk-2`@IjyoX-uv(U<(xlUQ4oY=zyR;*+)Rz?P4xg*x;^yDtZ=)(i*s> z(T+sY0?$Z1CixK}GGnA@wRI+Cf+hikm0{PmfQwd!n?7hezFDeE2CJ5ic)}b&5IL=t zEv!asu3qaYiBzd2jpJ-4^_i4~w0$)T(n3CH>YuVgM*~m~&V#U(4`r`T?T$&t)z0^c zXLoD}4h2@|+3@B&xufWoi({H;dkGKCag0YCUWSlW5P#VE?o(SB@puvfAKMQ} z3B~fX8DZph0;6@lrB*2Il_FlZxy{HYWzM#sqaf+qIAmZHd71rj#h6$(N>2Gq$}^A> zi54PtG#RxkAz6rjt5oUQwY~79(uUVbUP-vXWL3Hl`7!Br4f^EDQuP7iN}Y8}1CRv= z)Z#2dX}1@-<~pjFWO+1>E5ajkytm6B4J|7dOQHh!Y|sGm%=$*ByOL&7vci?BmpY<6 z*CHrEBQ0vVOB9u~B}&($8@1g%{i{0Egdh&0FOFb=1fJVb`669ddgl?%kSMF|>P-N3 zfXD=CUlFBW9g4_z7$BknO4SPtzg1O_+DYa^PP)Ul%(SXxWAnk*vl?Qw+u0|=&F-Kv z71C!c!`BPUj+Sl^Re6#7WM5n^%Z!5=WuWfW5nY3+e;XzeBIn|pd1pgVxU zTsS_6;I&#!u)Cl%^`_s!GY;J;UZY<_Cg^PeV%cF=+u0VD>bgOk_>Db%E=eGqAJM-| z#N?>WBd)3@xlV0rbr7VCOOJKI!k{P3QtbEvVrYKRsP>gb(F7c|w?#>iQgoU5h~94~ z@|a%8kRS?Vfls|l>UyMKO3xvws)`}h*Ff(!H+YzV3d%3h(L@Kx-T_arN?K0FBJ_={ zh9o0a=Y7Q4&L=Y9LjHnC3mhP!vr#w($xtW|X_|sIq(%75W|}q6bH%_lH}|;B=%S{H z8tf$1EnCOHsEQeS{ej++WpYe}0l6##Qc9^Zzox&plQ0=1y_EYj*Sz0-D*G=VrxlmD zyB|4|j4ma$?=>$SzvT7^5gQQ1#Au6kr`$0#LF-12x<4&0JYUIo>jr;P69t@e4C3+* z3HE~Zx(P)P)EGlNg+m02^YE6c*R@Ct3X1UrTVnA#mD{%wHU&MG>(A})mLWbH+G}j1lXRgy zu=t&R+Zj+Y>Z9g{woXW4oWC<5N=BFu&XYk_B>U2YQ?V`*&;y}c63rw`Vw)H!8ksxb zT1As1&0na8=pbp>8v8`bQeq2`c*THR?#RF-2E8W$aPK~~b50fM8ZN4vYFBfxT@VYG=77b;tKh#!d}DFZ~t6n-tU*ZM65 zGhic1llRCF-AtZ;@>Pgme3Mfh9ncjUA!N?W4$VWcL%372!_crN#@LXI(2MscwS=|% zNQm`nfE1Dp8X-m61yr*};DUs{a4mzVoE(yu!-|(3@ED^gv?-Isc#}n5JuqBklrhH3ZBg#ZnN_8QyWGE>PASLHN{P3VSyQp;G-$&v0q+tO^6U|^ znq<9PCbCQJ_*AG3NsCV_GI^gl@ zo*9>!jqY<#Vcb=qgGANgcfrbZ^>M={T|~dPl{0~~-}Hdv8`8yVFlo2RVbfM9gAC~G zggc41r3-;VPARnss$hg@WU0FY52DuPX1)6=tx7p~D}xG8OvhBy{3e^zUvzl+%$*Fi z(n`%lCWj5;QAc&iY)z|)lhPW=URT=rrj<-YqZNuq_%KcAf)P`BV9Pa}1k83SJ4pwY_w)gf9F|wuE}U!%>z*~eW0J-2 z!chJ{!n6x<8!`;?o=h!PovsdmxJVpvlKT)XE-l*|gX}?V=X2^O&p!vwd|q;3yZ z8{56zxrp9WWzb7b;w7F*#Dx`_$US`qE4^pqsKTVvPdHpjZ3i+1O|qt{VeI%DdoY;t zKm(m4gDT+>wKXy=LQak1dcYDvXttP0lk^TAd58D@jcvNz+k`wHm}?SQ+>6U|26JyV zyZvq4X6(E`FH7|zOOw3Dot;lvX4uhXicb82ATZT+@TCL9QD(d0)VQ*WQn*(m>`kq< zJ?YifqTV=*OiyO|cabs*YQI^_KR#u;jIC-cqs(D`)$NUM*{Z|%2E=ScXpHfk0TOW z#*nG|^9~KM_znlL`i^40jl&l)GS9#ohw7HvEN?{ys@yGy0F!c-7w)2=HSto=z+YPJ z=*aQlr(^bs6Q76cpktQyUO5{!KHo-m3de5`jn45KQwW7#8({#fbVuOUpu}gUJY*~I z#EECXSBah;3eX5w;hZ+7+pQiq0D7uVIvQg}-O6i$+|LA@0j-|mX(wMS5q3P?n$O^< z+dxH~E>g`-&k5`gyJ~no`l5@g4kfYU=a`Rpo6st({sg-}<%&9$hG(T~kg5s7MWnq? z$|;?e4Fy;twn}Sf++ly4YJ|Iw1RB|K<+@1H!f^Hh#D+YGp1?#V`+$>;UO6i0gV6r8 zw=fX~Fn@;1h;B9ER2*L!!&%sG-cKWv6XN~KA$Hs;8BW5fl2A+5ouPo5PG`u@M{QDH zktBrWxf5t7?icxH?_kPzg9tD-Q?YQhW-)jFgojY`7}A)bA$z9^ZU9HQrL6Wu`XeiY zbKGuu%J(9ZobGhIU2pNaU7bW+U~ZWsT@6%16EZY7i&(rdlZ{CZGo?AySp)D7!$O^o z=yB4w!=T=vCgCznc;}E@8=m$O;aPgG#L$pO85w}fAVS2`YKt5e<@F;fD>6V044P>8 z3@I(&WsyhzNJoP6!0A6qhN{^-G?02vX#QWc5 zQ<4hs2h}S7WRaRMRiQ#epgN`Jv2!kV47p)w;(2>APA^NRh=x;eDCp^wiFhGcGhhjZ zJw=8FtWf?Nb$SiIE~UJ`$~Y0c5ayo8FyOChK{Q#fvUgyth}8f#5{QWO=zi~;n$H1| z0%C!%`EG2RLxE!u@+VbD7Df9>q&@hn6WAK#aJXTikZ{WMv_ov_1*A+Dr&Oo+aN|ty z0=RsCPp2zXe`})MBm$ZFAbyv^g;p;nXdL2^38E>xv#NV%gBQf;^L8t7)h@Sh_L zZNW;3;!c4%cxV&Y9!VF9`Gj!@?6e9fmlb7pWd;6BaSUQ8DkGS&&97^W_O-(_hb(h~ zhgLCd`BXjOeLyROT0#4w|M48lz+Y%X;5Z{dPYNsp zf8`U?7-0^y`-qAp}`)>v~hp~yfas#WSBVff5VQYb3e4!o9e zCeikOx$0F==;F*zogEFtY;EpKdTYgeIThy^y_ug8GC*B7Vs;?Yu>f<8O_}c(VOvK) z7_7NnZlOG57OI3ANfADfB*3NeD-;T6-|S90DrGz53CY=ZgdwXqWnz=wwgEEe)@Wn1 z2NW>?i+}8GLJ$n z0TtE!6UYpJMO5T!jSS;*3fIQ~^g)rP&I1G|A@o*;cU3#{+ta6b4ys9K`kB_5Nvx@6 z;N+1$Sj|B-@ZReu2vJ;>=s*Z+tA3|&f8=aKL#N9c&i^rmj>F+F%6Ra+^&_z&)=S81 zx}iejq3p7Q3W4kmbnQaY7;QK{xa^+09~one#c%^A6l5$uR<0>hK*pN5xdB8|u(Fx{ zsCs%cuLB!X9ckjSMWe`EDnCG|8g5mCA54BDj}*-kQLP2Z$gCMWKdRRdO6h+^_@3~HYi*lraA$o&~Q4lxELHp=y)B^{Y zMSFAs95a>cg~hzZ1~8gfHTylb&5f|TglM6jNC=Xk0zmCI?gJwCRmfKDORO5-I{65wv2I> z*mwYGz9sVKIC1I#lFTRQU#@xznP`*rFI`U|J9mmDc09#y2$oySLZmhlI<3@ePqFWZ zc%?4(ofp}qAxdsXCXS>QGST&`voA86&$I|>q*z>ajM>@QL&j{&pHS)3T^bt=puD)J z3R6nrv8TIc9^IYd*h%N(olHprENmBD(P*&{0tApKJm*3cpoUvh?^t4G`8$^20}Q?m<*-S?_~}Px-3GIkMN!tjV6|y% zpkZV7`*6pZDjcg)e3?G3RAgC_efvvx>Vc=D5xs!H7wu7GmY=>i}Ao|KsZ|1An2?H2A8Fjh1-t z6}B+B27uai-E>IA&WM!{2TsPow`LD~s~QXa;M*-@yLG-u|N2F}?I2Ark_n@5Fvh9= z!Zg4kFbwC4o|~98RQ&%?5&fSM!XL`M?T$jEFD@89scwVR(eM`+49|)XBpT}*7#yiT zMD)I~BZH#bvnYBsXsGgOGYZyb+lOnR(}E**g2mrprO5{@%ZlFC1&mApPIgBM=eFU5 zMX0zAYGyjavQWxh_jhAgMpMz;EcTA#E?qRW8|BjMy~hH7M>Koy8HHXu3=Wxq(t9ki z=QYTzzaD2Hwo8Ow1&2OviNCyt-2J_lSnw(vAIeCtHSqS1S6Rt?w`Z(0ioip8Tz8)t zdoy~wFN=c4K1INNmU#13Ks-#y5p}Pz@p&@x8ox|=4X8Nkps_94`X1ab-+4k9kPt0mbmLGc16KU^w58R9v#<`YW(Z$ z+RE262y}u7F?zK-n-KXcz;4YN*V^zcmfRGvYF=pg;z zXDtJN(Wk1-0pop3?0bXVLU>XIZvq5jx?fCrlQk7)<4S#KiM!tf>c&Q&_|= zP^8TLOZ;r{+_n|b+TNb_4y9f9;}lBb*7!K1d!J-??-SL%Pb~4}x7cSmD-ch=1uoAi z5EFifq+#m>>*4|Z%L6B%78DeSXHKxnsRaez4P`_@)`}ZZAO}7|e*7gqxT!y^uY6&o;4|y0CdG=TK)8)`-^F{01tZ?Lng27w1xbtl` z)_SO@X#l1$TqC>CCw9G!)O0{IKmRtfuP>517cQhdp2wWXh&D2m#jn3!TA*g>z5cV< zbQ~uuicj#1kKSgN7v&fsqPc0brLp2x;DKm6$qIvHMT+#cnZ_EwSa_067#1*!;mVJ} zR)j6gFE-#=DBmcpL279`RMr6#I8$QpNj7m<&?rVoba#8K(=-4X_0^m);-iy*JGPAC zTclbG9IluAY^{#wKpGlU-BnqgE-*@KHK-GsJmqH(-NP!zi91iR5p0;a`xFGoh=BP1 zDR$kk;kdj^rFsJ=JRm+ih5m-{3};6W+cdTYMCm(h!tfD>4exUs04>qo-M~zGhh08= z6o^BokQj|@UqEce!@@$NN&?iR-y8^tpT5H;4Rw>G>l1E}J;K$Ur!bg6G2o=L_*JyL{L< zqqrGYCqrJD0K*U;yvwHXSiYEe8qjTf@HAl$m;CLoFZ?Ry{4_L$uwGmF2Ab#!Lp`)s!@nD>sm|_Vt@|5 z%Pza_DxyNtTU5To3X^3FaFR|epiFu}6> zl?Ytr=PAF7UIUwS2mbyw2g z!xM#5nrWO3vIkWy_};lagk0!&o7IPW;V_{57Ju%~#XPl!LVAM%+#QGbs8 z>m$Hw{Q}l4>5`Ea7L5*!@2ElNo3M=w65%&GO{Oqan64s}R^L_}f>n}p`#>w1sib94 zejbM%5<|ilv3R(S>2{H~<5nZxHFY(}xR>?I+$7xuP~6B40B`&VY7sEhVLa5It@;-7Bb49^~NSs z2{N{jkp)1w$_vXGQ2jwKar zq_B%smAV5N^W$=*a;a(7)D;(18^-Ca=EP_3!g7&+{I#%nfKxS^fv15ab$ZAaVASd^ z@71u`Y7Mw74GOG?R$#O+A>lvZ7Sub_srvv48l`?TkG$vF>-uwaKTJ#%^&>r8!in~D zXQAWDV zY1O2o-c=ke+6F`fvh#@rs3Vizu7zi*m3{9pK3;S-aDOtJ>gOFMfX<;4W1zqyj{=cg z1Ad3g6fVBz`KvJ=^DRk9*zqI)MW-~;Dhbq$v>ItMmgxF+q3kH|J-W-K#WKu}=b5R0 z`44uJN$|>V{{`r20735kD-bAwVEpJ`Ss5?zi&y>%D9)IV-M!BTA?};t&k@)8_-q1- zyUoWZ`lt9!bc5ZO+U4Uv@UdLcoX2Z$-{#IdUdPM*;$$8#r^CP~KVOHRsU3b^&G}Yr z3;Fz~D3H24$iEI~G`}b-;EVYjzxYxCe+XD>R}JGI;=GZ%d^rCK=S%$Jdn5P&{hT_I z|8Ks`pL%vAKgPza@fo2id77xv2Z=KK`(|oyA^$$N+x&i`SnIdU`A2af1?EMW0eIVu zWBCk%xBcl@zJVH>UBo})gmZh{cz%U>uaDiIY8%f_G2a@0K-87+3B2DgI!pMKxrco0 z`)08?yq{kpeptfGeFOe{@pcIYx!y0@F6AwJt3UOVOL>Cv?S2uq`6k~^|7ntL*Qfqq z^Yy?@^ryNn=edmU^QUf`h<~uBQ|n9lRAwIbu^*+rJBjbg^*!MaiUno-GQJ<+s%7Zx zGM{*~jL+jha{WUYj{=~wrJVoFJmX`}iP2%c#&-}Ps$0X{=7;>^yJ3D42Q2GHVIDWn z`q&GiXBr=y7ius6$7fgPi0#w(a^Fk-0`Z4w7};^Z7+JxW(a$v%{HN?#s=Sil%6upM zo2c6p#3NVpNa#Z!J2KgYi)`?vim%~!<*uji$}a1|%7 z$GpAoPc8opP4rPS^`Eo&zi|$5*yA_wU5pn5QtRe$0LYybzn{zRGe7aMe-mGt$G^-z zN)4;wf6n!d2n-hmH(|CXrG9r4|5wgF65qL*_YfB9*aiI0?3^fU-wWnfL};1aZ9RtBaAQrG?i{|1*2UtY$q^qDgQvjZvK#tZ5F z`=+>L1wV(^e@=~P=erqzMN>bC@cE482)2?}pj%h3FPrh1g-9|(veYx%c0x|$f^f8Yf< zB699F>W3dgrZ@h8Vq53T3dFyBsY zishU5EutdHZ(zqoZxTb<6-Ygo{CdI+{q076 zEj2yti@e&Ll*2}(7JZRdGE}nZpZIgbc0!66hUQd5e0~$};ybxGw29xDcdq7(JKAfF z)XkfDHS_HY6p9^R;(s)k1%Nub<;(m=s{Y8A`A&064sbuaw(u>vk%xcyt^EHG=IF?~_^L7GIl${Qt8nORc2ei#hXbjv-o-nH`Hlw0r2gYR z{*1{!dicNtoDt~gzkY*%hXWaO^*1^0D9%s4`%QicBiKyeE`E+JNqs~=cwLTo@7w&w z5tTWBOSRm!12WY<#OL{ZCHZ5;S03gw3B2-|hk1m}7FRvOA2l0t*v!=NN3h6!)ANhO zoJY}RKuE57lz)~3`tjjM`HYd<0}c5Qz^o+)8n3|?=8qHaKgusBl*ZBD<#FGV{6pd^ z-{p(UI#3fJe!P^mh+}(smANE`Efm%d_%^;QKlSw=U;u={IA$MjBtGfb$5-*nfH=C3 zf6-i)!>dJ5L=(& z1)-g66OnUSE<1p)aK`@5GrZe(l<6`vp5=x9ql}7lVXJ!<8v))`&mB%n`cm=DXL&(6 z?631rgW7COE<22$rAE#Cp2W%+P;v;Bj~tv(_WQ}k3%I-E&!Sf+#Gjt!)A)#>nEV`{ zYo1{D=8Ep;_zC=LcdlqU#HX9e0a~40XC^>PK-=y@b7^ql+;vh($b( z6yaV49|7D9QMG{2OxA1lP#OmCx)%xtY283x!zXvs7xajf2Pm0PX5cF%4Nsm6q2K@m z8lG_q9Z&`sk^{Ijt(sJC?;rD=Qb{x>7L+6T0qbl|IW5#S6zzed5w1!4D3^+%XXI*C2 zdl248UqjB&QhZLRGnY|&Dz>)~=<$g-=#mqf6DXA9@;@ei5#eKox6ZF?YF@Bt$?}@o z#^(90;=Kr8IId=nw3qAA^r1rd8zD$7@$RjB20J1qEap{7wkMaJVdi`sPbB%Fnd;dH zg%I{)m`ml!MOtX&Aw{1}!fZ}Z8)%p`(-c=VIa&5Z0GvW|Ad32NtASCI@rIfKL*$eJ zPY?G=Rov8#^B8)G^NRCTEy!jxdI?$=sqg7o-QPL?2ypjU|GpvPg>5L6Z^Ce2dCsGhPvn6aL3WV9Urhj{A@8#|T7 z^4I`}XbdXL6bw_W=<}qd8MpS03Al@-0EfHpP^Q%3n;DD%cK*IgBO2 ze|Ze5NDNl1$9Q$lnmk}vr}7`?-!_v2!SmR#*pQa3BHX0_UIeKWan}kLrX5fhh zwcV?puZf4*Kpw8mC~k(hbmo?%rHX+mst#T0EEo0DJSHB$nUAemfijT25;RcRZ*ahO z=01$zscub`s8dsx>^&lDN)AzzLw(#QM165iOCgx{!8VV{WgF2HkONgjAR@`yVAY|e zONab=3XyjP7Du1j26QzzS5xXZpf=<-LY%32$QcI3#*@K7R!Y{b^nF3((38W5{3ipG z!U&_Nhj6pg8g-pgFm>S+@JkxqL~h1v{6Cu_i+$!omiu%y-F_BOOEtr^}% z8|64P$-#);HesNnfqL51j{81KdoIAMYN(P2|n^> z6vUNrM-EdHTwRFeAu&51JfHQPoyVw-yA*XW2{toK3hfPud4>q^A9K}-boM+JIJOKO ziwtV(Jx;@^QU#CLleL9ksvBkL^2^DZF~y$!S?4RZK9B8!m_894!djmsb3Gf{h+is& z9(D`a-BUq2slDR%78bWvF>su=bYTxeM`fNg#ZpM)(@I1FDq9ZQn8$Xb4`+gdjQvQ; z1CSco^EK(voOU9p$7Y%SRl*p7Y^Q?nlMFs>0~`!6JyH_lBhW^=9waak*~_qEC{C=0 zmJov4$+{{9Qe6$(oX5_hGiQU-jO6)!2JHN=Om)#1nx$xAnoRVH0DlHt;ke06aZ4@%p%e=Rh#rMB{ZK<|L(jWk=r_vz_-#CZpvP&VSckeYV~1<~ZX{n}IqI`L0k4x=F#9rE4H^h`+mC}DGDy>R-)aJPg2X0I zgWjUaehWpO@Cqp`g6^$TyLcBM4Yag_HbEOQa?MFvF1`meZWrnB&KowwZ$ydZYnX6CQ zF6(N#lmS=&M!N-tp+2rat-(7s2GT|X(qKplZ3;Zz~0r>^78t!sSu8 zkvKMBVY;b%_AuM{^eLV(Yy_1!-;91HiK~bb4*r9b<4#L;fI6kd*a)lAFr&U@zCiA1 zt8~7MDaHDyYgL;hJlr^IQ?-2B1ZN{AgF+xmtk4Ykta+_|GQkQ}$S0qR;BT#zbPLsB4cO$l3!9j)7q3B*E-vp!)mSS&^)Xq ztN1q62V=HRbp4Wlh9mCu(O>fE9O0!WehEtx0z7-3=kv^ER_GzI=6OCwyzo3fM0QN^ z0zYInSZ$Vw9OnN_AAEF}UvI9lS}bwxuW-z&vqHo*Yb-=hKKd)3O3r8^Z@!Y`b9!TD zV=Rsf5S83QBrfGnL?eC`dskMfc1)xP`*D#~F^;Wqd{ej-3G96X%jsCTe8s?W`1};; zty${+6ET@Hp0*cKId%NRc1!n>%5*Qesyt3z_p7imodgv49~-7h-J(+xl2q+hw@@qQ zS!18c!w(>IZ6xN&eT+`Ma&reJCD2>raK2*8Ab`+Vl&&YW0Yi-~4&qv#iFK!FWy?NE z8LN@76_OimaACV{rAi@)$5-}umX$EV^~2hQbF{x5q81hs$WI({P;cuH5u|X4VxdFz zK*0Md$XEB+^&>4usa@3}d6FSj22ubgNI7zFILr^NVWYyHXwT_eh0C?c76$j~)C{te z%fpDH9%3&*cc^BUa@gjQJ=nTcQ;_1I4fa`@O=OjYjmfBADN=C*gPcRBC^|DETpj~F z|L8pAR9gh}ZG^KSl zg9-388oygttF6XQ51f&sn(ziHg@1sFQ6wp8l%@@p$QU=ND4ua&U^>ai54KXwM;VWr zH{r)WAK^`bovctExsHnWj_{?|?4-MT zb}}h)s|v9M`lCl#Dcuw!!+MXhS@1YhoY8XV@)T;@mMcoGWaIMNa+Soz?++g3W2$#q zyK&{G^k+v)Lo1P0_TNzJWxK2=ETc->wdjJN_SFW$c{}u?7wlJjRAIIA9?D%b1{sP- zUeW&>KC1wcy7#*WE%CjByhObA8$PTAfw|T033WLD^`YUL*4jk8#X6fWa$n?2Il^@# zFY<$Ci}jKv%8&8w=FHp%OZ@y8zi#w#WOJ--uqMm?$c&JR*R53kOZ)~-8`@1T!wd31I=^fMWn}z9JF2ihS=j&OCklBKi?+thar#4s?VgW)q1%~EOnyUz6ZDO5q zztz7sp$i~fw)h0D)p{^>=L!BjHfCp5rHFbhNX>hjH*nu0;|c`Yu1&piivQRQwOD0R z@r23<**Y^ZA62JOAuPkb@O0iBkNF)gxlE4N6CYpo<5+o3iK%zu>eiGD}EXk5=$>VMU#7ZMo z6slP1iX&C3v|^=|N(#85pkPJCN);<@sZym%m9|*;55;^+7Md|$sm ze!Q04nYm}q%$#{TbIzG_&+Z?1*QWz4&E5{r!2Ql1%PEy@WxFH31|BTTLmBOO@m~{?=7pnvx&9V0TkaaHzwjl`z`P&wiU_ z2Cs7@v0R03eNr8)D&>rS@f^ztKH?Zamj#~$U?rmm_{M#d8eHK_qRaWgoq*Gn4Z#Fw z9_0m(ews;}f{UG_lk%0k`CSdoo~eFceS=q1HU}SYx~X8-UgyL+O3GqtC93LbZmsWZ z@+McV@V0bl+5&~fPnp`(>234-S~{lry`Bzly*2nnN@};ZZ$YEi?WwD4?QH3AcQkrB z+;#eUM7(a%OdxbG4QDQ(!brHrSD#1D&T+-stpZ6^g}Zgxm*i5kN6XzU-j%%(cB9Zn zPr$v@>um`aT#z%*+u#dyc>Uh`L~^(JTUYq%y?%uX7fhH?uGh4xUVFSx#r=_NZlLtI zTid*TPe-f&Kh(MVKUJFY+Wg*Ss74D&dWLAmYy;t(XtMTqQH>Zl_p(;MBtp1!Bf%GN z2im-KzGc3;7;1J?g|0+QNcN1!KoQez|6z#yr#jP&Fs_>D5IEmWR1sTEIe@e_Q7174!dYUASG5mhmHXCA z_NJ#_!styZm|`qY^SteyUQC;MO4g_LLw%^=4}-)`(*nvd(xVf4mB`w+DE5^4~Vc7G-H<4d78Q++2XKi+U@a+RAgm}(5+x`JhAm|_SPrI488~YkX>)BXa<^T zkmY}g>VXk`SM2|9Q{9BcDNGbBMsf^C_k=L%dJ}%0_Z!|ieb%dyWvVab{RY_o4a(2% zLwWOmY+AT(1qu?=9428)Ev*jpc2KdV}N9X?No z3a&$6KkLOrZe7{p_4i_I;^uBHqrBN|V)rfsD>PaAr^xlCOD6^**0hG!j_4AU<69=j zy$}3OE>If_M0a#GUfeIri&}*ZWHBs3?~W`IkxGL_G-_CoeNF4qX@WJ!QtZMK-_)03luT+orz8d5K?#-J4rg4}MRMNn|tl zJ%iyE*zDTkayJ6ewNsLzzF_(_txM;51D#DB^E;O|`#P{{#%@=A`RG6xEKC^;Pm%pA z2=qUqPxpT$kV`N4YjMPKvgr9@iS5vC)yZSLG6qrb2j6#e7q}`{G|y;la8ib+z8(O9 z%|waQi^dh|C!4rIC5e+H}uM2^`Ot(VT#96H^UckHO zfwd4ztO5)d@ShP=D46w=c^u^%+mC(DDERhy<{M^2lhP+1sL;?&mGCQVsIiAxax zy5xm8nvK^$0nBxUDT!4wYGP#djaO8~CEgc}(-a%Sak*$5+La6tk&=LvZXc3NI@H)P znvw{hv11go1QH2J0P-QlqQl_4t?1`&5J4ak2`K_*T(M$PT=P4`0MV2*Mz>7GvA*70 zuP2pFn=oOfXO(PTV7~8W?_|ZUBv0+`>JY+>Oh&gF;QH{)bN7XJD9Po1zX#HeEJiQJ zfJ>xh)AHOAl1=U}zf(z^0X9D_dvo-#`<3|raibj_<^Q9}!;k6s6HC!I7anyTf{!{R~&kP9K_NEW2m|xfE6=I-zF`w)Go|VpETPP*?#?!+E%m9aW3)Y$N zyWqyX$w^Zx<&qN35zN|?I>3qDHwLh0U2@Vi4`d=@w~b^MfC+IJcMW?cjgrBQ)q9(~ z4MGruv%KEOST(pVR+O+j$YKG!uFZJ3wX zn_ZL*X~`T!sxa%Fp0=)1Ml-O~_#x}^HGA>S>#u{{1TX76Z7wRD>S+?FW-lvSFj=`o zO9>v^H^GVWR(kyPZhHwT>W6M~*e;6xe!KV2``5hBzAe+Safz@mzFZ(vL zj*P=VR%dxV2EO8&=WT9X;T3CJIdk5~>3KFd_`&{TtdjBX?xSJB-#<5+RWbfaH%kr< zd%m8kg10|EV&F_h?isChQud@MGlNe(e`VraM%mYNw#X_56lHGEbfAP51}7fKr1szv z{Ot^`Jdio5i_!FQe_h!PVc3c8;_AtmH`c`^nzFj@+Y-Dr;Vo9ZHNm66vo`oQ{9PYR zIGC2O5VJ=`<&`B&SrW|r#gO34gD$ELE;~4kJi$8-PQl-o50>Gt_QGSA_!zmSw$^uv zZcS|S_&b_|`(ALDdr|XQ-j0>6{^fXMQK(hnFKuNT8Tag`tYFs5^R-RP z*%Z9NnH~(jJOP8_S1+HX&A|h&JWgA7`3_%cLelnMouDnjJ72#^$j3i?eSv)&YQZLv zvYiDh-xvpq-SS2`+rfg*zi|WWVY@PpmJr*+g7e>;#`d#a54`DOL-vR)dzpftqFIZJ zmHi^2SUJdoufBByJH&#Q9vdkhvySDL9%hP@TrI8sW>3>$Mna06r^|*gmm*2o&1jcc zT)K1^es+tsS1G{@!8^ic^fYzMq%M5f)tZ zn{0NJ1#kIHZssvY3$S)n_yTR7j=IKaO`brY45I`4!!cR;;NN~TmK|ro?B7mgCs@$) z+aI!%ENJ>&S@B7xIj6O*6eIBz!*szPMgC!@nSvkaa)u=;XAqKIY*o&(U7f!htFm(} z_>;FEVCPw|;+@Oc1r}_7=Q{l{Jowjls>l>fI`0b3I+05zUfw`M%!2=yV8esYoVbfF zV9QAh*8E|B^HJCQE(i*nHKm6I|Mu=p!QcL2m_YyD`!@v_y_>0>XS6MN_T3wUzkYWJ zQSjq;S2LR$T=S=z;A`)tYe}l{_Ue=AR1!RSvL^V#$)T7xCr@@`#(4hNjY)m-kE>~e zeD~b@Zm2Lkf2;{k{$Q-OMMXUX>d7BigU3I}WoxxyEs9-wYAD;L2j4q2jP1~Z^rvsJ z9u1}5rtQ(_aB%C#)j{uv*=(;!s|o)3!%^CPjgCrWZ6D>Zr%iY* zYWm4vGue4laNwD4K|;WPd?rUDGaZ+2SA2Xa*@8d#*q;!iC@L|F3S=24X-Mto={wG3 zC8{nuXQu5E!;NPX4Xx1yGo6x2r_K%wD~$w`I``B1;BEhvZm5h*76WSMr>0=Wr$eGz zBO4&Q4Xsf^@Nb{qmfTxwlw_fUvILR$!@nnK1z7olpZ$G~96f2lW#_zlXxFK82T2A; z2Y>V5R~n(pe_myTp8e-S8TyVs*wQuZ+F}5X4*vQ4wek&y;=js`(BuDl*9blG?*+)w zo=ii613xp##I)dn&#n6FU9&$+WimJ;Uco=AiF&52Z&HVOS$iId(6gRLo>p68y0 zb$OD2Db>nVK({1OAumg!0$ReCC(&Xm=Yt1PuDMdx=2I2FY7mWfFGNdo7J=u_#o0OF zt!r(mk4aK0`P55jCV=m~gmOpCM4{gLF(oBMr4uI1_ccIj*6GKobEX9aa0Q& zUey{tRwpiM^`U9KrD3hiReYVbfo8Xu5KL#dtTr_vHk zfICysvDN%QDm{n9?!i=z$BDrhr0t<;F3KakY)d1o402REKq}~r1;e|VzmrDK8?$Qn z5c;NG*zjOiVIp6ej(N3)KbKAmfgm}9meN|jGK0E+{cHy1n=deJI(72wOv^NO}^b-8hP_rOo{DQDPAY zVL?bFwprz$pTkTUnnQ&NVMY?Hz!sH%@flsp|8{}Qd|eJ*#KP8m3YwLoOm z&d=mf6G(J@F13S1ujP`*fNBGc9=VK$l1JOW^V4&W64K25<-0yGPNW&toz2WZ!VJ<~_=fum`7 zdU!@shCb~B;RL0V&lpW32XzT-t8xAn*sRJLoOSu_qbUG3m)|>)hK2?g(k8+pHFq4g z%vX!(_gDzFjlpVM&Hpuq=Hc8Qnl+YQCfX26Eujep=uKEhc8b9#^+(PF}>Z@1#$nltd>4r=F!=a2+p}O+|pOnM4J=WfHB$q}2Gq$=G1z zS%zP6C0z-^th|!u{Pl3@2;6f zGg&nYez#^Y*5aONSQD%Hhzjs~)!bh}*WmH-bjr{X27mNs5?3oJ2dR0LG~JGV%@e}E zjxPR2IhMZB*8s_bm2?>ZUaF*f)jep^#-S`Vm{@D!E3Tr^c=6a(bO#=7RpgE<+0E~~ zTDCyE0l;Th%Pr4{1*Xeg)`&&x#79(t_tDYev9Su8u}(qLj104Fh+D@{oxuK zD}!nL@@tLlDb1GAB+kBGzYg>GwbZKa7rn6{-|rO?>XpX^0)751|uml?Z`;DTq`D^!(^W0EsO%#AnkYqC;Xlr*qp}?0S0G zDNpA@$QC%P@$$Kp$?&Y5OQXbd-CVkq9g&0kCU#WgN%JVjcn%qm2eXGnUX4c0%Ki+&~NTb9pxZ-4favpEjJc8|b0lX|5Zo zqj#FQnp#BKifWJmN7{oOuFzA};3?QCjW^fOSsZG4Z7oe;XEgp$EqH>n8h@phHi>wR zhaN`!{-snrP=1ZMmRP)6~{g zyxoh5oLxs_z;RtyN9!>tPu9^+{V|Ads|TwtlLp=ICCxyS>7|k|#4;~^&j?#x2Kyuj z7cW>wHnzdUOP57v`u=5@TJoqh6o)Wp115STR@*>V82EQKP=gE(;bR)9!$^I;5lo(F zM;g!c(J;2r6q@X#L&Pp<+_W4lAMvY}Q_*6Zi4rTIgoAKTNUEEnapy|!(r7Hv?`!Rd zMw7kG9$yS_SzAL}%`)g-ynbnDxrV>KoYIFzGh}ptSHonCq$p@icP*!B32oJ`bvnLY%+okITvrB91F85@Ig zx8Tf@qQ_9~T)a!wV<>kaVuSS<%3Xq(OOK)4YQ)m?7>e~EHbjqs0N$$*P1mC!fe*0^ zJ%-9OBbKShP?>hbhRWDjRHhTLVR{Ue>EeYgw76UJ1eh#AM$r#ahHce*0pvt#nn)E8 zRz>uKXJc0Lp4nXy&^b7 z27OnGaJmc&(y19TDCnkU%Ag>cI#dR`L~xi4u11iVOkj=@l+n>cIl5)D zDRL~=HO|@5*Wl&1n0Q?~jY!x6cD|@hlzJ} zP#)_s@gH~4T(-x=|J6YwAPX7VNsI9sl5!Wnx09v{kheOiTYxNFft_ftiSrfM+i?=6 zl@MszxMwAmv;8K%ZWZNNV(WZvCC!e1f1e&L;#2Z&3w16~_E6y0>=@ zb{ec8WWhtun5fWDF)S2TAJ{%xTEPvS!TU9o!Ooia8@E!=MZ%@=H`mbiiw1t}+c@5% zq|vw0sFbs!4d+Y>ewaX;=`bnhP5c|T(IIxh#EWjHFR;}Wtp%fL;&-j3wN4YXN^CPJ zHnVd9e|SGj;YD{qHkZKX-T@X>KGOJIcaU98G80ew4#@iC9pDW!dGejq0vX0PR!8*z$9m2)y*Moyh;J;i?mug9oBH#E9gc-m+48qBx?*KfF&qhfs#T?xFy#jv! zcWBThTTEeTSqY?NX|Z|JOTpO0&fH9M>}ru^?z38Cq19L|vdoc9ciu>|zUk(gqnqwX zfN4&bD^JN4WI{AQ4s%go%tbopBD2*X=d*Xw$nFxe^Gj}KBu;~FMqbRwnWEpfs974m zVu40Q!lh=q)zBhL4ZrVoB>-H4cFTOP*IhdYIK3ScCWH}ohjY{xK)0n|sc^>M-^hW~ z0#+jzbJIcj+E*32Ak*sOvPR)+3mSE!&WKHU#1y}~ z&I`eLgqE-f2sgK1v;BUplT_`|_=2SYY2UKyytM@xhV^o?QRq-{+a{(|*kQw7QP|(r zhz)~(F_eZ3tO#39>i1k^qRH9O(UimKdYH5q8c4tP)euF~V5}Z9EDS`br(smB#Txz_ zq%rl%)NR1l7Qlc^m|XXl$*jSIIj$rDSzC}DG0;S=a62QtV9{#haz%h^3*_eH6nVPk z{i7Hn3Zu%in1HafqOWB?DaV+|C*FmsgUhKv11c*ukeKEv_< zfoUS7ZEbO-#}!-4&+ekDS*clCwMC86!q+<@^IwBynvy|oab-=|6HbB_$yg(18cAi- zuo)$SQh}LfdL_n+38tVGUK~+i=?r`2X%QPOqz53(G|(V(cl^Di#@5#5&1S;$?!A>mYC`8n6jmb*aBD|#2bd8u*et}#k9-jEH%oJ*8%h* z#)oIZ*Tn8>@ZiQ=N2i&xua+S}9c5B)I+yjLp(L}L5?egY-tuTm;!Nqn^q%2uY3OJ~ zOY)%ZtMmJ$Ie3+so-o)0g9`oR?e6dxnUUM&>Fj81^P>n*LQr_=fz;s^T~TjE~+nMddn2Ff)=TJ$0_ZYxrV#jk&#tVR76Pm4gtf+VEUo zXr}Q12#-5C&s|@4KIqF_-0YleTsQ1@db(j2EUrrUy`T$9pC^~eMMk2cEbQHeyqGG= z7C;aFzdMb@2(imKh^f6KhUV1<%{?(Rua+Yry29#4pxKf2Nuepa##B+HtuJ^+-NZL+ z+lv#wVbhD#qHf9?HQGhuudmXR<-WYWcTdge2h!-asySE9 z$6a|d-5Wy^VW_Peu2;1!3rzO}8pFFY8gw-*p*xpq%0@Fy(ZexilQKTie>qjn9&ye7 zFqj@0G+3Ul7AFODlg(jbwN<%P0MU&2rz$82%oEL>$u6kGEaGp*~7 zg#h$Cyp8}nJ3I~Bu%q7oCBO?j4G~!PQs{B~K5t-$ncj#YpHA(m;$>INh>{6_jvZ2) zE`CSd-2aZcIfi^&E*{&~{;_S1!M5$ABq|MJ-xf$82vgK zjh@G8rLJ+08D>v-g7>MDHbP`=4eZ6*G8>0OEHy0+x@jiZcd=vcH`9Inb*7GZ79b)W z>IyUt@<0rw83L2BV<0fu)2Cwbh3CknFFe(SBtQ`1U;(f)CYp>Jc8GZwZiZ^6_+Rg!1; zS~^#uCK=b^%3SNp04kF_(^EHlzNpL8`4y;(vj5`y_hA41doa?c`SwF%|LQSgw)Z-G z&FOFM%l?GnjB(`YI%1}s{dH1gF$u37k-kdyiPhzpnRfS^Z(ev)k)_A=vY6s0zN$Q# zEoQPSM=qXPNBgJN(I~apv5Uucynk%RW3ZjLcx)&8$96J`&3;Ps+fuSx}64cKN2ARm4>I)J!IFfB=M6^LNgne%*%EX*WZ56Z-FAf z+9Qk%qB+xwnDoUmM^r)Zs1SV1%dIwkYmc;q*x4iXw6GW`=4n3{T3Vsty;*-0-@i+k zCrBH0li%xU(lxYwD?XgRzKeX9osT(mf`F zCQ{!F7VVMypMmX5?^3uqM2*3B1`p)3_Cm(KB}D0$R79#Cxm)&>8&e zGwFQXUMiv|WNmo&Ua~`mD=&AUDBN=vH&eYeeX=Tv+T%LqUfoNM^k|k^qjr%T{9p(d zt-_R1le9-cz+sMPj(YyLXDDqf?(7Pik*{;zE4Xi;i@)~_-IqHDmq)M=*WmgFd^-7B zY6PnOFv?q86Qo{iQm4{cx`KeSu7bF`NAh*zBh9xxb+75mm8Q zgq+JdTQV(_cU5OggKw#?$=A^ZZMXo0_U9KgHZ{va#rlOJ(bdp&iD{Rm0}OnT=CCuk zQS>5BwvU7rA`ki`+*2I9i{w%J_}{clb5d17$4pb<~>Jg zxV>2r$7@mABju#0b{Z(VVo-KUloQ{iVaaD$hH*8KT;iIsuO5Z8yh%CsE`hAmqO6WV zw#GoVAqLqRS^kALX+ZK?OK)UrEqvIop>4)fs-EZln%r!?g?Id#vhWm^NBqfOQ@VYF zC~b{J*%(vWCZjZ5TZovgY>Jk)xld`EjneRxrQPus<+3dn-t!h+u5Pi!8mE2!7LBlP z6@_lHDBCQd%a73#m2J21JAOxF)EyQp|Lz`^&VTbe)VC+5i*oiDmD(FqsXf4>Su@o< zWv{@9=>BLkDvVpd2V*iE6kwWi$P%koJZ$N+{~QJ!Cc_mnj3xP_o3slzn_9IO`2yK0W#Tj6WKC#>cZ?OHgF2jX0BQJ`&))~3Ip&U1o-+!B`z8vKV3t#*W%;fb; z8OePvWhf`3BubqG`*4s@*@o+vVFRU8mZwh8E@G!Ge9s?*>6wMkc$ezfS@h?-G%6_< zcQOqjxVVLZWMS_l=TY*bI=V-q*v?skf4Dp?H0wQjpE=Kq{&Fg=RmufR2-g-C6Sn@y z;xX1_)wA2I(flSDCu`2cc97JDAVWMsBw4p=E+xqtti8g;FF8dyY3*us4v;ltc1uI6 zyfdG|=bs`UOVL4pa|#BZ?VSEZm*bKDC#pU2e9}iyZx`|Ek7xux@u9r5ko6JP>ex4hU$7-?=dOQK z4Qr3qF?F>uCA+j}2X`7-{!O_FT~;iG@+N{mu!g69Mq@;h7&3XQt;*^sCTWyxUnA-U zfVI&VIqMBtZ-{B&dWqwMyhLS#$bslatGIko!*CCx_5zI)*C!shKm}}*OusaQOBsVT zw%N+9jICr_tb7e)u>G;}qU%`>|Mo}Ng|1auxeG?c?n=L>O89|Mlx+h0R;vOyIVB1Q zvEc(Y#I$vXm7iAG<=Sd1d`Ui0iiM;|V->8&%2#S^Vg_bbtluG=^+m<4i8y*&`L8r~ zt8>3>NurXd9JKQ5P3$&y$jaX}vAOK9m5(vA?D2=KntSR3zt=m{(`MDKB}H3AiRkbn z$SMD@qgDk!;02ar2(aT;<+zpKV`ia@6C!@ns^BLIPE=0Gz&~BeX)E_w*tb*AoMN$3 zgjvn_tGCt|Q~v|+Sw5v>=0 z*jAf@pJ+W^Y(xJDJNXdoezF{q6jE+ij>fg^NZ+;zNR)9bOrm^t z+y-WHNa*7UY&ByiY`l3A^E*#UgfppFIb{o;STTf~CbOsMw9F+rg`pmU^EeYj*)yWW z9#YPt1+|zNqpxJ&PB1FgeY@nH7T*X)!}2)81!@WCAzHm}!>{das-#vR$Lc%y9 z5LX+;XLpK%pv>-UPDXKc%SCZ@%Y{RRLy&Egt5M!>ZsxDeVXl##(T*ZlYcsTAfi64c ziPlY*a9Bi}ag7DL!V>=UTz0>`-A>Nwkbx`heDORsv>6FbiDP7{(Y*$u`C#bka zJZIXKwfxa}>}j^%&TpE}#ydA4S=e(HDjV&gAI@h>7~5p$7Z$Sb4A?AR<((vDi`}r{ z4Eg+T@1 zYS;>3u@aCnuBbsC1QQ+JJ$8sXVw74rF|{c-eC!Ijfj28RT)o+0e5hx{3`*G%nLx(X zww{;-;rfZ~i6*%B8ngRgbkHb!_1@TTSN7|jFg?-<#c@@E9y()=?j9H0kz0S~71y@m zx=eR=3Pp%=5cn979@4R;M6hKTwGQ`XH~JESf^aAPU+Y$k6WKT8Mduv0(}9?Ni0KAh zMcW_MF)mV6<#3d)`Z9V%CS+d&NnM$NQgSo6ooL0}&C?g_qnMoGWO;+;sNLB0#Vtkw zhYerwRLU`(fKhFH2CP=Z*zE23O>7+j-R=!i#xOl2&K)6U`=5E#BkLN)5NbatL(z>T>wkjiQYspRCTR>NE?>Va26!ogjge zcG}mgH-sD1@T@Y%q);1&yISlBktHT@${uke7wNXnaU&uKB36&_D3p`>Xej!cqv4dE zt@~?cJ8l0mL+<2CzrWQlEx8v|L@GP0wc{#rgC485bkJ^4E8>NSrkSFfs; zw$2VnvHmJNkQ%t^Tf4n_;fw`|PsG#&Js|qaZy3_|p?)vV;E^F<(bfqp;UOT&&<#)L z@dF@ieHzJT)f!{7#Y1Nct=qIlFW464j2#lGa8!;)*cpEYhkaf#GTp6pb)9~UC-=%m zOkZ~gAl-FSMOFyBq!ZH!ReWNsfG+r3&;&=3n6z;_cIB!%_+rP zxI@)R9B?Bg($NhY_t%`_S%t-zO?XNO_Hw+)KHp-fWhj8C^%?WSiasY0pX)`JCMaSzwgwOFeIJ(-&g6>GO78w}Op>AnyAsSTP>2 zuVC4OE(o6Zyj>yq4biM7hf6W>Pi~MRx%3p9Lz6=61V{83Z{ssovTxZF0MBd=CCL%I zsb_EqCt_F^r10lgvr)WYHM@i_yqV>hlX0YgFV;J5X88~^?7o?mLT>o+&1~YNT!-*6 zs83x(4XLC#;!g99zNdK3xATOjMo zk0eYESFU|EbLq7j%iui=8Cr3wAN?&hYi$T+xej_!HCI%p1W8N=bbZTw4FRtM7Q11ws}2c& zfL`HJ7REw=xT@7J$tK?M2fximPD_uDWG1RA1^?G6P$L3b3^$y;w@V`vrs;ccwaEXGQ3f+aO@ZC#(wA zvQ&#KAgl=1l+otm>X0`SjJFo{4$o%k*FW9Rve0Xmwm=cD^N(Ehd zeHR=P-5!IOKYS-Ec3z_0ULMZMPu_`&4&uq{*c7u0sj6iY95lU^B>A=*0RlMA!h zYr?Mu0w{Wo{JP&@gWs>}mX3p!bnQMl1|m$p+`0o|GZuc>BmRfSODGUScQ~wMz%{e5 zU5Rc_B1=q$LNTf$8(XHfO5a=~2zl9MY#^^)&xR#*$=8V zS?iF_g!y0YVh+CcJM4D0-XUGc^1Qp)cL!_`fX+nB(~S<@Y$f!;U5wGpO*)1=Wpl5g zT*WY!kxAJC2>FL?btw2@*r7aS8$xWmL%~m`Xvz);%w7hEuGzr;VM^~2$=Q1xdmZ~7 z2OWnTM;u2T#~jBU${q(VxR0grjvy;!dyUBRL3TOYZ$wP@Vb?tCZU$!5_0(3{SXotSq{SED&xgXGPbbcIO=Y&c|8KqVsY4-nqW}-Z^AIUta*6 z&Or#N&8=Fc@XTqo&R(u5w*svK+T$(-!NC`RiQl!I4d<6`XQN;(H49;wNwsf>tQYs# zx3k|PhQ|oL{wHh}%-DYS6DXXL_~$=imlY*B<9C)bVyG3Py(z+XnE1oe;0_*7;c&MY z`|*;WvUybrxFB8CB37i94(Sp`$#TY4c%&0Gt~V+?QlK(wjI%x}EK*pmQ^|$u2;U|c z6=sG5we#BQ4E{MF_T7l6AS$lwbu~LI&4~)`O3j4ZtC9zgWS2LgF0kR(7_p!wunS0PQS|Bg&*$ zqD<;Tlu0l$Wtn{Z&#)Ai^Om21RjK5&ce0Fu@uK;1{_~%)vfRqJI>4=HZ+p)wlz=)^ z@xf1G5<}lONvPHec@7s3ITu~)K+sYbS`mL zI~6bgVkeYSK9Oc!C{mjB8MUB?jVo-AYjdY)b7U@d#x&ZPjGcPccY4^B!n5m@KWBp- z;&>!Z@c}(yCe*~<9c<*p)$!Hs+lOm_AGH+^w$`cOhZ+{!Y|486^3U0I;BklTV(DzJ zg_rGO^9S`cOxnPIxC^XD7JqLS8)d*%@|nAtMLhw-tL5)dTJFZUT5RfDi%ohhHu257 zSsB~x;PbZkP~EN< zuswp{8*GP@zmW)Dd!xa4%RCAH(%G{{3XBn%5Qw0g+KbLY07#>aDX$D zKlVHupgZwq8y&$VPB*VXN=a{5-a8!BraS&$DnAL^r*OFT-WR&!0Qs;EU4(9*$ zCUy!6IeyKWR9ND!`VE^2m)!iN-?O`67%~5C9K=`i4R2#)ZnW@yZ$ndU3w`i5D^|q_ z9`Y`mENn}zf0vD5J1n8@ciGjNFcN*`eGJ4b{*U+BYRU?Ad;paxj@VEA2_`5#mQcrs z?EA!E7@ByREoO%-p>Lc<0_BHHe_?mSWWmCNXIPhb4)~Zo$WB^9KmC}!MU)h}^%H!! zzO8D8FcV)okNOj@_!nCQBd7=e#X3<5 zp7a@8t7ck1;+_L+Lg?3@37C@5+|QW>W=f$YUw|*A=Fr`wK5EAFE3&Ftm@)IMYN>D& zb&pk@MwOvAttw2B*7JYZ)DBGY<#u&A43qA$t259sZ`+Z$fzNTMw_>s$bpW)QpL3`; zp@SAU)nul6t+$KPv-sTu)cV9tD!q~8){RxFV72_zKo!^EebxaAZ%IufyT0{HO)vd%fT0^y&s+rN2P{T0wP76%$LZ6IMZNlm< z^zX}5lgf5jL##l3(FFUr&?{rrKj7OF*3jc6Y71$5tb47YAy=qBU?T0AQZ+}__FE5H zLw_n$lS$oU-M}wQQqPH(f1j*AMlh2LJv2q#$JjC0%}rCMvJ+PRgK6q7f$5Z$H&>{4 zTlQF8nxc7ldxe_D(<;^Z3^s2qm1>E0)Cv=~voEl$&?}YriZnZmvaePbF}QZ+{wnoz zS{rJ=M$NThQ4BpaUrmKKLMz|BK>Z=edfh_x6X7+rYLPk~Ebg}#sn=MyY4AI(VCj5o zkvbM#Y`soh4y!xfd7b)WoNO}}tM_2lePXe?0mi2jmZ+H1T4==*cr%4v8{dDudWLdC zKfOWqVifbFY84I-`RZzQBFxtIR;yPa@7Zd#9Ntqy#W$&+$xLHv)h=WX?Wk1`5ynYi zsd`R5X)Wi=>(r~wr8czu0sdSyT7I-ny@l=3`0RRhKgLReR~?11QtVX^z#`tWvXugEeXBTp~88Xhd*{R8q>*VeN+7=tiwXT{H8jD zU=bGj@D}wnxoz!p%Kp|``Z{4Ae5C%!-?@$BmBoN-I z?i7AD-RsnQu;qkyu2XMj?6eIhU3HEi|F`Z^8!%${hj*#p7LGWV->tqS_N4L+>L_;3 z#(f*q-_m+seh)~Iz}a`z*U(w7e^>o8Zel!huewF7DT}|Sb`!ow5jq}J|Dq-q*)x@l zg&q3E3)%{QZd|<zbRA3UU{*iM`1ATnVW-S?3C1U`bnzp+L22$y0amwE`>aZ9h;yz!+D6L|{xYiK+ZN_7^MHwMy!IoRH86S zHhMaonjNOPPN+jD!D_uxmY_olb$0}2ad`N}BP$fzLjy6U0=#1!!6X41ksi%rjElf3 zJ>8HL$DpLIW097sW3rD-sQqVVE2Qbg_w!GG9F| zF?RHe5tI??v%sS|VmLxG(Dj4afSnTV&H$8CLgOWR3-%yZ8l+H(nNHK3=)!Arw{?vU z_*c{gw0pyT=c?*!Bl=8`44;4i)%E+Sg9@@E3Rakj?yyoVfJC8E^SGsIR+o`RG7D91*gcMZ-`YU%cmzR{^wuO$6ovij zxC8Q|iEjN>fj|O+3!4*TNEk@&mDMgpX>q#gg2l)XC1CGdkIGzQA^@>!?SdJ|igMyK z?FNxvl=&uMo_)EJT^1c4x4;uF#Hg@d^cB$#5$Z@F6e~hOEsBoJ>R1CCBl8oo{IN^J z6JKw0B>Qw^k11J96eHt(GUMpDQaceVm?KIw98aLK`X%Ya#3^FEe@JF3Txz_QL~4)@ zyCjWz`!q3fJs@*+2c!!Wy@Ez2(TVZ?G>qCcx{+*r*tyxz)EXT>Mb8uUs$pcgMP`Y* z$%2qy*YFzoy36#8kxTbRzFL_NclLW{5WU{piGz`+O?S=F$D4+5_P#(%;n^i!cd^KuH$^QO^Y3 z2A=z3@c4v}gMJ$kS09O~H{I^-gQp)F(rNppN-~zKRbBk-qiPB}YvMw9CdTpCp zuAMW3$4YukeN&;_1v7ZOr=L(Sr{D37m#KqIQnSXtctX9BzYp|A{Q4bgKJDb| zcBmOf%HuoK@AExBQW)0AHrUAmx4;Umb_nT2DqpZu6}L8S-l6Szjl<^14I^-6V(Vm7N)qo1bp#vV1_w#KnR&}1R;TX(AId~c6B(Vk$zoj`Dqj{MN)Jt`B|k8!jw zqfMd7yHxm|$M?uKv*a74I179Owk_-&USn4cYz{rYTV2CU+Z@O6{Tv)B-P{{e|K7dB zQJ`oh^#a>u>TzUGmxfT##a!?8x6YSewA$mieTqz-4~7Pg$^!6qxYv<5UZyQrWu)wP zBo@k)tG)PujxTV~QK&=AZ1v+Cfw&WJ$WfRR#$M+=;%qP12JM_fyPLN^ z1J-@&Ghp%0J9z6e>PZ|3=RT{xs-1RRaPVRK)b9cO=lj%&T7vVegP+}}`s}A1@T@gnGT4YmzzQZ+_+;c@%FqKWQ zCOrW}@b&tRMks5;yMR#K>Ox?sJiGg{q0#aRlw$XY5$>=VOW+}QzPmPzrgnm4WWrIm zN59U}*R7J%J`TM%A3F zI-uz5aB45|j9;lE_=O`l zfp6fhU#Z=LveZJ|F(qaMETA*hjZWTtT&)cK?N{pWSZaz|h7W(&$nyq#{oqpaCg)~n z=)_U=Z|t(u&;)y161O;&3Vk$+uawrqO{uRbV0Ct`>M#JdIz#_>OHE>_rG2pN5ZE$* ztIlGq#~DJw|JL%(I`W{v47(aXWV%%m@j9pHfRJZFyQ+Y2W|Mz5A69)aQL) zf04a2bLPyqorB1Gne?< z^?;_FBkJn%w72WQCcm#eyumUwG+s%+&bJn67Dnx6+AWBfIkR@7-WjZ1(%l*KcIdN} zLd99Lex0WDFlsa5TGp@Y16HKCZd||A<5{XHTNwpS$XnM3Jf6NdCn)yJ2ET7}kEU!7 zf5G7%K2d3??`{uzs{;W&SfjV=>pVfPuTxWYhhKD*QZet`!*aB}j2_^nIvW-qmzqJ7 z_^!LuY*kbCg%_tzpvmEp|DB_qXY^3G{sq^NJ{6q8AG%u|0q~3AGpSQDN|fTIJ?lC= zbNt?xb-Jcp3g0{4Y!_iPKCExQsxiB#)*wDpXt|$crj_*L8+( zbLY)Y2XXcDL~aq^*wdveigug$c6%g{-r^4W+`%^8z0uR|ZSe$s{>jB6eTm-T+bB@X z=!=51E}4wXv0Uy}zpukBN}HU!wA~YE(_6xSauD_`seR9#EaY{ja*X6ADX$l_p|C+KeWbawiJ?zOtx*9FvWUw6=r zXwgp{z77nA<&!G}s=yL`lgHn(R1a!YX3)+rV*)NJnd52qbT;dYS}Pl8D=FFznZfPt zY;BjE>^30XT^?_XyVd7+>wZu8xrS>UHtmr{6y(<@g{_N6JKRPYdW$Xm;-X>Uhw5E} z?b-__gzTSi`SqiRPhM5;?OY-|3^bVI>ufRUuZ6eH8&>Mjo)cL*yq!QSaskM_7Eo?a zhYthW-R23Py?SSq;NdfSr-w5AqLFdtC8x77010t{sI9RLh}wMZEla`do?y3Mj}li= z;v@eeQR9ue-*piT-?fIYn?=;>V79@4>z z-VSfjyHO7qb#Vp*fh!eFB@H#Loq@U6UR&QVwREZ8+%>g)`g#mvrJs0zsX|IsB7D%} zUymxZEyc*_42G7rp?7PpU$AuQv^XkNskpHjBW#}E7YH^0y`m+>OsgnUEXsm7OgyVq zSrLz3;td4-dNAmlT3)WCC^hkv+7?8W&QL-&r7|(LtgJ$@D^=I(ot+-Pujcw|=d=f= zRg@|Y#dSj<7+5}4NmZ1KQR?+2p34xv19gb4%#hdD`hCH+(&>s4Qc8@NdXK-|+X-SR zm+(J3Ps(NSOH9F^qS?+Cu_+zJKyr2XTDsfy1mT!lf-$$WdoB7?hy`*1tjXI_ zOqqzUYf-2`a9dLlQqq)|Awy(RZVTo!Z+pPbXnqt2#HX**7+Z?gRqgJCBm%-X9|xi( zi7Xfxm`q}Y+de_zC_5GMnzS7fdHAk}MuuvZN2PRZP?F7ys+Tm*oLSx6EJl)OiOU$< zy@deN+T#LS3^?86?}T_Upo?WaTe~}3FxLC6U?`b926a^Jq3TYzz8Tyk#fWgi@d;p*aiW@r599W*pE{T7V3 zGE_zqR1S7kmJRJd%lEsvC zav2pVrs6s6zUK7{yF1qEetxi)WrawPTMpP9Ml%RC5Gqb(Y#^?9 z0OS}%4N0QrnoUYCh_#87-X(r&qLQluvb%BV(gwkUi#nle<}rFHDK4acJT+&dx`~(? zH~BQBh|xz0m=G65)Vt#cB0VUtRD}|8V5UbMXE0jTJJ!UFDYG&mX`Zj!uPL(_t>_gQ z1s7AOTpGkFP|YZf;*lXimuSsn#Qy{gHCxWcapaOHi?K|I6p*xKEAbtov;C!wv+IQuw>QX&Ovldn^cPX8e}{})PWE#=oFMz_zwYzmnw^!DzGzLEoEs%+8y z-i=b5ZtC(tXJPc5As;IHX6{GG%od~;G#oF5*vAl2nPgJzp=W5wgi@xtjIyxuqjE;J z^o3{%wX$}CzbRe1B}2ieMexw11>w{3iM#+ z@2F+8*^nnoWmrrJNz+=Cu_Rv&yarNgKd$+v0&Wzeh5Bn3X}PAxt|@hlZZiV|)(k9K z_i@FRB_YwG#fH3cbQ)TN;-cJUufMt58?48U(R@t({u)ov(;qPkJG(oYyq#U$!9X!N zyQi07@QSErOyxnp#|vdN8efe4gpJT-o7U?+z43+3#~kr>-xWs6GSPsL z*cIp_zxt6Bn4Zi6d$qu5K;n>D$>^&lw`0#~BX-`Tdf!h)#e#U{$I)>?Ke+m>161ph zuI{z%-ezN9T(RTLp2Pyo?P&^NS3(c0X7padEEnU&z7_9x?kwB-Gn+Vu5J)JDEcR>lCs*EDo55cZ7FsY6b~bpnEkPRhHoe+^-R$Xn2^_m=}3U_ zeq7(UqZR7EL!6{}>OW4BX=??@bypxawhWp-4vo?w+T&%)24lG~U&@s}iyX4$)?lgW z_w_(%uUew7(>t+C7}Rg@2IHGx8q@=+Bq~a`fo)K1@gmmeF1Z#A<(m7E(CD=%p zyIjR$V_s}RM|E98ZwvZ*#qm*()39Nrt*Uloc@banV=vAV4Ab_4qAf|a%@q4&fn2jf zTC~mNQe1q)E|wjtL6e$d+f7Za$&{(V5yil%jo2}Qh-n)bq9K5z3eP%S;BCUh-?X+T zm_+(%jeQ`*_CZ4L;8e(2W|H67m<+%3!mxrEy|-PN-u4*1#b!wHw%*7FCQ!O0P(!h) zy!0kbflxqX!xAb>AJENF z%{U*z?rh64s9!kY37_=fWFgBgj*G&nPdW?DzHB&CJ2|Zm+>h&8y#Nxd}?^^Ge_Az zc5f@o50C%uB-$Td_T3)*`|5Yc3_iffy};Kjm%@s2AWVm@Nk7P_;JWV4W^=#nV7TE> z`Avtw71jRc%A2AoSG!AB3w_eIVydQ`?3+3jsSK&pH08~{snd|EBDG9YPKDn+lt-t- z|Hi*(!nx1p(b@3KXYzk_rxonDZ2u)P6L{<(n<#713&rYQy;e*ePqNCxH&sNEQ zv%`gvapspExo606%=UA9Ej?n7JzZ?3oCv2p=dM16mM+wTn|%KDNUdmI($b1Fzimd=6a*Kl=P$c7gGy z1t+z?u#_%_UwmN&Qge=6piAM@?>|bHpZV_hudyKNZ$COsm&32WbhEG{n0l1gt7d6x*zsRCu?!U_tH z3jT0jR92?siHI^KUk(4~Ct2YMKbgnIs$u_6#)=;r>%?0N$XBlSZ*9?||AX4{9f=;jW*K$nFP7 zLDJrz7O+yIYQO$zW?s2UjSX1cdIQ*IYHpj01NJ~AxB`l4d91qOnXgP^Gt{u}m8;n- zHT=XY53_1D+;F0@tXkEabA6k{Mp3N_#TNf4@*h^GD)<9M>eY0m9$&H-ZOUTxnHNt? zQ`s^#eDSsW*h)2g_sNNDwaQB#pwZ!XPL@Z%`Hof^60UpwD$>JSU$4f$i~pIEk}ft0 zqtKS0-zlJ*j*u(-*v|(IdfH{~CMX#y9SARedv$os8zZ%4Djg0V{Kcy9-Z%0@fiJ$X zS@Q@05qIC4BQ>u|hh!l87rAVM0Ju5)m0ygY-Qg#Hu>~XN$zL>u@BF1(I}t^c`j(r{ z8PRWzr1SF2e#)&~i~{7oZ42)@HBq~)g2zNLxo?+-fA`Ls@PW5SGP@G4{rg-%K&&z~;T>MdxDXj#oWZdxW` zUV3K~TWJYD^^2RsbAL06R?EmA{>Dum@@vk!qga+zCLeuwls3s~Hn!@FTPu$SUOY2G zTWzJivYe}bo2PYHh0H?DpZje-+hAm$@w-B;+e)Wo{L$Zy*S1(qD$ajzs55GSv)_u* zg`6YAfq03KEaNCU|0U)cD4mVpJm!rZ@??6O3*;QjB6p87un)pb1LU z)@DPBQHu#!`flz?02$EyrYHQ3_nX31XDs29XNMbRIK$Nx^s}IL>-(ePMmSpm`B~El zXIm8FzW*LYhTV-7mOd#EHzMEk-;c@cZGN*e1%h8B{^xy5_|@O13rieN_;{4*uI=;Gk;kq@rv6;u4jdA(vD{^PPN8;AkUE%USiE$>r?*7wn%&#y0xsi07iqUYZrv+9PGOs-sTC{$v?w8QdO#d*O z8Tf53Y!r1P{t7un+4bj~;Xj{C51;+Z7mbXu+C1=AQB_fg^uMh((i~AuN!P=>{G@xnj@TL`fRJ+tWIO@d@1|BwD>q4_o8@AJ*CJOAEHE|9qFW z>@J}S+Pd3I<7nINd#D!k*Y01^G}?}YOg@TeJniJS9;3XGyHqNvZg2N((p#3ItbouX zc1lrRT&(QkpCjs~-TWU!3$#5dy&Qh^ayG{#I+>1%M)ira{=0^MQKcW!9)6uhOX)%W zb&ZDM=UELWt9$u}8hPk2Ut*yZ2>shiMb>?)wv_hsNhvhNeF%*#Twd&6T7+e|(a3}- zWgjoHQa#(RhBp)sA6yW#*ul)B9N>GcDCqz{Y$f;DgDSai>aMujJ-uwTq8t=6QWYjE zn{r6DZJ)YdRSp~FA4w?xXy5V^qLd^2wiH^Fe^lZ)B5)j2ZMlIi?Em`p^yNM;x=c}y zt9oe@iVh||$WA%@P8+qEJS8Gtp%eU9c68K9p6Q^KbcA<05IVxY?V#@?vNe@f zl{s z8%)c9;9rAjEuG~zr&ABGzm-mttgBURKE26ddRRoKczFiRLMV_y1?-e+oUVzpB09}~ zok3fG>Bb>67AS7V4?CxZS6wxnA00yb#q|8=p;UrG9vn*3bD=O6*X!b(eXg)5QApU> zb@>7wF{hh=?o6ryyq-zV;b&wPRpF;8i(1)vl~?^5WPB$J)sbVA^8!lewb|fmBV0L* z>~w+OolSlt#^!?M(>j>Zi6PD7$t8T_F#0ZtGSNkckmHPt?xKslD~DcBjjFXwyMtfI zr7XS{^8sDrcMm5aM;8BcIRDFV`X6=)b$*9Na7!+gIAfU<9g9+DYz!uf1D{ zIg7?SN6|!vU!nByXGYQRkR9qYxi5Ax2E7v0`v%g9swX0MgZ6%0Jg#ySpr~HwoO266A)N33W)6jVyC9yPomf*0Coug zhXJr#0PN8e{7HZZ1;B#>0ETx0!(IWf4+h94zHpr#zW$%Hs0APxzL zGy~$WfH*NE6#z#Cz#s$Qm;gAgDfp8BCj`I=0WjDAI4MR(-H7N=qg-Qb2ci+m zn|#_B8awoqKy+GD@CS}k&S=URzJ3e^=xpRSV=(G%=QNVX@8Mk^Wb&uR(yt+6c8r5? zKElt8qb2OT7AYT3KPI{mxm-vydu3QUf#yP1oSBQU|D6dmH2QsJ0%bx>{Lci4qf0z* zB8K#3UNsRSkt~sQ6RD6fi-qr+MBjCs6E)OT<-FkAk>Nw%8Em^CqSBR%990~}gOedO zFB#u2iSNtuyUab;*V*b_x2Q|3xz20k#NoWJ3*>Pwg{>~|$;G7NGVG{@=>u8#yJKi1 zZ=FIVvizuR1QsIv^c0%P(kwiqgdSDXEKa`W2n6iUODM~h4tomET73)uu!NpRK$sI` zSmzix3K*-&erKTKGwox%hvT(jb0MIo%HEjOkR5 zpQh=6GiHcg)1ikP;eVJ;3-L4KD!PsxVd1A&jlfi~_bOV9$iH5NY2XO2te^(`?5v=B zux8_WGw2J5&AFP~_(?!~?M%8cp75iYa^^L`W?n5Pdl8D2CMWJcTulq&nO0QN zP4Up1mGl`l$r66Zlf&1~qI{DM`({C_GurZ(Sv1G|TsWI-5@0yrFq=A9DVSn5eTkJ@ z_$}AaXH6(pMX#ElA5>AR`MJKD9OmcU)g~Gjf4UkJGRo--fVnnu^Bh`EY=(tDJC`Pi z-`~!K`Y_AFZ8el9e#h6)IPtrvhQ_mM3*THrH?vv`f2#%~1;4Bo>G+*c3zEtO#VE7B z5cIV)kJVWsW%KBZs)+Sm2X*Qfbu?R)gupmnc^!=r=n<$B=w)PJ3L=412J)^)piTyI z_)XV?EcF)tlj~_ETWsNr>!~re7xCZ%`c9w7%lD}{h)J202-@A!MF^e@~Sw+W4wC0u7P#(K^+Raotdy56; z<0wR-OtI_U9uGS=>1*SmbidaZj0ZFI4j5=};kVsPIWsR>sLI@UlS_%IC1Qs;)7ydb zqIj0v;3i=R?vKSN-H`f_y6zr}asGS35`8Ip%dFSY=>34q^~Uk%6l)yCYzefeNTD z&~fZCFauLPQXERAC^J-o*&e}EBZxZeL&#}_P>KBrr5PdA;s8Q}j1a1E5TU_F2o*Vm zP`VL9P3o}_$}mEx%3-7pF+!-z5rl>sp&3xEj`BroXhi53VzXuJRFr!hpUn9@L z&61yjm}<8C6qHnl$xlH>)g?a#4b>d^DF~c5i4IJ&^3)bgPZ?G| zp@qhzWuPRrTDBp}%1@TEVSGai<**zp-_b&g)1zw*O5B*{gLRsgl4GUYaMBh&dNPl< z>JYDaR{o$)BV&`wZ+b&bZ-p{uZf=Y1?@f*z6pt7MS>=Ln>^hX4Z{=0%sF;nl^3HX% zm=#(1(RDONJEl@KHeRcFQ5$6fN}M+E8`@}&fc#n;g#=`-m#Ww#E5F%GZLzZc;DzqA zi#yj-H7m99MeC_BX{VjPa0@L;2KcHGEah44^tj0M!*b`(*oin4S>UVRVSw2YAavSMdkdb zo#aq!1(c75iCBQlXSF6yM2=u}AcT*mh+kRIAsJ9;EEaTK zW>uD%Ko`5HhOLa^+yITvC_a{ht+w*De!9#&R_+N1%DV6d+0bR9adhtk&a>io&RGa{RdOoKQ=*A?BPo` z(>8mL$gqbnZM?e~ljK(J>VeX^mCxwGw7!k6?!nH?F8-??>cqy{b+^*>{ek2}{&p*k zBqR;J4SL{K{*~LX6}U~Hbn(}3!>-PD{*T)zZ^TZF7;}8ZM+^qxc56D{x`pz1{T3QC zIKvv7-StFu4v*YvqKYQic@A$LWy^Z<>z zkJ=~~+g8HI^njHLaljxxg)tW`5T|hBEEQ%J0o{+iI6ZJirD9WQz`+_nSx!Sk$@tc+ zo?K!04@FDRsM2&OipKOVNxN++EOc&K(;#i%XU zUL6_jrChU%WM|rnh4LzVXrYcmW3f_KLc|iBDZp$bp--V^NK?NSs3lffWqkJq1FMD( z4p4r}fCY#eDH_4J6#K<3fkRe$I>E|tiHrqf6}w^R0^2ruqK4yI(=-i-w1=$D1#1m= zf+oIT7mW)YHb=^lgpqQ1fQn(4K$I(MVKY|vNiN;wGJI%ZG}BXS++1#_2a_W_1*8co56Natfb`cczXxJ#hzjjz` z;M6g0&>nTOY?u4IYXBmcSbA&7Y=T4K1?TMR!D%|X^>OutgQUoD+)9Qkpa>YHkoF~6 z%4n2g;zeOqu@PhVN(L}c@8F}x(y)bQ1b|xndY8{1ggLD#TVmF4nV-03;s0Ep8_Jc( zNzHmu3N*zRt@eax~eEtf+`WS~`$o>pv3m{)$-YLw;Pgtd0 zb9B=|M4hx2B3-PXMd(dyF+vcMzE%-DWgWon5Pp{ADz3RcbZy)n?z9yae}inbIx0N0;G z6?BoZSXqYKpd}^h1_)$J47*aJ6wom3xTm)>uE z`tdYOOQCxVlZd&7_evD~^~q+@{dyASq(nV`WWPqU#=BWM5S}m=BIyOOenKZGCym(b z-fSb%-ZauO68J|%pE9CDiHs!TPg}3#sD~>HgnMZ}jN^>g$mHK%hTy&H29{P_6sn5J zyQTnaM?3U0R`jZOofp@I#5zJ)m3F{I+qquvIcuesggM%D;4|0>8em~_8=QV{{M({e zQ}S-nG+}X=?5K4vWTm$fuqAvZBknUAL{YJ-2QFCY!-TvEpHTc>2FYlaCaa)ZU6c5dy? zLt{*)CyXRW;y!#I12^P$f1+7>JHZFuMW2fO*}VWqVCcQD|%~p_}+RV6p*)!}uOh;lQFg@8hbu zpjV-yOtYe8G5r+dF;fWl*8CJ|Pavc@JIV@3K2!4JW8XLS_re&z%S#7{ z!R^T);J*fAtQsB+;i|<|Q-AD)1(vl>uF_Ug6Rwg5Y#O=9vg)=2&1yfVuA z6fB-%7(!9Jgfk!L6WBrg-ymIg0T1@E+%n??D zJ+=<)f{5d92ztNRtt+ifq4}a{y=93A*TeM-XUMR#lgU#(1Eed8#2Uhlil!DTMHe=t z&3tt!v`XyP^u>*yGRmGd0B%xR=IQM%@Hts7ZXPg4kE zy0R`z8DEaDrEwaziVq>%|1}mAQ zl?hAa7>t#Z%n_kPcKcYCh4p8f}0rhq)1WG1tfi zeR92$1&=9rO5{8j6FgJ<1u|j4mAWDS*CopTfiyL5NE&jQ@|7iTH0 zzAe2R@%f+j(b{<(DZRY+&HEFsjB8texY&jiUdOTXYZ$2A!*PRHcM8vV0463;Lysq0 zVB30;Q=SAG&fnbwb4%%9&s*+;Rh`J16#Kz_u%I(M@UPjBf+PMr_rOFs4wkbMRl$KF z*lcr;xVKQ4s0o9;U0l7Nro`MEELvOm!jFgYhWlxlS;6!7!=(9v`=!a9@RvZ?lbH1R zuf;4%fAcl6m`VLK>&}VYDTzirs8Vki<(<&AFs6D^jGF?&2ll5#QXizPRM;L60tR0E zO@>db50@}RZw$c3O6=RXJ>Y5n+9DcO))y2^ofn6xFxwFYNz-nVl^+rZi8|Hsr}xqVe(PS! z&FhL)GIljVobvqOURXGPSJq~FKk2Ahd$eZ#BrECK)3TQQ=7-5KF-AYpOJ-&J%aws% z0@X)h;xg}yKn7_*kZ@f=lW|=ENgv!{K6mg@0n?L^u{RoCMp?$EK+RtCz2bSK(7k>+e zJNx<&=WLm*n^lr4QO!%2HGx$=7SR8-UHOY>Q%nv z0L`}V725N@6lEXZbAWcB#^au(4jACc4bx*!!WZIT*5T#xszgZ^n0Y=v3sHXDG`Gzco}i zoB!r86=a`DF-(ijC2W$NN!fMY#Y?{j1243E(f4T5;Ik=|YpB*}%UPrk;}3t2M%&K` zikwM-eW;*8_5~B$#RO~@B(~z`X;fytnsA>DZa4C_0Dsf-RA|2_@LWhyE*W?(n|SP) z=f(O(TorX$minjXX;3EaPckhra4(L;1K)`B7hoNTUuh~h_XTn@i;e3qP`>#6(hD@r zVTbz6E~hAIHffNYonbTDo|jNchE23hmXg({lq|Cp{GyaKv|5zK}bd;v5MK&A1=N>kK|M)2CI!V?k zOLj_Osadh|go>2{AuOfUVx?T5MsSAFj2g{o#jFJ2SpozOT(-nns1}s!b(v)?;K1s& zw%w&PRQSQ#_^BVl(6G+N|MEjvG%mLB;Xk5@qn5#S6WSMqkjLM%e9629zm8KvSPKai zxGo`g=trHDN4PK|M^EWUmD~i#aL4*ixcv%eTlAjZdEB= zINw6gPe^*>C8`@3^-3GBI|fG~!;Lqyj~lPD+U)dMWRS}O*VZU&d2A85C_h6?xAAZN z7#;>*xZ1o-&8)-5AAXs}W#q$r&olvA2v$TiEZU9E;zN$p5VpY<8F!pMV$N>SO-{wN zS?RGw;P$$L*cJ(08tv3=3H`KHLZ_bu6}O2lLwLK0vRN!H*bhGWGuT$DKcm8&lL;dS z+`p)Eoev98SiAF@pOF_55TJ7*2>$Xjnuwo~uTpK+ZW~oJ!a%O4(i|+P`ECQ}u2<pQKR`W(!Z!82+=@Xl~wVl?vf-W%|_O84PoZ!a^{R2tJNI zXb_i=`y*wii~6U(pzIS3+6yagqsX%-;f-)W6zSr#U#B_Q2W3M~s?RBhM05{cHDr{pzjG$ zhYP9#kK$j`1bQ=a&95<0*iVV*(>CQa|I<4V!uPxbSF1DP`!;sg#y8~9=*V5aA-6{7 z_*1{b%ypjI-=ijW-Y6;Sv^nBVVakoN&;|a~d(@D2(I$>FguAFeaG5*L(o_*8IHLHH zO}S(?NZifqxGXAxM6ye1RA{jq^|#yOSS?uVYR>nH(-k|u7=meb{^42F1x~Pw->2zt zc%w$XHy4g4-*}%~EJG%bkG%Un4bxbbonQI`ZDKig?*D*pU}Nq4ryo#}2n&yl>^!r` z{DdO&?7Z@iRPBPti@VnE5ypF)ajUQ>KF_WIgUFecZq)Tc0tJff{Ov!2`z~?od0N9J z*?HS}x;hs_CuRUTy$mc^D%xZNmz3N256;u=&Ka_i>2Q{qW#`xbi9XM&?fkVr!M3~B z&d2SX6H9XS(nT~Yz~}PZy1EKFWGr|9R|_PL2Q!gK-r8m_h7X75}!AijYnpQ?@NQ( zos1m(Oe&C1NoSKqbDGlG3(VpWj&;NNRT(Us*&Tclif3sKzCMH1im=S_N(Kr|;~OTh zZ2mJRo3POCFoseF?mFn*;0#AH--`y@9cXcua9kGuupEbiKha_&ybj?3`L(nTnSFy}t3%n~FdTyZ zSjftUY_MR1zcA)R80dEJX+><+&&DMN=BFjtL>kuRFu#dBs-TBWImHiGup+Fy zepkWr@nf06Mvpk{p!v0R4W;GfGhm9Yd%J>S-yeJIP)z2`U^kA6SHrBGgWN*lSm0YH z#36rv1{-nR468W*F|NKji_U`oth^Mb1g@%`0bw!?b?tn-7s-VKIjAQW98@fj8Sub& zmb+)NC!syQI+NY&IOibed|c?Qoa4T$*~rOBQ_guo4HSGq{GN3v7sW4Vd`bKsbKnk; z=dWhZF)Z!7D_Mop0#h>K)Kj9^QzM5fF$J)+RDNj_jpn~E#a)?mu3@X384{@Y3@KTu z{LE&|I4@trX0qa()MN)0;{wo17-bmGT`dsLPx+-$y<0q`#mhdRoKVyPzqjXz@!V8i zD*eqggow#p;a(v23vpZ4K%NINqj9i{e3VUGP7b53u3knJjWctE!vcGNlWts9sN|)_CdgsS&J!kssJlac zYTwBtKQ(#sFf(BG7z;|ve^^nffdbycN$sMKgr_@-9;`P&VRuHb9B3NeMPt-u3`w zv3yK>`dWbDwKV~USA)cRa#8TUZ~h7UWl?Sb-UAQd+sM`~-af;vr5>@->kf%W;(~Z% z$zyB*O12pa-T%O?@<#%`e~v!z=X#hI_+i3fXdn;bUun%e}#_$xhf zH+gex>{R2CxKL*>T9|o9FRrj%O);40OLAtxYjwA{9m|iJds{`l{iwP4zq2Q)Hj~{e zechriZeM46kK5DIf;aa3`ik1k&AQ$a5QH(jjY8;%ZX6J5MCOqS2B0~%&9aN#c#*EV zy+u-6mk7{!*eJUNoOlgOK6W=5W<7FZX*QmoGm*@}wgn#QD@BteJcePkO#*EQc+seJ z=nt&g&>~d1!`tcY= zK`^<&jIM4+F)cl{;#sc%?*4hD!5@-n+#Vyvc=0PBUk+R+IW5M;F$Sqv=rhsba1?EG zXs;{{!bZl84H{f3F5Z!e!b*y@3Mjl#C?EU_xDA0hxy{58s*w*Zn)l9Ec{EN^e1FNMpCPr# z3|rbzX8+g5`=h>Kd&LuCMvZ${^@`poLV8BMR)l8?*hISA$V_p!5QntC5HFh*^QZCf z(vbe2Rmxr?q~!m%XU&v4W4;T&wl6bOpW2^uUS@4<%9}t3+XPC>a%vzP49p0M~Br3PDJUDXU#R9cZG001>z_ zR`EEV@ycFI8p;?t5Fu>kuKx1&!Re zFdFf0!_Gk{9sw~&;|<4PacxIe5GH_v0+81wx(G%oBGb@7+{0dAB%ncSV(7)R4@nnm zKJHPNP(G0luz&6N;6jrw28!^)?X!QB&G5LePVh>P;AVfEt6TQ0wYEM@@(Ji%~K#iG< zVQmU_2-YaOx}$=9m5Ch03C#2PW6g$meKZy@rGLP{EClmlQKqTTfs_HhxRQ+yEl%yn zL?U5KzSv+)6H9cw--@YM2ua*7s%Vdz(+7-CWCG?Kk%CEDJkBgsHxVI?K!oOLaEFl_ z_lIh?8>|tMyb;SPl|Bp!@zieA;7H_=XpD8BcAsGLXb#xrnSmB}ix*z2Vt#YC2&Y8! zU7Wxmlu!y(txNd$v{zaM`<1^9;O11VkDc$@nm=O z!78^Hjk1BFzF#sCFV{ongI37byZlt`tI_h4(e$c=H2yS-j+&xDWs;tH7>~l28mpc- zZ=fPkQi4B1(cx)0PKfH`afWEQ35??I>K4xziFQOA4Ue#Ru0dL~6WntaEKPup&S^qm zNsfUOh~lsJhGHJYQV*5PGdarn$<}b`aTZ8QF!D6kd)gtAp=BkSb3!CMglkpJMM9i# zSSE?NLacMJ0x_&&Ckr7iI7n}q(<2?g#g54k?L{LF^%DxSX_hP{tKcb+cx{iw7QL2u zvhi?mqK&gMH2oeqYNIdI!qCL9fKC_72C-z^D6HTnD{t_R>X|zfO-@R^XDu{LQEx-W zx~1v}O;hIg8frp*nUsJ+R7g|N%yjt_c#QL61xw6APGBfPSB}@{Q-ZX8XCO? zfg!yug)*sRXMQ!gYG$fi>Y9>PDMoj_)=zhdw}idHz#Y*{VjXPst~tIwH;s$Z|t{Q$JCmCL0NF4>200_&3a>bJB?>ed7N@eIeabrc5Dn5Aff- zC5x6ex@(s#S+r#703dDyLto7O#Pn0Xgc2x>j&~a+3ejRta^g|7+f9i%Pf)-VK}(Zn ztKr&?s8lsDm;(gw)g(-6q3Fz$h^Y6(Ga^3mB%_MUPdP(ID`gxvv`TCAq|%gJEn1!% zD|wtrgaj01P!iYz$?>vAvChT)y06LTKJ?JVa!Kxlc(5ZApFWI>H)@u3uJ6QiW$`*G zBenTvq}vObhFXY9EQskM38162hFG*&V*!iXaH1yZ@_=a*6|+rum$<|P%c6XAU#xB*P!!0RXQE)MVv}4iYK_(w#FApV zl^(T5jsu5+-F{seqpeEjl^D0RCGuIUGmMc|paloWg^f7yXjH3+mnI4`HLEe5QNb7Rj<&f5~W#z1OB8Q{g*0t0ChU{sri zvIhD$3mtD#yuxw4&Zt9$*~zAqQ6_6q4KAuE#kmk0jQ;g8Hc_T%EpcMYv^Xznw~J|l z-%yE3U|DMa*5nDxE@!kF(RGH>?>eKztgM`vv8pPIawt}?zSfFZZH#ng!%kCs>m;cr z8k5wQjO}W%uOjyD@U9&cDr3*U9MXL2k7o$69nn(tcLI(LJa-BEti4-g+K{UBM83I% z)iK(_cdcOK_RG#R?6U}~bg|Wd zPLPJCTT>IyXt$;IImF+F;&3LpEmn%1w=Rdh%yv9>p#*o}e@L zqAU5Cl`NCryplQTAYZ?dRb16>nxG{b#YgcRPNhep_jG|^3!v*KA{xK*_jsCz)PxWrarHi&P%k+s?n z3T%f`afFS;Ql5Vk3l<$tLU^Pv!XpO4BiyqJd0xGV4d!3E5ymw~MZ^Z!6LgSP#kQEZ7t&tb!?}|cB2v6ZAzHr&0}v2)_DeHiX)E z7cRxN%Y8&K2qHhY8IP2?AA*2^sx3z^q^kMoVf-CIK70);9Q1$?L-O24ye$}6xCYln zuBbG71XD8XnOl0W>(nCPOrDHN1bIp`8CxZDk~s;h%*}~~$I$ciwQNNC5N$_Np?t<# zRyJs;wxc>;5#Hp1<(bsr@|R| ztBs{uM`Vepf*fa_Gv7JZS>!BrmOE!SXE~J|C*S46<=#0yR>JbkK#Pw}Wce~s#m1VE zfAq1@tjG)$b+K`&li+E9a~YT$IU_fAv8U5nshK=>D;p`EI|o8S^d~nHkHkC@^`l4-)bkNV@(3!Y8f+%&-)xKziOR^#rW-?V@_7*u(n0(HRX1oRX}DxUg9u-bzZWKjpnc10nuaeDW9ALfXK$d;vB+-Ta$hU=vEaoykTB^(vT5Tx-;W(&RsE zi&McLSgKwvgHh7IzrdE%Y=A?1U8fl2orX<}vMs5t+xxb4yHS1d!*)8AolbdXHe8;W zEm+dk3<7k)5JrcV5fFPOnFF4k^>-R}h2yXEzE?YZ@`I*2;$PW0x3y!A_L=JLHs zx%9p_%!*rlk!v5|;taRn365(q8E!wyk8&JtMgZ`B{=%189v`|LBJcpuxRbds*-yBW zTsxU3lAABJjDO99X5D)3}f||*@zT*>VUwkFSC(mr2Cpa zw#kQ+Dt;uf;z#;a{D`P{V{)BC$#p)ORM|6q4d%|kUV+Uj?euwX5^;e%ws@}Q2eRB@@P&@I%&N~(Sp+;rf?8*iH@=kUG z)M)ozYy>NZ`^8;s>CnDj92faF?}7%fm7lqb;lgbRSIZaP%~I5rHsY&}QBKjNq*`3= zTZ_v^EiUu>?`D+@*0^uojZ=0@8o&DvD~Bz4`0kY9eB`}s1ndlF z-peXjo+JF96!>7=%W_${gFksM@GXYH^1Y}d%xKd&o5ElrTg`!GKldXz_<(~pn-7fR zVX$_-m9xx2BNcZ&4p+Tc^5cC4{qQM0+YPxsOfL(y&0_|JsCF-+mv<)v{9Q ztGsjz)UQMLv7yz`7d)#|smsI;TN*tubEZ_iD*L|VS)WSnCL~V70z6|68ya%r;ZDr( zsnljB;l1`gC=#CYT$V~f6ViAsy$^8wSs|3)jEk z;*;)Y8Rm1JfVs$5-_NED>HW}WhLeB&el|+H@A-1%=>6<%jak&lgWq7Q8MCXAkM^>4 zgx80;{!LhUrm1}IH`%nz47|weDuL;3^LpcP-$1^~fB#MPLp$%le}5mVupPX6MN#jk4>@#e&EmD4*y+O1g z;`k{$#>4;q=hx6SD3^@3<75$9e4or{zj9p^F$8Fz9D0{mjubgDR$ICG`{_M}8 zjCb4k+dpUHt;bb*TFd1fo$7F&|ArwU8s0#ixA336!SGa0WbB))8#Uu!`vu!Zdm{P2 zWQPf!u)lhXr4Sv8{O%OAa5@pm{xy5V3c2$9Z(#y`grEK`n<1_NaQzNj3P&TWe#gcT z9IkGEj|H)+z4#s*Z99&}X>Ymf_=}IKIlSU5D~8n2&jR2)fBP)j@Fu_MePlbuL+`Vj z(KGM7&oY^M#&!okb3e=H+2>eG`bCvqD|9!=o8s%>a2omYIlP1bN3U?FH81kdKcfjK zcJT#vE8aVM?6d5V zu3>5>sipP{{EII2qDcH~j`}Tv|5Ie#2=xWV7TfuIdFmXt(#{J=4qCag)_-Vm*-7Q`Cpy5_4vX`k{CW?dK&bo=WA;QuR8U-GcWd6)@$^rRp?v@K;LJ z_3)(P|0z|!ZQEr>1#WXU@V#$iJ^No%RUbBnrcYCM!m;qBY3fXtXL+_vttE92)A)&* z>T>?|a`j#~ZI@41b;88(wX4+i7>X$s>eU#7b1T%VfZ#I~YBe4!i+sOA{fO8e#$TAJ z_TV>i)z#`Ta1*~=sa{l9+Yj@Lv(#&mZ`N$}e(?g?soClgY>Mz})Nx>+?_Z<7NXL1o zN^Q%UWPv-hRyN18t`S!kOM{ERiO5G)s&^22x^L z4kx(uL^j-@o@3&jtW`Iv^U_N#xT(S!wAVW{s0_<2R0|Sg#=F_0juEaTpZBN%wh{eJ$ttjE@>cVQ-s%xqR~#b|c$XLYqf^n$HbT?d}w8(P)RiD$GfwyJN4sq&}m)N!oC z!T-8W{UxTrpSFP%+xQNz`U<*m=wLes!FB&~b?W+^ zE^_NewHoqp{zmmCTe+2Xqj{J4;~Uj$gg?L^H>xhxl3K#Sq4~UUlbU5;ZKb1t!7M#* zlllb1vmbxkqRj$4h=mZ zGZ{9}C|+1WM{Sy6UK0euKo4HJ?wBu6*2Mm>SohX-VncINt{55>l2z7BzO|`VMH=E-(Hh3UOoP60J2%gvY-GkJ!5aAj1bEM6Ob(o|- zOw-KnNKeOBl%lNy{S9k+7!kzHohMUus`=15rHdBlmdRDMu*4BTg=`i^tQ)@ZN=;IV zCiU8@5Ip}Y6+DxnyVIMQ{s110$*Lr0-tYvcbCWr`%ffS#prF22YHbM zQLPj##69&g4=Kg&C6U`C(rDImI zFfA^N?C!3fDZms6Xt%r9L?^s8@&HwEgh+zf0F3tVyk>o>@!~v5eKi+_2^TUvr^B{_ z$9{W1TgdO(s17akrce)qd`gX}tmHB-i`3$oaQhE`_kK2~h&obeE5MhfMwM1Fo}{;l zS4cK{F$e`cR;Kdu&#OPe{?et-tJNB=@!1}keTVvpruL*xgt$d#>n&2p4UqC6dQ*GNoseSOEd%4rHV?crFr?6E@uIgdV}z+c z9zgL0fTkt4I*4O{_2_sw+?U#S^SigJH(>hu@9kcdEmThy!=3lW-f#ukKWHjfju#RPX1bcc_{Cu^s9dBkuJb z>Ql6ur|wior9m-I*cN_br#eYJm0HX@_u!qazwT6vp<=r4Qr9`Qq|jav^-QW%%df^u z(_Aw~io^wG^h7`Pl6 z5>~guAKm$;>J++`n?JW({aYx*S*mEdx>~hcvz!I<=Zf3qutR&J?)NQ~7Zm0=@2HZo zOJRnJgJ0nVkmpRVka3Nh&6s>=dWnp=R`1jU|EIUB3yrIY!gu#9X{xiZw4t<+%G6f7 zmCZJa!7f(VkWFEQNR%#!824T`+vZ};CiiAzR|&U)y!fD~D3cg}vi2_pp(ufEUj#t} zg}zn%0iX57O7PJazcX|1&8DgN=F{%oojZ5VnKS3yIrDupuK$o2G$jC>hc85MIwl6Q zQSG(*qhcw?SL5NNVMr|5BUq?DTkpzOjyo-0Q7wq2lD-pIeutq>paxALJDeC5#moqR z`Jx{S&fG2wQ;athJ;_<&8;XW-^3)wgZzYj_U09}()P%@fQo%CqQ@%es~9e zc*gB}5zAs;i%-n(t1q{z^Ng(Fk&rqPe?>m@#5eL;E@#HI~kD0IGVV6F1;D&TS(J(+d(;ze*jct0<8cPSn zI3zbt-p<46%fr~x`D~NT#J36w`3UPJR?C2P)sA6l$#O|+2O`Bqz`ttvp`T^1W4sM_ zrdtQ#FN^AdE#{|NkZ~Bys2Of1XiSh#f(P_3(&3Ltp9Y4AisOf#jE#kD#hvW!-j_Jq zbogD7UDDP94-A=68$%fZUDIGy?$L57$ls-a_gQ`qaZz(7Y-!}@A0o+7PyPaz!WTR` zDzc>-F0f7RL)+!G$Tf^B;6 z8bK(iHt=%k|IkK7Yr{5+*1-z;RO_<9dBkJtl66H5Senxs0Ltv zbB>ccY2`AfV>R&a+6Gw4oD9t}fL)%Dl3!DzKSM_Zm9d}js@fQUrAhUJ&WB%pYei&c z;(DWUNBx+VuvI;3&q{;*MGe;JQApy|o3DmxwdcmwZy(e1n3@znL4@RU0XILT1BacS zzG+_Kb9y9N;bLId&*xweczBhaO7;SEFoeZx&*Jzg{Puqt@mwO6dK)r~be zj$r@$8a;(++L)_U#2>2FrU_&oer(gXxc)({eMWDm3O!iyd+Z`T(f70H zojX4!vbwS=jun_1{I#=ik%~!#jIS=!>qv?eu8>S1a=&mDbKp(2c@>l1MK!Qae3ts` zIu-Hp7HQCF&P_EuL^+J91;TzR8+5Ak<~8~$xvxnlp}i{JP0<}1$%6cLy7SuS z^k;JSm=Ndc(-|bP8`o)nbh$g-dFMJ|Pl}Zt_aYUY?sUGOXOhVS>CUbV`a6}Yh#b}_ vBjR|W=Yqx8wYpJNZx-fZ) scheduler::constants::ConstantsApi { scheduler::constants::ConstantsApi } + pub fn proxy(&self) -> proxy::constants::ConstantsApi { + proxy::constants::ConstantsApi + } pub fn tx_pause(&self) -> tx_pause::constants::ConstantsApi { tx_pause::constants::ConstantsApi } @@ -3334,21 +3327,6 @@ pub mod api { pub fn claims(&self) -> claims::constants::ConstantsApi { claims::constants::ConstantsApi } - pub fn roles(&self) -> roles::constants::ConstantsApi { - roles::constants::ConstantsApi - } - pub fn jobs(&self) -> jobs::constants::ConstantsApi { - jobs::constants::ConstantsApi - } - pub fn proxy(&self) -> proxy::constants::ConstantsApi { - proxy::constants::ConstantsApi - } - pub fn multi_asset_delegation(&self) -> multi_asset_delegation::constants::ConstantsApi { - multi_asset_delegation::constants::ConstantsApi - } - pub fn sygma_bridge(&self) -> sygma_bridge::constants::ConstantsApi { - sygma_bridge::constants::ConstantsApi - } } pub struct StorageApi; impl StorageApi { @@ -3437,6 +3415,9 @@ pub mod api { pub fn offences(&self) -> offences::storage::StorageApi { offences::storage::StorageApi } + pub fn proxy(&self) -> proxy::storage::StorageApi { + proxy::storage::StorageApi + } pub fn tx_pause(&self) -> tx_pause::storage::StorageApi { tx_pause::storage::StorageApi } @@ -3467,41 +3448,6 @@ pub mod api { pub fn claims(&self) -> claims::storage::StorageApi { claims::storage::StorageApi } - pub fn roles(&self) -> roles::storage::StorageApi { - roles::storage::StorageApi - } - pub fn jobs(&self) -> jobs::storage::StorageApi { - jobs::storage::StorageApi - } - pub fn dkg(&self) -> dkg::storage::StorageApi { - dkg::storage::StorageApi - } - pub fn zk_saa_s(&self) -> zk_saa_s::storage::StorageApi { - zk_saa_s::storage::StorageApi - } - pub fn proxy(&self) -> proxy::storage::StorageApi { - proxy::storage::StorageApi - } - pub fn multi_asset_delegation(&self) -> multi_asset_delegation::storage::StorageApi { - multi_asset_delegation::storage::StorageApi - } - pub fn sygma_access_segregator(&self) -> sygma_access_segregator::storage::StorageApi { - sygma_access_segregator::storage::StorageApi - } - pub fn sygma_basic_fee_handler(&self) -> sygma_basic_fee_handler::storage::StorageApi { - sygma_basic_fee_handler::storage::StorageApi - } - pub fn sygma_fee_handler_router(&self) -> sygma_fee_handler_router::storage::StorageApi { - sygma_fee_handler_router::storage::StorageApi - } - pub fn sygma_percentage_fee_handler( - &self, - ) -> sygma_percentage_fee_handler::storage::StorageApi { - sygma_percentage_fee_handler::storage::StorageApi - } - pub fn sygma_bridge(&self) -> sygma_bridge::storage::StorageApi { - sygma_bridge::storage::StorageApi - } } pub struct TransactionApi; impl TransactionApi { @@ -3573,6 +3519,9 @@ pub mod api { pub fn preimage(&self) -> preimage::calls::TransactionApi { preimage::calls::TransactionApi } + pub fn proxy(&self) -> proxy::calls::TransactionApi { + proxy::calls::TransactionApi + } pub fn tx_pause(&self) -> tx_pause::calls::TransactionApi { tx_pause::calls::TransactionApi } @@ -3606,41 +3555,6 @@ pub mod api { pub fn claims(&self) -> claims::calls::TransactionApi { claims::calls::TransactionApi } - pub fn roles(&self) -> roles::calls::TransactionApi { - roles::calls::TransactionApi - } - pub fn jobs(&self) -> jobs::calls::TransactionApi { - jobs::calls::TransactionApi - } - pub fn dkg(&self) -> dkg::calls::TransactionApi { - dkg::calls::TransactionApi - } - pub fn zk_saa_s(&self) -> zk_saa_s::calls::TransactionApi { - zk_saa_s::calls::TransactionApi - } - pub fn proxy(&self) -> proxy::calls::TransactionApi { - proxy::calls::TransactionApi - } - pub fn multi_asset_delegation(&self) -> multi_asset_delegation::calls::TransactionApi { - multi_asset_delegation::calls::TransactionApi - } - pub fn sygma_access_segregator(&self) -> sygma_access_segregator::calls::TransactionApi { - sygma_access_segregator::calls::TransactionApi - } - pub fn sygma_basic_fee_handler(&self) -> sygma_basic_fee_handler::calls::TransactionApi { - sygma_basic_fee_handler::calls::TransactionApi - } - pub fn sygma_fee_handler_router(&self) -> sygma_fee_handler_router::calls::TransactionApi { - sygma_fee_handler_router::calls::TransactionApi - } - pub fn sygma_percentage_fee_handler( - &self, - ) -> sygma_percentage_fee_handler::calls::TransactionApi { - sygma_percentage_fee_handler::calls::TransactionApi - } - pub fn sygma_bridge(&self) -> sygma_bridge::calls::TransactionApi { - sygma_bridge::calls::TransactionApi - } } #[doc = r" check whether the metadata provided is aligned with this statically generated code."] pub fn is_codegen_valid_for(metadata: &::subxt::ext::subxt_core::Metadata) -> bool { @@ -3651,9 +3565,9 @@ pub mod api { .hash(); runtime_metadata_hash == [ - 150u8, 53u8, 228u8, 145u8, 223u8, 87u8, 91u8, 179u8, 223u8, 18u8, 100u8, 239u8, - 152u8, 60u8, 55u8, 103u8, 186u8, 163u8, 132u8, 134u8, 244u8, 206u8, 179u8, 150u8, - 142u8, 231u8, 255u8, 201u8, 169u8, 90u8, 146u8, 181u8, + 247u8, 191u8, 214u8, 116u8, 25u8, 22u8, 203u8, 178u8, 187u8, 108u8, 212u8, 168u8, + 36u8, 132u8, 62u8, 177u8, 187u8, 85u8, 46u8, 135u8, 10u8, 76u8, 68u8, 143u8, 10u8, + 199u8, 16u8, 221u8, 23u8, 167u8, 243u8, 15u8, ] } pub mod system { @@ -4761,10 +4675,9 @@ pub mod api { "Events", (), [ - 73u8, 190u8, 94u8, 175u8, 216u8, 244u8, 199u8, 114u8, 139u8, 194u8, - 152u8, 241u8, 104u8, 24u8, 212u8, 189u8, 90u8, 252u8, 218u8, 20u8, - 223u8, 229u8, 183u8, 17u8, 243u8, 61u8, 224u8, 65u8, 206u8, 105u8, - 61u8, 80u8, + 34u8, 55u8, 150u8, 4u8, 221u8, 255u8, 35u8, 83u8, 27u8, 86u8, 215u8, + 7u8, 108u8, 118u8, 114u8, 156u8, 219u8, 167u8, 213u8, 89u8, 62u8, + 236u8, 40u8, 254u8, 82u8, 75u8, 207u8, 252u8, 122u8, 103u8, 72u8, 74u8, ], ) } @@ -5406,10 +5319,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 188u8, 150u8, 182u8, 90u8, 40u8, 179u8, 109u8, 218u8, 212u8, 0u8, - 208u8, 163u8, 110u8, 4u8, 90u8, 250u8, 217u8, 108u8, 219u8, 107u8, - 206u8, 230u8, 119u8, 52u8, 231u8, 161u8, 173u8, 51u8, 72u8, 90u8, 15u8, - 28u8, + 12u8, 102u8, 61u8, 108u8, 16u8, 119u8, 151u8, 86u8, 123u8, 153u8, + 222u8, 169u8, 226u8, 55u8, 19u8, 186u8, 117u8, 148u8, 225u8, 241u8, + 164u8, 123u8, 104u8, 218u8, 71u8, 144u8, 104u8, 213u8, 86u8, 107u8, + 173u8, 87u8, ], ) } @@ -5428,9 +5341,10 @@ pub mod api { weight, }, [ - 34u8, 48u8, 40u8, 84u8, 143u8, 39u8, 190u8, 42u8, 223u8, 172u8, 14u8, - 56u8, 205u8, 40u8, 187u8, 51u8, 177u8, 17u8, 189u8, 145u8, 150u8, 45u8, - 36u8, 52u8, 151u8, 240u8, 252u8, 41u8, 118u8, 2u8, 246u8, 207u8, + 228u8, 143u8, 119u8, 102u8, 81u8, 124u8, 4u8, 65u8, 197u8, 103u8, + 189u8, 96u8, 99u8, 225u8, 190u8, 178u8, 248u8, 164u8, 229u8, 192u8, + 124u8, 45u8, 238u8, 82u8, 99u8, 41u8, 106u8, 241u8, 66u8, 41u8, 1u8, + 13u8, ], ) } @@ -5465,9 +5379,9 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 121u8, 215u8, 151u8, 234u8, 64u8, 20u8, 128u8, 108u8, 23u8, 152u8, - 117u8, 43u8, 14u8, 117u8, 203u8, 216u8, 11u8, 3u8, 113u8, 24u8, 167u8, - 6u8, 61u8, 119u8, 218u8, 110u8, 236u8, 4u8, 63u8, 170u8, 102u8, 187u8, + 186u8, 143u8, 21u8, 252u8, 146u8, 162u8, 6u8, 243u8, 63u8, 75u8, 165u8, + 134u8, 95u8, 202u8, 35u8, 32u8, 17u8, 48u8, 169u8, 123u8, 2u8, 53u8, + 250u8, 42u8, 138u8, 236u8, 234u8, 198u8, 72u8, 41u8, 144u8, 60u8, ], ) } @@ -11143,7 +11057,7 @@ pub mod api { ::subxt::ext::subxt_core::utils::H256, ::core::primitive::u64, >; - pub type KeyOwnerProof = runtime_types::sp_core::Void; + pub type KeyOwnerProof = runtime_types::sp_session::MembershipProof; } impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ReportEquivocation { const PALLET: &'static str = "Grandpa"; @@ -11180,7 +11094,7 @@ pub mod api { ::subxt::ext::subxt_core::utils::H256, ::core::primitive::u64, >; - pub type KeyOwnerProof = runtime_types::sp_core::Void; + pub type KeyOwnerProof = runtime_types::sp_session::MembershipProof; } impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ReportEquivocationUnsigned { const PALLET: &'static str = "Grandpa"; @@ -11237,9 +11151,10 @@ pub mod api { key_owner_proof, }, [ - 210u8, 146u8, 3u8, 25u8, 228u8, 26u8, 174u8, 152u8, 120u8, 139u8, 49u8, - 11u8, 0u8, 11u8, 97u8, 243u8, 242u8, 40u8, 15u8, 217u8, 92u8, 194u8, - 174u8, 100u8, 88u8, 228u8, 13u8, 240u8, 246u8, 19u8, 139u8, 44u8, + 29u8, 31u8, 156u8, 180u8, 101u8, 213u8, 190u8, 81u8, 141u8, 175u8, + 185u8, 43u8, 22u8, 132u8, 162u8, 92u8, 171u8, 171u8, 156u8, 86u8, + 230u8, 158u8, 236u8, 177u8, 2u8, 191u8, 91u8, 18u8, 179u8, 243u8, + 253u8, 105u8, ], ) } @@ -11261,10 +11176,10 @@ pub mod api { key_owner_proof, }, [ - 59u8, 39u8, 153u8, 10u8, 1u8, 177u8, 4u8, 18u8, 166u8, 217u8, 24u8, - 123u8, 80u8, 235u8, 100u8, 27u8, 62u8, 152u8, 108u8, 209u8, 250u8, - 228u8, 178u8, 225u8, 134u8, 198u8, 126u8, 32u8, 130u8, 204u8, 179u8, - 201u8, + 252u8, 161u8, 139u8, 178u8, 7u8, 241u8, 231u8, 127u8, 30u8, 146u8, + 14u8, 161u8, 24u8, 214u8, 102u8, 134u8, 201u8, 211u8, 240u8, 25u8, + 105u8, 95u8, 83u8, 219u8, 100u8, 247u8, 242u8, 179u8, 61u8, 0u8, 28u8, + 180u8, ], ) } @@ -14499,9 +14414,9 @@ pub mod api { length_bound, }, [ - 170u8, 165u8, 74u8, 56u8, 46u8, 204u8, 190u8, 189u8, 16u8, 182u8, 89u8, - 34u8, 155u8, 102u8, 198u8, 70u8, 51u8, 82u8, 123u8, 42u8, 161u8, 249u8, - 110u8, 85u8, 6u8, 249u8, 211u8, 189u8, 236u8, 253u8, 137u8, 224u8, + 198u8, 226u8, 47u8, 227u8, 226u8, 88u8, 191u8, 145u8, 65u8, 71u8, 53u8, + 85u8, 196u8, 25u8, 244u8, 50u8, 1u8, 15u8, 112u8, 1u8, 173u8, 122u8, + 197u8, 41u8, 216u8, 49u8, 232u8, 161u8, 166u8, 201u8, 249u8, 200u8, ], ) } @@ -14521,10 +14436,9 @@ pub mod api { length_bound, }, [ - 220u8, 31u8, 214u8, 222u8, 102u8, 197u8, 156u8, 130u8, 233u8, 32u8, - 207u8, 86u8, 69u8, 43u8, 198u8, 126u8, 1u8, 129u8, 220u8, 117u8, 50u8, - 126u8, 169u8, 134u8, 167u8, 113u8, 129u8, 50u8, 199u8, 178u8, 9u8, - 46u8, + 63u8, 54u8, 190u8, 135u8, 180u8, 190u8, 245u8, 191u8, 239u8, 62u8, + 73u8, 116u8, 82u8, 33u8, 10u8, 32u8, 178u8, 139u8, 185u8, 213u8, 167u8, + 27u8, 213u8, 208u8, 3u8, 156u8, 120u8, 165u8, 3u8, 28u8, 74u8, 138u8, ], ) } @@ -14868,10 +14782,10 @@ pub mod api { "ProposalOf", (), [ - 132u8, 146u8, 76u8, 29u8, 104u8, 215u8, 211u8, 31u8, 242u8, 207u8, - 182u8, 166u8, 11u8, 37u8, 165u8, 205u8, 150u8, 1u8, 18u8, 157u8, 186u8, - 242u8, 171u8, 123u8, 204u8, 169u8, 237u8, 99u8, 172u8, 200u8, 253u8, - 37u8, + 112u8, 63u8, 133u8, 220u8, 33u8, 150u8, 240u8, 153u8, 227u8, 161u8, + 215u8, 201u8, 207u8, 5u8, 155u8, 148u8, 215u8, 78u8, 184u8, 175u8, + 203u8, 194u8, 82u8, 207u8, 135u8, 139u8, 58u8, 114u8, 246u8, 224u8, + 8u8, 253u8, ], ) } @@ -14895,10 +14809,10 @@ pub mod api { _0.borrow(), ), [ - 132u8, 146u8, 76u8, 29u8, 104u8, 215u8, 211u8, 31u8, 242u8, 207u8, - 182u8, 166u8, 11u8, 37u8, 165u8, 205u8, 150u8, 1u8, 18u8, 157u8, 186u8, - 242u8, 171u8, 123u8, 204u8, 169u8, 237u8, 99u8, 172u8, 200u8, 253u8, - 37u8, + 112u8, 63u8, 133u8, 220u8, 33u8, 150u8, 240u8, 153u8, 227u8, 161u8, + 215u8, 201u8, 207u8, 5u8, 155u8, 148u8, 215u8, 78u8, 184u8, 175u8, + 203u8, 194u8, 82u8, 207u8, 135u8, 139u8, 58u8, 114u8, 246u8, 224u8, + 8u8, 253u8, ], ) } @@ -21866,9 +21780,10 @@ pub mod api { "set_keys", types::SetKeys { keys, proof }, [ - 53u8, 192u8, 83u8, 155u8, 68u8, 70u8, 208u8, 171u8, 57u8, 34u8, 177u8, - 200u8, 16u8, 91u8, 176u8, 234u8, 27u8, 73u8, 242u8, 86u8, 71u8, 79u8, - 11u8, 154u8, 253u8, 65u8, 122u8, 144u8, 6u8, 152u8, 243u8, 72u8, + 198u8, 58u8, 144u8, 226u8, 111u8, 226u8, 216u8, 212u8, 82u8, 116u8, + 160u8, 253u8, 180u8, 252u8, 117u8, 151u8, 175u8, 116u8, 92u8, 82u8, + 228u8, 139u8, 243u8, 50u8, 196u8, 252u8, 240u8, 118u8, 253u8, 245u8, + 20u8, 226u8, ], ) } @@ -22048,9 +21963,9 @@ pub mod api { "QueuedKeys", (), [ - 91u8, 161u8, 137u8, 28u8, 192u8, 226u8, 146u8, 6u8, 197u8, 86u8, 247u8, - 15u8, 209u8, 200u8, 197u8, 248u8, 187u8, 80u8, 133u8, 30u8, 12u8, 70u8, - 175u8, 55u8, 47u8, 0u8, 46u8, 57u8, 182u8, 200u8, 210u8, 161u8, + 216u8, 27u8, 59u8, 207u8, 116u8, 44u8, 89u8, 114u8, 88u8, 97u8, 160u8, + 35u8, 82u8, 91u8, 187u8, 14u8, 229u8, 114u8, 91u8, 94u8, 108u8, 91u8, + 99u8, 90u8, 127u8, 211u8, 78u8, 56u8, 183u8, 184u8, 135u8, 254u8, ], ) } @@ -22094,9 +22009,10 @@ pub mod api { "NextKeys", (), [ - 140u8, 85u8, 129u8, 223u8, 77u8, 166u8, 46u8, 184u8, 49u8, 27u8, 185u8, - 59u8, 28u8, 171u8, 93u8, 8u8, 107u8, 48u8, 103u8, 97u8, 55u8, 52u8, - 251u8, 57u8, 184u8, 216u8, 141u8, 167u8, 31u8, 255u8, 67u8, 165u8, + 63u8, 202u8, 188u8, 188u8, 181u8, 211u8, 192u8, 102u8, 236u8, 143u8, + 178u8, 237u8, 251u8, 116u8, 231u8, 105u8, 71u8, 253u8, 92u8, 128u8, + 145u8, 238u8, 124u8, 68u8, 111u8, 32u8, 29u8, 82u8, 217u8, 213u8, 51u8, + 166u8, ], ) } @@ -22120,9 +22036,10 @@ pub mod api { _0.borrow(), ), [ - 140u8, 85u8, 129u8, 223u8, 77u8, 166u8, 46u8, 184u8, 49u8, 27u8, 185u8, - 59u8, 28u8, 171u8, 93u8, 8u8, 107u8, 48u8, 103u8, 97u8, 55u8, 52u8, - 251u8, 57u8, 184u8, 216u8, 141u8, 167u8, 31u8, 255u8, 67u8, 165u8, + 63u8, 202u8, 188u8, 188u8, 181u8, 211u8, 192u8, 102u8, 236u8, 143u8, + 178u8, 237u8, 251u8, 116u8, 231u8, 105u8, 71u8, 253u8, 92u8, 128u8, + 145u8, 238u8, 124u8, 68u8, 111u8, 32u8, 29u8, 82u8, 217u8, 213u8, 51u8, + 166u8, ], ) } @@ -28732,10 +28649,9 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 50u8, 252u8, 245u8, 190u8, 177u8, 188u8, 141u8, 211u8, 117u8, 172u8, - 111u8, 227u8, 203u8, 148u8, 181u8, 109u8, 124u8, 62u8, 51u8, 180u8, - 179u8, 203u8, 181u8, 84u8, 33u8, 172u8, 190u8, 135u8, 45u8, 22u8, - 139u8, 243u8, + 211u8, 255u8, 146u8, 223u8, 214u8, 232u8, 117u8, 215u8, 15u8, 136u8, + 121u8, 55u8, 102u8, 199u8, 118u8, 107u8, 19u8, 76u8, 17u8, 25u8, 54u8, + 74u8, 104u8, 218u8, 78u8, 58u8, 85u8, 144u8, 55u8, 148u8, 25u8, 102u8, ], ) } @@ -28777,9 +28693,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 11u8, 96u8, 30u8, 80u8, 175u8, 50u8, 14u8, 38u8, 194u8, 250u8, 134u8, - 201u8, 195u8, 88u8, 60u8, 201u8, 50u8, 89u8, 88u8, 63u8, 67u8, 195u8, - 193u8, 68u8, 216u8, 2u8, 237u8, 6u8, 196u8, 89u8, 165u8, 7u8, + 215u8, 209u8, 22u8, 222u8, 185u8, 247u8, 84u8, 18u8, 26u8, 133u8, + 152u8, 241u8, 181u8, 39u8, 222u8, 47u8, 184u8, 71u8, 202u8, 120u8, + 45u8, 119u8, 178u8, 46u8, 192u8, 110u8, 123u8, 3u8, 31u8, 23u8, 178u8, + 216u8, ], ) } @@ -28817,10 +28734,9 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 26u8, 156u8, 237u8, 235u8, 33u8, 252u8, 11u8, 211u8, 155u8, 242u8, - 121u8, 103u8, 113u8, 213u8, 87u8, 105u8, 15u8, 90u8, 230u8, 200u8, - 96u8, 65u8, 93u8, 158u8, 9u8, 112u8, 251u8, 39u8, 114u8, 88u8, 157u8, - 175u8, + 9u8, 95u8, 44u8, 216u8, 34u8, 85u8, 59u8, 126u8, 245u8, 48u8, 102u8, + 16u8, 217u8, 232u8, 122u8, 106u8, 66u8, 96u8, 90u8, 101u8, 24u8, 167u8, + 175u8, 8u8, 222u8, 255u8, 10u8, 165u8, 199u8, 250u8, 54u8, 202u8, ], ) } @@ -28845,10 +28761,9 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 242u8, 201u8, 182u8, 26u8, 165u8, 241u8, 92u8, 63u8, 222u8, 95u8, - 246u8, 221u8, 21u8, 71u8, 36u8, 17u8, 226u8, 90u8, 33u8, 192u8, 134u8, - 202u8, 251u8, 72u8, 119u8, 229u8, 69u8, 193u8, 194u8, 238u8, 180u8, - 66u8, + 82u8, 208u8, 76u8, 109u8, 85u8, 176u8, 69u8, 24u8, 151u8, 79u8, 98u8, + 19u8, 9u8, 71u8, 180u8, 146u8, 94u8, 222u8, 38u8, 234u8, 34u8, 46u8, + 10u8, 220u8, 193u8, 68u8, 193u8, 220u8, 35u8, 254u8, 39u8, 232u8, ], ) } @@ -29979,13 +29894,13 @@ pub mod api { } } } - pub mod tx_pause { + pub mod proxy { use super::root_mod; use super::runtime_types; #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_tx_pause::pallet::Error; + pub type Error = runtime_types::pallet_proxy::pallet::Error; #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_tx_pause::pallet::Call; + pub type Call = runtime_types::pallet_proxy::pallet::Call; pub mod calls { use super::root_mod; use super::runtime_types; @@ -29993,180 +29908,1074 @@ pub mod api { pub mod types { use super::runtime_types; #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, Clone, Debug, Eq, PartialEq, )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::proxy`]."] + pub struct Proxy { + pub real: proxy::Real, + pub force_proxy_type: proxy::ForceProxyType, + pub call: ::std::boxed::Box, + } + pub mod proxy { + use super::runtime_types; + pub type Real = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type ForceProxyType = + ::core::option::Option; + pub type Call = runtime_types::tangle_runtime::RuntimeCall; + } + impl ::subxt::blocks::StaticExtrinsic for Proxy { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "proxy"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::add_proxy`]."] + pub struct AddProxy { + pub delegate: add_proxy::Delegate, + pub proxy_type: add_proxy::ProxyType, + pub delay: add_proxy::Delay, + } + pub mod add_proxy { + use super::runtime_types; + pub type Delegate = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type ProxyType = runtime_types::tangle_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; + } + impl ::subxt::blocks::StaticExtrinsic for AddProxy { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "add_proxy"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, )] - #[doc = "See [`Pallet::pause`]."] - pub struct Pause { - pub full_name: pause::FullName, + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::remove_proxy`]."] + pub struct RemoveProxy { + pub delegate: remove_proxy::Delegate, + pub proxy_type: remove_proxy::ProxyType, + pub delay: remove_proxy::Delay, } - pub mod pause { + pub mod remove_proxy { use super::runtime_types; - pub type FullName = ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ); + pub type Delegate = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type ProxyType = runtime_types::tangle_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Pause { - const PALLET: &'static str = "TxPause"; - const CALL: &'static str = "pause"; + impl ::subxt::blocks::StaticExtrinsic for RemoveProxy { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "remove_proxy"; } #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, Clone, Debug, Eq, PartialEq, )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::remove_proxies`]."] + pub struct RemoveProxies; + impl ::subxt::blocks::StaticExtrinsic for RemoveProxies { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "remove_proxies"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::create_pure`]."] + pub struct CreatePure { + pub proxy_type: create_pure::ProxyType, + pub delay: create_pure::Delay, + pub index: create_pure::Index, + } + pub mod create_pure { + use super::runtime_types; + pub type ProxyType = runtime_types::tangle_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; + pub type Index = ::core::primitive::u16; + } + impl ::subxt::blocks::StaticExtrinsic for CreatePure { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "create_pure"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, )] - #[doc = "See [`Pallet::unpause`]."] - pub struct Unpause { - pub ident: unpause::Ident, + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::kill_pure`]."] + pub struct KillPure { + pub spawner: kill_pure::Spawner, + pub proxy_type: kill_pure::ProxyType, + pub index: kill_pure::Index, + #[codec(compact)] + pub height: kill_pure::Height, + #[codec(compact)] + pub ext_index: kill_pure::ExtIndex, } - pub mod unpause { + pub mod kill_pure { use super::runtime_types; - pub type Ident = ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ); + pub type Spawner = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type ProxyType = runtime_types::tangle_runtime::ProxyType; + pub type Index = ::core::primitive::u16; + pub type Height = ::core::primitive::u64; + pub type ExtIndex = ::core::primitive::u32; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Unpause { - const PALLET: &'static str = "TxPause"; - const CALL: &'static str = "unpause"; + impl ::subxt::blocks::StaticExtrinsic for KillPure { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "kill_pure"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::announce`]."] + pub struct Announce { + pub real: announce::Real, + pub call_hash: announce::CallHash, + } + pub mod announce { + use super::runtime_types; + pub type Real = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type CallHash = ::subxt::utils::H256; + } + impl ::subxt::blocks::StaticExtrinsic for Announce { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "announce"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::remove_announcement`]."] + pub struct RemoveAnnouncement { + pub real: remove_announcement::Real, + pub call_hash: remove_announcement::CallHash, + } + pub mod remove_announcement { + use super::runtime_types; + pub type Real = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type CallHash = ::subxt::utils::H256; + } + impl ::subxt::blocks::StaticExtrinsic for RemoveAnnouncement { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "remove_announcement"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::reject_announcement`]."] + pub struct RejectAnnouncement { + pub delegate: reject_announcement::Delegate, + pub call_hash: reject_announcement::CallHash, + } + pub mod reject_announcement { + use super::runtime_types; + pub type Delegate = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type CallHash = ::subxt::utils::H256; + } + impl ::subxt::blocks::StaticExtrinsic for RejectAnnouncement { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "reject_announcement"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "See [`Pallet::proxy_announced`]."] + pub struct ProxyAnnounced { + pub delegate: proxy_announced::Delegate, + pub real: proxy_announced::Real, + pub force_proxy_type: proxy_announced::ForceProxyType, + pub call: ::std::boxed::Box, + } + pub mod proxy_announced { + use super::runtime_types; + pub type Delegate = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type Real = ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >; + pub type ForceProxyType = + ::core::option::Option; + pub type Call = runtime_types::tangle_runtime::RuntimeCall; + } + impl ::subxt::blocks::StaticExtrinsic for ProxyAnnounced { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "proxy_announced"; } } pub struct TransactionApi; impl TransactionApi { - #[doc = "See [`Pallet::pause`]."] - pub fn pause( + #[doc = "See [`Pallet::proxy`]."] + pub fn proxy( &self, - full_name: types::pause::FullName, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "TxPause", - "pause", - types::Pause { full_name }, + real: types::proxy::Real, + force_proxy_type: types::proxy::ForceProxyType, + call: types::proxy::Call, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "proxy", + types::Proxy { real, force_proxy_type, call: ::std::boxed::Box::new(call) }, [ - 244u8, 112u8, 104u8, 148u8, 17u8, 164u8, 228u8, 229u8, 103u8, 212u8, - 137u8, 16u8, 194u8, 167u8, 150u8, 148u8, 151u8, 233u8, 15u8, 2u8, 54u8, - 96u8, 158u8, 43u8, 222u8, 128u8, 199u8, 87u8, 74u8, 38u8, 6u8, 215u8, + 50u8, 236u8, 187u8, 65u8, 90u8, 184u8, 120u8, 9u8, 83u8, 141u8, 40u8, + 111u8, 84u8, 193u8, 33u8, 92u8, 35u8, 222u8, 107u8, 10u8, 88u8, 70u8, + 90u8, 206u8, 120u8, 95u8, 25u8, 124u8, 233u8, 168u8, 132u8, 99u8, ], ) } - #[doc = "See [`Pallet::unpause`]."] - pub fn unpause( + #[doc = "See [`Pallet::add_proxy`]."] + pub fn add_proxy( &self, - ident: types::unpause::Ident, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "TxPause", - "unpause", - types::Unpause { ident }, + delegate: types::add_proxy::Delegate, + proxy_type: types::add_proxy::ProxyType, + delay: types::add_proxy::Delay, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "add_proxy", + types::AddProxy { delegate, proxy_type, delay }, [ - 213u8, 245u8, 75u8, 131u8, 24u8, 188u8, 101u8, 168u8, 39u8, 246u8, - 228u8, 155u8, 255u8, 146u8, 245u8, 218u8, 68u8, 102u8, 75u8, 133u8, - 54u8, 142u8, 191u8, 87u8, 148u8, 59u8, 99u8, 11u8, 33u8, 184u8, 24u8, - 179u8, + 204u8, 170u8, 8u8, 148u8, 160u8, 168u8, 107u8, 62u8, 50u8, 75u8, 3u8, + 71u8, 179u8, 30u8, 109u8, 127u8, 108u8, 156u8, 239u8, 38u8, 97u8, 92u8, + 28u8, 253u8, 230u8, 97u8, 205u8, 44u8, 214u8, 237u8, 137u8, 27u8, + ], + ) + } + #[doc = "See [`Pallet::remove_proxy`]."] + pub fn remove_proxy( + &self, + delegate: types::remove_proxy::Delegate, + proxy_type: types::remove_proxy::ProxyType, + delay: types::remove_proxy::Delay, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "remove_proxy", + types::RemoveProxy { delegate, proxy_type, delay }, + [ + 191u8, 2u8, 69u8, 93u8, 184u8, 207u8, 70u8, 111u8, 8u8, 255u8, 11u8, + 157u8, 4u8, 29u8, 102u8, 245u8, 223u8, 103u8, 132u8, 196u8, 238u8, + 252u8, 127u8, 91u8, 243u8, 48u8, 176u8, 86u8, 99u8, 63u8, 108u8, 111u8, + ], + ) + } + #[doc = "See [`Pallet::remove_proxies`]."] + pub fn remove_proxies(&self) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "remove_proxies", + types::RemoveProxies {}, + [ + 1u8, 126u8, 36u8, 227u8, 185u8, 34u8, 218u8, 236u8, 125u8, 231u8, 68u8, + 185u8, 145u8, 63u8, 250u8, 225u8, 103u8, 3u8, 189u8, 37u8, 172u8, + 195u8, 197u8, 216u8, 99u8, 210u8, 240u8, 162u8, 158u8, 132u8, 24u8, + 6u8, + ], + ) + } + #[doc = "See [`Pallet::create_pure`]."] + pub fn create_pure( + &self, + proxy_type: types::create_pure::ProxyType, + delay: types::create_pure::Delay, + index: types::create_pure::Index, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "create_pure", + types::CreatePure { proxy_type, delay, index }, + [ + 239u8, 72u8, 255u8, 141u8, 190u8, 115u8, 141u8, 227u8, 164u8, 59u8, + 113u8, 0u8, 87u8, 101u8, 142u8, 147u8, 43u8, 13u8, 59u8, 213u8, 162u8, + 48u8, 67u8, 167u8, 223u8, 72u8, 153u8, 148u8, 219u8, 71u8, 53u8, 4u8, + ], + ) + } + #[doc = "See [`Pallet::kill_pure`]."] + pub fn kill_pure( + &self, + spawner: types::kill_pure::Spawner, + proxy_type: types::kill_pure::ProxyType, + index: types::kill_pure::Index, + height: types::kill_pure::Height, + ext_index: types::kill_pure::ExtIndex, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "kill_pure", + types::KillPure { spawner, proxy_type, index, height, ext_index }, + [ + 125u8, 59u8, 127u8, 47u8, 63u8, 48u8, 101u8, 56u8, 61u8, 192u8, 198u8, + 217u8, 119u8, 91u8, 186u8, 35u8, 119u8, 222u8, 16u8, 246u8, 42u8, + 248u8, 19u8, 89u8, 246u8, 20u8, 66u8, 14u8, 133u8, 32u8, 118u8, 118u8, + ], + ) + } + #[doc = "See [`Pallet::announce`]."] + pub fn announce( + &self, + real: types::announce::Real, + call_hash: types::announce::CallHash, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "announce", + types::Announce { real, call_hash }, + [ + 32u8, 88u8, 145u8, 33u8, 55u8, 44u8, 136u8, 153u8, 26u8, 111u8, 73u8, + 15u8, 247u8, 188u8, 14u8, 236u8, 221u8, 222u8, 60u8, 97u8, 71u8, 229u8, + 18u8, 120u8, 182u8, 43u8, 67u8, 248u8, 169u8, 80u8, 170u8, 207u8, + ], + ) + } + #[doc = "See [`Pallet::remove_announcement`]."] + pub fn remove_announcement( + &self, + real: types::remove_announcement::Real, + call_hash: types::remove_announcement::CallHash, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "remove_announcement", + types::RemoveAnnouncement { real, call_hash }, + [ + 195u8, 224u8, 61u8, 33u8, 27u8, 100u8, 168u8, 18u8, 105u8, 23u8, 220u8, + 168u8, 207u8, 231u8, 136u8, 46u8, 181u8, 85u8, 15u8, 151u8, 126u8, + 227u8, 97u8, 162u8, 232u8, 39u8, 45u8, 255u8, 44u8, 167u8, 237u8, 38u8, + ], + ) + } + #[doc = "See [`Pallet::reject_announcement`]."] + pub fn reject_announcement( + &self, + delegate: types::reject_announcement::Delegate, + call_hash: types::reject_announcement::CallHash, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "reject_announcement", + types::RejectAnnouncement { delegate, call_hash }, + [ + 29u8, 140u8, 243u8, 165u8, 143u8, 166u8, 205u8, 203u8, 111u8, 196u8, + 11u8, 2u8, 4u8, 230u8, 11u8, 136u8, 249u8, 139u8, 224u8, 242u8, 96u8, + 146u8, 118u8, 210u8, 104u8, 77u8, 168u8, 28u8, 67u8, 244u8, 91u8, 65u8, + ], + ) + } + #[doc = "See [`Pallet::proxy_announced`]."] + pub fn proxy_announced( + &self, + delegate: types::proxy_announced::Delegate, + real: types::proxy_announced::Real, + force_proxy_type: types::proxy_announced::ForceProxyType, + call: types::proxy_announced::Call, + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( + "Proxy", + "proxy_announced", + types::ProxyAnnounced { + delegate, + real, + force_proxy_type, + call: ::std::boxed::Box::new(call), + }, + [ + 167u8, 179u8, 248u8, 11u8, 104u8, 89u8, 200u8, 83u8, 137u8, 145u8, + 101u8, 236u8, 72u8, 214u8, 210u8, 150u8, 163u8, 188u8, 177u8, 222u8, + 32u8, 83u8, 233u8, 86u8, 173u8, 251u8, 50u8, 18u8, 133u8, 232u8, 143u8, + 18u8, ], ) } } } #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_tx_pause::pallet::Event; + pub type Event = runtime_types::pallet_proxy::pallet::Event; pub mod events { use super::runtime_types; #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, Clone, Debug, Eq, PartialEq, )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "This pallet, or a specific call is now paused."] - pub struct CallPaused { - pub full_name: call_paused::FullName, + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "A proxy was executed correctly, with the given."] + pub struct ProxyExecuted { + pub result: proxy_executed::Result, } - pub mod call_paused { + pub mod proxy_executed { use super::runtime_types; - pub type FullName = ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ); + pub type Result = + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>; } - impl ::subxt::ext::subxt_core::events::StaticEvent for CallPaused { - const PALLET: &'static str = "TxPause"; - const EVENT: &'static str = "CallPaused"; + impl ::subxt::events::StaticEvent for ProxyExecuted { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "ProxyExecuted"; } #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, Clone, Debug, Eq, PartialEq, )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "This pallet, or a specific call is now unpaused."] - pub struct CallUnpaused { - pub full_name: call_unpaused::FullName, + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "A pure account has been created by new proxy with given"] + #[doc = "disambiguation index and proxy type."] + pub struct PureCreated { + pub pure: pure_created::Pure, + pub who: pure_created::Who, + pub proxy_type: pure_created::ProxyType, + pub disambiguation_index: pure_created::DisambiguationIndex, } - pub mod call_unpaused { + pub mod pure_created { use super::runtime_types; - pub type FullName = ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ); + pub type Pure = ::subxt::utils::AccountId32; + pub type Who = ::subxt::utils::AccountId32; + pub type ProxyType = runtime_types::tangle_runtime::ProxyType; + pub type DisambiguationIndex = ::core::primitive::u16; } - impl ::subxt::ext::subxt_core::events::StaticEvent for CallUnpaused { + impl ::subxt::events::StaticEvent for PureCreated { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "PureCreated"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "An announcement was placed to make a call in the future."] + pub struct Announced { + pub real: announced::Real, + pub proxy: announced::Proxy, + pub call_hash: announced::CallHash, + } + pub mod announced { + use super::runtime_types; + pub type Real = ::subxt::utils::AccountId32; + pub type Proxy = ::subxt::utils::AccountId32; + pub type CallHash = ::subxt::utils::H256; + } + impl ::subxt::events::StaticEvent for Announced { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "Announced"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "A proxy was added."] + pub struct ProxyAdded { + pub delegator: proxy_added::Delegator, + pub delegatee: proxy_added::Delegatee, + pub proxy_type: proxy_added::ProxyType, + pub delay: proxy_added::Delay, + } + pub mod proxy_added { + use super::runtime_types; + pub type Delegator = ::subxt::utils::AccountId32; + pub type Delegatee = ::subxt::utils::AccountId32; + pub type ProxyType = runtime_types::tangle_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; + } + impl ::subxt::events::StaticEvent for ProxyAdded { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "ProxyAdded"; + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + #[doc = "A proxy was removed."] + pub struct ProxyRemoved { + pub delegator: proxy_removed::Delegator, + pub delegatee: proxy_removed::Delegatee, + pub proxy_type: proxy_removed::ProxyType, + pub delay: proxy_removed::Delay, + } + pub mod proxy_removed { + use super::runtime_types; + pub type Delegator = ::subxt::utils::AccountId32; + pub type Delegatee = ::subxt::utils::AccountId32; + pub type ProxyType = runtime_types::tangle_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; + } + impl ::subxt::events::StaticEvent for ProxyRemoved { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "ProxyRemoved"; + } + } + pub mod storage { + use super::runtime_types; + pub mod types { + use super::runtime_types; + pub mod proxies { + use super::runtime_types; + pub type Proxies = ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::pallet_proxy::ProxyDefinition< + ::subxt::utils::AccountId32, + runtime_types::tangle_runtime::ProxyType, + ::core::primitive::u64, + >, + >, + ::core::primitive::u128, + ); + pub type Param0 = ::subxt::utils::AccountId32; + } + pub mod announcements { + use super::runtime_types; + pub type Announcements = ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::pallet_proxy::Announcement< + ::subxt::utils::AccountId32, + ::subxt::utils::H256, + ::core::primitive::u64, + >, + >, + ::core::primitive::u128, + ); + pub type Param0 = ::subxt::utils::AccountId32; + } + } + pub struct StorageApi; + impl StorageApi { + #[doc = " The set of account proxies. Maps the account which has delegated to the accounts"] + #[doc = " which are being delegated to, together with the amount held on deposit."] + pub fn proxies_iter( + &self, + ) -> ::subxt::storage::address::Address< + ::subxt::storage::address::StaticStorageMapKey, + types::proxies::Proxies, + (), + ::subxt::storage::address::Yes, + ::subxt::storage::address::Yes, + > { + ::subxt::storage::address::Address::new_static( + "Proxy", + "Proxies", + vec![], + [ + 223u8, 41u8, 16u8, 124u8, 14u8, 158u8, 113u8, 7u8, 229u8, 203u8, 172u8, + 71u8, 221u8, 164u8, 20u8, 177u8, 252u8, 14u8, 117u8, 176u8, 21u8, + 236u8, 79u8, 107u8, 57u8, 148u8, 170u8, 107u8, 179u8, 144u8, 255u8, + 10u8, + ], + ) + } + #[doc = " The set of account proxies. Maps the account which has delegated to the accounts"] + #[doc = " which are being delegated to, together with the amount held on deposit."] + pub fn proxies( + &self, + _0: impl ::std::borrow::Borrow, + ) -> ::subxt::storage::address::Address< + ::subxt::storage::address::StaticStorageMapKey, + types::proxies::Proxies, + ::subxt::storage::address::Yes, + ::subxt::storage::address::Yes, + (), + > { + ::subxt::storage::address::Address::new_static( + "Proxy", + "Proxies", + vec![::subxt::storage::address::make_static_storage_map_key(_0.borrow())], + [ + 223u8, 41u8, 16u8, 124u8, 14u8, 158u8, 113u8, 7u8, 229u8, 203u8, 172u8, + 71u8, 221u8, 164u8, 20u8, 177u8, 252u8, 14u8, 117u8, 176u8, 21u8, + 236u8, 79u8, 107u8, 57u8, 148u8, 170u8, 107u8, 179u8, 144u8, 255u8, + 10u8, + ], + ) + } + #[doc = " The announcements made by the proxy (key)."] + pub fn announcements_iter( + &self, + ) -> ::subxt::storage::address::Address< + ::subxt::storage::address::StaticStorageMapKey, + types::announcements::Announcements, + (), + ::subxt::storage::address::Yes, + ::subxt::storage::address::Yes, + > { + ::subxt::storage::address::Address::new_static( + "Proxy", + "Announcements", + vec![], + [ + 36u8, 91u8, 194u8, 19u8, 186u8, 110u8, 217u8, 123u8, 101u8, 197u8, + 249u8, 185u8, 42u8, 5u8, 244u8, 249u8, 18u8, 156u8, 41u8, 19u8, 86u8, + 12u8, 253u8, 126u8, 232u8, 9u8, 226u8, 210u8, 25u8, 3u8, 115u8, 40u8, + ], + ) + } + #[doc = " The announcements made by the proxy (key)."] + pub fn announcements( + &self, + _0: impl ::std::borrow::Borrow, + ) -> ::subxt::storage::address::Address< + ::subxt::storage::address::StaticStorageMapKey, + types::announcements::Announcements, + ::subxt::storage::address::Yes, + ::subxt::storage::address::Yes, + (), + > { + ::subxt::storage::address::Address::new_static( + "Proxy", + "Announcements", + vec![::subxt::storage::address::make_static_storage_map_key(_0.borrow())], + [ + 36u8, 91u8, 194u8, 19u8, 186u8, 110u8, 217u8, 123u8, 101u8, 197u8, + 249u8, 185u8, 42u8, 5u8, 244u8, 249u8, 18u8, 156u8, 41u8, 19u8, 86u8, + 12u8, 253u8, 126u8, 232u8, 9u8, 226u8, 210u8, 25u8, 3u8, 115u8, 40u8, + ], + ) + } + } + } + pub mod constants { + use super::runtime_types; + pub struct ConstantsApi; + impl ConstantsApi { + #[doc = " The base amount of currency needed to reserve for creating a proxy."] + #[doc = ""] + #[doc = " This is held for an additional storage item whose value size is"] + #[doc = " `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes."] + pub fn proxy_deposit_base( + &self, + ) -> ::subxt::constants::Address<::core::primitive::u128> { + ::subxt::constants::Address::new_static( + "Proxy", + "ProxyDepositBase", + [ + 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, + 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, + 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, + ], + ) + } + #[doc = " The amount of currency needed per proxy added."] + #[doc = ""] + #[doc = " This is held for adding 32 bytes plus an instance of `ProxyType` more into a"] + #[doc = " pre-existing storage value. Thus, when configuring `ProxyDepositFactor` one should take"] + #[doc = " into account `32 + proxy_type.encode().len()` bytes of data."] + pub fn proxy_deposit_factor( + &self, + ) -> ::subxt::constants::Address<::core::primitive::u128> { + ::subxt::constants::Address::new_static( + "Proxy", + "ProxyDepositFactor", + [ + 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, + 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, + 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, + ], + ) + } + #[doc = " The maximum amount of proxies allowed for a single account."] + pub fn max_proxies(&self) -> ::subxt::constants::Address<::core::primitive::u32> { + ::subxt::constants::Address::new_static( + "Proxy", + "MaxProxies", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " The maximum amount of time-delayed announcements that are allowed to be pending."] + pub fn max_pending(&self) -> ::subxt::constants::Address<::core::primitive::u32> { + ::subxt::constants::Address::new_static( + "Proxy", + "MaxPending", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " The base amount of currency needed to reserve for creating an announcement."] + #[doc = ""] + #[doc = " This is held when a new storage item holding a `Balance` is created (typically 16"] + #[doc = " bytes)."] + pub fn announcement_deposit_base( + &self, + ) -> ::subxt::constants::Address<::core::primitive::u128> { + ::subxt::constants::Address::new_static( + "Proxy", + "AnnouncementDepositBase", + [ + 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, + 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, + 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, + ], + ) + } + #[doc = " The amount of currency needed per announcement made."] + #[doc = ""] + #[doc = " This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes)"] + #[doc = " into a pre-existing storage value."] + pub fn announcement_deposit_factor( + &self, + ) -> ::subxt::constants::Address<::core::primitive::u128> { + ::subxt::constants::Address::new_static( + "Proxy", + "AnnouncementDepositFactor", + [ + 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, + 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, + 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, + ], + ) + } + } + } + } + pub mod tx_pause { + use super::root_mod; + use super::runtime_types; + #[doc = "The `Error` enum of this pallet."] + pub type Error = runtime_types::pallet_tx_pause::pallet::Error; + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub type Call = runtime_types::pallet_tx_pause::pallet::Call; + pub mod calls { + use super::root_mod; + use super::runtime_types; + type DispatchError = runtime_types::sp_runtime::DispatchError; + pub mod types { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::pause`]."] + pub struct Pause { + pub full_name: pause::FullName, + } + pub mod pause { + use super::runtime_types; + pub type FullName = ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ); + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Pause { + const PALLET: &'static str = "TxPause"; + const CALL: &'static str = "pause"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::unpause`]."] + pub struct Unpause { + pub ident: unpause::Ident, + } + pub mod unpause { + use super::runtime_types; + pub type Ident = ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ); + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Unpause { + const PALLET: &'static str = "TxPause"; + const CALL: &'static str = "unpause"; + } + } + pub struct TransactionApi; + impl TransactionApi { + #[doc = "See [`Pallet::pause`]."] + pub fn pause( + &self, + full_name: types::pause::FullName, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "TxPause", + "pause", + types::Pause { full_name }, + [ + 244u8, 112u8, 104u8, 148u8, 17u8, 164u8, 228u8, 229u8, 103u8, 212u8, + 137u8, 16u8, 194u8, 167u8, 150u8, 148u8, 151u8, 233u8, 15u8, 2u8, 54u8, + 96u8, 158u8, 43u8, 222u8, 128u8, 199u8, 87u8, 74u8, 38u8, 6u8, 215u8, + ], + ) + } + #[doc = "See [`Pallet::unpause`]."] + pub fn unpause( + &self, + ident: types::unpause::Ident, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "TxPause", + "unpause", + types::Unpause { ident }, + [ + 213u8, 245u8, 75u8, 131u8, 24u8, 188u8, 101u8, 168u8, 39u8, 246u8, + 228u8, 155u8, 255u8, 146u8, 245u8, 218u8, 68u8, 102u8, 75u8, 133u8, + 54u8, 142u8, 191u8, 87u8, 148u8, 59u8, 99u8, 11u8, 33u8, 184u8, 24u8, + 179u8, + ], + ) + } + } + } + #[doc = "The `Event` enum of this pallet"] + pub type Event = runtime_types::pallet_tx_pause::pallet::Event; + pub mod events { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + #[doc = "This pallet, or a specific call is now paused."] + pub struct CallPaused { + pub full_name: call_paused::FullName, + } + pub mod call_paused { + use super::runtime_types; + pub type FullName = ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ); + } + impl ::subxt::ext::subxt_core::events::StaticEvent for CallPaused { + const PALLET: &'static str = "TxPause"; + const EVENT: &'static str = "CallPaused"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + #[doc = "This pallet, or a specific call is now unpaused."] + pub struct CallUnpaused { + pub full_name: call_unpaused::FullName, + } + pub mod call_unpaused { + use super::runtime_types; + pub type FullName = ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ); + } + impl ::subxt::ext::subxt_core::events::StaticEvent for CallUnpaused { const PALLET: &'static str = "TxPause"; const EVENT: &'static str = "CallUnpaused"; } @@ -33095,10 +33904,10 @@ pub mod api { "batch", types::Batch { calls }, [ - 132u8, 127u8, 147u8, 90u8, 245u8, 244u8, 115u8, 31u8, 112u8, 18u8, - 128u8, 189u8, 229u8, 135u8, 128u8, 13u8, 3u8, 99u8, 146u8, 176u8, 63u8, - 35u8, 248u8, 226u8, 21u8, 176u8, 178u8, 90u8, 171u8, 182u8, 210u8, - 148u8, + 41u8, 222u8, 198u8, 43u8, 214u8, 172u8, 78u8, 213u8, 242u8, 71u8, 13u8, + 132u8, 189u8, 63u8, 87u8, 64u8, 89u8, 219u8, 116u8, 165u8, 192u8, + 188u8, 246u8, 147u8, 45u8, 186u8, 79u8, 135u8, 191u8, 139u8, 209u8, + 182u8, ], ) } @@ -33116,9 +33925,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 193u8, 215u8, 4u8, 71u8, 228u8, 29u8, 227u8, 162u8, 203u8, 166u8, - 215u8, 223u8, 63u8, 76u8, 46u8, 26u8, 95u8, 162u8, 242u8, 27u8, 117u8, - 47u8, 2u8, 238u8, 95u8, 30u8, 164u8, 84u8, 136u8, 53u8, 90u8, 73u8, + 198u8, 169u8, 94u8, 204u8, 232u8, 2u8, 13u8, 120u8, 51u8, 50u8, 42u8, + 168u8, 209u8, 123u8, 192u8, 242u8, 117u8, 76u8, 106u8, 180u8, 183u8, + 194u8, 160u8, 179u8, 18u8, 135u8, 177u8, 218u8, 108u8, 15u8, 118u8, + 157u8, ], ) } @@ -33132,9 +33942,10 @@ pub mod api { "batch_all", types::BatchAll { calls }, [ - 25u8, 88u8, 119u8, 119u8, 65u8, 128u8, 40u8, 251u8, 226u8, 50u8, 30u8, - 242u8, 4u8, 54u8, 162u8, 168u8, 110u8, 224u8, 62u8, 96u8, 32u8, 184u8, - 106u8, 31u8, 73u8, 244u8, 60u8, 65u8, 62u8, 174u8, 54u8, 42u8, + 64u8, 152u8, 102u8, 124u8, 16u8, 118u8, 88u8, 145u8, 190u8, 209u8, + 204u8, 66u8, 9u8, 21u8, 117u8, 72u8, 156u8, 242u8, 194u8, 139u8, 59u8, + 139u8, 232u8, 190u8, 136u8, 111u8, 21u8, 104u8, 194u8, 69u8, 141u8, + 183u8, ], ) } @@ -33152,10 +33963,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 194u8, 62u8, 35u8, 169u8, 145u8, 104u8, 226u8, 20u8, 170u8, 100u8, - 151u8, 68u8, 25u8, 176u8, 19u8, 143u8, 29u8, 93u8, 163u8, 14u8, 140u8, - 150u8, 64u8, 143u8, 32u8, 109u8, 105u8, 164u8, 223u8, 53u8, 130u8, - 220u8, + 172u8, 156u8, 217u8, 22u8, 225u8, 244u8, 51u8, 63u8, 144u8, 63u8, + 111u8, 60u8, 118u8, 106u8, 249u8, 195u8, 43u8, 36u8, 142u8, 36u8, + 211u8, 136u8, 32u8, 235u8, 221u8, 177u8, 109u8, 35u8, 160u8, 129u8, + 220u8, 73u8, ], ) } @@ -33169,9 +33980,10 @@ pub mod api { "force_batch", types::ForceBatch { calls }, [ - 63u8, 253u8, 190u8, 214u8, 2u8, 104u8, 20u8, 87u8, 0u8, 103u8, 212u8, - 51u8, 232u8, 212u8, 196u8, 250u8, 30u8, 13u8, 38u8, 205u8, 194u8, 64u8, - 202u8, 129u8, 73u8, 71u8, 46u8, 63u8, 172u8, 55u8, 208u8, 133u8, + 22u8, 173u8, 112u8, 164u8, 109u8, 164u8, 137u8, 168u8, 213u8, 122u8, + 100u8, 80u8, 205u8, 67u8, 220u8, 184u8, 58u8, 182u8, 124u8, 126u8, + 162u8, 75u8, 164u8, 104u8, 91u8, 91u8, 67u8, 18u8, 46u8, 36u8, 154u8, + 132u8, ], ) } @@ -33189,9 +34001,9 @@ pub mod api { weight, }, [ - 69u8, 157u8, 26u8, 51u8, 80u8, 165u8, 204u8, 44u8, 251u8, 150u8, 225u8, - 218u8, 189u8, 240u8, 86u8, 134u8, 47u8, 44u8, 225u8, 4u8, 149u8, 194u8, - 15u8, 35u8, 152u8, 87u8, 112u8, 246u8, 50u8, 81u8, 152u8, 151u8, + 243u8, 7u8, 221u8, 94u8, 44u8, 252u8, 80u8, 23u8, 254u8, 49u8, 73u8, + 248u8, 198u8, 224u8, 248u8, 92u8, 179u8, 74u8, 143u8, 50u8, 40u8, + 239u8, 33u8, 209u8, 245u8, 39u8, 8u8, 88u8, 19u8, 238u8, 245u8, 133u8, ], ) } @@ -33547,10 +34359,9 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 208u8, 238u8, 253u8, 218u8, 48u8, 133u8, 68u8, 209u8, 19u8, 243u8, - 42u8, 31u8, 197u8, 120u8, 68u8, 135u8, 147u8, 140u8, 130u8, 123u8, - 150u8, 75u8, 135u8, 195u8, 190u8, 232u8, 54u8, 190u8, 133u8, 160u8, - 246u8, 215u8, + 21u8, 63u8, 7u8, 58u8, 122u8, 76u8, 7u8, 120u8, 111u8, 203u8, 163u8, + 86u8, 163u8, 216u8, 130u8, 122u8, 107u8, 7u8, 194u8, 75u8, 20u8, 212u8, + 92u8, 85u8, 113u8, 174u8, 42u8, 71u8, 150u8, 60u8, 115u8, 152u8, ], ) } @@ -33574,10 +34385,10 @@ pub mod api { max_weight, }, [ - 199u8, 52u8, 141u8, 174u8, 10u8, 219u8, 72u8, 71u8, 141u8, 182u8, 38u8, - 199u8, 217u8, 248u8, 129u8, 242u8, 39u8, 109u8, 235u8, 36u8, 211u8, - 203u8, 140u8, 237u8, 249u8, 246u8, 43u8, 222u8, 246u8, 193u8, 91u8, - 243u8, + 23u8, 58u8, 91u8, 211u8, 234u8, 66u8, 245u8, 109u8, 160u8, 179u8, 56u8, + 163u8, 91u8, 160u8, 129u8, 215u8, 111u8, 12u8, 138u8, 142u8, 162u8, + 122u8, 232u8, 111u8, 139u8, 188u8, 53u8, 158u8, 28u8, 225u8, 233u8, + 30u8, ], ) } @@ -35569,22 +36380,18 @@ pub mod api { const CALL: &'static str = "force_set_expiry_config"; } #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, Clone, Debug, Eq, PartialEq, )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] #[doc = "See [`Pallet::claim_signed`]."] pub struct ClaimSigned { pub dest: claim_signed::Dest, @@ -35595,7 +36402,7 @@ pub mod api { runtime_types::pallet_airdrop_claims::utils::MultiAddress, >; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ClaimSigned { + impl ::subxt::blocks::StaticExtrinsic for ClaimSigned { const PALLET: &'static str = "Claims"; const CALL: &'static str = "claim_signed"; } @@ -35699,8 +36506,8 @@ pub mod api { pub fn claim_signed( &self, dest: types::claim_signed::Dest, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + ) -> ::subxt::tx::Payload { + ::subxt::tx::Payload::new_static( "Claims", "claim_signed", types::ClaimSigned { dest }, @@ -35997,18 +36804,11 @@ pub mod api { } } } - pub mod roles { - use super::root_mod; + pub mod runtime_types { use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_roles::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_roles::pallet::Call; - pub mod calls { - use super::root_mod; + pub mod bounded_collections { use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { + pub mod bounded_btree_map { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36027,20 +36827,12 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::create_profile`]."] - pub struct CreateProfile { - pub profile: create_profile::Profile, - pub max_active_services: create_profile::MaxActiveServices, - } - pub mod create_profile { - use super::runtime_types; - pub type Profile = runtime_types::pallet_roles::profile::Profile; - pub type MaxActiveServices = ::core::option::Option<::core::primitive::u32>; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CreateProfile { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "create_profile"; - } + pub struct BoundedBTreeMap<_0, _1>( + pub ::subxt::ext::subxt_core::utils::KeyedVec<_0, _1>, + ); + } + pub mod bounded_vec { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36058,18 +36850,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::update_profile`]."] - pub struct UpdateProfile { - pub updated_profile: update_profile::UpdatedProfile, - } - pub mod update_profile { - use super::runtime_types; - pub type UpdatedProfile = runtime_types::pallet_roles::profile::Profile; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for UpdateProfile { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "update_profile"; - } + pub struct BoundedVec<_0>(pub ::subxt::ext::subxt_core::alloc::vec::Vec<_0>); + } + pub mod weak_bounded_vec { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36087,12 +36871,30 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::delete_profile`]."] - pub struct DeleteProfile; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for DeleteProfile { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "delete_profile"; - } + pub struct WeakBoundedVec<_0>(pub ::subxt::ext::subxt_core::alloc::vec::Vec<_0>); + } + } + pub mod ethbloom { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Bloom(pub [::core::primitive::u8; 256usize]); + } + pub mod ethereum { + use super::runtime_types; + pub mod block { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36110,12 +36912,16 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::chill`]."] - pub struct Chill; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Chill { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "chill"; + pub struct Block<_0> { + pub header: runtime_types::ethereum::header::Header, + pub transactions: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, + pub ommers: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::ethereum::header::Header, + >, } + } + pub mod header { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36133,19 +36939,27 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::unbond_funds`]."] - pub struct UnbondFunds { - #[codec(compact)] - pub amount: unbond_funds::Amount, - } - pub mod unbond_funds { - use super::runtime_types; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for UnbondFunds { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "unbond_funds"; + pub struct Header { + pub parent_hash: ::subxt::ext::subxt_core::utils::H256, + pub ommers_hash: ::subxt::ext::subxt_core::utils::H256, + pub beneficiary: ::subxt::ext::subxt_core::utils::H160, + pub state_root: ::subxt::ext::subxt_core::utils::H256, + pub transactions_root: ::subxt::ext::subxt_core::utils::H256, + pub receipts_root: ::subxt::ext::subxt_core::utils::H256, + pub logs_bloom: runtime_types::ethbloom::Bloom, + pub difficulty: runtime_types::primitive_types::U256, + pub number: runtime_types::primitive_types::U256, + pub gas_limit: runtime_types::primitive_types::U256, + pub gas_used: runtime_types::primitive_types::U256, + pub timestamp: ::core::primitive::u64, + pub extra_data: + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + pub mix_hash: ::subxt::ext::subxt_core::utils::H256, + pub nonce: runtime_types::ethereum_types::hash::H64, } + } + pub mod log { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36163,12 +36977,16 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::withdraw_unbonded`]."] - pub struct WithdrawUnbonded; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for WithdrawUnbonded { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "withdraw_unbonded"; + pub struct Log { + pub address: ::subxt::ext::subxt_core::utils::H160, + pub topics: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H256, + >, + pub data: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, } + } + pub mod receipt { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36186,19 +37004,13 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::payout_stakers`]."] - pub struct PayoutStakers { - pub validator_stash: payout_stakers::ValidatorStash, - pub era: payout_stakers::Era, - } - pub mod payout_stakers { - use super::runtime_types; - pub type ValidatorStash = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Era = ::core::primitive::u32; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for PayoutStakers { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "payout_stakers"; + pub struct EIP658ReceiptData { + pub status_code: ::core::primitive::u8, + pub used_gas: runtime_types::primitive_types::U256, + pub logs_bloom: runtime_types::ethbloom::Bloom, + pub logs: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::ethereum::log::Log, + >, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36217,238 +37029,454 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_min_restaking_bond`]."] - pub struct SetMinRestakingBond { - pub min_restaking_bond: set_min_restaking_bond::MinRestakingBond, - } - pub mod set_min_restaking_bond { - use super::runtime_types; - pub type MinRestakingBond = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetMinRestakingBond { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "set_min_restaking_bond"; + pub enum ReceiptV3 { + #[codec(index = 0)] + Legacy(runtime_types::ethereum::receipt::EIP658ReceiptData), + #[codec(index = 1)] + EIP2930(runtime_types::ethereum::receipt::EIP658ReceiptData), + #[codec(index = 2)] + EIP1559(runtime_types::ethereum::receipt::EIP658ReceiptData), } } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::create_profile`]."] - pub fn create_profile( - &self, - profile: types::create_profile::Profile, - max_active_services: types::create_profile::MaxActiveServices, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "create_profile", - types::CreateProfile { profile, max_active_services }, - [ - 37u8, 113u8, 152u8, 32u8, 7u8, 51u8, 181u8, 115u8, 23u8, 122u8, 46u8, - 193u8, 63u8, 217u8, 110u8, 216u8, 43u8, 165u8, 250u8, 18u8, 247u8, - 78u8, 94u8, 15u8, 169u8, 40u8, 133u8, 237u8, 117u8, 51u8, 203u8, 53u8, - ], - ) - } - #[doc = "See [`Pallet::update_profile`]."] - pub fn update_profile( - &self, - updated_profile: types::update_profile::UpdatedProfile, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "update_profile", - types::UpdateProfile { updated_profile }, - [ - 24u8, 87u8, 130u8, 251u8, 183u8, 220u8, 129u8, 43u8, 53u8, 5u8, 236u8, - 129u8, 169u8, 247u8, 136u8, 182u8, 176u8, 46u8, 34u8, 87u8, 176u8, - 206u8, 202u8, 52u8, 191u8, 27u8, 137u8, 104u8, 173u8, 126u8, 83u8, - 213u8, - ], - ) + pub mod transaction { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct AccessListItem { + pub address: ::subxt::ext::subxt_core::utils::H160, + pub storage_keys: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H256, + >, } - #[doc = "See [`Pallet::delete_profile`]."] - pub fn delete_profile( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "delete_profile", - types::DeleteProfile {}, - [ - 183u8, 103u8, 250u8, 206u8, 24u8, 200u8, 142u8, 200u8, 204u8, 109u8, - 97u8, 16u8, 145u8, 37u8, 215u8, 153u8, 210u8, 241u8, 239u8, 4u8, 150u8, - 117u8, 92u8, 200u8, 163u8, 54u8, 145u8, 6u8, 94u8, 255u8, 220u8, 118u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct EIP1559Transaction { + pub chain_id: ::core::primitive::u64, + pub nonce: runtime_types::primitive_types::U256, + pub max_priority_fee_per_gas: runtime_types::primitive_types::U256, + pub max_fee_per_gas: runtime_types::primitive_types::U256, + pub gas_limit: runtime_types::primitive_types::U256, + pub action: runtime_types::ethereum::transaction::TransactionAction, + pub value: runtime_types::primitive_types::U256, + pub input: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + pub access_list: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::ethereum::transaction::AccessListItem, + >, + pub odd_y_parity: ::core::primitive::bool, + pub r: ::subxt::ext::subxt_core::utils::H256, + pub s: ::subxt::ext::subxt_core::utils::H256, } - #[doc = "See [`Pallet::chill`]."] - pub fn chill( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "chill", - types::Chill {}, - [ - 157u8, 75u8, 243u8, 69u8, 110u8, 192u8, 22u8, 27u8, 107u8, 68u8, 236u8, - 58u8, 179u8, 34u8, 118u8, 98u8, 131u8, 62u8, 242u8, 84u8, 149u8, 24u8, - 83u8, 223u8, 78u8, 12u8, 192u8, 22u8, 111u8, 11u8, 171u8, 149u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct EIP2930Transaction { + pub chain_id: ::core::primitive::u64, + pub nonce: runtime_types::primitive_types::U256, + pub gas_price: runtime_types::primitive_types::U256, + pub gas_limit: runtime_types::primitive_types::U256, + pub action: runtime_types::ethereum::transaction::TransactionAction, + pub value: runtime_types::primitive_types::U256, + pub input: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + pub access_list: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::ethereum::transaction::AccessListItem, + >, + pub odd_y_parity: ::core::primitive::bool, + pub r: ::subxt::ext::subxt_core::utils::H256, + pub s: ::subxt::ext::subxt_core::utils::H256, } - #[doc = "See [`Pallet::unbond_funds`]."] - pub fn unbond_funds( - &self, - amount: types::unbond_funds::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "unbond_funds", - types::UnbondFunds { amount }, - [ - 156u8, 162u8, 131u8, 178u8, 50u8, 254u8, 82u8, 29u8, 224u8, 210u8, - 134u8, 156u8, 219u8, 6u8, 67u8, 32u8, 20u8, 118u8, 54u8, 252u8, 60u8, - 28u8, 45u8, 10u8, 234u8, 76u8, 104u8, 191u8, 13u8, 186u8, 154u8, 180u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct LegacyTransaction { + pub nonce: runtime_types::primitive_types::U256, + pub gas_price: runtime_types::primitive_types::U256, + pub gas_limit: runtime_types::primitive_types::U256, + pub action: runtime_types::ethereum::transaction::TransactionAction, + pub value: runtime_types::primitive_types::U256, + pub input: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + pub signature: runtime_types::ethereum::transaction::TransactionSignature, } - #[doc = "See [`Pallet::withdraw_unbonded`]."] - pub fn withdraw_unbonded( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "withdraw_unbonded", - types::WithdrawUnbonded {}, - [ - 80u8, 176u8, 200u8, 141u8, 68u8, 48u8, 226u8, 210u8, 103u8, 124u8, - 204u8, 178u8, 234u8, 34u8, 83u8, 205u8, 100u8, 166u8, 173u8, 10u8, - 251u8, 249u8, 128u8, 53u8, 101u8, 145u8, 210u8, 204u8, 245u8, 229u8, - 164u8, 113u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum TransactionAction { + #[codec(index = 0)] + Call(::subxt::ext::subxt_core::utils::H160), + #[codec(index = 1)] + Create, } - #[doc = "See [`Pallet::payout_stakers`]."] - pub fn payout_stakers( - &self, - validator_stash: types::payout_stakers::ValidatorStash, - era: types::payout_stakers::Era, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "payout_stakers", - types::PayoutStakers { validator_stash, era }, - [ - 69u8, 67u8, 140u8, 197u8, 89u8, 20u8, 59u8, 55u8, 142u8, 197u8, 62u8, - 107u8, 239u8, 50u8, 237u8, 52u8, 4u8, 65u8, 119u8, 73u8, 138u8, 57u8, - 46u8, 78u8, 252u8, 157u8, 187u8, 14u8, 232u8, 244u8, 217u8, 171u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct TransactionRecoveryId(pub ::core::primitive::u64); + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct TransactionSignature { + pub v: runtime_types::ethereum::transaction::TransactionRecoveryId, + pub r: ::subxt::ext::subxt_core::utils::H256, + pub s: ::subxt::ext::subxt_core::utils::H256, } - #[doc = "See [`Pallet::set_min_restaking_bond`]."] - pub fn set_min_restaking_bond( - &self, - min_restaking_bond: types::set_min_restaking_bond::MinRestakingBond, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "set_min_restaking_bond", - types::SetMinRestakingBond { min_restaking_bond }, - [ - 17u8, 172u8, 96u8, 141u8, 192u8, 227u8, 80u8, 28u8, 239u8, 35u8, 244u8, - 106u8, 177u8, 60u8, 249u8, 46u8, 112u8, 230u8, 141u8, 134u8, 68u8, - 57u8, 83u8, 69u8, 227u8, 107u8, 149u8, 133u8, 220u8, 82u8, 77u8, 50u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum TransactionV2 { + #[codec(index = 0)] + Legacy(runtime_types::ethereum::transaction::LegacyTransaction), + #[codec(index = 1)] + EIP2930(runtime_types::ethereum::transaction::EIP2930Transaction), + #[codec(index = 2)] + EIP1559(runtime_types::ethereum::transaction::EIP1559Transaction), } } } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_roles::pallet::Event; - pub mod events { + pub mod ethereum_types { use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Role assigned to the validator."] - pub struct RoleAssigned { - pub account: role_assigned::Account, - pub role: role_assigned::Role, - } - pub mod role_assigned { + pub mod hash { use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Role = runtime_types::tangle_primitives::roles::RoleType; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for RoleAssigned { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "RoleAssigned"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Removed validator from role."] - pub struct RoleRemoved { - pub account: role_removed::Account, - pub role: role_removed::Role, + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct H64(pub [::core::primitive::u8; 8usize]); } - pub mod role_removed { + } + pub mod evm { + use super::runtime_types; + pub mod backend { use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Role = runtime_types::tangle_primitives::roles::RoleType; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for RoleRemoved { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "RoleRemoved"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Slashed validator."] - pub struct Slashed { - pub account: slashed::Account, - pub amount: slashed::Amount, + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Basic { + pub balance: runtime_types::primitive_types::U256, + pub nonce: runtime_types::primitive_types::U256, + } } - pub mod slashed { - use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Amount = ::core::primitive::u128; + } + pub mod evm_core { + use super::runtime_types; + pub mod error { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum ExitError { + #[codec(index = 0)] + StackUnderflow, + #[codec(index = 1)] + StackOverflow, + #[codec(index = 2)] + InvalidJump, + #[codec(index = 3)] + InvalidRange, + #[codec(index = 4)] + DesignatedInvalid, + #[codec(index = 5)] + CallTooDeep, + #[codec(index = 6)] + CreateCollision, + #[codec(index = 7)] + CreateContractLimit, + #[codec(index = 15)] + InvalidCode(runtime_types::evm_core::opcode::Opcode), + #[codec(index = 8)] + OutOfOffset, + #[codec(index = 9)] + OutOfGas, + #[codec(index = 10)] + OutOfFund, + #[codec(index = 11)] + PCUnderflow, + #[codec(index = 12)] + CreateEmpty, + #[codec(index = 13)] + Other(::subxt::ext::subxt_core::alloc::string::String), + #[codec(index = 14)] + MaxNonce, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum ExitFatal { + #[codec(index = 0)] + NotSupported, + #[codec(index = 1)] + UnhandledInterrupt, + #[codec(index = 2)] + CallErrorAsFatal(runtime_types::evm_core::error::ExitError), + #[codec(index = 3)] + Other(::subxt::ext::subxt_core::alloc::string::String), + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum ExitReason { + #[codec(index = 0)] + Succeed(runtime_types::evm_core::error::ExitSucceed), + #[codec(index = 1)] + Error(runtime_types::evm_core::error::ExitError), + #[codec(index = 2)] + Revert(runtime_types::evm_core::error::ExitRevert), + #[codec(index = 3)] + Fatal(runtime_types::evm_core::error::ExitFatal), + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum ExitRevert { + #[codec(index = 0)] + Reverted, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum ExitSucceed { + #[codec(index = 0)] + Stopped, + #[codec(index = 1)] + Returned, + #[codec(index = 2)] + Suicided, + } } - impl ::subxt::ext::subxt_core::events::StaticEvent for Slashed { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "Slashed"; + pub mod opcode { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Opcode(pub ::core::primitive::u8); } + } + pub mod finality_grandpa { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36462,23 +37490,11 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "New profile created."] - pub struct ProfileCreated { - pub account: profile_created::Account, - pub total_profile_restake: profile_created::TotalProfileRestake, - pub roles: profile_created::Roles, - } - pub mod profile_created { - use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type TotalProfileRestake = ::core::primitive::u128; - pub type Roles = ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::roles::RoleType, - >; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProfileCreated { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "ProfileCreated"; + pub struct Equivocation<_0, _1, _2> { + pub round_number: ::core::primitive::u64, + pub identity: _0, + pub first: (_1, _2), + pub second: (_1, _2), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36493,23 +37509,9 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Profile updated."] - pub struct ProfileUpdated { - pub account: profile_updated::Account, - pub total_profile_restake: profile_updated::TotalProfileRestake, - pub roles: profile_updated::Roles, - } - pub mod profile_updated { - use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type TotalProfileRestake = ::core::primitive::u128; - pub type Roles = ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::roles::RoleType, - >; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProfileUpdated { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "ProfileUpdated"; + pub struct Precommit<_0, _1> { + pub target_hash: _0, + pub target_number: _1, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36524,18 +37526,13 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Profile deleted."] - pub struct ProfileDeleted { - pub account: profile_deleted::Account, - } - pub mod profile_deleted { - use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProfileDeleted { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "ProfileDeleted"; + pub struct Prevote<_0, _1> { + pub target_hash: _0, + pub target_number: _1, } + } + pub mod fp_evm { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36549,20 +37546,13 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Pending jobs,that cannot be opted out at the moment."] - pub struct PendingJobs { - pub pending_jobs: pending_jobs::PendingJobs, - } - pub mod pending_jobs { - use super::runtime_types; - pub type PendingJobs = ::subxt::ext::subxt_core::alloc::vec::Vec<( - runtime_types::tangle_primitives::roles::RoleType, - ::core::primitive::u64, - )>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for PendingJobs { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "PendingJobs"; + pub struct ExecutionInfoV2<_0> { + pub exit_reason: runtime_types::evm_core::error::ExitReason, + pub value: _0, + pub used_gas: runtime_types::fp_evm::UsedGas, + pub weight_info: ::core::option::Option, + pub logs: + ::subxt::ext::subxt_core::alloc::vec::Vec, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36577,17 +37567,9 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Roles inflation reward paid for era"] - pub struct RolesRewardSet { - pub total_rewards: roles_reward_set::TotalRewards, - } - pub mod roles_reward_set { - use super::runtime_types; - pub type TotalRewards = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for RolesRewardSet { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "RolesRewardSet"; + pub struct UsedGas { + pub standard: runtime_types::primitive_types::U256, + pub effective: runtime_types::primitive_types::U256, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36602,20 +37584,15 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "The re-stakers' rewards are getting paid."] - pub struct PayoutStarted { - pub era_index: payout_started::EraIndex, - pub validator_stash: payout_started::ValidatorStash, - } - pub mod payout_started { - use super::runtime_types; - pub type EraIndex = ::core::primitive::u32; - pub type ValidatorStash = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for PayoutStarted { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "PayoutStarted"; + pub struct WeightInfo { + pub ref_time_limit: ::core::option::Option<::core::primitive::u64>, + pub proof_size_limit: ::core::option::Option<::core::primitive::u64>, + pub ref_time_usage: ::core::option::Option<::core::primitive::u64>, + pub proof_size_usage: ::core::option::Option<::core::primitive::u64>, } + } + pub mod fp_rpc { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36629,20 +37606,45 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "The re-staker has been rewarded by this amount."] - pub struct Rewarded { - pub stash: rewarded::Stash, - pub amount: rewarded::Amount, + pub struct TransactionStatus { + pub transaction_hash: ::subxt::ext::subxt_core::utils::H256, + pub transaction_index: ::core::primitive::u32, + pub from: ::subxt::ext::subxt_core::utils::H160, + pub to: ::core::option::Option<::subxt::ext::subxt_core::utils::H160>, + pub contract_address: ::core::option::Option<::subxt::ext::subxt_core::utils::H160>, + pub logs: + ::subxt::ext::subxt_core::alloc::vec::Vec, + pub logs_bloom: runtime_types::ethbloom::Bloom, } - pub mod rewarded { + } + pub mod fp_self_contained { + use super::runtime_types; + pub mod unchecked_extrinsic { use super::runtime_types; - pub type Stash = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for Rewarded { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "Rewarded"; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct UncheckedExtrinsic<_0, _1, _2, _3>( + pub ::subxt::ext::subxt_core::utils::UncheckedExtrinsic<_0, _1, _2, _3>, + ); } + } + pub mod frame_metadata_hash_extension { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -36656,342 +37658,389 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "The min restaking bond amount has been updated"] - pub struct MinRestakingBondUpdated { - pub value: min_restaking_bond_updated::Value, - } - pub mod min_restaking_bond_updated { - use super::runtime_types; - pub type Value = ::core::primitive::u128; + pub struct CheckMetadataHash { + pub mode: runtime_types::frame_metadata_hash_extension::Mode, } - impl ::subxt::ext::subxt_core::events::StaticEvent for MinRestakingBondUpdated { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "MinRestakingBondUpdated"; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum Mode { + #[codec(index = 0)] + Disabled, + #[codec(index = 1)] + Enabled, } } - pub mod storage { + pub mod frame_support { use super::runtime_types; - pub mod types { + pub mod dispatch { use super::runtime_types; - pub mod ledger { - use super::runtime_types; - pub type Ledger = runtime_types::pallet_roles::types::RestakingLedger; - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum DispatchClass { + #[codec(index = 0)] + Normal, + #[codec(index = 1)] + Operational, + #[codec(index = 2)] + Mandatory, } - pub mod account_roles_mapping { - use super::runtime_types; - pub type AccountRolesMapping = - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::tangle_primitives::roles::RoleType, - >; - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct DispatchInfo { + pub weight: runtime_types::sp_weights::weight_v2::Weight, + pub class: runtime_types::frame_support::dispatch::DispatchClass, + pub pays_fee: runtime_types::frame_support::dispatch::Pays, } - pub mod min_restaking_bond { - use super::runtime_types; - pub type MinRestakingBond = ::core::primitive::u128; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum Pays { + #[codec(index = 0)] + Yes, + #[codec(index = 1)] + No, } - pub mod total_restake { - use super::runtime_types; - pub type TotalRestake = ::core::primitive::u128; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct PerDispatchClass<_0> { + pub normal: _0, + pub operational: _0, + pub mandatory: _0, } - pub mod validator_jobs_in_era { - use super::runtime_types; - pub type ValidatorJobsInEra = - runtime_types::bounded_collections::bounded_btree_map::BoundedBTreeMap< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum RawOrigin<_0> { + #[codec(index = 0)] + Root, + #[codec(index = 1)] + Signed(_0), + #[codec(index = 2)] + None, } - pub mod eras_restake_reward_points { + } + pub mod traits { + use super::runtime_types; + pub mod preimages { use super::runtime_types; - pub type ErasRestakeRewardPoints = - runtime_types::pallet_staking::EraRewardPoints< - ::subxt::ext::subxt_core::utils::AccountId32, - >; - pub type Param0 = ::core::primitive::u32; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum Bounded<_0, _1> { + #[codec(index = 0)] + Legacy { + hash: ::subxt::ext::subxt_core::utils::H256, + }, + #[codec(index = 1)] + Inline( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ), + #[codec(index = 2)] + Lookup { + hash: ::subxt::ext::subxt_core::utils::H256, + len: ::core::primitive::u32, + }, + __Ignore(::core::marker::PhantomData<(_0, _1)>), + } } - pub mod active_restaker_era { + pub mod tokens { use super::runtime_types; - pub type ActiveRestakerEra = runtime_types::pallet_staking::ActiveEraInfo; - } - } - pub struct StorageApi; - impl StorageApi { - #[doc = " Map from all \"controller\" accounts to the info regarding the staking."] - pub fn ledger_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::ledger::Ledger, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "Ledger", - (), - [ - 121u8, 10u8, 98u8, 199u8, 221u8, 202u8, 221u8, 30u8, 121u8, 135u8, - 145u8, 134u8, 230u8, 199u8, 212u8, 184u8, 129u8, 124u8, 172u8, 143u8, - 51u8, 99u8, 112u8, 81u8, 123u8, 187u8, 113u8, 177u8, 126u8, 0u8, 168u8, - 4u8, - ], - ) - } - #[doc = " Map from all \"controller\" accounts to the info regarding the staking."] - pub fn ledger( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::ledger::Param0, - >, - types::ledger::Ledger, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "Ledger", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 121u8, 10u8, 98u8, 199u8, 221u8, 202u8, 221u8, 30u8, 121u8, 135u8, - 145u8, 134u8, 230u8, 199u8, 212u8, 184u8, 129u8, 124u8, 172u8, 143u8, - 51u8, 99u8, 112u8, 81u8, 123u8, 187u8, 113u8, 177u8, 126u8, 0u8, 168u8, - 4u8, - ], - ) - } - #[doc = " Mapping of resource to bridge index"] - pub fn account_roles_mapping_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::account_roles_mapping::AccountRolesMapping, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "AccountRolesMapping", - (), - [ - 152u8, 61u8, 77u8, 167u8, 227u8, 122u8, 37u8, 69u8, 238u8, 183u8, - 175u8, 126u8, 229u8, 92u8, 113u8, 128u8, 171u8, 42u8, 196u8, 65u8, - 251u8, 130u8, 60u8, 8u8, 136u8, 135u8, 128u8, 219u8, 155u8, 97u8, 50u8, - 109u8, - ], - ) - } - #[doc = " Mapping of resource to bridge index"] - pub fn account_roles_mapping( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::account_roles_mapping::Param0, - >, - types::account_roles_mapping::AccountRolesMapping, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "AccountRolesMapping", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 152u8, 61u8, 77u8, 167u8, 227u8, 122u8, 37u8, 69u8, 238u8, 183u8, - 175u8, 126u8, 229u8, 92u8, 113u8, 128u8, 171u8, 42u8, 196u8, 65u8, - 251u8, 130u8, 60u8, 8u8, 136u8, 135u8, 128u8, 219u8, 155u8, 97u8, 50u8, - 109u8, - ], - ) + pub mod misc { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum BalanceStatus { + #[codec(index = 0)] + Free, + #[codec(index = 1)] + Reserved, + } + } } - #[doc = " The minimum re staking bond to become and maintain the role."] - pub fn min_restaking_bond( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::min_restaking_bond::MinRestakingBond, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "MinRestakingBond", - (), - [ - 123u8, 51u8, 109u8, 15u8, 125u8, 106u8, 197u8, 51u8, 217u8, 199u8, - 164u8, 206u8, 55u8, 134u8, 104u8, 31u8, 43u8, 169u8, 63u8, 95u8, 245u8, - 251u8, 22u8, 230u8, 65u8, 77u8, 60u8, 121u8, 76u8, 204u8, 24u8, 63u8, - ], - ) + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct PalletId(pub [::core::primitive::u8; 8usize]); + } + pub mod frame_system { + use super::runtime_types; + pub mod extensions { + use super::runtime_types; + pub mod check_genesis { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct CheckGenesis; } - #[doc = " The total restake amount in the system"] - pub fn total_restake( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::total_restake::TotalRestake, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "TotalRestake", - (), - [ - 107u8, 101u8, 27u8, 228u8, 156u8, 103u8, 64u8, 157u8, 134u8, 42u8, - 196u8, 65u8, 103u8, 110u8, 213u8, 44u8, 132u8, 40u8, 239u8, 145u8, - 182u8, 130u8, 201u8, 57u8, 225u8, 98u8, 197u8, 162u8, 72u8, 171u8, - 85u8, 109u8, - ], - ) + pub mod check_mortality { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct CheckMortality(pub runtime_types::sp_runtime::generic::era::Era); } - #[doc = " The number of jobs completed by a validator in era"] - pub fn validator_jobs_in_era( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::validator_jobs_in_era::ValidatorJobsInEra, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "ValidatorJobsInEra", - (), - [ - 125u8, 130u8, 184u8, 34u8, 6u8, 164u8, 104u8, 92u8, 61u8, 187u8, 55u8, - 30u8, 100u8, 18u8, 89u8, 140u8, 36u8, 162u8, 165u8, 29u8, 192u8, 46u8, - 100u8, 113u8, 189u8, 222u8, 177u8, 207u8, 162u8, 229u8, 216u8, 124u8, - ], - ) + pub mod check_non_zero_sender { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct CheckNonZeroSender; } - #[doc = " Rewards for the last `HISTORY_DEPTH` eras."] - #[doc = " If reward hasn't been set or has been removed then 0 reward is returned."] - pub fn eras_restake_reward_points_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::eras_restake_reward_points::ErasRestakeRewardPoints, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "ErasRestakeRewardPoints", - (), - [ - 179u8, 194u8, 204u8, 246u8, 160u8, 127u8, 200u8, 83u8, 71u8, 165u8, - 162u8, 209u8, 254u8, 220u8, 201u8, 209u8, 75u8, 45u8, 247u8, 247u8, - 148u8, 234u8, 191u8, 79u8, 202u8, 107u8, 186u8, 72u8, 106u8, 154u8, - 140u8, 107u8, - ], - ) + pub mod check_nonce { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct CheckNonce(#[codec(compact)] pub ::core::primitive::u32); } - #[doc = " Rewards for the last `HISTORY_DEPTH` eras."] - #[doc = " If reward hasn't been set or has been removed then 0 reward is returned."] - pub fn eras_restake_reward_points( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::eras_restake_reward_points::Param0, - >, - types::eras_restake_reward_points::ErasRestakeRewardPoints, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "ErasRestakeRewardPoints", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 179u8, 194u8, 204u8, 246u8, 160u8, 127u8, 200u8, 83u8, 71u8, 165u8, - 162u8, 209u8, 254u8, 220u8, 201u8, 209u8, 75u8, 45u8, 247u8, 247u8, - 148u8, 234u8, 191u8, 79u8, 202u8, 107u8, 186u8, 72u8, 106u8, 154u8, - 140u8, 107u8, - ], - ) + pub mod check_spec_version { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct CheckSpecVersion; } - #[doc = " The active era information, it holds index and start."] - #[doc = ""] - #[doc = " The active era is the era being currently rewarded."] - pub fn active_restaker_era( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::active_restaker_era::ActiveRestakerEra, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "ActiveRestakerEra", - (), - [ - 169u8, 15u8, 202u8, 51u8, 247u8, 216u8, 207u8, 213u8, 236u8, 134u8, - 159u8, 33u8, 151u8, 188u8, 225u8, 168u8, 127u8, 34u8, 229u8, 148u8, - 64u8, 183u8, 151u8, 101u8, 245u8, 214u8, 150u8, 198u8, 47u8, 84u8, - 216u8, 177u8, - ], - ) + pub mod check_tx_version { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct CheckTxVersion; } - } - } - pub mod constants { - use super::runtime_types; - pub struct ConstantsApi; - impl ConstantsApi { - #[doc = " Max roles per account."] - pub fn max_roles_per_account( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Roles", - "MaxRolesPerAccount", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) + pub mod check_weight { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct CheckWeight; } } - } - } - pub mod jobs { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_jobs::module::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_jobs::module::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { + pub mod limits { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37010,23 +38059,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::submit_job`]."] - pub struct SubmitJob { - pub job: submit_job::Job, - } - pub mod submit_job { - use super::runtime_types; - pub type Job = runtime_types::tangle_primitives::jobs::JobSubmission< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SubmitJob { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "submit_job"; + pub struct BlockLength { + pub max: runtime_types::frame_support::dispatch::PerDispatchClass< + ::core::primitive::u32, + >, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37045,28 +38081,12 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::submit_job_result`]."] - pub struct SubmitJobResult { - pub role_type: submit_job_result::RoleType, - pub job_id: submit_job_result::JobId, - pub result: submit_job_result::Result, - } - pub mod submit_job_result { - use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub type Result = runtime_types::tangle_primitives::jobs::JobResult< - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxKeyLen, - runtime_types::tangle_testnet_runtime::MaxSignatureLen, - runtime_types::tangle_testnet_runtime::MaxDataLen, - runtime_types::tangle_testnet_runtime::MaxProofLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SubmitJobResult { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "submit_job_result"; + pub struct BlockWeights { + pub base_block: runtime_types::sp_weights::weight_v2::Weight, + pub max_block: runtime_types::sp_weights::weight_v2::Weight, + pub per_class: runtime_types::frame_support::dispatch::PerDispatchClass< + runtime_types::frame_system::limits::WeightsPerClass, + >, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37085,12 +38105,18 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::withdraw_rewards`]."] - pub struct WithdrawRewards; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for WithdrawRewards { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "withdraw_rewards"; + pub struct WeightsPerClass { + pub base_extrinsic: runtime_types::sp_weights::weight_v2::Weight, + pub max_extrinsic: + ::core::option::Option, + pub max_total: + ::core::option::Option, + pub reserved: + ::core::option::Option, } + } + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -37108,27 +38134,65 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::report_inactive_validator`]."] - pub struct ReportInactiveValidator { - pub role_type: report_inactive_validator::RoleType, - pub job_id: report_inactive_validator::JobId, - pub validator: report_inactive_validator::Validator, - pub offence: report_inactive_validator::Offence, - pub signatures: report_inactive_validator::Signatures, - } - pub mod report_inactive_validator { - use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub type Validator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Offence = runtime_types::tangle_primitives::jobs::ValidatorOffenceType; - pub type Signatures = ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ReportInactiveValidator { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "report_inactive_validator"; + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::remark`]."] + remark { + remark: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::set_heap_pages`]."] + set_heap_pages { pages: ::core::primitive::u64 }, + #[codec(index = 2)] + #[doc = "See [`Pallet::set_code`]."] + set_code { + code: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::set_code_without_checks`]."] + set_code_without_checks { + code: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::set_storage`]."] + set_storage { + items: ::subxt::ext::subxt_core::alloc::vec::Vec<( + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + )>, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::kill_storage`]."] + kill_storage { + keys: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + >, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::kill_prefix`]."] + kill_prefix { + prefix: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + subkeys: ::core::primitive::u32, + }, + #[codec(index = 7)] + #[doc = "See [`Pallet::remark_with_event`]."] + remark_with_event { + remark: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 9)] + #[doc = "See [`Pallet::authorize_upgrade`]."] + authorize_upgrade { code_hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 10)] + #[doc = "See [`Pallet::authorize_upgrade_without_checks`]."] + authorize_upgrade_without_checks { + code_hash: ::subxt::ext::subxt_core::utils::H256, + }, + #[codec(index = 11)] + #[doc = "See [`Pallet::apply_authorized_upgrade`]."] + apply_authorized_upgrade { + code: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37147,21 +38211,36 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_permitted_caller`]."] - pub struct SetPermittedCaller { - pub role_type: set_permitted_caller::RoleType, - pub job_id: set_permitted_caller::JobId, - pub new_permitted_caller: set_permitted_caller::NewPermittedCaller, - } - pub mod set_permitted_caller { - use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub type NewPermittedCaller = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetPermittedCaller { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "set_permitted_caller"; + #[doc = "Error for the System pallet"] + pub enum Error { + #[codec(index = 0)] + #[doc = "The name of specification does not match between the current runtime"] + #[doc = "and the new runtime."] + InvalidSpecName, + #[codec(index = 1)] + #[doc = "The specification version is not allowed to decrease between the current runtime"] + #[doc = "and the new runtime."] + SpecVersionNeedsToIncrease, + #[codec(index = 2)] + #[doc = "Failed to extract the runtime version from the new runtime."] + #[doc = ""] + #[doc = "Either calling `Core_version` or decoding `RuntimeVersion` failed."] + FailedToExtractRuntimeVersion, + #[codec(index = 3)] + #[doc = "Suicide called when the account has non-default composite data."] + NonDefaultComposite, + #[codec(index = 4)] + #[doc = "There is a non-zero reference count preventing the account from being purged."] + NonZeroRefCount, + #[codec(index = 5)] + #[doc = "The origin filter prevent the call to be dispatched."] + CallFiltered, + #[codec(index = 6)] + #[doc = "No upgrade authorized."] + NothingAuthorized, + #[codec(index = 7)] + #[doc = "The submitted code is not authorized."] + Unauthorized, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37180,242 +38259,42 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_time_fee`]."] - pub struct SetTimeFee { - pub new_fee: set_time_fee::NewFee, - } - pub mod set_time_fee { - use super::runtime_types; - pub type NewFee = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetTimeFee { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "set_time_fee"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::submit_misbehavior`]."] - pub struct SubmitMisbehavior { - pub misbehavior: submit_misbehavior::Misbehavior, - } - pub mod submit_misbehavior { - use super::runtime_types; - pub type Misbehavior = - runtime_types::tangle_primitives::misbehavior::MisbehaviorSubmission; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SubmitMisbehavior { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "submit_misbehavior"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::extend_job_result_ttl`]."] - pub struct ExtendJobResultTtl { - pub role_type: extend_job_result_ttl::RoleType, - pub job_id: extend_job_result_ttl::JobId, - pub extend_by: extend_job_result_ttl::ExtendBy, - } - pub mod extend_job_result_ttl { - use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub type ExtendBy = ::core::primitive::u64; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExtendJobResultTtl { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "extend_job_result_ttl"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::submit_job`]."] - pub fn submit_job( - &self, - job: types::submit_job::Job, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "submit_job", - types::SubmitJob { job }, - [ - 234u8, 37u8, 219u8, 251u8, 193u8, 105u8, 242u8, 126u8, 243u8, 219u8, - 7u8, 252u8, 31u8, 45u8, 208u8, 230u8, 91u8, 208u8, 228u8, 84u8, 206u8, - 131u8, 128u8, 42u8, 95u8, 246u8, 28u8, 124u8, 106u8, 115u8, 254u8, 6u8, - ], - ) - } - #[doc = "See [`Pallet::submit_job_result`]."] - pub fn submit_job_result( - &self, - role_type: types::submit_job_result::RoleType, - job_id: types::submit_job_result::JobId, - result: types::submit_job_result::Result, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "submit_job_result", - types::SubmitJobResult { role_type, job_id, result }, - [ - 113u8, 96u8, 154u8, 198u8, 116u8, 24u8, 135u8, 225u8, 85u8, 145u8, - 181u8, 27u8, 29u8, 119u8, 147u8, 88u8, 161u8, 195u8, 252u8, 228u8, - 247u8, 171u8, 186u8, 246u8, 143u8, 83u8, 98u8, 250u8, 149u8, 192u8, - 152u8, 239u8, - ], - ) - } - #[doc = "See [`Pallet::withdraw_rewards`]."] - pub fn withdraw_rewards( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "withdraw_rewards", - types::WithdrawRewards {}, - [ - 138u8, 171u8, 8u8, 216u8, 66u8, 163u8, 109u8, 39u8, 254u8, 155u8, - 224u8, 193u8, 244u8, 132u8, 176u8, 97u8, 204u8, 107u8, 148u8, 64u8, - 33u8, 213u8, 227u8, 164u8, 77u8, 51u8, 100u8, 174u8, 182u8, 247u8, - 187u8, 18u8, - ], - ) - } - #[doc = "See [`Pallet::report_inactive_validator`]."] - pub fn report_inactive_validator( - &self, - role_type: types::report_inactive_validator::RoleType, - job_id: types::report_inactive_validator::JobId, - validator: types::report_inactive_validator::Validator, - offence: types::report_inactive_validator::Offence, - signatures: types::report_inactive_validator::Signatures, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ReportInactiveValidator, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "report_inactive_validator", - types::ReportInactiveValidator { - role_type, - job_id, - validator, - offence, - signatures, - }, - [ - 224u8, 157u8, 189u8, 43u8, 200u8, 241u8, 81u8, 242u8, 66u8, 210u8, - 222u8, 125u8, 89u8, 40u8, 85u8, 192u8, 204u8, 120u8, 6u8, 53u8, 123u8, - 163u8, 33u8, 86u8, 19u8, 94u8, 228u8, 184u8, 168u8, 159u8, 207u8, 52u8, - ], - ) - } - #[doc = "See [`Pallet::set_permitted_caller`]."] - pub fn set_permitted_caller( - &self, - role_type: types::set_permitted_caller::RoleType, - job_id: types::set_permitted_caller::JobId, - new_permitted_caller: types::set_permitted_caller::NewPermittedCaller, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "set_permitted_caller", - types::SetPermittedCaller { role_type, job_id, new_permitted_caller }, - [ - 81u8, 223u8, 133u8, 76u8, 65u8, 232u8, 140u8, 191u8, 65u8, 174u8, - 185u8, 102u8, 178u8, 135u8, 207u8, 119u8, 101u8, 234u8, 234u8, 148u8, - 70u8, 30u8, 157u8, 30u8, 107u8, 137u8, 135u8, 188u8, 145u8, 101u8, - 125u8, 243u8, - ], - ) - } - #[doc = "See [`Pallet::set_time_fee`]."] - pub fn set_time_fee( - &self, - new_fee: types::set_time_fee::NewFee, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "set_time_fee", - types::SetTimeFee { new_fee }, - [ - 9u8, 96u8, 202u8, 11u8, 3u8, 232u8, 45u8, 199u8, 233u8, 22u8, 24u8, - 5u8, 99u8, 150u8, 171u8, 12u8, 56u8, 41u8, 124u8, 128u8, 88u8, 143u8, - 124u8, 215u8, 75u8, 17u8, 222u8, 183u8, 238u8, 230u8, 43u8, 24u8, - ], - ) - } - #[doc = "See [`Pallet::submit_misbehavior`]."] - pub fn submit_misbehavior( - &self, - misbehavior: types::submit_misbehavior::Misbehavior, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "submit_misbehavior", - types::SubmitMisbehavior { misbehavior }, - [ - 217u8, 234u8, 26u8, 61u8, 224u8, 215u8, 223u8, 198u8, 22u8, 165u8, - 177u8, 131u8, 85u8, 208u8, 20u8, 26u8, 233u8, 140u8, 154u8, 79u8, 72u8, - 230u8, 119u8, 96u8, 186u8, 153u8, 98u8, 184u8, 162u8, 82u8, 189u8, - 92u8, - ], - ) - } - #[doc = "See [`Pallet::extend_job_result_ttl`]."] - pub fn extend_job_result_ttl( - &self, - role_type: types::extend_job_result_ttl::RoleType, - job_id: types::extend_job_result_ttl::JobId, - extend_by: types::extend_job_result_ttl::ExtendBy, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "extend_job_result_ttl", - types::ExtendJobResultTtl { role_type, job_id, extend_by }, - [ - 21u8, 94u8, 118u8, 169u8, 90u8, 219u8, 91u8, 210u8, 146u8, 126u8, 58u8, - 102u8, 10u8, 226u8, 107u8, 114u8, 80u8, 108u8, 10u8, 205u8, 169u8, - 84u8, 214u8, 61u8, 146u8, 178u8, 45u8, 81u8, 253u8, 239u8, 219u8, 87u8, - ], - ) + #[doc = "Event for the System pallet."] + pub enum Event { + #[codec(index = 0)] + #[doc = "An extrinsic completed successfully."] + ExtrinsicSuccess { + dispatch_info: runtime_types::frame_support::dispatch::DispatchInfo, + }, + #[codec(index = 1)] + #[doc = "An extrinsic failed."] + ExtrinsicFailed { + dispatch_error: runtime_types::sp_runtime::DispatchError, + dispatch_info: runtime_types::frame_support::dispatch::DispatchInfo, + }, + #[codec(index = 2)] + #[doc = "`:code` was updated."] + CodeUpdated, + #[codec(index = 3)] + #[doc = "A new account was created."] + NewAccount { account: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 4)] + #[doc = "An account was reaped."] + KilledAccount { account: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 5)] + #[doc = "On on-chain remark happened."] + Remarked { + sender: ::subxt::ext::subxt_core::utils::AccountId32, + hash: ::subxt::ext::subxt_core::utils::H256, + }, + #[codec(index = 6)] + #[doc = "An upgrade was authorized."] + UpgradeAuthorized { + code_hash: ::subxt::ext::subxt_core::utils::H256, + check_version: ::core::primitive::bool, + }, } } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_jobs::module::Event; - pub mod events { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -37429,27 +38308,12 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A new job has been submitted"] - pub struct JobSubmitted { - pub job_id: job_submitted::JobId, - pub role_type: job_submitted::RoleType, - pub details: job_submitted::Details, - } - pub mod job_submitted { - use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type Details = runtime_types::tangle_primitives::jobs::JobSubmission< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobSubmitted { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobSubmitted"; + pub struct AccountInfo<_0, _1> { + pub nonce: _0, + pub consumers: ::core::primitive::u32, + pub providers: ::core::primitive::u32, + pub sufficients: ::core::primitive::u32, + pub data: _1, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37464,19 +38328,9 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A new job result has been submitted"] - pub struct JobResultSubmitted { - pub job_id: job_result_submitted::JobId, - pub role_type: job_result_submitted::RoleType, - } - pub mod job_result_submitted { - use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobResultSubmitted { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobResultSubmitted"; + pub struct CodeUpgradeAuthorization { + pub code_hash: ::subxt::ext::subxt_core::utils::H256, + pub check_version: ::core::primitive::bool, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37491,19 +38345,10 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "validator has earned reward"] - pub struct ValidatorRewarded { - pub id: validator_rewarded::Id, - pub reward: validator_rewarded::Reward, - } - pub mod validator_rewarded { - use super::runtime_types; - pub type Id = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Reward = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ValidatorRewarded { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "ValidatorRewarded"; + pub struct EventRecord<_0, _1> { + pub phase: runtime_types::frame_system::Phase, + pub event: _0, + pub topics: ::subxt::ext::subxt_core::alloc::vec::Vec<_1>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37518,19 +38363,10 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An existing job was removed and refunded"] - pub struct JobRefunded { - pub job_id: job_refunded::JobId, - pub role_type: job_refunded::RoleType, - } - pub mod job_refunded { - use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobRefunded { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobRefunded"; + pub struct LastRuntimeUpgradeInfo { + #[codec(compact)] + pub spec_version: ::core::primitive::u32, + pub spec_name: ::subxt::ext::subxt_core::alloc::string::String, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37545,65 +38381,269 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "The participants of a job has been updated"] - pub struct JobParticipantsUpdated { - pub job_id: job_participants_updated::JobId, - pub role_type: job_participants_updated::RoleType, - pub details: job_participants_updated::Details, + pub enum Phase { + #[codec(index = 0)] + ApplyExtrinsic(::core::primitive::u32), + #[codec(index = 1)] + Finalization, + #[codec(index = 2)] + Initialization, } - pub mod job_participants_updated { + } + pub mod pallet_airdrop_claims { + use super::runtime_types; + pub mod pallet { use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type Details = runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobParticipantsUpdated { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobParticipantsUpdated"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A job has been resubmitted, this is when a phase1 result has been discarded"] - #[doc = "and a new phase1 job is requested"] - pub struct JobReSubmitted { - pub job_id: job_re_submitted::JobId, - pub role_type: job_re_submitted::RoleType, - pub details: job_re_submitted::Details, + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::claim`]."] + claim { + dest: ::core::option::Option< + runtime_types::pallet_airdrop_claims::utils::MultiAddress, + >, + signer: ::core::option::Option< + runtime_types::pallet_airdrop_claims::utils::MultiAddress, + >, + signature: + runtime_types::pallet_airdrop_claims::utils::MultiAddressSignature, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::mint_claim`]."] + mint_claim { + who: runtime_types::pallet_airdrop_claims::utils::MultiAddress, + value: ::core::primitive::u128, + vesting_schedule: ::core::option::Option< + runtime_types::bounded_collections::bounded_vec::BoundedVec<( + ::core::primitive::u128, + ::core::primitive::u128, + ::core::primitive::u64, + )>, + >, + statement: ::core::option::Option< + runtime_types::pallet_airdrop_claims::StatementKind, + >, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::claim_attest`]."] + claim_attest { + dest: ::core::option::Option< + runtime_types::pallet_airdrop_claims::utils::MultiAddress, + >, + signer: ::core::option::Option< + runtime_types::pallet_airdrop_claims::utils::MultiAddress, + >, + signature: + runtime_types::pallet_airdrop_claims::utils::MultiAddressSignature, + statement: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::move_claim`]."] + move_claim { + old: runtime_types::pallet_airdrop_claims::utils::MultiAddress, + new: runtime_types::pallet_airdrop_claims::utils::MultiAddress, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::force_set_expiry_config`]."] + force_set_expiry_config { + expiry_block: ::core::primitive::u64, + dest: runtime_types::pallet_airdrop_claims::utils::MultiAddress, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::claim_signed`]."] + claim_signed { + dest: ::core::option::Option< + runtime_types::pallet_airdrop_claims::utils::MultiAddress, + >, + }, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Invalid Ethereum signature."] + InvalidEthereumSignature, + #[codec(index = 1)] + #[doc = "Invalid Native (sr25519) signature"] + InvalidNativeSignature, + #[codec(index = 2)] + #[doc = "Invalid Native account decoding"] + InvalidNativeAccount, + #[codec(index = 3)] + #[doc = "Ethereum address has no claim."] + SignerHasNoClaim, + #[codec(index = 4)] + #[doc = "Account ID sending transaction has no claim."] + SenderHasNoClaim, + #[codec(index = 5)] + #[doc = "There's not enough in the pot to pay out some unvested amount. Generally implies a"] + #[doc = "logic error."] + PotUnderflow, + #[codec(index = 6)] + #[doc = "A needed statement was not included."] + InvalidStatement, + #[codec(index = 7)] + #[doc = "The account already has a vested balance."] + VestedBalanceExists, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "Someone claimed some native tokens."] + Claimed { + recipient: ::subxt::ext::subxt_core::utils::AccountId32, + source: runtime_types::pallet_airdrop_claims::utils::MultiAddress, + amount: ::core::primitive::u128, + }, + } } - pub mod job_re_submitted { + pub mod utils { use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type Details = runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobReSubmitted { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobReSubmitted"; + pub mod ethereum_address { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct EcdsaSignature(pub [::core::primitive::u8; 65usize]); + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct EthereumAddress(pub [::core::primitive::u8; 20usize]); + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum MultiAddress { + # [codec (index = 0)] EVM (runtime_types :: pallet_airdrop_claims :: utils :: ethereum_address :: EthereumAddress ,) , # [codec (index = 1)] Native (:: subxt :: ext :: subxt_core :: utils :: AccountId32 ,) , } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum MultiAddressSignature { + # [codec (index = 0)] EVM (runtime_types :: pallet_airdrop_claims :: utils :: ethereum_address :: EcdsaSignature ,) , # [codec (index = 1)] Native (runtime_types :: pallet_airdrop_claims :: utils :: Sr25519Signature ,) , } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Sr25519Signature(pub runtime_types::sp_core::sr25519::Signature); } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37618,828 +38658,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A job result expiry time has been extended"] - pub struct JobResultExtended { - pub job_id: job_result_extended::JobId, - pub role_type: job_result_extended::RoleType, - pub new_expiry: job_result_extended::NewExpiry, - } - pub mod job_result_extended { - use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type NewExpiry = ::core::primitive::u64; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobResultExtended { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobResultExtended"; + pub enum StatementKind { + #[codec(index = 0)] + Regular, + #[codec(index = 1)] + Safe, } } - pub mod storage { + pub mod pallet_assets { use super::runtime_types; - pub mod types { + pub mod pallet { use super::runtime_types; - pub mod submitted_jobs { - use super::runtime_types; - pub type SubmittedJobs = runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - pub type Param0 = runtime_types::tangle_primitives::roles::RoleType; - pub type Param1 = ::core::primitive::u64; - } - pub mod submitted_jobs_role { - use super::runtime_types; - pub type SubmittedJobsRole = runtime_types::tangle_primitives::roles::RoleType; - pub type Param0 = ::core::primitive::u64; - } - pub mod known_results { - use super::runtime_types; - pub type KnownResults = runtime_types::tangle_primitives::jobs::PhaseResult< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxKeyLen, - runtime_types::tangle_testnet_runtime::MaxDataLen, - runtime_types::tangle_testnet_runtime::MaxSignatureLen, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxProofLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - pub type Param0 = runtime_types::tangle_primitives::roles::RoleType; - pub type Param1 = ::core::primitive::u64; - } - pub mod validator_job_id_lookup { - use super::runtime_types; - pub type ValidatorJobIdLookup = - runtime_types::bounded_collections::bounded_vec::BoundedVec<( - runtime_types::tangle_primitives::roles::RoleType, - ::core::primitive::u64, - )>; - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; - } - pub mod validator_rewards { - use super::runtime_types; - pub type ValidatorRewards = ::core::primitive::u128; - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; - } - pub mod next_job_id { - use super::runtime_types; - pub type NextJobId = ::core::primitive::u64; - } - pub mod time_fee_per_block { - use super::runtime_types; - pub type TimeFeePerBlock = ::core::primitive::u128; - } - } - pub struct StorageApi; - impl StorageApi { - pub fn submitted_jobs_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::submitted_jobs::SubmittedJobs, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobs", - (), - [ - 21u8, 254u8, 83u8, 32u8, 101u8, 238u8, 45u8, 58u8, 41u8, 97u8, 232u8, - 125u8, 234u8, 22u8, 4u8, 43u8, 39u8, 73u8, 205u8, 216u8, 159u8, 186u8, - 76u8, 178u8, 126u8, 165u8, 157u8, 87u8, 182u8, 90u8, 132u8, 59u8, - ], - ) - } - pub fn submitted_jobs_iter1( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::submitted_jobs::Param0, - >, - types::submitted_jobs::SubmittedJobs, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobs", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 21u8, 254u8, 83u8, 32u8, 101u8, 238u8, 45u8, 58u8, 41u8, 97u8, 232u8, - 125u8, 234u8, 22u8, 4u8, 43u8, 39u8, 73u8, 205u8, 216u8, 159u8, 186u8, - 76u8, 178u8, 126u8, 165u8, 157u8, 87u8, 182u8, 90u8, 132u8, 59u8, - ], - ) - } - pub fn submitted_jobs( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::submitted_jobs::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::submitted_jobs::Param1, - >, - ), - types::submitted_jobs::SubmittedJobs, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobs", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 21u8, 254u8, 83u8, 32u8, 101u8, 238u8, 45u8, 58u8, 41u8, 97u8, 232u8, - 125u8, 234u8, 22u8, 4u8, 43u8, 39u8, 73u8, 205u8, 216u8, 159u8, 186u8, - 76u8, 178u8, 126u8, 165u8, 157u8, 87u8, 182u8, 90u8, 132u8, 59u8, - ], - ) - } - pub fn submitted_jobs_role_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::submitted_jobs_role::SubmittedJobsRole, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobsRole", - (), - [ - 205u8, 201u8, 222u8, 40u8, 74u8, 116u8, 104u8, 95u8, 238u8, 134u8, - 148u8, 253u8, 255u8, 180u8, 210u8, 135u8, 104u8, 52u8, 146u8, 179u8, - 136u8, 27u8, 197u8, 193u8, 135u8, 28u8, 64u8, 153u8, 100u8, 144u8, - 62u8, 167u8, - ], - ) - } - pub fn submitted_jobs_role( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::submitted_jobs_role::Param0, - >, - types::submitted_jobs_role::SubmittedJobsRole, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobsRole", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 205u8, 201u8, 222u8, 40u8, 74u8, 116u8, 104u8, 95u8, 238u8, 134u8, - 148u8, 253u8, 255u8, 180u8, 210u8, 135u8, 104u8, 52u8, 146u8, 179u8, - 136u8, 27u8, 197u8, 193u8, 135u8, 28u8, 64u8, 153u8, 100u8, 144u8, - 62u8, 167u8, - ], - ) - } - pub fn known_results_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::known_results::KnownResults, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "KnownResults", - (), - [ - 40u8, 205u8, 192u8, 253u8, 76u8, 224u8, 194u8, 44u8, 178u8, 50u8, 46u8, - 100u8, 82u8, 184u8, 205u8, 89u8, 155u8, 234u8, 54u8, 61u8, 166u8, 65u8, - 47u8, 191u8, 129u8, 188u8, 96u8, 143u8, 242u8, 24u8, 18u8, 129u8, - ], - ) - } - pub fn known_results_iter1( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::known_results::Param0, - >, - types::known_results::KnownResults, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "KnownResults", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 40u8, 205u8, 192u8, 253u8, 76u8, 224u8, 194u8, 44u8, 178u8, 50u8, 46u8, - 100u8, 82u8, 184u8, 205u8, 89u8, 155u8, 234u8, 54u8, 61u8, 166u8, 65u8, - 47u8, 191u8, 129u8, 188u8, 96u8, 143u8, 242u8, 24u8, 18u8, 129u8, - ], - ) - } - pub fn known_results( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::known_results::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::known_results::Param1, - >, - ), - types::known_results::KnownResults, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "KnownResults", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 40u8, 205u8, 192u8, 253u8, 76u8, 224u8, 194u8, 44u8, 178u8, 50u8, 46u8, - 100u8, 82u8, 184u8, 205u8, 89u8, 155u8, 234u8, 54u8, 61u8, 166u8, 65u8, - 47u8, 191u8, 129u8, 188u8, 96u8, 143u8, 242u8, 24u8, 18u8, 129u8, - ], - ) - } - pub fn validator_job_id_lookup_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::validator_job_id_lookup::ValidatorJobIdLookup, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "ValidatorJobIdLookup", - (), - [ - 44u8, 89u8, 105u8, 245u8, 225u8, 98u8, 155u8, 40u8, 86u8, 148u8, 5u8, - 130u8, 241u8, 142u8, 173u8, 130u8, 189u8, 28u8, 240u8, 46u8, 242u8, - 95u8, 212u8, 77u8, 182u8, 182u8, 240u8, 135u8, 230u8, 194u8, 41u8, - 65u8, - ], - ) - } - pub fn validator_job_id_lookup( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::validator_job_id_lookup::Param0, - >, - types::validator_job_id_lookup::ValidatorJobIdLookup, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "ValidatorJobIdLookup", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 44u8, 89u8, 105u8, 245u8, 225u8, 98u8, 155u8, 40u8, 86u8, 148u8, 5u8, - 130u8, 241u8, 142u8, 173u8, 130u8, 189u8, 28u8, 240u8, 46u8, 242u8, - 95u8, 212u8, 77u8, 182u8, 182u8, 240u8, 135u8, 230u8, 194u8, 41u8, - 65u8, - ], - ) - } - pub fn validator_rewards_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::validator_rewards::ValidatorRewards, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "ValidatorRewards", - (), - [ - 181u8, 120u8, 201u8, 9u8, 183u8, 177u8, 113u8, 198u8, 209u8, 245u8, - 205u8, 165u8, 183u8, 122u8, 147u8, 151u8, 35u8, 109u8, 45u8, 215u8, - 195u8, 93u8, 226u8, 8u8, 106u8, 98u8, 217u8, 231u8, 26u8, 81u8, 123u8, - 224u8, - ], - ) - } - pub fn validator_rewards( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::validator_rewards::Param0, - >, - types::validator_rewards::ValidatorRewards, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "ValidatorRewards", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 181u8, 120u8, 201u8, 9u8, 183u8, 177u8, 113u8, 198u8, 209u8, 245u8, - 205u8, 165u8, 183u8, 122u8, 147u8, 151u8, 35u8, 109u8, 45u8, 215u8, - 195u8, 93u8, 226u8, 8u8, 106u8, 98u8, 217u8, 231u8, 26u8, 81u8, 123u8, - 224u8, - ], - ) - } - #[doc = " The job-id storage"] - pub fn next_job_id( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::next_job_id::NextJobId, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "NextJobId", - (), - [ - 168u8, 152u8, 73u8, 23u8, 111u8, 17u8, 85u8, 129u8, 97u8, 59u8, 245u8, - 42u8, 36u8, 190u8, 47u8, 245u8, 249u8, 45u8, 2u8, 29u8, 174u8, 60u8, - 177u8, 145u8, 143u8, 80u8, 147u8, 159u8, 216u8, 232u8, 21u8, 25u8, - ], - ) - } - pub fn time_fee_per_block( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::time_fee_per_block::TimeFeePerBlock, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "TimeFeePerBlock", - (), - [ - 69u8, 177u8, 229u8, 105u8, 52u8, 200u8, 169u8, 194u8, 249u8, 38u8, - 165u8, 189u8, 88u8, 51u8, 40u8, 252u8, 11u8, 238u8, 246u8, 119u8, 97u8, - 122u8, 235u8, 214u8, 160u8, 209u8, 240u8, 123u8, 237u8, 110u8, 170u8, - 253u8, - ], - ) - } - } - } - pub mod constants { - use super::runtime_types; - pub struct ConstantsApi; - impl ConstantsApi { - #[doc = " `PalletId` for the jobs pallet."] - pub fn pallet_id( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - runtime_types::frame_support::PalletId, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Jobs", - "PalletId", - [ - 56u8, 243u8, 53u8, 83u8, 154u8, 179u8, 170u8, 80u8, 133u8, 173u8, 61u8, - 161u8, 47u8, 225u8, 146u8, 21u8, 50u8, 229u8, 248u8, 27u8, 104u8, 58u8, - 129u8, 197u8, 102u8, 160u8, 168u8, 205u8, 154u8, 42u8, 217u8, 53u8, - ], - ) - } - } - } - } - pub mod dkg { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_dkg::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_dkg::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::set_fee`]."] - pub struct SetFee { - pub fee_info: set_fee::FeeInfo, - } - pub mod set_fee { - use super::runtime_types; - pub type FeeInfo = - runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetFee { - const PALLET: &'static str = "Dkg"; - const CALL: &'static str = "set_fee"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::set_fee`]."] - pub fn set_fee( - &self, - fee_info: types::set_fee::FeeInfo, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Dkg", - "set_fee", - types::SetFee { fee_info }, - [ - 8u8, 176u8, 223u8, 110u8, 249u8, 26u8, 70u8, 181u8, 1u8, 52u8, 217u8, - 119u8, 111u8, 75u8, 199u8, 164u8, 75u8, 147u8, 118u8, 27u8, 92u8, 42u8, - 0u8, 118u8, 101u8, 38u8, 24u8, 242u8, 216u8, 10u8, 100u8, 182u8, - ], - ) - } - } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_dkg::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Fee has been updated to the new value"] - pub struct FeeUpdated(pub fee_updated::Field0); - pub mod fee_updated { - use super::runtime_types; - pub type Field0 = - runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FeeUpdated { - const PALLET: &'static str = "Dkg"; - const EVENT: &'static str = "FeeUpdated"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A DKG has been rotated."] - pub struct KeyRotated { - pub from_job_id: key_rotated::FromJobId, - pub to_job_id: key_rotated::ToJobId, - pub signature: key_rotated::Signature, - } - pub mod key_rotated { - use super::runtime_types; - pub type FromJobId = ::core::primitive::u64; - pub type ToJobId = ::core::primitive::u64; - pub type Signature = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for KeyRotated { - const PALLET: &'static str = "Dkg"; - const EVENT: &'static str = "KeyRotated"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod fee_info { - use super::runtime_types; - pub type FeeInfo = - runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>; - } - } - pub struct StorageApi; - impl StorageApi { - pub fn fee_info( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::fee_info::FeeInfo, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Dkg", - "FeeInfo", - (), - [ - 16u8, 232u8, 221u8, 27u8, 216u8, 118u8, 157u8, 132u8, 160u8, 235u8, - 161u8, 70u8, 59u8, 47u8, 67u8, 91u8, 28u8, 208u8, 187u8, 20u8, 206u8, - 45u8, 122u8, 83u8, 98u8, 39u8, 174u8, 24u8, 252u8, 212u8, 141u8, 90u8, - ], - ) - } - } - } - } - pub mod zk_saa_s { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_zksaas::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_zksaas::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::set_fee`]."] - pub struct SetFee { - pub fee_info: set_fee::FeeInfo, - } - pub mod set_fee { - use super::runtime_types; - pub type FeeInfo = - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetFee { - const PALLET: &'static str = "ZkSaaS"; - const CALL: &'static str = "set_fee"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::set_fee`]."] - pub fn set_fee( - &self, - fee_info: types::set_fee::FeeInfo, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "ZkSaaS", - "set_fee", - types::SetFee { fee_info }, - [ - 104u8, 154u8, 14u8, 206u8, 235u8, 157u8, 140u8, 180u8, 26u8, 214u8, - 243u8, 248u8, 217u8, 42u8, 20u8, 108u8, 206u8, 77u8, 49u8, 91u8, 167u8, - 97u8, 93u8, 121u8, 118u8, 177u8, 42u8, 121u8, 2u8, 101u8, 138u8, 129u8, - ], - ) - } - } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_zksaas::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Fee has been updated to the new value"] - pub struct FeeUpdated(pub fee_updated::Field0); - pub mod fee_updated { - use super::runtime_types; - pub type Field0 = - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FeeUpdated { - const PALLET: &'static str = "ZkSaaS"; - const EVENT: &'static str = "FeeUpdated"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod fee_info { - use super::runtime_types; - pub type FeeInfo = - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>; - } - } - pub struct StorageApi; - impl StorageApi { - pub fn fee_info( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::fee_info::FeeInfo, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "ZkSaaS", - "FeeInfo", - (), - [ - 237u8, 49u8, 62u8, 207u8, 21u8, 52u8, 36u8, 20u8, 102u8, 210u8, 65u8, - 28u8, 216u8, 196u8, 60u8, 128u8, 141u8, 162u8, 60u8, 16u8, 164u8, 80u8, - 142u8, 210u8, 114u8, 30u8, 80u8, 76u8, 82u8, 236u8, 152u8, 81u8, - ], - ) - } - } - } - } - pub mod proxy { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_proxy::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_proxy::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::proxy`]."] - pub struct Proxy { - pub real: proxy::Real, - pub force_proxy_type: proxy::ForceProxyType, - pub call: ::subxt::ext::subxt_core::alloc::boxed::Box, - } - pub mod proxy { - use super::runtime_types; - pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ForceProxyType = - ::core::option::Option; - pub type Call = runtime_types::tangle_testnet_runtime::RuntimeCall; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Proxy { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "proxy"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::add_proxy`]."] - pub struct AddProxy { - pub delegate: add_proxy::Delegate, - pub proxy_type: add_proxy::ProxyType, - pub delay: add_proxy::Delay, - } - pub mod add_proxy { - use super::runtime_types; - pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for AddProxy { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "add_proxy"; - } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -38457,122 +38686,339 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::remove_proxy`]."] - pub struct RemoveProxy { - pub delegate: remove_proxy::Delegate, - pub proxy_type: remove_proxy::ProxyType, - pub delay: remove_proxy::Delay, - } - pub mod remove_proxy { - use super::runtime_types; - pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveProxy { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "remove_proxy"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::remove_proxies`]."] - pub struct RemoveProxies; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveProxies { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "remove_proxies"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::create_pure`]."] - pub struct CreatePure { - pub proxy_type: create_pure::ProxyType, - pub delay: create_pure::Delay, - pub index: create_pure::Index, - } - pub mod create_pure { - use super::runtime_types; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; - pub type Index = ::core::primitive::u16; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CreatePure { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "create_pure"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::kill_pure`]."] - pub struct KillPure { - pub spawner: kill_pure::Spawner, - pub proxy_type: kill_pure::ProxyType, - pub index: kill_pure::Index, - #[codec(compact)] - pub height: kill_pure::Height, - #[codec(compact)] - pub ext_index: kill_pure::ExtIndex, - } - pub mod kill_pure { - use super::runtime_types; - pub type Spawner = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Index = ::core::primitive::u16; - pub type Height = ::core::primitive::u64; - pub type ExtIndex = ::core::primitive::u32; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for KillPure { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "kill_pure"; + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::create`]."] + create { + #[codec(compact)] + id: ::core::primitive::u128, + admin: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + min_balance: ::core::primitive::u128, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::force_create`]."] + force_create { + #[codec(compact)] + id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + is_sufficient: ::core::primitive::bool, + #[codec(compact)] + min_balance: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::start_destroy`]."] + start_destroy { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::destroy_accounts`]."] + destroy_accounts { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::destroy_approvals`]."] + destroy_approvals { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::finish_destroy`]."] + finish_destroy { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::mint`]."] + mint { + #[codec(compact)] + id: ::core::primitive::u128, + beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + amount: ::core::primitive::u128, + }, + #[codec(index = 7)] + #[doc = "See [`Pallet::burn`]."] + burn { + #[codec(compact)] + id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + amount: ::core::primitive::u128, + }, + #[codec(index = 8)] + #[doc = "See [`Pallet::transfer`]."] + transfer { + #[codec(compact)] + id: ::core::primitive::u128, + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + amount: ::core::primitive::u128, + }, + #[codec(index = 9)] + #[doc = "See [`Pallet::transfer_keep_alive`]."] + transfer_keep_alive { + #[codec(compact)] + id: ::core::primitive::u128, + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + amount: ::core::primitive::u128, + }, + #[codec(index = 10)] + #[doc = "See [`Pallet::force_transfer`]."] + force_transfer { + #[codec(compact)] + id: ::core::primitive::u128, + source: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + dest: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + amount: ::core::primitive::u128, + }, + #[codec(index = 11)] + #[doc = "See [`Pallet::freeze`]."] + freeze { + #[codec(compact)] + id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 12)] + #[doc = "See [`Pallet::thaw`]."] + thaw { + #[codec(compact)] + id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 13)] + #[doc = "See [`Pallet::freeze_asset`]."] + freeze_asset { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 14)] + #[doc = "See [`Pallet::thaw_asset`]."] + thaw_asset { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 15)] + #[doc = "See [`Pallet::transfer_ownership`]."] + transfer_ownership { + #[codec(compact)] + id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 16)] + #[doc = "See [`Pallet::set_team`]."] + set_team { + #[codec(compact)] + id: ::core::primitive::u128, + issuer: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + admin: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + freezer: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 17)] + #[doc = "See [`Pallet::set_metadata`]."] + set_metadata { + #[codec(compact)] + id: ::core::primitive::u128, + name: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + symbol: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + decimals: ::core::primitive::u8, + }, + #[codec(index = 18)] + #[doc = "See [`Pallet::clear_metadata`]."] + clear_metadata { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 19)] + #[doc = "See [`Pallet::force_set_metadata`]."] + force_set_metadata { + #[codec(compact)] + id: ::core::primitive::u128, + name: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + symbol: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + decimals: ::core::primitive::u8, + is_frozen: ::core::primitive::bool, + }, + #[codec(index = 20)] + #[doc = "See [`Pallet::force_clear_metadata`]."] + force_clear_metadata { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 21)] + #[doc = "See [`Pallet::force_asset_status`]."] + force_asset_status { + #[codec(compact)] + id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + issuer: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + admin: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + freezer: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + min_balance: ::core::primitive::u128, + is_sufficient: ::core::primitive::bool, + is_frozen: ::core::primitive::bool, + }, + #[codec(index = 22)] + #[doc = "See [`Pallet::approve_transfer`]."] + approve_transfer { + #[codec(compact)] + id: ::core::primitive::u128, + delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + amount: ::core::primitive::u128, + }, + #[codec(index = 23)] + #[doc = "See [`Pallet::cancel_approval`]."] + cancel_approval { + #[codec(compact)] + id: ::core::primitive::u128, + delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 24)] + #[doc = "See [`Pallet::force_cancel_approval`]."] + force_cancel_approval { + #[codec(compact)] + id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 25)] + #[doc = "See [`Pallet::transfer_approved`]."] + transfer_approved { + #[codec(compact)] + id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + destination: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + amount: ::core::primitive::u128, + }, + #[codec(index = 26)] + #[doc = "See [`Pallet::touch`]."] + touch { + #[codec(compact)] + id: ::core::primitive::u128, + }, + #[codec(index = 27)] + #[doc = "See [`Pallet::refund`]."] + refund { + #[codec(compact)] + id: ::core::primitive::u128, + allow_burn: ::core::primitive::bool, + }, + #[codec(index = 28)] + #[doc = "See [`Pallet::set_min_balance`]."] + set_min_balance { + #[codec(compact)] + id: ::core::primitive::u128, + min_balance: ::core::primitive::u128, + }, + #[codec(index = 29)] + #[doc = "See [`Pallet::touch_other`]."] + touch_other { + #[codec(compact)] + id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 30)] + #[doc = "See [`Pallet::refund_other`]."] + refund_other { + #[codec(compact)] + id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 31)] + #[doc = "See [`Pallet::block`]."] + block { + #[codec(compact)] + id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38591,22 +39037,71 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::announce`]."] - pub struct Announce { - pub real: announce::Real, - pub call_hash: announce::CallHash, - } - pub mod announce { - use super::runtime_types; - pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type CallHash = ::subxt::ext::subxt_core::utils::H256; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Announce { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "announce"; + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Account balance must be greater than or equal to the transfer amount."] + BalanceLow, + #[codec(index = 1)] + #[doc = "The account to alter does not exist."] + NoAccount, + #[codec(index = 2)] + #[doc = "The signing account has no permission to do the operation."] + NoPermission, + #[codec(index = 3)] + #[doc = "The given asset ID is unknown."] + Unknown, + #[codec(index = 4)] + #[doc = "The origin account is frozen."] + Frozen, + #[codec(index = 5)] + #[doc = "The asset ID is already taken."] + InUse, + #[codec(index = 6)] + #[doc = "Invalid witness data given."] + BadWitness, + #[codec(index = 7)] + #[doc = "Minimum balance should be non-zero."] + MinBalanceZero, + #[codec(index = 8)] + #[doc = "Unable to increment the consumer reference counters on the account. Either no provider"] + #[doc = "reference exists to allow a non-zero balance of a non-self-sufficient asset, or one"] + #[doc = "fewer then the maximum number of consumers has been reached."] + UnavailableConsumer, + #[codec(index = 9)] + #[doc = "Invalid metadata given."] + BadMetadata, + #[codec(index = 10)] + #[doc = "No approval exists that would allow the transfer."] + Unapproved, + #[codec(index = 11)] + #[doc = "The source account would not survive the transfer and it needs to stay alive."] + WouldDie, + #[codec(index = 12)] + #[doc = "The asset-account already exists."] + AlreadyExists, + #[codec(index = 13)] + #[doc = "The asset-account doesn't have an associated deposit."] + NoDeposit, + #[codec(index = 14)] + #[doc = "The operation would result in funds being burned."] + WouldBurn, + #[codec(index = 15)] + #[doc = "The asset is a live asset and is actively being used. Usually emit for operations such"] + #[doc = "as `start_destroy` which require the asset to be in a destroying state."] + LiveAsset, + #[codec(index = 16)] + #[doc = "The asset is not live, and likely being destroyed."] + AssetNotLive, + #[codec(index = 17)] + #[doc = "The asset status is not the expected status."] + IncorrectStatus, + #[codec(index = 18)] + #[doc = "The asset should be frozen before the given operation."] + NotFrozen, + #[codec(index = 19)] + #[doc = "Callback action resulted in error"] + CallbackFailed, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38625,27 +39120,162 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::remove_announcement`]."] - pub struct RemoveAnnouncement { - pub real: remove_announcement::Real, - pub call_hash: remove_announcement::CallHash, - } - pub mod remove_announcement { - use super::runtime_types; - pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type CallHash = ::subxt::ext::subxt_core::utils::H256; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveAnnouncement { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "remove_announcement"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "Some asset class was created."] + Created { + asset_id: ::core::primitive::u128, + creator: ::subxt::ext::subxt_core::utils::AccountId32, + owner: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 1)] + #[doc = "Some assets were issued."] + Issued { + asset_id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "Some assets were transferred."] + Transferred { + asset_id: ::core::primitive::u128, + from: ::subxt::ext::subxt_core::utils::AccountId32, + to: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 3)] + #[doc = "Some assets were destroyed."] + Burned { + asset_id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::AccountId32, + balance: ::core::primitive::u128, + }, + #[codec(index = 4)] + #[doc = "The management team changed."] + TeamChanged { + asset_id: ::core::primitive::u128, + issuer: ::subxt::ext::subxt_core::utils::AccountId32, + admin: ::subxt::ext::subxt_core::utils::AccountId32, + freezer: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 5)] + #[doc = "The owner changed."] + OwnerChanged { + asset_id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 6)] + #[doc = "Some account `who` was frozen."] + Frozen { + asset_id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 7)] + #[doc = "Some account `who` was thawed."] + Thawed { + asset_id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 8)] + #[doc = "Some asset `asset_id` was frozen."] + AssetFrozen { asset_id: ::core::primitive::u128 }, + #[codec(index = 9)] + #[doc = "Some asset `asset_id` was thawed."] + AssetThawed { asset_id: ::core::primitive::u128 }, + #[codec(index = 10)] + #[doc = "Accounts were destroyed for given asset."] + AccountsDestroyed { + asset_id: ::core::primitive::u128, + accounts_destroyed: ::core::primitive::u32, + accounts_remaining: ::core::primitive::u32, + }, + #[codec(index = 11)] + #[doc = "Approvals were destroyed for given asset."] + ApprovalsDestroyed { + asset_id: ::core::primitive::u128, + approvals_destroyed: ::core::primitive::u32, + approvals_remaining: ::core::primitive::u32, + }, + #[codec(index = 12)] + #[doc = "An asset class is in the process of being destroyed."] + DestructionStarted { asset_id: ::core::primitive::u128 }, + #[codec(index = 13)] + #[doc = "An asset class was destroyed."] + Destroyed { asset_id: ::core::primitive::u128 }, + #[codec(index = 14)] + #[doc = "Some asset class was force-created."] + ForceCreated { + asset_id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 15)] + #[doc = "New metadata has been set for an asset."] + MetadataSet { + asset_id: ::core::primitive::u128, + name: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + symbol: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + decimals: ::core::primitive::u8, + is_frozen: ::core::primitive::bool, + }, + #[codec(index = 16)] + #[doc = "Metadata has been cleared for an asset."] + MetadataCleared { asset_id: ::core::primitive::u128 }, + #[codec(index = 17)] + #[doc = "(Additional) funds have been approved for transfer to a destination account."] + ApprovedTransfer { + asset_id: ::core::primitive::u128, + source: ::subxt::ext::subxt_core::utils::AccountId32, + delegate: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 18)] + #[doc = "An approval for account `delegate` was cancelled by `owner`."] + ApprovalCancelled { + asset_id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::AccountId32, + delegate: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 19)] + #[doc = "An `amount` was transferred in its entirety from `owner` to `destination` by"] + #[doc = "the approved `delegate`."] + TransferredApproved { + asset_id: ::core::primitive::u128, + owner: ::subxt::ext::subxt_core::utils::AccountId32, + delegate: ::subxt::ext::subxt_core::utils::AccountId32, + destination: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 20)] + #[doc = "An asset has had its attributes changed by the `Force` origin."] + AssetStatusChanged { asset_id: ::core::primitive::u128 }, + #[codec(index = 21)] + #[doc = "The min_balance of an asset has been updated by the asset owner."] + AssetMinBalanceChanged { + asset_id: ::core::primitive::u128, + new_min_balance: ::core::primitive::u128, + }, + #[codec(index = 22)] + #[doc = "Some account `who` was created with a deposit from `depositor`."] + Touched { + asset_id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::AccountId32, + depositor: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 23)] + #[doc = "Some account `who` was blocked."] + Blocked { + asset_id: ::core::primitive::u128, + who: ::subxt::ext::subxt_core::utils::AccountId32, + }, + } + } + pub mod types { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, Clone, Debug, @@ -38659,22 +39289,13 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::reject_announcement`]."] - pub struct RejectAnnouncement { - pub delegate: reject_announcement::Delegate, - pub call_hash: reject_announcement::CallHash, - } - pub mod reject_announcement { - use super::runtime_types; - pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type CallHash = ::subxt::ext::subxt_core::utils::H256; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RejectAnnouncement { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "reject_announcement"; + pub enum AccountStatus { + #[codec(index = 0)] + Liquid, + #[codec(index = 1)] + Frozen, + #[codec(index = 2)] + Blocked, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38693,645 +39314,149 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::proxy_announced`]."] - pub struct ProxyAnnounced { - pub delegate: proxy_announced::Delegate, - pub real: proxy_announced::Real, - pub force_proxy_type: proxy_announced::ForceProxyType, - pub call: ::subxt::ext::subxt_core::alloc::boxed::Box, - } - pub mod proxy_announced { - use super::runtime_types; - pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ForceProxyType = - ::core::option::Option; - pub type Call = runtime_types::tangle_testnet_runtime::RuntimeCall; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ProxyAnnounced { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "proxy_announced"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::proxy`]."] - pub fn proxy( - &self, - real: types::proxy::Real, - force_proxy_type: types::proxy::ForceProxyType, - call: types::proxy::Call, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "proxy", - types::Proxy { - real, - force_proxy_type, - call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), - }, - [ - 38u8, 97u8, 48u8, 48u8, 150u8, 65u8, 217u8, 169u8, 192u8, 191u8, 188u8, - 78u8, 150u8, 189u8, 7u8, 157u8, 156u8, 48u8, 150u8, 11u8, 37u8, 132u8, - 234u8, 78u8, 217u8, 1u8, 162u8, 71u8, 78u8, 244u8, 230u8, 206u8, - ], - ) - } - #[doc = "See [`Pallet::add_proxy`]."] - pub fn add_proxy( - &self, - delegate: types::add_proxy::Delegate, - proxy_type: types::add_proxy::ProxyType, - delay: types::add_proxy::Delay, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "add_proxy", - types::AddProxy { delegate, proxy_type, delay }, - [ - 204u8, 170u8, 8u8, 148u8, 160u8, 168u8, 107u8, 62u8, 50u8, 75u8, 3u8, - 71u8, 179u8, 30u8, 109u8, 127u8, 108u8, 156u8, 239u8, 38u8, 97u8, 92u8, - 28u8, 253u8, 230u8, 97u8, 205u8, 44u8, 214u8, 237u8, 137u8, 27u8, - ], - ) - } - #[doc = "See [`Pallet::remove_proxy`]."] - pub fn remove_proxy( - &self, - delegate: types::remove_proxy::Delegate, - proxy_type: types::remove_proxy::ProxyType, - delay: types::remove_proxy::Delay, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "remove_proxy", - types::RemoveProxy { delegate, proxy_type, delay }, - [ - 191u8, 2u8, 69u8, 93u8, 184u8, 207u8, 70u8, 111u8, 8u8, 255u8, 11u8, - 157u8, 4u8, 29u8, 102u8, 245u8, 223u8, 103u8, 132u8, 196u8, 238u8, - 252u8, 127u8, 91u8, 243u8, 48u8, 176u8, 86u8, 99u8, 63u8, 108u8, 111u8, - ], - ) - } - #[doc = "See [`Pallet::remove_proxies`]."] - pub fn remove_proxies( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "remove_proxies", - types::RemoveProxies {}, - [ - 1u8, 126u8, 36u8, 227u8, 185u8, 34u8, 218u8, 236u8, 125u8, 231u8, 68u8, - 185u8, 145u8, 63u8, 250u8, 225u8, 103u8, 3u8, 189u8, 37u8, 172u8, - 195u8, 197u8, 216u8, 99u8, 210u8, 240u8, 162u8, 158u8, 132u8, 24u8, - 6u8, - ], - ) - } - #[doc = "See [`Pallet::create_pure`]."] - pub fn create_pure( - &self, - proxy_type: types::create_pure::ProxyType, - delay: types::create_pure::Delay, - index: types::create_pure::Index, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "create_pure", - types::CreatePure { proxy_type, delay, index }, - [ - 239u8, 72u8, 255u8, 141u8, 190u8, 115u8, 141u8, 227u8, 164u8, 59u8, - 113u8, 0u8, 87u8, 101u8, 142u8, 147u8, 43u8, 13u8, 59u8, 213u8, 162u8, - 48u8, 67u8, 167u8, 223u8, 72u8, 153u8, 148u8, 219u8, 71u8, 53u8, 4u8, - ], - ) + pub struct Approval<_0, _1> { + pub amount: _0, + pub deposit: _1, } - #[doc = "See [`Pallet::kill_pure`]."] - pub fn kill_pure( - &self, - spawner: types::kill_pure::Spawner, - proxy_type: types::kill_pure::ProxyType, - index: types::kill_pure::Index, - height: types::kill_pure::Height, - ext_index: types::kill_pure::ExtIndex, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "kill_pure", - types::KillPure { spawner, proxy_type, index, height, ext_index }, - [ - 125u8, 59u8, 127u8, 47u8, 63u8, 48u8, 101u8, 56u8, 61u8, 192u8, 198u8, - 217u8, 119u8, 91u8, 186u8, 35u8, 119u8, 222u8, 16u8, 246u8, 42u8, - 248u8, 19u8, 89u8, 246u8, 20u8, 66u8, 14u8, 133u8, 32u8, 118u8, 118u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct AssetAccount<_0, _1, _2, _3> { + pub balance: _0, + pub status: runtime_types::pallet_assets::types::AccountStatus, + pub reason: runtime_types::pallet_assets::types::ExistenceReason<_0, _3>, + pub extra: _2, + #[codec(skip)] + pub __ignore: ::core::marker::PhantomData<_1>, } - #[doc = "See [`Pallet::announce`]."] - pub fn announce( - &self, - real: types::announce::Real, - call_hash: types::announce::CallHash, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "announce", - types::Announce { real, call_hash }, - [ - 32u8, 88u8, 145u8, 33u8, 55u8, 44u8, 136u8, 153u8, 26u8, 111u8, 73u8, - 15u8, 247u8, 188u8, 14u8, 236u8, 221u8, 222u8, 60u8, 97u8, 71u8, 229u8, - 18u8, 120u8, 182u8, 43u8, 67u8, 248u8, 169u8, 80u8, 170u8, 207u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct AssetDetails<_0, _1, _2> { + pub owner: _1, + pub issuer: _1, + pub admin: _1, + pub freezer: _1, + pub supply: _0, + pub deposit: _2, + pub min_balance: _0, + pub is_sufficient: ::core::primitive::bool, + pub accounts: ::core::primitive::u32, + pub sufficients: ::core::primitive::u32, + pub approvals: ::core::primitive::u32, + pub status: runtime_types::pallet_assets::types::AssetStatus, } - #[doc = "See [`Pallet::remove_announcement`]."] - pub fn remove_announcement( - &self, - real: types::remove_announcement::Real, - call_hash: types::remove_announcement::CallHash, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "remove_announcement", - types::RemoveAnnouncement { real, call_hash }, - [ - 195u8, 224u8, 61u8, 33u8, 27u8, 100u8, 168u8, 18u8, 105u8, 23u8, 220u8, - 168u8, 207u8, 231u8, 136u8, 46u8, 181u8, 85u8, 15u8, 151u8, 126u8, - 227u8, 97u8, 162u8, 232u8, 39u8, 45u8, 255u8, 44u8, 167u8, 237u8, 38u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct AssetMetadata<_0, _1> { + pub deposit: _0, + pub name: _1, + pub symbol: _1, + pub decimals: ::core::primitive::u8, + pub is_frozen: ::core::primitive::bool, } - #[doc = "See [`Pallet::reject_announcement`]."] - pub fn reject_announcement( - &self, - delegate: types::reject_announcement::Delegate, - call_hash: types::reject_announcement::CallHash, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "reject_announcement", - types::RejectAnnouncement { delegate, call_hash }, - [ - 29u8, 140u8, 243u8, 165u8, 143u8, 166u8, 205u8, 203u8, 111u8, 196u8, - 11u8, 2u8, 4u8, 230u8, 11u8, 136u8, 249u8, 139u8, 224u8, 242u8, 96u8, - 146u8, 118u8, 210u8, 104u8, 77u8, 168u8, 28u8, 67u8, 244u8, 91u8, 65u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum AssetStatus { + #[codec(index = 0)] + Live, + #[codec(index = 1)] + Frozen, + #[codec(index = 2)] + Destroying, } - #[doc = "See [`Pallet::proxy_announced`]."] - pub fn proxy_announced( - &self, - delegate: types::proxy_announced::Delegate, - real: types::proxy_announced::Real, - force_proxy_type: types::proxy_announced::ForceProxyType, - call: types::proxy_announced::Call, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "proxy_announced", - types::ProxyAnnounced { - delegate, - real, - force_proxy_type, - call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), - }, - [ - 78u8, 59u8, 179u8, 142u8, 23u8, 136u8, 246u8, 3u8, 254u8, 32u8, 210u8, - 90u8, 172u8, 204u8, 246u8, 247u8, 83u8, 181u8, 203u8, 225u8, 232u8, - 42u8, 199u8, 133u8, 164u8, 105u8, 61u8, 100u8, 131u8, 50u8, 221u8, - 14u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum ExistenceReason<_0, _1> { + #[codec(index = 0)] + Consumer, + #[codec(index = 1)] + Sufficient, + #[codec(index = 2)] + DepositHeld(_0), + #[codec(index = 3)] + DepositRefunded, + #[codec(index = 4)] + DepositFrom(_1, _0), } } } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_proxy::pallet::Event; - pub mod events { + pub mod pallet_babe { use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A proxy was executed correctly, with the given."] - pub struct ProxyExecuted { - pub result: proxy_executed::Result, - } - pub mod proxy_executed { - use super::runtime_types; - pub type Result = - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyExecuted { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "ProxyExecuted"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A pure account has been created by new proxy with given"] - #[doc = "disambiguation index and proxy type."] - pub struct PureCreated { - pub pure: pure_created::Pure, - pub who: pure_created::Who, - pub proxy_type: pure_created::ProxyType, - pub disambiguation_index: pure_created::DisambiguationIndex, - } - pub mod pure_created { - use super::runtime_types; - pub type Pure = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type DisambiguationIndex = ::core::primitive::u16; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for PureCreated { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "PureCreated"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An announcement was placed to make a call in the future."] - pub struct Announced { - pub real: announced::Real, - pub proxy: announced::Proxy, - pub call_hash: announced::CallHash, - } - pub mod announced { - use super::runtime_types; - pub type Real = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Proxy = ::subxt::ext::subxt_core::utils::AccountId32; - pub type CallHash = ::subxt::ext::subxt_core::utils::H256; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for Announced { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "Announced"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A proxy was added."] - pub struct ProxyAdded { - pub delegator: proxy_added::Delegator, - pub delegatee: proxy_added::Delegatee, - pub proxy_type: proxy_added::ProxyType, - pub delay: proxy_added::Delay, - } - pub mod proxy_added { - use super::runtime_types; - pub type Delegator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Delegatee = ::subxt::ext::subxt_core::utils::AccountId32; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyAdded { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "ProxyAdded"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A proxy was removed."] - pub struct ProxyRemoved { - pub delegator: proxy_removed::Delegator, - pub delegatee: proxy_removed::Delegatee, - pub proxy_type: proxy_removed::ProxyType, - pub delay: proxy_removed::Delay, - } - pub mod proxy_removed { - use super::runtime_types; - pub type Delegator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Delegatee = ::subxt::ext::subxt_core::utils::AccountId32; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyRemoved { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "ProxyRemoved"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod proxies { - use super::runtime_types; - pub type Proxies = ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_proxy::ProxyDefinition< - ::subxt::ext::subxt_core::utils::AccountId32, - runtime_types::tangle_testnet_runtime::ProxyType, - ::core::primitive::u64, - >, - >, - ::core::primitive::u128, - ); - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; - } - pub mod announcements { - use super::runtime_types; - pub type Announcements = ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_proxy::Announcement< - ::subxt::ext::subxt_core::utils::AccountId32, - ::subxt::ext::subxt_core::utils::H256, - ::core::primitive::u64, - >, - >, - ::core::primitive::u128, - ); - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; - } - } - pub struct StorageApi; - impl StorageApi { - #[doc = " The set of account proxies. Maps the account which has delegated to the accounts"] - #[doc = " which are being delegated to, together with the amount held on deposit."] - pub fn proxies_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::proxies::Proxies, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Proxy", - "Proxies", - (), - [ - 223u8, 41u8, 16u8, 124u8, 14u8, 158u8, 113u8, 7u8, 229u8, 203u8, 172u8, - 71u8, 221u8, 164u8, 20u8, 177u8, 252u8, 14u8, 117u8, 176u8, 21u8, - 236u8, 79u8, 107u8, 57u8, 148u8, 170u8, 107u8, 179u8, 144u8, 255u8, - 10u8, - ], - ) - } - #[doc = " The set of account proxies. Maps the account which has delegated to the accounts"] - #[doc = " which are being delegated to, together with the amount held on deposit."] - pub fn proxies( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::proxies::Param0, - >, - types::proxies::Proxies, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Proxy", - "Proxies", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 223u8, 41u8, 16u8, 124u8, 14u8, 158u8, 113u8, 7u8, 229u8, 203u8, 172u8, - 71u8, 221u8, 164u8, 20u8, 177u8, 252u8, 14u8, 117u8, 176u8, 21u8, - 236u8, 79u8, 107u8, 57u8, 148u8, 170u8, 107u8, 179u8, 144u8, 255u8, - 10u8, - ], - ) - } - #[doc = " The announcements made by the proxy (key)."] - pub fn announcements_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::announcements::Announcements, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Proxy", - "Announcements", - (), - [ - 36u8, 91u8, 194u8, 19u8, 186u8, 110u8, 217u8, 123u8, 101u8, 197u8, - 249u8, 185u8, 42u8, 5u8, 244u8, 249u8, 18u8, 156u8, 41u8, 19u8, 86u8, - 12u8, 253u8, 126u8, 232u8, 9u8, 226u8, 210u8, 25u8, 3u8, 115u8, 40u8, - ], - ) - } - #[doc = " The announcements made by the proxy (key)."] - pub fn announcements( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::announcements::Param0, - >, - types::announcements::Announcements, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Proxy", - "Announcements", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 36u8, 91u8, 194u8, 19u8, 186u8, 110u8, 217u8, 123u8, 101u8, 197u8, - 249u8, 185u8, 42u8, 5u8, 244u8, 249u8, 18u8, 156u8, 41u8, 19u8, 86u8, - 12u8, 253u8, 126u8, 232u8, 9u8, 226u8, 210u8, 25u8, 3u8, 115u8, 40u8, - ], - ) - } - } - } - pub mod constants { - use super::runtime_types; - pub struct ConstantsApi; - impl ConstantsApi { - #[doc = " The base amount of currency needed to reserve for creating a proxy."] - #[doc = ""] - #[doc = " This is held for an additional storage item whose value size is"] - #[doc = " `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes."] - pub fn proxy_deposit_base( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "ProxyDepositBase", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - #[doc = " The amount of currency needed per proxy added."] - #[doc = ""] - #[doc = " This is held for adding 32 bytes plus an instance of `ProxyType` more into a"] - #[doc = " pre-existing storage value. Thus, when configuring `ProxyDepositFactor` one should take"] - #[doc = " into account `32 + proxy_type.encode().len()` bytes of data."] - pub fn proxy_deposit_factor( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "ProxyDepositFactor", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - #[doc = " The maximum amount of proxies allowed for a single account."] - pub fn max_proxies( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "MaxProxies", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - #[doc = " The maximum amount of time-delayed announcements that are allowed to be pending."] - pub fn max_pending( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "MaxPending", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - #[doc = " The base amount of currency needed to reserve for creating an announcement."] - #[doc = ""] - #[doc = " This is held when a new storage item holding a `Balance` is created (typically 16"] - #[doc = " bytes)."] - pub fn announcement_deposit_base( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "AnnouncementDepositBase", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - #[doc = " The amount of currency needed per announcement made."] - #[doc = ""] - #[doc = " This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes)"] - #[doc = " into a pre-existing storage value."] - pub fn announcement_deposit_factor( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "AnnouncementDepositFactor", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - } - } - } - pub mod multi_asset_delegation { - use super::root_mod; - use super::runtime_types; - #[doc = "Errors emitted by the pallet."] - pub type Error = runtime_types::pallet_multi_asset_delegation::pallet::Error; - #[doc = "The callable functions (extrinsics) of the pallet."] - pub type Call = runtime_types::pallet_multi_asset_delegation::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { + pub mod pallet { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39350,17 +39475,39 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::join_operators`]."] - pub struct JoinOperators { - pub bond_amount: join_operators::BondAmount, - } - pub mod join_operators { - use super::runtime_types; - pub type BondAmount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for JoinOperators { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "join_operators"; + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::report_equivocation`]."] + report_equivocation { + equivocation_proof: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::sp_consensus_slots::EquivocationProof< + runtime_types::sp_runtime::generic::header::Header< + ::core::primitive::u64, + >, + runtime_types::sp_consensus_babe::app::Public, + >, + >, + key_owner_proof: runtime_types::sp_session::MembershipProof, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::report_equivocation_unsigned`]."] + report_equivocation_unsigned { + equivocation_proof: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::sp_consensus_slots::EquivocationProof< + runtime_types::sp_runtime::generic::header::Header< + ::core::primitive::u64, + >, + runtime_types::sp_consensus_babe::app::Public, + >, + >, + key_owner_proof: runtime_types::sp_session::MembershipProof, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::plan_config_change`]."] + plan_config_change { + config: runtime_types::sp_consensus_babe::digests::NextConfigDescriptor, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39379,12 +39526,27 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::schedule_leave_operators`]."] - pub struct ScheduleLeaveOperators; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleLeaveOperators { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "schedule_leave_operators"; + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "An equivocation proof provided as part of an equivocation report is invalid."] + InvalidEquivocationProof, + #[codec(index = 1)] + #[doc = "A key ownership proof provided as part of an equivocation report is invalid."] + InvalidKeyOwnershipProof, + #[codec(index = 2)] + #[doc = "A given equivocation report is valid but already previously reported."] + DuplicateOffenceReport, + #[codec(index = 3)] + #[doc = "Submitted configuration is invalid."] + InvalidConfiguration, } + } + } + pub mod pallet_bags_list { + use super::runtime_types; + pub mod list { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -39402,11 +39564,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::cancel_leave_operators`]."] - pub struct CancelLeaveOperators; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelLeaveOperators { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "cancel_leave_operators"; + pub struct Bag { + pub head: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + pub tail: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39425,11 +39585,15 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::execute_leave_operators`]."] - pub struct ExecuteLeaveOperators; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteLeaveOperators { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "execute_leave_operators"; + pub enum ListError { + #[codec(index = 0)] + Duplicate, + #[codec(index = 1)] + NotHeavier, + #[codec(index = 2)] + NotInSameBag, + #[codec(index = 3)] + NodeNotFound, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39448,18 +39612,16 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::operator_bond_more`]."] - pub struct OperatorBondMore { - pub additional_bond: operator_bond_more::AdditionalBond, - } - pub mod operator_bond_more { - use super::runtime_types; - pub type AdditionalBond = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for OperatorBondMore { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "operator_bond_more"; + pub struct Node { + pub id: ::subxt::ext::subxt_core::utils::AccountId32, + pub prev: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + pub next: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + pub bag_upper: ::core::primitive::u64, + pub score: ::core::primitive::u64, } + } + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -39477,17 +39639,36 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::schedule_operator_bond_less`]."] - pub struct ScheduleOperatorBondLess { - pub bond_less_amount: schedule_operator_bond_less::BondLessAmount, - } - pub mod schedule_operator_bond_less { - use super::runtime_types; - pub type BondLessAmount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleOperatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "schedule_operator_bond_less"; + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::rebag`]."] + rebag { + dislocated: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::put_in_front_of`]."] + put_in_front_of { + lighter: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::put_in_front_of_other`]."] + put_in_front_of_other { + heavier: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + lighter: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39506,11 +39687,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::execute_operator_bond_less`]."] - pub struct ExecuteOperatorBondLess; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteOperatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "execute_operator_bond_less"; + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "A error in the list interface implementation."] + List(runtime_types::pallet_bags_list::list::ListError), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39529,13 +39710,29 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::cancel_operator_bond_less`]."] - pub struct CancelOperatorBondLess; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelOperatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "cancel_operator_bond_less"; + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "Moved an account from one bag to another."] + Rebagged { + who: ::subxt::ext::subxt_core::utils::AccountId32, + from: ::core::primitive::u64, + to: ::core::primitive::u64, + }, + #[codec(index = 1)] + #[doc = "Updated the score of some account to the given amount."] + ScoreUpdated { + who: ::subxt::ext::subxt_core::utils::AccountId32, + new_score: ::core::primitive::u64, + }, } - #[derive( + } + } + pub mod pallet_balances { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; + #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -39552,11 +39749,84 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::go_offline`]."] - pub struct GoOffline; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for GoOffline { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "go_offline"; + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::transfer_allow_death`]."] + transfer_allow_death { + dest: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + value: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::force_transfer`]."] + force_transfer { + source: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + dest: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + value: ::core::primitive::u128, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::transfer_keep_alive`]."] + transfer_keep_alive { + dest: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + value: ::core::primitive::u128, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::transfer_all`]."] + transfer_all { + dest: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + keep_alive: ::core::primitive::bool, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::force_unreserve`]."] + force_unreserve { + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + amount: ::core::primitive::u128, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::upgrade_accounts`]."] + upgrade_accounts { + who: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + }, + #[codec(index = 8)] + #[doc = "See [`Pallet::force_set_balance`]."] + force_set_balance { + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + new_free: ::core::primitive::u128, + }, + #[codec(index = 9)] + #[doc = "See [`Pallet::force_adjust_total_issuance`]."] + force_adjust_total_issuance { + direction: runtime_types::pallet_balances::types::AdjustmentDirection, + #[codec(compact)] + delta: ::core::primitive::u128, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39575,11 +39845,44 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::go_online`]."] - pub struct GoOnline; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for GoOnline { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "go_online"; + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Vesting balance too high to send value."] + VestingBalance, + #[codec(index = 1)] + #[doc = "Account liquidity restrictions prevent withdrawal."] + LiquidityRestrictions, + #[codec(index = 2)] + #[doc = "Balance too low to send value."] + InsufficientBalance, + #[codec(index = 3)] + #[doc = "Value too low to create account due to existential deposit."] + ExistentialDeposit, + #[codec(index = 4)] + #[doc = "Transfer/payment would kill account."] + Expendability, + #[codec(index = 5)] + #[doc = "A vesting schedule already exists for this account."] + ExistingVestingSchedule, + #[codec(index = 6)] + #[doc = "Beneficiary account must pre-exist."] + DeadAccount, + #[codec(index = 7)] + #[doc = "Number of named reserves exceed `MaxReserves`."] + TooManyReserves, + #[codec(index = 8)] + #[doc = "Number of holds exceed `VariantCountOf`."] + TooManyHolds, + #[codec(index = 9)] + #[doc = "Number of freezes exceed `MaxFreezes`."] + TooManyFreezes, + #[codec(index = 10)] + #[doc = "The issuance cannot be modified since it is already deactivated."] + IssuanceDeactivated, + #[codec(index = 11)] + #[doc = "The delta cannot be zero."] + DeltaZero, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39598,20 +39901,141 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::deposit`]."] - pub struct Deposit { - pub asset_id: deposit::AssetId, - pub amount: deposit::Amount, - } - pub mod deposit { - use super::runtime_types; - pub type AssetId = ::core::option::Option<::core::primitive::u128>; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Deposit { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "deposit"; + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "An account was created with some free balance."] + Endowed { + account: ::subxt::ext::subxt_core::utils::AccountId32, + free_balance: ::core::primitive::u128, + }, + #[codec(index = 1)] + #[doc = "An account was removed whose balance was non-zero but below ExistentialDeposit,"] + #[doc = "resulting in an outright loss."] + DustLost { + account: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "Transfer succeeded."] + Transfer { + from: ::subxt::ext::subxt_core::utils::AccountId32, + to: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 3)] + #[doc = "A balance was set by root."] + BalanceSet { + who: ::subxt::ext::subxt_core::utils::AccountId32, + free: ::core::primitive::u128, + }, + #[codec(index = 4)] + #[doc = "Some balance was reserved (moved from free to reserved)."] + Reserved { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 5)] + #[doc = "Some balance was unreserved (moved from reserved to free)."] + Unreserved { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 6)] + #[doc = "Some balance was moved from the reserve of the first account to the second account."] + #[doc = "Final argument indicates the destination balance type."] + ReserveRepatriated { + from: ::subxt::ext::subxt_core::utils::AccountId32, + to: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + destination_status: + runtime_types::frame_support::traits::tokens::misc::BalanceStatus, + }, + #[codec(index = 7)] + #[doc = "Some amount was deposited (e.g. for transaction fees)."] + Deposit { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 8)] + #[doc = "Some amount was withdrawn from the account (e.g. for transaction fees)."] + Withdraw { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 9)] + #[doc = "Some amount was removed from the account (e.g. for misbehavior)."] + Slashed { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 10)] + #[doc = "Some amount was minted into an account."] + Minted { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 11)] + #[doc = "Some amount was burned from an account."] + Burned { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 12)] + #[doc = "Some amount was suspended from an account (it can be restored later)."] + Suspended { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 13)] + #[doc = "Some amount was restored into an account."] + Restored { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 14)] + #[doc = "An account was upgraded."] + Upgraded { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 15)] + #[doc = "Total issuance was increased by `amount`, creating a credit to be balanced."] + Issued { amount: ::core::primitive::u128 }, + #[codec(index = 16)] + #[doc = "Total issuance was decreased by `amount`, creating a debt to be balanced."] + Rescinded { amount: ::core::primitive::u128 }, + #[codec(index = 17)] + #[doc = "Some balance was locked."] + Locked { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 18)] + #[doc = "Some balance was unlocked."] + Unlocked { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 19)] + #[doc = "Some balance was frozen."] + Frozen { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 20)] + #[doc = "Some balance was thawed."] + Thawed { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 21)] + #[doc = "The `TotalIssuance` was forcefully changed."] + TotalIssuanceForced { + old: ::core::primitive::u128, + new: ::core::primitive::u128, + }, } + } + pub mod types { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -39629,19 +40053,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::schedule_unstake`]."] - pub struct ScheduleUnstake { - pub asset_id: schedule_unstake::AssetId, - pub amount: schedule_unstake::Amount, - } - pub mod schedule_unstake { - use super::runtime_types; - pub type AssetId = ::core::option::Option<::core::primitive::u128>; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "schedule_unstake"; + pub struct AccountData<_0> { + pub free: _0, + pub reserved: _0, + pub frozen: _0, + pub flags: runtime_types::pallet_balances::types::ExtraFlags, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39660,11 +40076,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::execute_unstake`]."] - pub struct ExecuteUnstake; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "execute_unstake"; + pub enum AdjustmentDirection { + #[codec(index = 0)] + Increase, + #[codec(index = 1)] + Decrease, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39683,13 +40099,13 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::cancel_unstake`]."] - pub struct CancelUnstake; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "cancel_unstake"; + pub struct BalanceLock<_0> { + pub id: [::core::primitive::u8; 8usize], + pub amount: _0, + pub reasons: runtime_types::pallet_balances::types::Reasons, } #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -39706,22 +40122,7 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::delegate`]."] - pub struct Delegate { - pub operator: delegate::Operator, - pub asset_id: delegate::AssetId, - pub amount: delegate::Amount, - } - pub mod delegate { - use super::runtime_types; - pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type AssetId = ::core::primitive::u128; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Delegate { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "delegate"; - } + pub struct ExtraFlags(pub ::core::primitive::u128); #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -39739,21 +40140,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::schedule_delegator_bond_less`]."] - pub struct ScheduleDelegatorBondLess { - pub operator: schedule_delegator_bond_less::Operator, - pub asset_id: schedule_delegator_bond_less::AssetId, - pub amount: schedule_delegator_bond_less::Amount, - } - pub mod schedule_delegator_bond_less { - use super::runtime_types; - pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type AssetId = ::core::primitive::u128; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "schedule_delegator_bond_less"; + pub struct IdAmount<_0, _1> { + pub id: _0, + pub amount: _1, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39772,11 +40161,13 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::execute_delegator_bond_less`]."] - pub struct ExecuteDelegatorBondLess; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "execute_delegator_bond_less"; + pub enum Reasons { + #[codec(index = 0)] + Fee, + #[codec(index = 1)] + Misc, + #[codec(index = 2)] + All, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39795,12 +40186,16 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::cancel_delegator_bond_less`]."] - pub struct CancelDelegatorBondLess; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "cancel_delegator_bond_less"; + pub struct ReserveData<_0, _1> { + pub id: _0, + pub amount: _1, } + } + } + pub mod pallet_base_fee { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -39818,18 +40213,14 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_whitelisted_assets`]."] - pub struct SetWhitelistedAssets { - pub assets: set_whitelisted_assets::Assets, - } - pub mod set_whitelisted_assets { - use super::runtime_types; - pub type Assets = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetWhitelistedAssets { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "set_whitelisted_assets"; + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::set_base_fee_per_gas`]."] + set_base_fee_per_gas { fee: runtime_types::primitive_types::U256 }, + #[codec(index = 1)] + #[doc = "See [`Pallet::set_elasticity`]."] + set_elasticity { elasticity: runtime_types::sp_arithmetic::per_things::Permill }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39848,22 +40239,21 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] - pub struct SetIncentiveApyAndCap { - pub asset_id: set_incentive_apy_and_cap::AssetId, - pub apy: set_incentive_apy_and_cap::Apy, - pub cap: set_incentive_apy_and_cap::Cap, - } - pub mod set_incentive_apy_and_cap { - use super::runtime_types; - pub type AssetId = ::core::primitive::u128; - pub type Apy = ::core::primitive::u128; - pub type Cap = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetIncentiveApyAndCap { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "set_incentive_apy_and_cap"; + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + NewBaseFeePerGas { fee: runtime_types::primitive_types::U256 }, + #[codec(index = 1)] + BaseFeeOverflow, + #[codec(index = 2)] + NewElasticity { elasticity: runtime_types::sp_arithmetic::per_things::Permill }, } + } + } + pub mod pallet_bounties { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -39881,495 +40271,197 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] - pub struct WhitelistBlueprintForRewards { - pub blueprint_id: whitelist_blueprint_for_rewards::BlueprintId, - } - pub mod whitelist_blueprint_for_rewards { - use super::runtime_types; - pub type BlueprintId = ::core::primitive::u32; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for WhitelistBlueprintForRewards { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "whitelist_blueprint_for_rewards"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::join_operators`]."] - pub fn join_operators( - &self, - bond_amount: types::join_operators::BondAmount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "join_operators", - types::JoinOperators { bond_amount }, - [ - 200u8, 51u8, 233u8, 253u8, 180u8, 90u8, 81u8, 7u8, 248u8, 218u8, 76u8, - 136u8, 126u8, 106u8, 132u8, 111u8, 26u8, 70u8, 68u8, 40u8, 153u8, - 179u8, 25u8, 198u8, 10u8, 105u8, 214u8, 38u8, 79u8, 102u8, 183u8, - 115u8, - ], - ) - } - #[doc = "See [`Pallet::schedule_leave_operators`]."] - pub fn schedule_leave_operators( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ScheduleLeaveOperators, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "schedule_leave_operators", - types::ScheduleLeaveOperators {}, - [ - 40u8, 228u8, 5u8, 223u8, 70u8, 47u8, 223u8, 89u8, 229u8, 174u8, 84u8, - 232u8, 216u8, 104u8, 83u8, 134u8, 59u8, 234u8, 89u8, 53u8, 238u8, - 253u8, 150u8, 13u8, 19u8, 178u8, 179u8, 191u8, 209u8, 45u8, 53u8, 85u8, - ], - ) - } - #[doc = "See [`Pallet::cancel_leave_operators`]."] - pub fn cancel_leave_operators( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "cancel_leave_operators", - types::CancelLeaveOperators {}, - [ - 69u8, 106u8, 203u8, 11u8, 3u8, 80u8, 201u8, 178u8, 156u8, 17u8, 142u8, - 173u8, 37u8, 245u8, 0u8, 84u8, 213u8, 189u8, 221u8, 34u8, 28u8, 204u8, - 88u8, 240u8, 72u8, 190u8, 173u8, 115u8, 82u8, 210u8, 212u8, 6u8, - ], - ) - } - #[doc = "See [`Pallet::execute_leave_operators`]."] - pub fn execute_leave_operators( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ExecuteLeaveOperators, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "execute_leave_operators", - types::ExecuteLeaveOperators {}, - [ - 57u8, 188u8, 97u8, 173u8, 224u8, 57u8, 203u8, 116u8, 132u8, 111u8, - 60u8, 129u8, 153u8, 1u8, 222u8, 163u8, 102u8, 230u8, 13u8, 177u8, - 221u8, 246u8, 53u8, 106u8, 229u8, 133u8, 240u8, 136u8, 179u8, 21u8, - 143u8, 180u8, - ], - ) + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::propose_bounty`]."] + propose_bounty { + #[codec(compact)] + value: ::core::primitive::u128, + description: + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::approve_bounty`]."] + approve_bounty { + #[codec(compact)] + bounty_id: ::core::primitive::u32, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::propose_curator`]."] + propose_curator { + #[codec(compact)] + bounty_id: ::core::primitive::u32, + curator: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + fee: ::core::primitive::u128, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::unassign_curator`]."] + unassign_curator { + #[codec(compact)] + bounty_id: ::core::primitive::u32, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::accept_curator`]."] + accept_curator { + #[codec(compact)] + bounty_id: ::core::primitive::u32, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::award_bounty`]."] + award_bounty { + #[codec(compact)] + bounty_id: ::core::primitive::u32, + beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::claim_bounty`]."] + claim_bounty { + #[codec(compact)] + bounty_id: ::core::primitive::u32, + }, + #[codec(index = 7)] + #[doc = "See [`Pallet::close_bounty`]."] + close_bounty { + #[codec(compact)] + bounty_id: ::core::primitive::u32, + }, + #[codec(index = 8)] + #[doc = "See [`Pallet::extend_bounty_expiry`]."] + extend_bounty_expiry { + #[codec(compact)] + bounty_id: ::core::primitive::u32, + remark: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, } - #[doc = "See [`Pallet::operator_bond_more`]."] - pub fn operator_bond_more( - &self, - additional_bond: types::operator_bond_more::AdditionalBond, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "operator_bond_more", - types::OperatorBondMore { additional_bond }, - [ - 124u8, 33u8, 17u8, 157u8, 169u8, 58u8, 82u8, 138u8, 216u8, 98u8, 111u8, - 31u8, 223u8, 183u8, 172u8, 219u8, 224u8, 196u8, 180u8, 92u8, 156u8, - 215u8, 145u8, 66u8, 172u8, 96u8, 81u8, 20u8, 210u8, 182u8, 144u8, - 172u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Proposer's balance is too low."] + InsufficientProposersBalance, + #[codec(index = 1)] + #[doc = "No proposal or bounty at that index."] + InvalidIndex, + #[codec(index = 2)] + #[doc = "The reason given is just too big."] + ReasonTooBig, + #[codec(index = 3)] + #[doc = "The bounty status is unexpected."] + UnexpectedStatus, + #[codec(index = 4)] + #[doc = "Require bounty curator."] + RequireCurator, + #[codec(index = 5)] + #[doc = "Invalid bounty value."] + InvalidValue, + #[codec(index = 6)] + #[doc = "Invalid bounty fee."] + InvalidFee, + #[codec(index = 7)] + #[doc = "A bounty payout is pending."] + #[doc = "To cancel the bounty, you must unassign and slash the curator."] + PendingPayout, + #[codec(index = 8)] + #[doc = "The bounties cannot be claimed/closed because it's still in the countdown period."] + Premature, + #[codec(index = 9)] + #[doc = "The bounty cannot be closed because it has active child bounties."] + HasActiveChildBounty, + #[codec(index = 10)] + #[doc = "Too many approvals are already queued."] + TooManyQueued, } - #[doc = "See [`Pallet::schedule_operator_bond_less`]."] - pub fn schedule_operator_bond_less( - &self, - bond_less_amount: types::schedule_operator_bond_less::BondLessAmount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ScheduleOperatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "schedule_operator_bond_less", - types::ScheduleOperatorBondLess { bond_less_amount }, - [ - 221u8, 206u8, 7u8, 82u8, 56u8, 222u8, 84u8, 233u8, 255u8, 170u8, 90u8, - 78u8, 48u8, 196u8, 247u8, 45u8, 86u8, 87u8, 72u8, 103u8, 94u8, 137u8, - 63u8, 146u8, 45u8, 151u8, 224u8, 227u8, 208u8, 234u8, 134u8, 233u8, - ], - ) - } - #[doc = "See [`Pallet::execute_operator_bond_less`]."] - pub fn execute_operator_bond_less( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ExecuteOperatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "execute_operator_bond_less", - types::ExecuteOperatorBondLess {}, - [ - 217u8, 107u8, 87u8, 164u8, 114u8, 104u8, 78u8, 24u8, 205u8, 164u8, - 171u8, 191u8, 238u8, 76u8, 94u8, 193u8, 55u8, 254u8, 167u8, 42u8, - 107u8, 222u8, 67u8, 38u8, 241u8, 73u8, 88u8, 12u8, 133u8, 135u8, 104u8, - 145u8, - ], - ) - } - #[doc = "See [`Pallet::cancel_operator_bond_less`]."] - pub fn cancel_operator_bond_less( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::CancelOperatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "cancel_operator_bond_less", - types::CancelOperatorBondLess {}, - [ - 197u8, 50u8, 218u8, 234u8, 28u8, 186u8, 243u8, 22u8, 240u8, 137u8, - 36u8, 185u8, 125u8, 201u8, 147u8, 81u8, 16u8, 170u8, 246u8, 126u8, - 235u8, 52u8, 122u8, 61u8, 120u8, 167u8, 180u8, 147u8, 252u8, 19u8, - 143u8, 200u8, - ], - ) - } - #[doc = "See [`Pallet::go_offline`]."] - pub fn go_offline( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "go_offline", - types::GoOffline {}, - [ - 229u8, 123u8, 37u8, 67u8, 121u8, 41u8, 249u8, 87u8, 1u8, 78u8, 249u8, - 173u8, 135u8, 228u8, 239u8, 244u8, 177u8, 153u8, 242u8, 112u8, 157u8, - 150u8, 12u8, 213u8, 38u8, 250u8, 85u8, 150u8, 252u8, 60u8, 204u8, - 134u8, - ], - ) - } - #[doc = "See [`Pallet::go_online`]."] - pub fn go_online( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "go_online", - types::GoOnline {}, - [ - 58u8, 44u8, 183u8, 212u8, 2u8, 121u8, 216u8, 100u8, 238u8, 222u8, - 118u8, 20u8, 145u8, 231u8, 226u8, 156u8, 130u8, 2u8, 113u8, 3u8, 49u8, - 119u8, 211u8, 112u8, 151u8, 192u8, 181u8, 139u8, 108u8, 209u8, 80u8, - 47u8, - ], - ) - } - #[doc = "See [`Pallet::deposit`]."] - pub fn deposit( - &self, - asset_id: types::deposit::AssetId, - amount: types::deposit::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "deposit", - types::Deposit { asset_id, amount }, - [ - 109u8, 175u8, 182u8, 203u8, 142u8, 22u8, 205u8, 225u8, 68u8, 221u8, - 253u8, 86u8, 33u8, 127u8, 183u8, 165u8, 181u8, 26u8, 29u8, 66u8, 179u8, - 99u8, 127u8, 5u8, 104u8, 162u8, 190u8, 51u8, 96u8, 193u8, 140u8, 207u8, - ], - ) - } - #[doc = "See [`Pallet::schedule_unstake`]."] - pub fn schedule_unstake( - &self, - asset_id: types::schedule_unstake::AssetId, - amount: types::schedule_unstake::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "schedule_unstake", - types::ScheduleUnstake { asset_id, amount }, - [ - 43u8, 31u8, 22u8, 55u8, 105u8, 92u8, 90u8, 86u8, 44u8, 175u8, 156u8, - 115u8, 177u8, 108u8, 104u8, 87u8, 139u8, 57u8, 174u8, 72u8, 88u8, - 112u8, 143u8, 130u8, 41u8, 238u8, 8u8, 227u8, 169u8, 131u8, 180u8, - 182u8, - ], - ) - } - #[doc = "See [`Pallet::execute_unstake`]."] - pub fn execute_unstake( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "execute_unstake", - types::ExecuteUnstake {}, - [ - 209u8, 178u8, 220u8, 148u8, 64u8, 107u8, 116u8, 42u8, 55u8, 179u8, - 233u8, 56u8, 246u8, 139u8, 83u8, 241u8, 217u8, 132u8, 50u8, 70u8, - 245u8, 220u8, 182u8, 120u8, 227u8, 161u8, 13u8, 132u8, 198u8, 176u8, - 18u8, 174u8, - ], - ) - } - #[doc = "See [`Pallet::cancel_unstake`]."] - pub fn cancel_unstake( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "cancel_unstake", - types::CancelUnstake {}, - [ - 125u8, 191u8, 138u8, 157u8, 197u8, 239u8, 240u8, 105u8, 239u8, 139u8, - 203u8, 113u8, 227u8, 122u8, 224u8, 106u8, 120u8, 160u8, 33u8, 203u8, - 113u8, 113u8, 53u8, 220u8, 212u8, 41u8, 75u8, 164u8, 0u8, 178u8, 122u8, - 163u8, - ], - ) - } - #[doc = "See [`Pallet::delegate`]."] - pub fn delegate( - &self, - operator: types::delegate::Operator, - asset_id: types::delegate::AssetId, - amount: types::delegate::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "delegate", - types::Delegate { operator, asset_id, amount }, - [ - 227u8, 11u8, 47u8, 236u8, 76u8, 251u8, 39u8, 73u8, 131u8, 239u8, 207u8, - 202u8, 101u8, 233u8, 134u8, 54u8, 216u8, 29u8, 130u8, 54u8, 144u8, - 192u8, 233u8, 73u8, 53u8, 91u8, 5u8, 170u8, 250u8, 197u8, 113u8, 38u8, - ], - ) - } - #[doc = "See [`Pallet::schedule_delegator_bond_less`]."] - pub fn schedule_delegator_bond_less( - &self, - operator: types::schedule_delegator_bond_less::Operator, - asset_id: types::schedule_delegator_bond_less::AssetId, - amount: types::schedule_delegator_bond_less::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ScheduleDelegatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "schedule_delegator_bond_less", - types::ScheduleDelegatorBondLess { operator, asset_id, amount }, - [ - 200u8, 201u8, 197u8, 147u8, 249u8, 179u8, 18u8, 136u8, 249u8, 188u8, - 198u8, 210u8, 3u8, 255u8, 87u8, 70u8, 114u8, 77u8, 153u8, 107u8, 125u8, - 239u8, 130u8, 51u8, 9u8, 10u8, 114u8, 79u8, 232u8, 206u8, 217u8, 203u8, - ], - ) - } - #[doc = "See [`Pallet::execute_delegator_bond_less`]."] - pub fn execute_delegator_bond_less( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ExecuteDelegatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "execute_delegator_bond_less", - types::ExecuteDelegatorBondLess {}, - [ - 144u8, 251u8, 240u8, 33u8, 69u8, 238u8, 25u8, 43u8, 16u8, 246u8, 148u8, - 135u8, 115u8, 149u8, 6u8, 191u8, 133u8, 173u8, 162u8, 129u8, 73u8, - 141u8, 3u8, 193u8, 138u8, 137u8, 215u8, 2u8, 157u8, 96u8, 0u8, 249u8, - ], - ) - } - #[doc = "See [`Pallet::cancel_delegator_bond_less`]."] - pub fn cancel_delegator_bond_less( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::CancelDelegatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "cancel_delegator_bond_less", - types::CancelDelegatorBondLess {}, - [ - 63u8, 243u8, 247u8, 78u8, 123u8, 163u8, 78u8, 97u8, 70u8, 77u8, 175u8, - 111u8, 59u8, 192u8, 117u8, 121u8, 61u8, 22u8, 43u8, 32u8, 80u8, 74u8, - 62u8, 236u8, 188u8, 255u8, 209u8, 163u8, 140u8, 218u8, 50u8, 21u8, - ], - ) - } - #[doc = "See [`Pallet::set_whitelisted_assets`]."] - pub fn set_whitelisted_assets( - &self, - assets: types::set_whitelisted_assets::Assets, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "set_whitelisted_assets", - types::SetWhitelistedAssets { assets }, - [ - 206u8, 117u8, 163u8, 226u8, 67u8, 11u8, 170u8, 142u8, 186u8, 71u8, - 242u8, 35u8, 162u8, 22u8, 211u8, 16u8, 180u8, 170u8, 45u8, 11u8, 87u8, - 200u8, 237u8, 225u8, 48u8, 86u8, 100u8, 23u8, 161u8, 212u8, 16u8, - 200u8, - ], - ) - } - #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] - pub fn set_incentive_apy_and_cap( - &self, - asset_id: types::set_incentive_apy_and_cap::AssetId, - apy: types::set_incentive_apy_and_cap::Apy, - cap: types::set_incentive_apy_and_cap::Cap, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::SetIncentiveApyAndCap, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "set_incentive_apy_and_cap", - types::SetIncentiveApyAndCap { asset_id, apy, cap }, - [ - 230u8, 216u8, 229u8, 146u8, 250u8, 201u8, 231u8, 242u8, 247u8, 104u8, - 164u8, 85u8, 87u8, 245u8, 24u8, 10u8, 24u8, 175u8, 41u8, 177u8, 155u8, - 81u8, 253u8, 222u8, 218u8, 241u8, 115u8, 52u8, 230u8, 246u8, 199u8, - 214u8, - ], - ) - } - #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] - pub fn whitelist_blueprint_for_rewards( - &self, - blueprint_id: types::whitelist_blueprint_for_rewards::BlueprintId, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::WhitelistBlueprintForRewards, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "whitelist_blueprint_for_rewards", - types::WhitelistBlueprintForRewards { blueprint_id }, - [ - 200u8, 143u8, 250u8, 243u8, 185u8, 186u8, 117u8, 67u8, 9u8, 186u8, - 103u8, 240u8, 211u8, 39u8, 0u8, 197u8, 101u8, 62u8, 27u8, 237u8, 182u8, - 179u8, 251u8, 81u8, 142u8, 195u8, 213u8, 24u8, 123u8, 134u8, 80u8, - 187u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "New bounty proposal."] + BountyProposed { index: ::core::primitive::u32 }, + #[codec(index = 1)] + #[doc = "A bounty proposal was rejected; funds were slashed."] + BountyRejected { index: ::core::primitive::u32, bond: ::core::primitive::u128 }, + #[codec(index = 2)] + #[doc = "A bounty proposal is funded and became active."] + BountyBecameActive { index: ::core::primitive::u32 }, + #[codec(index = 3)] + #[doc = "A bounty is awarded to a beneficiary."] + BountyAwarded { + index: ::core::primitive::u32, + beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 4)] + #[doc = "A bounty is claimed by beneficiary."] + BountyClaimed { + index: ::core::primitive::u32, + payout: ::core::primitive::u128, + beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 5)] + #[doc = "A bounty is cancelled."] + BountyCanceled { index: ::core::primitive::u32 }, + #[codec(index = 6)] + #[doc = "A bounty expiry is extended."] + BountyExtended { index: ::core::primitive::u32 }, + #[codec(index = 7)] + #[doc = "A bounty is approved."] + BountyApproved { index: ::core::primitive::u32 }, + #[codec(index = 8)] + #[doc = "A bounty curator is proposed."] + CuratorProposed { + bounty_id: ::core::primitive::u32, + curator: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 9)] + #[doc = "A bounty curator is unassigned."] + CuratorUnassigned { bounty_id: ::core::primitive::u32 }, + #[codec(index = 10)] + #[doc = "A bounty curator is accepted."] + CuratorAccepted { + bounty_id: ::core::primitive::u32, + curator: ::subxt::ext::subxt_core::utils::AccountId32, + }, } } - } - #[doc = "Events emitted by the pallet."] - pub type Event = runtime_types::pallet_multi_asset_delegation::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has joined."] - pub struct OperatorJoined { - pub who: operator_joined::Who, - } - pub mod operator_joined { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorJoined { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorJoined"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has scheduled to leave."] - pub struct OperatorLeavingScheduled { - pub who: operator_leaving_scheduled::Who, - } - pub mod operator_leaving_scheduled { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeavingScheduled { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorLeavingScheduled"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has cancelled their leave request."] - pub struct OperatorLeaveCancelled { - pub who: operator_leave_cancelled::Who, - } - pub mod operator_leave_cancelled { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeaveCancelled { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorLeaveCancelled"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has executed their leave request."] - pub struct OperatorLeaveExecuted { - pub who: operator_leave_executed::Who, - } - pub mod operator_leave_executed { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeaveExecuted { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorLeaveExecuted"; - } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -40383,71 +40475,13 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has increased their bond."] - pub struct OperatorBondMore { - pub who: operator_bond_more::Who, - pub additional_bond: operator_bond_more::AdditionalBond, - } - pub mod operator_bond_more { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type AdditionalBond = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorBondMore { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorBondMore"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has scheduled to decrease their bond."] - pub struct OperatorBondLessScheduled { - pub who: operator_bond_less_scheduled::Who, - pub bond_less_amount: operator_bond_less_scheduled::BondLessAmount, - } - pub mod operator_bond_less_scheduled { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type BondLessAmount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorBondLessScheduled { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorBondLessScheduled"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has executed their bond decrease."] - pub struct OperatorBondLessExecuted { - pub who: operator_bond_less_executed::Who, - } - pub mod operator_bond_less_executed { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorBondLessExecuted { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorBondLessExecuted"; + pub struct Bounty<_0, _1, _2> { + pub proposer: _0, + pub value: _1, + pub fee: _1, + pub curator_deposit: _1, + pub bond: _1, + pub status: runtime_types::pallet_bounties::BountyStatus<_0, _2>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40462,17 +40496,183 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has cancelled their bond decrease request."] - pub struct OperatorBondLessCancelled { - pub who: operator_bond_less_cancelled::Who, + pub enum BountyStatus<_0, _1> { + #[codec(index = 0)] + Proposed, + #[codec(index = 1)] + Approved, + #[codec(index = 2)] + Funded, + #[codec(index = 3)] + CuratorProposed { curator: _0 }, + #[codec(index = 4)] + Active { curator: _0, update_due: _1 }, + #[codec(index = 5)] + PendingPayout { curator: _0, beneficiary: _0, unlock_at: _1 }, } - pub mod operator_bond_less_cancelled { + } + pub mod pallet_child_bounties { + use super::runtime_types; + pub mod pallet { use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorBondLessCancelled { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorBondLessCancelled"; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::add_child_bounty`]."] + add_child_bounty { + #[codec(compact)] + parent_bounty_id: ::core::primitive::u32, + #[codec(compact)] + value: ::core::primitive::u128, + description: + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::propose_curator`]."] + propose_curator { + #[codec(compact)] + parent_bounty_id: ::core::primitive::u32, + #[codec(compact)] + child_bounty_id: ::core::primitive::u32, + curator: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + #[codec(compact)] + fee: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::accept_curator`]."] + accept_curator { + #[codec(compact)] + parent_bounty_id: ::core::primitive::u32, + #[codec(compact)] + child_bounty_id: ::core::primitive::u32, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::unassign_curator`]."] + unassign_curator { + #[codec(compact)] + parent_bounty_id: ::core::primitive::u32, + #[codec(compact)] + child_bounty_id: ::core::primitive::u32, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::award_child_bounty`]."] + award_child_bounty { + #[codec(compact)] + parent_bounty_id: ::core::primitive::u32, + #[codec(compact)] + child_bounty_id: ::core::primitive::u32, + beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::claim_child_bounty`]."] + claim_child_bounty { + #[codec(compact)] + parent_bounty_id: ::core::primitive::u32, + #[codec(compact)] + child_bounty_id: ::core::primitive::u32, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::close_child_bounty`]."] + close_child_bounty { + #[codec(compact)] + parent_bounty_id: ::core::primitive::u32, + #[codec(compact)] + child_bounty_id: ::core::primitive::u32, + }, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "The parent bounty is not in active state."] + ParentBountyNotActive, + #[codec(index = 1)] + #[doc = "The bounty balance is not enough to add new child-bounty."] + InsufficientBountyBalance, + #[codec(index = 2)] + #[doc = "Number of child bounties exceeds limit `MaxActiveChildBountyCount`."] + TooManyChildBounties, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A child-bounty is added."] + Added { index: ::core::primitive::u32, child_index: ::core::primitive::u32 }, + #[codec(index = 1)] + #[doc = "A child-bounty is awarded to a beneficiary."] + Awarded { + index: ::core::primitive::u32, + child_index: ::core::primitive::u32, + beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 2)] + #[doc = "A child-bounty is claimed by beneficiary."] + Claimed { + index: ::core::primitive::u32, + child_index: ::core::primitive::u32, + payout: ::core::primitive::u128, + beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 3)] + #[doc = "A child-bounty is cancelled."] + Canceled { index: ::core::primitive::u32, child_index: ::core::primitive::u32 }, + } } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40487,17 +40687,12 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has gone offline."] - pub struct OperatorWentOffline { - pub who: operator_went_offline::Who, - } - pub mod operator_went_offline { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorWentOffline { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorWentOffline"; + pub struct ChildBounty<_0, _1, _2> { + pub parent_bounty: ::core::primitive::u32, + pub value: _1, + pub fee: _1, + pub curator_deposit: _1, + pub status: runtime_types::pallet_child_bounties::ChildBountyStatus<_0, _2>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40512,263 +40707,210 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has gone online."] - pub struct OperatorWentOnline { - pub who: operator_went_online::Who, + pub enum ChildBountyStatus<_0, _1> { + #[codec(index = 0)] + Added, + #[codec(index = 1)] + CuratorProposed { curator: _0 }, + #[codec(index = 2)] + Active { curator: _0 }, + #[codec(index = 3)] + PendingPayout { curator: _0, beneficiary: _0, unlock_at: _1 }, } - pub mod operator_went_online { + } + pub mod pallet_collective { + use super::runtime_types; + pub mod pallet { use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorWentOnline { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorWentOnline"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A deposit has been made."] - pub struct Deposited { - pub who: deposited::Who, - pub amount: deposited::Amount, - pub asset_id: deposited::AssetId, - } - pub mod deposited { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Amount = ::core::primitive::u128; - pub type AssetId = ::core::option::Option<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for Deposited { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "Deposited"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An unstake has been scheduled."] - pub struct ScheduledUnstake { - pub who: scheduled_unstake::Who, - pub amount: scheduled_unstake::Amount, - pub asset_id: scheduled_unstake::AssetId, - } - pub mod scheduled_unstake { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Amount = ::core::primitive::u128; - pub type AssetId = ::core::option::Option<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ScheduledUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "ScheduledUnstake"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An unstake has been executed."] - pub struct ExecutedUnstake { - pub who: executed_unstake::Who, - } - pub mod executed_unstake { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ExecutedUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "ExecutedUnstake"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An unstake has been cancelled."] - pub struct CancelledUnstake { - pub who: cancelled_unstake::Who, - } - pub mod cancelled_unstake { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for CancelledUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "CancelledUnstake"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A delegation has been made."] - pub struct Delegated { - pub who: delegated::Who, - pub operator: delegated::Operator, - pub amount: delegated::Amount, - pub asset_id: delegated::AssetId, - } - pub mod delegated { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Amount = ::core::primitive::u128; - pub type AssetId = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for Delegated { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "Delegated"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A delegator bond less request has been scheduled."] - pub struct ScheduledDelegatorBondLess { - pub who: scheduled_delegator_bond_less::Who, - pub operator: scheduled_delegator_bond_less::Operator, - pub amount: scheduled_delegator_bond_less::Amount, - pub asset_id: scheduled_delegator_bond_less::AssetId, - } - pub mod scheduled_delegator_bond_less { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Amount = ::core::primitive::u128; - pub type AssetId = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ScheduledDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "ScheduledDelegatorBondLess"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A delegator bond less request has been executed."] - pub struct ExecutedDelegatorBondLess { - pub who: executed_delegator_bond_less::Who, - } - pub mod executed_delegator_bond_less { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ExecutedDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "ExecutedDelegatorBondLess"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A delegator bond less request has been cancelled."] - pub struct CancelledDelegatorBondLess { - pub who: cancelled_delegator_bond_less::Who, - } - pub mod cancelled_delegator_bond_less { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for CancelledDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "CancelledDelegatorBondLess"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "New whitelisted assets set"] - pub struct WhitelistedAssetsSet { - pub assets: whitelisted_assets_set::Assets, - } - pub mod whitelisted_assets_set { - use super::runtime_types; - pub type Assets = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for WhitelistedAssetsSet { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "WhitelistedAssetsSet"; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::set_members`]."] + set_members { + new_members: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + prime: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + old_count: ::core::primitive::u32, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::execute`]."] + execute { + proposal: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + #[codec(compact)] + length_bound: ::core::primitive::u32, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::propose`]."] + propose { + #[codec(compact)] + threshold: ::core::primitive::u32, + proposal: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + #[codec(compact)] + length_bound: ::core::primitive::u32, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::vote`]."] + vote { + proposal: ::subxt::ext::subxt_core::utils::H256, + #[codec(compact)] + index: ::core::primitive::u32, + approve: ::core::primitive::bool, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::disapprove_proposal`]."] + disapprove_proposal { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 6)] + #[doc = "See [`Pallet::close`]."] + close { + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + #[codec(compact)] + index: ::core::primitive::u32, + proposal_weight_bound: runtime_types::sp_weights::weight_v2::Weight, + #[codec(compact)] + length_bound: ::core::primitive::u32, + }, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Account is not a member"] + NotMember, + #[codec(index = 1)] + #[doc = "Duplicate proposals not allowed"] + DuplicateProposal, + #[codec(index = 2)] + #[doc = "Proposal must exist"] + ProposalMissing, + #[codec(index = 3)] + #[doc = "Mismatched index"] + WrongIndex, + #[codec(index = 4)] + #[doc = "Duplicate vote ignored"] + DuplicateVote, + #[codec(index = 5)] + #[doc = "Members are already initialized!"] + AlreadyInitialized, + #[codec(index = 6)] + #[doc = "The close call was made too early, before the end of the voting."] + TooEarly, + #[codec(index = 7)] + #[doc = "There can only be a maximum of `MaxProposals` active proposals."] + TooManyProposals, + #[codec(index = 8)] + #[doc = "The given weight bound for the proposal was too low."] + WrongProposalWeight, + #[codec(index = 9)] + #[doc = "The given length bound for the proposal was too low."] + WrongProposalLength, + #[codec(index = 10)] + #[doc = "Prime account is not a member"] + PrimeAccountNotMember, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A motion (given hash) has been proposed (by given account) with a threshold (given"] + #[doc = "`MemberCount`)."] + Proposed { + account: ::subxt::ext::subxt_core::utils::AccountId32, + proposal_index: ::core::primitive::u32, + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + threshold: ::core::primitive::u32, + }, + #[codec(index = 1)] + #[doc = "A motion (given hash) has been voted on by given account, leaving"] + #[doc = "a tally (yes votes and no votes given respectively as `MemberCount`)."] + Voted { + account: ::subxt::ext::subxt_core::utils::AccountId32, + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + voted: ::core::primitive::bool, + yes: ::core::primitive::u32, + no: ::core::primitive::u32, + }, + #[codec(index = 2)] + #[doc = "A motion was approved by the required threshold."] + Approved { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 3)] + #[doc = "A motion was not approved by the required threshold."] + Disapproved { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 4)] + #[doc = "A motion was executed; result will be `Ok` if it returned without error."] + Executed { + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, + }, + #[codec(index = 5)] + #[doc = "A single member did some action; result will be `Ok` if it returned without error."] + MemberExecuted { + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, + }, + #[codec(index = 6)] + #[doc = "A proposal was closed because its threshold was reached or after its duration was up."] + Closed { + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + yes: ::core::primitive::u32, + no: ::core::primitive::u32, + }, + } } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40783,21 +40925,13 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Event emitted when an incentive APY and cap are set for an asset"] - pub struct IncentiveAPYAndCapSet { - pub asset_id: incentive_apy_and_cap_set::AssetId, - pub apy: incentive_apy_and_cap_set::Apy, - pub cap: incentive_apy_and_cap_set::Cap, - } - pub mod incentive_apy_and_cap_set { - use super::runtime_types; - pub type AssetId = ::core::primitive::u128; - pub type Apy = ::core::primitive::u128; - pub type Cap = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for IncentiveAPYAndCapSet { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "IncentiveAPYAndCapSet"; + pub enum RawOrigin<_0> { + #[codec(index = 0)] + Members(::core::primitive::u32, ::core::primitive::u32), + #[codec(index = 1)] + Member(_0), + #[codec(index = 2)] + _Phantom, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40812,440 +40946,53 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Event emitted when a blueprint is whitelisted for rewards"] - pub struct BlueprintWhitelisted { - pub blueprint_id: blueprint_whitelisted::BlueprintId, - } - pub mod blueprint_whitelisted { - use super::runtime_types; - pub type BlueprintId = ::core::primitive::u32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for BlueprintWhitelisted { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "BlueprintWhitelisted"; + pub struct Votes<_0, _1> { + pub index: ::core::primitive::u32, + pub threshold: ::core::primitive::u32, + pub ayes: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, + pub nays: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, + pub end: _1, } } - pub mod storage { + pub mod pallet_democracy { use super::runtime_types; - pub mod types { + pub mod conviction { use super::runtime_types; - pub mod operators { - use super::runtime_types; - pub type Operators = runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorMetadata < :: subxt :: ext :: subxt_core :: utils :: AccountId32 , :: core :: primitive :: u128 , :: core :: primitive :: u128 > ; - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; - } - pub mod current_round { - use super::runtime_types; - pub type CurrentRound = ::core::primitive::u32; - } - pub mod whitelisted_assets { - use super::runtime_types; - pub type WhitelistedAssets = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>; - } - pub mod at_stake { - use super::runtime_types; - pub type AtStake = runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorSnapshot < :: subxt :: ext :: subxt_core :: utils :: AccountId32 , :: core :: primitive :: u128 , :: core :: primitive :: u128 > ; - pub type Param0 = ::core::primitive::u32; - pub type Param1 = ::subxt::ext::subxt_core::utils::AccountId32; - } - pub mod delegators { - use super::runtime_types; - pub type Delegators = runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: DelegatorMetadata < :: subxt :: ext :: subxt_core :: utils :: AccountId32 , :: core :: primitive :: u128 , :: core :: primitive :: u128 > ; - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; - } - pub mod reward_config_storage { - use super::runtime_types; - pub type RewardConfigStorage = - runtime_types::pallet_multi_asset_delegation::types::rewards::RewardConfig< - ::core::primitive::u128, - ::core::primitive::u128, - >; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum Conviction { + #[codec(index = 0)] + None, + #[codec(index = 1)] + Locked1x, + #[codec(index = 2)] + Locked2x, + #[codec(index = 3)] + Locked3x, + #[codec(index = 4)] + Locked4x, + #[codec(index = 5)] + Locked5x, + #[codec(index = 6)] + Locked6x, } } - pub struct StorageApi; - impl StorageApi { - #[doc = " Storage for operator information."] - pub fn operators_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::operators::Operators, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "Operators", - (), - [ - 118u8, 148u8, 197u8, 187u8, 30u8, 176u8, 70u8, 75u8, 173u8, 23u8, 30u8, - 57u8, 99u8, 30u8, 217u8, 104u8, 226u8, 202u8, 93u8, 149u8, 27u8, 22u8, - 35u8, 88u8, 119u8, 251u8, 32u8, 185u8, 158u8, 222u8, 79u8, 242u8, - ], - ) - } - #[doc = " Storage for operator information."] - pub fn operators( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::operators::Param0, - >, - types::operators::Operators, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "Operators", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 118u8, 148u8, 197u8, 187u8, 30u8, 176u8, 70u8, 75u8, 173u8, 23u8, 30u8, - 57u8, 99u8, 30u8, 217u8, 104u8, 226u8, 202u8, 93u8, 149u8, 27u8, 22u8, - 35u8, 88u8, 119u8, 251u8, 32u8, 185u8, 158u8, 222u8, 79u8, 242u8, - ], - ) - } - #[doc = " Storage for the current round."] - pub fn current_round( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::current_round::CurrentRound, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "CurrentRound", - (), - [ - 36u8, 98u8, 75u8, 19u8, 13u8, 250u8, 136u8, 31u8, 63u8, 120u8, 224u8, - 83u8, 183u8, 198u8, 195u8, 37u8, 82u8, 213u8, 193u8, 217u8, 137u8, - 62u8, 201u8, 251u8, 45u8, 141u8, 171u8, 22u8, 54u8, 134u8, 113u8, - 232u8, - ], - ) - } - #[doc = " Whitelisted assets that are allowed to be deposited"] - pub fn whitelisted_assets( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::whitelisted_assets::WhitelistedAssets, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "WhitelistedAssets", - (), - [ - 81u8, 117u8, 12u8, 62u8, 120u8, 16u8, 11u8, 75u8, 89u8, 78u8, 165u8, - 191u8, 63u8, 170u8, 239u8, 164u8, 159u8, 88u8, 67u8, 138u8, 232u8, - 26u8, 69u8, 66u8, 115u8, 216u8, 22u8, 49u8, 70u8, 237u8, 231u8, 11u8, - ], - ) - } - #[doc = " Snapshot of collator delegation stake at the start of the round."] - pub fn at_stake_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::at_stake::AtStake, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "AtStake", - (), - [ - 57u8, 195u8, 11u8, 189u8, 76u8, 62u8, 182u8, 27u8, 1u8, 2u8, 114u8, - 133u8, 209u8, 146u8, 6u8, 148u8, 71u8, 209u8, 142u8, 41u8, 106u8, - 221u8, 14u8, 228u8, 126u8, 254u8, 82u8, 139u8, 35u8, 168u8, 4u8, 81u8, - ], - ) - } - #[doc = " Snapshot of collator delegation stake at the start of the round."] - pub fn at_stake_iter1( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::at_stake::Param0, - >, - types::at_stake::AtStake, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "AtStake", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 57u8, 195u8, 11u8, 189u8, 76u8, 62u8, 182u8, 27u8, 1u8, 2u8, 114u8, - 133u8, 209u8, 146u8, 6u8, 148u8, 71u8, 209u8, 142u8, 41u8, 106u8, - 221u8, 14u8, 228u8, 126u8, 254u8, 82u8, 139u8, 35u8, 168u8, 4u8, 81u8, - ], - ) - } - #[doc = " Snapshot of collator delegation stake at the start of the round."] - pub fn at_stake( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::at_stake::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::at_stake::Param1, - >, - ), - types::at_stake::AtStake, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "AtStake", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 57u8, 195u8, 11u8, 189u8, 76u8, 62u8, 182u8, 27u8, 1u8, 2u8, 114u8, - 133u8, 209u8, 146u8, 6u8, 148u8, 71u8, 209u8, 142u8, 41u8, 106u8, - 221u8, 14u8, 228u8, 126u8, 254u8, 82u8, 139u8, 35u8, 168u8, 4u8, 81u8, - ], - ) - } - #[doc = " Storage for delegator information."] - pub fn delegators_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::delegators::Delegators, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "Delegators", - (), - [ - 157u8, 244u8, 22u8, 217u8, 147u8, 134u8, 79u8, 165u8, 145u8, 56u8, - 173u8, 180u8, 72u8, 207u8, 47u8, 239u8, 143u8, 57u8, 227u8, 44u8, 92u8, - 58u8, 208u8, 81u8, 178u8, 37u8, 41u8, 213u8, 98u8, 220u8, 54u8, 135u8, - ], - ) - } - #[doc = " Storage for delegator information."] - pub fn delegators( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::delegators::Param0, - >, - types::delegators::Delegators, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "Delegators", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 157u8, 244u8, 22u8, 217u8, 147u8, 134u8, 79u8, 165u8, 145u8, 56u8, - 173u8, 180u8, 72u8, 207u8, 47u8, 239u8, 143u8, 57u8, 227u8, 44u8, 92u8, - 58u8, 208u8, 81u8, 178u8, 37u8, 41u8, 213u8, 98u8, 220u8, 54u8, 135u8, - ], - ) - } - #[doc = " Storage for the reward configuration, which includes APY, cap for assets, and whitelisted blueprints."] - pub fn reward_config_storage( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::reward_config_storage::RewardConfigStorage, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "RewardConfigStorage", - (), - [ - 166u8, 35u8, 196u8, 90u8, 23u8, 23u8, 174u8, 197u8, 152u8, 161u8, - 244u8, 68u8, 83u8, 114u8, 18u8, 212u8, 22u8, 71u8, 158u8, 94u8, 9u8, - 224u8, 202u8, 186u8, 73u8, 95u8, 26u8, 184u8, 249u8, 203u8, 203u8, - 200u8, - ], - ) - } - } - } - pub mod constants { - use super::runtime_types; - pub struct ConstantsApi; - impl ConstantsApi { - #[doc = " The minimum amount of bond required for an operator."] - pub fn min_operator_bond_amount( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "MultiAssetDelegation", - "MinOperatorBondAmount", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - #[doc = " The minimum amount of bond required for a delegate."] - pub fn min_delegate_amount( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "MultiAssetDelegation", - "MinDelegateAmount", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - #[doc = " The duration for which the bond is locked."] - pub fn bond_duration( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "MultiAssetDelegation", - "BondDuration", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - #[doc = " Number of rounds that operators remain bonded before the exit request is executable."] - pub fn leave_operators_delay( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "MultiAssetDelegation", - "LeaveOperatorsDelay", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - #[doc = " Number of rounds operator requests to decrease self-bond must wait to be executable."] - pub fn operator_bond_less_delay( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "MultiAssetDelegation", - "OperatorBondLessDelay", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - #[doc = " Number of rounds that delegators remain bonded before the exit request is executable."] - pub fn leave_delegators_delay( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "MultiAssetDelegation", - "LeaveDelegatorsDelay", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - #[doc = " Number of rounds that delegation bond less requests must wait before being executable."] - pub fn delegation_bond_less_delay( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "MultiAssetDelegation", - "DelegationBondLessDelay", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - } - } - } - pub mod sygma_access_segregator { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::sygma_access_segregator::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::sygma_access_segregator::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { + pub mod pallet { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -41264,198 +41011,131 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::grant_access`]."] - pub struct GrantAccess { - pub pallet_index: grant_access::PalletIndex, - pub extrinsic_name: grant_access::ExtrinsicName, - pub who: grant_access::Who, - } - pub mod grant_access { - use super::runtime_types; - pub type PalletIndex = ::core::primitive::u8; - pub type ExtrinsicName = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for GrantAccess { - const PALLET: &'static str = "SygmaAccessSegregator"; - const CALL: &'static str = "grant_access"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::grant_access`]."] - pub fn grant_access( - &self, - pallet_index: types::grant_access::PalletIndex, - extrinsic_name: types::grant_access::ExtrinsicName, - who: types::grant_access::Who, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaAccessSegregator", - "grant_access", - types::GrantAccess { pallet_index, extrinsic_name, who }, - [ - 185u8, 40u8, 56u8, 85u8, 235u8, 128u8, 138u8, 81u8, 241u8, 226u8, - 243u8, 229u8, 229u8, 137u8, 11u8, 51u8, 160u8, 220u8, 0u8, 72u8, 166u8, - 39u8, 71u8, 11u8, 100u8, 14u8, 80u8, 40u8, 127u8, 175u8, 4u8, 209u8, - ], - ) - } - } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::sygma_access_segregator::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Extrinsic access grant to someone"] - #[doc = "args: [pallet_index, extrinsic_name, who]"] - pub struct AccessGranted { - pub pallet_index: access_granted::PalletIndex, - pub extrinsic_name: access_granted::ExtrinsicName, - pub who: access_granted::Who, - } - pub mod access_granted { - use super::runtime_types; - pub type PalletIndex = ::core::primitive::u8; - pub type ExtrinsicName = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for AccessGranted { - const PALLET: &'static str = "SygmaAccessSegregator"; - const EVENT: &'static str = "AccessGranted"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod extrinsic_access { - use super::runtime_types; - pub type ExtrinsicAccess = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Param0 = ::core::primitive::u8; - pub type Param1 = [::core::primitive::u8]; - } - } - pub struct StorageApi; - impl StorageApi { - #[doc = " Mapping signature of extrinsic to account has access"] - #[doc = " (pallet_index, extrinsic_name) => account"] - pub fn extrinsic_access_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::extrinsic_access::ExtrinsicAccess, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaAccessSegregator", - "ExtrinsicAccess", - (), - [ - 143u8, 8u8, 210u8, 166u8, 233u8, 63u8, 77u8, 117u8, 102u8, 251u8, - 152u8, 17u8, 82u8, 36u8, 48u8, 64u8, 76u8, 17u8, 41u8, 121u8, 223u8, - 92u8, 47u8, 160u8, 18u8, 213u8, 171u8, 111u8, 144u8, 197u8, 171u8, 9u8, - ], - ) - } - #[doc = " Mapping signature of extrinsic to account has access"] - #[doc = " (pallet_index, extrinsic_name) => account"] - pub fn extrinsic_access_iter1( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::extrinsic_access::Param0, - >, - types::extrinsic_access::ExtrinsicAccess, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaAccessSegregator", - "ExtrinsicAccess", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 143u8, 8u8, 210u8, 166u8, 233u8, 63u8, 77u8, 117u8, 102u8, 251u8, - 152u8, 17u8, 82u8, 36u8, 48u8, 64u8, 76u8, 17u8, 41u8, 121u8, 223u8, - 92u8, 47u8, 160u8, 18u8, 213u8, 171u8, 111u8, 144u8, 197u8, 171u8, 9u8, - ], - ) - } - #[doc = " Mapping signature of extrinsic to account has access"] - #[doc = " (pallet_index, extrinsic_name) => account"] - pub fn extrinsic_access( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::extrinsic_access::Param0, + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::propose`]."] + propose { + proposal: runtime_types::frame_support::traits::preimages::Bounded< + runtime_types::tangle_testnet_runtime::RuntimeCall, + runtime_types::sp_runtime::traits::BlakeTwo256, >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::extrinsic_access::Param1, + #[codec(compact)] + value: ::core::primitive::u128, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::second`]."] + second { + #[codec(compact)] + proposal: ::core::primitive::u32, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::vote`]."] + vote { + #[codec(compact)] + ref_index: ::core::primitive::u32, + vote: runtime_types::pallet_democracy::vote::AccountVote< + ::core::primitive::u128, >, - ), - types::extrinsic_access::ExtrinsicAccess, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaAccessSegregator", - "ExtrinsicAccess", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 143u8, 8u8, 210u8, 166u8, 233u8, 63u8, 77u8, 117u8, 102u8, 251u8, - 152u8, 17u8, 82u8, 36u8, 48u8, 64u8, 76u8, 17u8, 41u8, 121u8, 223u8, - 92u8, 47u8, 160u8, 18u8, 213u8, 171u8, 111u8, 144u8, 197u8, 171u8, 9u8, - ], - ) + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::emergency_cancel`]."] + emergency_cancel { ref_index: ::core::primitive::u32 }, + #[codec(index = 4)] + #[doc = "See [`Pallet::external_propose`]."] + external_propose { + proposal: runtime_types::frame_support::traits::preimages::Bounded< + runtime_types::tangle_testnet_runtime::RuntimeCall, + runtime_types::sp_runtime::traits::BlakeTwo256, + >, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::external_propose_majority`]."] + external_propose_majority { + proposal: runtime_types::frame_support::traits::preimages::Bounded< + runtime_types::tangle_testnet_runtime::RuntimeCall, + runtime_types::sp_runtime::traits::BlakeTwo256, + >, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::external_propose_default`]."] + external_propose_default { + proposal: runtime_types::frame_support::traits::preimages::Bounded< + runtime_types::tangle_testnet_runtime::RuntimeCall, + runtime_types::sp_runtime::traits::BlakeTwo256, + >, + }, + #[codec(index = 7)] + #[doc = "See [`Pallet::fast_track`]."] + fast_track { + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + voting_period: ::core::primitive::u64, + delay: ::core::primitive::u64, + }, + #[codec(index = 8)] + #[doc = "See [`Pallet::veto_external`]."] + veto_external { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 9)] + #[doc = "See [`Pallet::cancel_referendum`]."] + cancel_referendum { + #[codec(compact)] + ref_index: ::core::primitive::u32, + }, + #[codec(index = 10)] + #[doc = "See [`Pallet::delegate`]."] + delegate { + to: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + conviction: runtime_types::pallet_democracy::conviction::Conviction, + balance: ::core::primitive::u128, + }, + #[codec(index = 11)] + #[doc = "See [`Pallet::undelegate`]."] + undelegate, + #[codec(index = 12)] + #[doc = "See [`Pallet::clear_public_proposals`]."] + clear_public_proposals, + #[codec(index = 13)] + #[doc = "See [`Pallet::unlock`]."] + unlock { + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 14)] + #[doc = "See [`Pallet::remove_vote`]."] + remove_vote { index: ::core::primitive::u32 }, + #[codec(index = 15)] + #[doc = "See [`Pallet::remove_other_vote`]."] + remove_other_vote { + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + index: ::core::primitive::u32, + }, + #[codec(index = 16)] + #[doc = "See [`Pallet::blacklist`]."] + blacklist { + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + maybe_ref_index: ::core::option::Option<::core::primitive::u32>, + }, + #[codec(index = 17)] + #[doc = "See [`Pallet::cancel_proposal`]."] + cancel_proposal { + #[codec(compact)] + prop_index: ::core::primitive::u32, + }, + #[codec(index = 18)] + #[doc = "See [`Pallet::set_metadata`]."] + set_metadata { + owner: runtime_types::pallet_democracy::types::MetadataOwner, + maybe_hash: ::core::option::Option<::subxt::ext::subxt_core::utils::H256>, + }, } - } - } - } - pub mod sygma_basic_fee_handler { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::sygma_basic_feehandler::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::sygma_basic_feehandler::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -41473,198 +41153,82 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_fee`]."] - pub struct SetFee { - pub domain: set_fee::Domain, - pub asset: ::subxt::ext::subxt_core::alloc::boxed::Box, - pub amount: set_fee::Amount, - } - pub mod set_fee { - use super::runtime_types; - pub type Domain = ::core::primitive::u8; - pub type Asset = runtime_types::staging_xcm::v4::asset::AssetId; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetFee { - const PALLET: &'static str = "SygmaBasicFeeHandler"; - const CALL: &'static str = "set_fee"; + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Value too low"] + ValueLow, + #[codec(index = 1)] + #[doc = "Proposal does not exist"] + ProposalMissing, + #[codec(index = 2)] + #[doc = "Cannot cancel the same proposal twice"] + AlreadyCanceled, + #[codec(index = 3)] + #[doc = "Proposal already made"] + DuplicateProposal, + #[codec(index = 4)] + #[doc = "Proposal still blacklisted"] + ProposalBlacklisted, + #[codec(index = 5)] + #[doc = "Next external proposal not simple majority"] + NotSimpleMajority, + #[codec(index = 6)] + #[doc = "Invalid hash"] + InvalidHash, + #[codec(index = 7)] + #[doc = "No external proposal"] + NoProposal, + #[codec(index = 8)] + #[doc = "Identity may not veto a proposal twice"] + AlreadyVetoed, + #[codec(index = 9)] + #[doc = "Vote given for invalid referendum"] + ReferendumInvalid, + #[codec(index = 10)] + #[doc = "No proposals waiting"] + NoneWaiting, + #[codec(index = 11)] + #[doc = "The given account did not vote on the referendum."] + NotVoter, + #[codec(index = 12)] + #[doc = "The actor has no permission to conduct the action."] + NoPermission, + #[codec(index = 13)] + #[doc = "The account is already delegating."] + AlreadyDelegating, + #[codec(index = 14)] + #[doc = "Too high a balance was provided that the account cannot afford."] + InsufficientFunds, + #[codec(index = 15)] + #[doc = "The account is not currently delegating."] + NotDelegating, + #[codec(index = 16)] + #[doc = "The account currently has votes attached to it and the operation cannot succeed until"] + #[doc = "these are removed, either through `unvote` or `reap_vote`."] + VotesExist, + #[codec(index = 17)] + #[doc = "The instant referendum origin is currently disallowed."] + InstantNotAllowed, + #[codec(index = 18)] + #[doc = "Delegation to oneself makes no sense."] + Nonsense, + #[codec(index = 19)] + #[doc = "Invalid upper bound."] + WrongUpperBound, + #[codec(index = 20)] + #[doc = "Maximum number of votes reached."] + MaxVotesReached, + #[codec(index = 21)] + #[doc = "Maximum number of items reached."] + TooMany, + #[codec(index = 22)] + #[doc = "Voting period too low"] + VotingPeriodLow, + #[codec(index = 23)] + #[doc = "The preimage does not exist."] + PreimageNotExist, } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::set_fee`]."] - pub fn set_fee( - &self, - domain: types::set_fee::Domain, - asset: types::set_fee::Asset, - amount: types::set_fee::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBasicFeeHandler", - "set_fee", - types::SetFee { - domain, - asset: ::subxt::ext::subxt_core::alloc::boxed::Box::new(asset), - amount, - }, - [ - 58u8, 170u8, 100u8, 165u8, 141u8, 86u8, 99u8, 27u8, 15u8, 93u8, 156u8, - 122u8, 173u8, 215u8, 13u8, 5u8, 172u8, 248u8, 149u8, 245u8, 82u8, - 224u8, 143u8, 135u8, 123u8, 236u8, 235u8, 118u8, 236u8, 85u8, 215u8, - 151u8, - ], - ) - } - } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::sygma_basic_feehandler::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Fee set for a specific asset"] - #[doc = "args: [domain, asset, amount]"] - pub struct FeeSet { - pub domain: fee_set::Domain, - pub asset: fee_set::Asset, - pub amount: fee_set::Amount, - } - pub mod fee_set { - use super::runtime_types; - pub type Domain = ::core::primitive::u8; - pub type Asset = runtime_types::staging_xcm::v4::asset::AssetId; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FeeSet { - const PALLET: &'static str = "SygmaBasicFeeHandler"; - const EVENT: &'static str = "FeeSet"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod asset_fees { - use super::runtime_types; - pub type AssetFees = ::core::primitive::u128; - pub type Param0 = ::core::primitive::u8; - pub type Param1 = runtime_types::staging_xcm::v4::asset::AssetId; - } - } - pub struct StorageApi; - impl StorageApi { - #[doc = " Mapping fungible asset id to corresponding fee amount"] - pub fn asset_fees_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::asset_fees::AssetFees, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBasicFeeHandler", - "AssetFees", - (), - [ - 226u8, 116u8, 228u8, 2u8, 119u8, 37u8, 33u8, 123u8, 53u8, 245u8, 143u8, - 236u8, 108u8, 254u8, 249u8, 187u8, 149u8, 128u8, 109u8, 87u8, 100u8, - 6u8, 253u8, 156u8, 31u8, 2u8, 94u8, 73u8, 134u8, 3u8, 173u8, 83u8, - ], - ) - } - #[doc = " Mapping fungible asset id to corresponding fee amount"] - pub fn asset_fees_iter1( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::asset_fees::Param0, - >, - types::asset_fees::AssetFees, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBasicFeeHandler", - "AssetFees", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 226u8, 116u8, 228u8, 2u8, 119u8, 37u8, 33u8, 123u8, 53u8, 245u8, 143u8, - 236u8, 108u8, 254u8, 249u8, 187u8, 149u8, 128u8, 109u8, 87u8, 100u8, - 6u8, 253u8, 156u8, 31u8, 2u8, 94u8, 73u8, 134u8, 3u8, 173u8, 83u8, - ], - ) - } - #[doc = " Mapping fungible asset id to corresponding fee amount"] - pub fn asset_fees( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::asset_fees::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::asset_fees::Param1, - >, - ), - types::asset_fees::AssetFees, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBasicFeeHandler", - "AssetFees", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 226u8, 116u8, 228u8, 2u8, 119u8, 37u8, 33u8, 123u8, 53u8, 245u8, 143u8, - 236u8, 108u8, 254u8, 249u8, 187u8, 149u8, 128u8, 109u8, 87u8, 100u8, - 6u8, 253u8, 156u8, 31u8, 2u8, 94u8, 73u8, 134u8, 3u8, 173u8, 83u8, - ], - ) - } - } - } - } - pub mod sygma_fee_handler_router { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::sygma_fee_handler_router::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::sygma_fee_handler_router::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -41682,201 +41246,96 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_fee_handler`]."] - pub struct SetFeeHandler { - pub domain: set_fee_handler::Domain, - pub asset: ::subxt::ext::subxt_core::alloc::boxed::Box, - pub handler_type: set_fee_handler::HandlerType, - } - pub mod set_fee_handler { - use super::runtime_types; - pub type Domain = ::core::primitive::u8; - pub type Asset = runtime_types::staging_xcm::v4::asset::AssetId; - pub type HandlerType = - runtime_types::sygma_fee_handler_router::pallet::FeeHandlerType; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetFeeHandler { - const PALLET: &'static str = "SygmaFeeHandlerRouter"; - const CALL: &'static str = "set_fee_handler"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::set_fee_handler`]."] - pub fn set_fee_handler( - &self, - domain: types::set_fee_handler::Domain, - asset: types::set_fee_handler::Asset, - handler_type: types::set_fee_handler::HandlerType, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaFeeHandlerRouter", - "set_fee_handler", - types::SetFeeHandler { - domain, - asset: ::subxt::ext::subxt_core::alloc::boxed::Box::new(asset), - handler_type, - }, - [ - 24u8, 82u8, 62u8, 232u8, 23u8, 161u8, 105u8, 181u8, 130u8, 2u8, 39u8, - 110u8, 197u8, 41u8, 171u8, 162u8, 173u8, 117u8, 30u8, 208u8, 126u8, - 50u8, 73u8, 255u8, 221u8, 53u8, 94u8, 152u8, 29u8, 89u8, 207u8, 171u8, - ], - ) - } - } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::sygma_fee_handler_router::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When fee handler was set for a specific (domain, asset) pair"] - #[doc = "args: [dest_domain_id, asset_id, handler_type]"] - pub struct FeeHandlerSet { - pub domain: fee_handler_set::Domain, - pub asset: fee_handler_set::Asset, - pub handler_type: fee_handler_set::HandlerType, - } - pub mod fee_handler_set { - use super::runtime_types; - pub type Domain = ::core::primitive::u8; - pub type Asset = runtime_types::staging_xcm::v4::asset::AssetId; - pub type HandlerType = - runtime_types::sygma_fee_handler_router::pallet::FeeHandlerType; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FeeHandlerSet { - const PALLET: &'static str = "SygmaFeeHandlerRouter"; - const EVENT: &'static str = "FeeHandlerSet"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod handler_type { - use super::runtime_types; - pub type HandlerType = - runtime_types::sygma_fee_handler_router::pallet::FeeHandlerType; - pub type Param0 = ::core::primitive::u8; - pub type Param1 = runtime_types::staging_xcm::v4::asset::AssetId; - } - } - pub struct StorageApi; - impl StorageApi { - #[doc = " Return the Fee handler type based on domainID and assetID"] - pub fn handler_type_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::handler_type::HandlerType, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaFeeHandlerRouter", - "HandlerType", - (), - [ - 131u8, 32u8, 132u8, 221u8, 111u8, 250u8, 191u8, 86u8, 230u8, 207u8, - 214u8, 98u8, 19u8, 247u8, 144u8, 179u8, 50u8, 60u8, 78u8, 94u8, 192u8, - 174u8, 252u8, 231u8, 137u8, 139u8, 62u8, 71u8, 10u8, 230u8, 216u8, - 212u8, - ], - ) - } - #[doc = " Return the Fee handler type based on domainID and assetID"] - pub fn handler_type_iter1( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::handler_type::Param0, - >, - types::handler_type::HandlerType, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaFeeHandlerRouter", - "HandlerType", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 131u8, 32u8, 132u8, 221u8, 111u8, 250u8, 191u8, 86u8, 230u8, 207u8, - 214u8, 98u8, 19u8, 247u8, 144u8, 179u8, 50u8, 60u8, 78u8, 94u8, 192u8, - 174u8, 252u8, 231u8, 137u8, 139u8, 62u8, 71u8, 10u8, 230u8, 216u8, - 212u8, - ], - ) - } - #[doc = " Return the Fee handler type based on domainID and assetID"] - pub fn handler_type( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::handler_type::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::handler_type::Param1, + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A motion has been proposed by a public account."] + Proposed { + proposal_index: ::core::primitive::u32, + deposit: ::core::primitive::u128, + }, + #[codec(index = 1)] + #[doc = "A public proposal has been tabled for referendum vote."] + Tabled { + proposal_index: ::core::primitive::u32, + deposit: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "An external proposal has been tabled."] + ExternalTabled, + #[codec(index = 3)] + #[doc = "A referendum has begun."] + Started { + ref_index: ::core::primitive::u32, + threshold: runtime_types::pallet_democracy::vote_threshold::VoteThreshold, + }, + #[codec(index = 4)] + #[doc = "A proposal has been approved by referendum."] + Passed { ref_index: ::core::primitive::u32 }, + #[codec(index = 5)] + #[doc = "A proposal has been rejected by referendum."] + NotPassed { ref_index: ::core::primitive::u32 }, + #[codec(index = 6)] + #[doc = "A referendum has been cancelled."] + Cancelled { ref_index: ::core::primitive::u32 }, + #[codec(index = 7)] + #[doc = "An account has delegated their vote to another account."] + Delegated { + who: ::subxt::ext::subxt_core::utils::AccountId32, + target: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 8)] + #[doc = "An account has cancelled a previous delegation operation."] + Undelegated { account: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 9)] + #[doc = "An external proposal has been vetoed."] + Vetoed { + who: ::subxt::ext::subxt_core::utils::AccountId32, + proposal_hash: ::subxt::ext::subxt_core::utils::H256, + until: ::core::primitive::u64, + }, + #[codec(index = 10)] + #[doc = "A proposal_hash has been blacklisted permanently."] + Blacklisted { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 11)] + #[doc = "An account has voted in a referendum"] + Voted { + voter: ::subxt::ext::subxt_core::utils::AccountId32, + ref_index: ::core::primitive::u32, + vote: runtime_types::pallet_democracy::vote::AccountVote< + ::core::primitive::u128, >, - ), - types::handler_type::HandlerType, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaFeeHandlerRouter", - "HandlerType", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 131u8, 32u8, 132u8, 221u8, 111u8, 250u8, 191u8, 86u8, 230u8, 207u8, - 214u8, 98u8, 19u8, 247u8, 144u8, 179u8, 50u8, 60u8, 78u8, 94u8, 192u8, - 174u8, 252u8, 231u8, 137u8, 139u8, 62u8, 71u8, 10u8, 230u8, 216u8, - 212u8, - ], - ) + }, + #[codec(index = 12)] + #[doc = "An account has secconded a proposal"] + Seconded { + seconder: ::subxt::ext::subxt_core::utils::AccountId32, + prop_index: ::core::primitive::u32, + }, + #[codec(index = 13)] + #[doc = "A proposal got canceled."] + ProposalCanceled { prop_index: ::core::primitive::u32 }, + #[codec(index = 14)] + #[doc = "Metadata for a proposal or a referendum has been set."] + MetadataSet { + owner: runtime_types::pallet_democracy::types::MetadataOwner, + hash: ::subxt::ext::subxt_core::utils::H256, + }, + #[codec(index = 15)] + #[doc = "Metadata for a proposal or a referendum has been cleared."] + MetadataCleared { + owner: runtime_types::pallet_democracy::types::MetadataOwner, + hash: ::subxt::ext::subxt_core::utils::H256, + }, + #[codec(index = 16)] + #[doc = "Metadata has been transferred to new owner."] + MetadataTransferred { + prev_owner: runtime_types::pallet_democracy::types::MetadataOwner, + owner: runtime_types::pallet_democracy::types::MetadataOwner, + hash: ::subxt::ext::subxt_core::utils::H256, + }, } } - } - } - pub mod sygma_percentage_fee_handler { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::sygma_percentage_feehandler::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::sygma_percentage_feehandler::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; pub mod types { use super::runtime_types; #[derive( @@ -41896,210 +41355,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_fee_rate`]."] - pub struct SetFeeRate { - pub domain: set_fee_rate::Domain, - pub asset: ::subxt::ext::subxt_core::alloc::boxed::Box, - pub fee_rate_basis_point: set_fee_rate::FeeRateBasisPoint, - pub fee_lower_bound: set_fee_rate::FeeLowerBound, - pub fee_upper_bound: set_fee_rate::FeeUpperBound, - } - pub mod set_fee_rate { - use super::runtime_types; - pub type Domain = ::core::primitive::u8; - pub type Asset = runtime_types::staging_xcm::v4::asset::AssetId; - pub type FeeRateBasisPoint = ::core::primitive::u32; - pub type FeeLowerBound = ::core::primitive::u128; - pub type FeeUpperBound = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetFeeRate { - const PALLET: &'static str = "SygmaPercentageFeeHandler"; - const CALL: &'static str = "set_fee_rate"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::set_fee_rate`]."] - pub fn set_fee_rate( - &self, - domain: types::set_fee_rate::Domain, - asset: types::set_fee_rate::Asset, - fee_rate_basis_point: types::set_fee_rate::FeeRateBasisPoint, - fee_lower_bound: types::set_fee_rate::FeeLowerBound, - fee_upper_bound: types::set_fee_rate::FeeUpperBound, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaPercentageFeeHandler", - "set_fee_rate", - types::SetFeeRate { - domain, - asset: ::subxt::ext::subxt_core::alloc::boxed::Box::new(asset), - fee_rate_basis_point, - fee_lower_bound, - fee_upper_bound, - }, - [ - 149u8, 3u8, 81u8, 161u8, 144u8, 52u8, 210u8, 213u8, 198u8, 213u8, 2u8, - 71u8, 200u8, 204u8, 57u8, 227u8, 2u8, 224u8, 131u8, 151u8, 49u8, 125u8, - 176u8, 188u8, 118u8, 130u8, 79u8, 72u8, 151u8, 49u8, 20u8, 1u8, - ], - ) - } - } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::sygma_percentage_feehandler::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Fee set rate for a specific asset and domain"] - #[doc = "args: [domain, asset, rate_basis_point, fee_lower_bound, fee_upper_bound]"] - pub struct FeeRateSet { - pub domain: fee_rate_set::Domain, - pub asset: fee_rate_set::Asset, - pub rate_basis_point: fee_rate_set::RateBasisPoint, - pub fee_lower_bound: fee_rate_set::FeeLowerBound, - pub fee_upper_bound: fee_rate_set::FeeUpperBound, - } - pub mod fee_rate_set { - use super::runtime_types; - pub type Domain = ::core::primitive::u8; - pub type Asset = runtime_types::staging_xcm::v4::asset::AssetId; - pub type RateBasisPoint = ::core::primitive::u32; - pub type FeeLowerBound = ::core::primitive::u128; - pub type FeeUpperBound = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FeeRateSet { - const PALLET: &'static str = "SygmaPercentageFeeHandler"; - const EVENT: &'static str = "FeeRateSet"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod asset_fee_rate { - use super::runtime_types; - pub type AssetFeeRate = - (::core::primitive::u32, ::core::primitive::u128, ::core::primitive::u128); - pub type Param0 = ::core::primitive::u8; - pub type Param1 = runtime_types::staging_xcm::v4::asset::AssetId; - } - } - pub struct StorageApi; - impl StorageApi { - #[doc = " Mapping fungible asset id with domain id to fee rate and its lower bound, upperbound"] - pub fn asset_fee_rate_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::asset_fee_rate::AssetFeeRate, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaPercentageFeeHandler", - "AssetFeeRate", - (), - [ - 219u8, 84u8, 17u8, 190u8, 134u8, 94u8, 11u8, 248u8, 86u8, 201u8, 219u8, - 162u8, 70u8, 38u8, 12u8, 50u8, 115u8, 127u8, 102u8, 227u8, 78u8, 108u8, - 237u8, 106u8, 85u8, 101u8, 113u8, 208u8, 87u8, 187u8, 239u8, 166u8, - ], - ) - } - #[doc = " Mapping fungible asset id with domain id to fee rate and its lower bound, upperbound"] - pub fn asset_fee_rate_iter1( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::asset_fee_rate::Param0, - >, - types::asset_fee_rate::AssetFeeRate, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaPercentageFeeHandler", - "AssetFeeRate", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 219u8, 84u8, 17u8, 190u8, 134u8, 94u8, 11u8, 248u8, 86u8, 201u8, 219u8, - 162u8, 70u8, 38u8, 12u8, 50u8, 115u8, 127u8, 102u8, 227u8, 78u8, 108u8, - 237u8, 106u8, 85u8, 101u8, 113u8, 208u8, 87u8, 187u8, 239u8, 166u8, - ], - ) - } - #[doc = " Mapping fungible asset id with domain id to fee rate and its lower bound, upperbound"] - pub fn asset_fee_rate( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::asset_fee_rate::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::asset_fee_rate::Param1, - >, - ), - types::asset_fee_rate::AssetFeeRate, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaPercentageFeeHandler", - "AssetFeeRate", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 219u8, 84u8, 17u8, 190u8, 134u8, 94u8, 11u8, 248u8, 86u8, 201u8, 219u8, - 162u8, 70u8, 38u8, 12u8, 50u8, 115u8, 127u8, 102u8, 227u8, 78u8, 108u8, - 237u8, 106u8, 85u8, 101u8, 113u8, 208u8, 87u8, 187u8, 239u8, 166u8, - ], - ) + pub struct Delegations<_0> { + pub votes: _0, + pub capital: _0, } - } - } - } - pub mod sygma_bridge { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::sygma_bridge::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::sygma_bridge::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -42117,17 +41376,13 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::pause_bridge`]."] - pub struct PauseBridge { - pub dest_domain_id: pause_bridge::DestDomainId, - } - pub mod pause_bridge { - use super::runtime_types; - pub type DestDomainId = ::core::primitive::u8; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for PauseBridge { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "pause_bridge"; + pub enum MetadataOwner { + #[codec(index = 0)] + External, + #[codec(index = 1)] + Proposal(::core::primitive::u32), + #[codec(index = 2)] + Referendum(::core::primitive::u32), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42146,17 +41401,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::unpause_bridge`]."] - pub struct UnpauseBridge { - pub dest_domain_id: unpause_bridge::DestDomainId, - } - pub mod unpause_bridge { - use super::runtime_types; - pub type DestDomainId = ::core::primitive::u8; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for UnpauseBridge { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "unpause_bridge"; + pub enum ReferendumInfo<_0, _1, _2> { + #[codec(index = 0)] + Ongoing(runtime_types::pallet_democracy::types::ReferendumStatus<_0, _1, _2>), + #[codec(index = 1)] + Finished { approved: ::core::primitive::bool, end: _0 }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42175,17 +41424,12 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_mpc_address`]."] - pub struct SetMpcAddress { - pub addr: set_mpc_address::Addr, - } - pub mod set_mpc_address { - use super::runtime_types; - pub type Addr = runtime_types::sygma_traits::MpcAddress; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetMpcAddress { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "set_mpc_address"; + pub struct ReferendumStatus<_0, _1, _2> { + pub end: _0, + pub proposal: _1, + pub threshold: runtime_types::pallet_democracy::vote_threshold::VoteThreshold, + pub delay: _0, + pub tally: runtime_types::pallet_democracy::types::Tally<_2>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42204,20 +41448,14 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::register_domain`]."] - pub struct RegisterDomain { - pub dest_domain_id: register_domain::DestDomainId, - pub dest_chain_id: register_domain::DestChainId, - } - pub mod register_domain { - use super::runtime_types; - pub type DestDomainId = ::core::primitive::u8; - pub type DestChainId = runtime_types::primitive_types::U256; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RegisterDomain { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "register_domain"; + pub struct Tally<_0> { + pub ayes: _0, + pub nays: _0, + pub turnout: _0, } + } + pub mod vote { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -42235,19 +41473,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::unregister_domain`]."] - pub struct UnregisterDomain { - pub dest_domain_id: unregister_domain::DestDomainId, - pub dest_chain_id: unregister_domain::DestChainId, - } - pub mod unregister_domain { - use super::runtime_types; - pub type DestDomainId = ::core::primitive::u8; - pub type DestChainId = runtime_types::primitive_types::U256; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for UnregisterDomain { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "unregister_domain"; + pub enum AccountVote<_0> { + #[codec(index = 0)] + Standard { vote: runtime_types::pallet_democracy::vote::Vote, balance: _0 }, + #[codec(index = 1)] + Split { aye: _0, nay: _0 }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42266,21 +41496,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::deposit`]."] - pub struct Deposit { - pub asset: ::subxt::ext::subxt_core::alloc::boxed::Box, - pub dest: ::subxt::ext::subxt_core::alloc::boxed::Box, - } - pub mod deposit { - use super::runtime_types; - pub type Asset = runtime_types::staging_xcm::v4::asset::Asset; - pub type Dest = runtime_types::staging_xcm::v4::location::Location; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Deposit { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "deposit"; - } + pub struct PriorLock<_0, _1>(pub _0, pub _1); #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -42297,20 +41515,7 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::retry`]."] - pub struct Retry { - pub deposit_on_block_height: retry::DepositOnBlockHeight, - pub dest_domain_id: retry::DestDomainId, - } - pub mod retry { - use super::runtime_types; - pub type DepositOnBlockHeight = ::core::primitive::u128; - pub type DestDomainId = ::core::primitive::u8; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Retry { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "retry"; - } + pub struct Vote(pub ::core::primitive::u8); #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -42328,23 +41533,28 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::execute_proposal`]."] - pub struct ExecuteProposal { - pub proposals: execute_proposal::Proposals, - pub signature: execute_proposal::Signature, - } - pub mod execute_proposal { - use super::runtime_types; - pub type Proposals = ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::sygma_bridge::pallet::Proposal, - >; - pub type Signature = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteProposal { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "execute_proposal"; + pub enum Voting<_0, _1, _2> { + #[codec(index = 0)] + Direct { + votes: runtime_types::bounded_collections::bounded_vec::BoundedVec<( + ::core::primitive::u32, + runtime_types::pallet_democracy::vote::AccountVote<_0>, + )>, + delegations: runtime_types::pallet_democracy::types::Delegations<_0>, + prior: runtime_types::pallet_democracy::vote::PriorLock<_2, _0>, + }, + #[codec(index = 1)] + Delegating { + balance: _0, + target: _1, + conviction: runtime_types::pallet_democracy::conviction::Conviction, + delegations: runtime_types::pallet_democracy::types::Delegations<_0>, + prior: runtime_types::pallet_democracy::vote::PriorLock<_2, _0>, + }, } + } + pub mod vote_threshold { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -42362,12 +41572,20 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::pause_all_bridges`]."] - pub struct PauseAllBridges; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for PauseAllBridges { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "pause_all_bridges"; + pub enum VoteThreshold { + #[codec(index = 0)] + SuperMajorityApprove, + #[codec(index = 1)] + SuperMajorityAgainst, + #[codec(index = 2)] + SimpleMajority, } + } + } + pub mod pallet_dynamic_fee { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -42385,347 +41603,200 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::unpause_all_bridges`]."] - pub struct UnpauseAllBridges; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for UnpauseAllBridges { - const PALLET: &'static str = "SygmaBridge"; - const CALL: &'static str = "unpause_all_bridges"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::pause_bridge`]."] - pub fn pause_bridge( - &self, - dest_domain_id: types::pause_bridge::DestDomainId, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "pause_bridge", - types::PauseBridge { dest_domain_id }, - [ - 10u8, 137u8, 109u8, 62u8, 31u8, 5u8, 35u8, 50u8, 97u8, 197u8, 155u8, - 107u8, 107u8, 21u8, 143u8, 217u8, 62u8, 234u8, 232u8, 181u8, 60u8, - 245u8, 92u8, 203u8, 171u8, 127u8, 91u8, 189u8, 93u8, 208u8, 25u8, 17u8, - ], - ) - } - #[doc = "See [`Pallet::unpause_bridge`]."] - pub fn unpause_bridge( - &self, - dest_domain_id: types::unpause_bridge::DestDomainId, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "unpause_bridge", - types::UnpauseBridge { dest_domain_id }, - [ - 130u8, 132u8, 45u8, 19u8, 181u8, 193u8, 70u8, 236u8, 117u8, 9u8, 61u8, - 231u8, 56u8, 99u8, 162u8, 55u8, 182u8, 7u8, 105u8, 3u8, 98u8, 236u8, - 142u8, 249u8, 109u8, 37u8, 11u8, 30u8, 67u8, 145u8, 224u8, 161u8, - ], - ) - } - #[doc = "See [`Pallet::set_mpc_address`]."] - pub fn set_mpc_address( - &self, - addr: types::set_mpc_address::Addr, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "set_mpc_address", - types::SetMpcAddress { addr }, - [ - 100u8, 154u8, 190u8, 95u8, 29u8, 77u8, 55u8, 125u8, 94u8, 139u8, 219u8, - 144u8, 57u8, 213u8, 186u8, 19u8, 95u8, 20u8, 154u8, 106u8, 5u8, 201u8, - 60u8, 232u8, 221u8, 32u8, 165u8, 221u8, 93u8, 21u8, 164u8, 0u8, - ], - ) - } - #[doc = "See [`Pallet::register_domain`]."] - pub fn register_domain( - &self, - dest_domain_id: types::register_domain::DestDomainId, - dest_chain_id: types::register_domain::DestChainId, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "register_domain", - types::RegisterDomain { dest_domain_id, dest_chain_id }, - [ - 84u8, 151u8, 240u8, 168u8, 87u8, 209u8, 247u8, 224u8, 38u8, 248u8, 2u8, - 246u8, 45u8, 204u8, 212u8, 53u8, 235u8, 230u8, 74u8, 206u8, 221u8, - 209u8, 226u8, 229u8, 73u8, 42u8, 148u8, 21u8, 47u8, 148u8, 245u8, - 239u8, - ], - ) - } - #[doc = "See [`Pallet::unregister_domain`]."] - pub fn unregister_domain( - &self, - dest_domain_id: types::unregister_domain::DestDomainId, - dest_chain_id: types::unregister_domain::DestChainId, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "unregister_domain", - types::UnregisterDomain { dest_domain_id, dest_chain_id }, - [ - 226u8, 34u8, 249u8, 217u8, 73u8, 22u8, 203u8, 90u8, 29u8, 25u8, 91u8, - 67u8, 175u8, 239u8, 225u8, 25u8, 28u8, 12u8, 214u8, 116u8, 147u8, - 178u8, 231u8, 86u8, 171u8, 148u8, 16u8, 139u8, 196u8, 180u8, 204u8, - 125u8, - ], - ) - } - #[doc = "See [`Pallet::deposit`]."] - pub fn deposit( - &self, - asset: types::deposit::Asset, - dest: types::deposit::Dest, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "deposit", - types::Deposit { - asset: ::subxt::ext::subxt_core::alloc::boxed::Box::new(asset), - dest: ::subxt::ext::subxt_core::alloc::boxed::Box::new(dest), - }, - [ - 249u8, 115u8, 223u8, 93u8, 180u8, 104u8, 78u8, 159u8, 95u8, 222u8, - 88u8, 244u8, 87u8, 54u8, 172u8, 17u8, 230u8, 125u8, 83u8, 244u8, 97u8, - 111u8, 237u8, 134u8, 156u8, 235u8, 136u8, 45u8, 118u8, 139u8, 210u8, - 193u8, - ], - ) - } - #[doc = "See [`Pallet::retry`]."] - pub fn retry( - &self, - deposit_on_block_height: types::retry::DepositOnBlockHeight, - dest_domain_id: types::retry::DestDomainId, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "retry", - types::Retry { deposit_on_block_height, dest_domain_id }, - [ - 104u8, 139u8, 100u8, 85u8, 8u8, 43u8, 70u8, 177u8, 205u8, 8u8, 71u8, - 142u8, 228u8, 199u8, 78u8, 145u8, 16u8, 120u8, 229u8, 177u8, 48u8, - 143u8, 42u8, 237u8, 216u8, 136u8, 190u8, 240u8, 164u8, 115u8, 236u8, - 36u8, - ], - ) - } - #[doc = "See [`Pallet::execute_proposal`]."] - pub fn execute_proposal( - &self, - proposals: types::execute_proposal::Proposals, - signature: types::execute_proposal::Signature, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "execute_proposal", - types::ExecuteProposal { proposals, signature }, - [ - 135u8, 91u8, 69u8, 116u8, 25u8, 204u8, 82u8, 180u8, 143u8, 63u8, 192u8, - 253u8, 22u8, 182u8, 251u8, 176u8, 243u8, 233u8, 157u8, 119u8, 137u8, - 228u8, 69u8, 169u8, 242u8, 105u8, 36u8, 46u8, 233u8, 229u8, 68u8, 10u8, - ], - ) - } - #[doc = "See [`Pallet::pause_all_bridges`]."] - pub fn pause_all_bridges( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "pause_all_bridges", - types::PauseAllBridges {}, - [ - 29u8, 144u8, 141u8, 39u8, 167u8, 6u8, 113u8, 96u8, 225u8, 146u8, 88u8, - 50u8, 244u8, 142u8, 216u8, 169u8, 30u8, 194u8, 5u8, 250u8, 92u8, 99u8, - 79u8, 36u8, 117u8, 126u8, 176u8, 31u8, 147u8, 21u8, 213u8, 218u8, - ], - ) - } - #[doc = "See [`Pallet::unpause_all_bridges`]."] - pub fn unpause_all_bridges( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "SygmaBridge", - "unpause_all_bridges", - types::UnpauseAllBridges {}, - [ - 136u8, 87u8, 74u8, 154u8, 210u8, 227u8, 130u8, 104u8, 149u8, 24u8, - 107u8, 242u8, 201u8, 134u8, 125u8, 187u8, 148u8, 191u8, 234u8, 53u8, - 187u8, 232u8, 117u8, 145u8, 105u8, 163u8, 3u8, 228u8, 11u8, 122u8, - 194u8, 127u8, - ], - ) + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::note_min_gas_price_target`]."] + note_min_gas_price_target { target: runtime_types::primitive_types::U256 }, } } } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::sygma_bridge::pallet::Event; - pub mod events { + pub mod pallet_election_provider_multi_phase { use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When initial bridge transfer send to dest domain"] - #[doc = "args: [dest_domain_id, resource_id, deposit_nonce, sender, transfer_type,"] - #[doc = "deposit_data, handler_response, ]"] - pub struct Deposit { - pub dest_domain_id: deposit::DestDomainId, - pub resource_id: deposit::ResourceId, - pub deposit_nonce: deposit::DepositNonce, - pub sender: deposit::Sender, - pub transfer_type: deposit::TransferType, - pub deposit_data: deposit::DepositData, - pub handler_response: deposit::HandlerResponse, - } - pub mod deposit { - use super::runtime_types; - pub type DestDomainId = ::core::primitive::u8; - pub type ResourceId = [::core::primitive::u8; 32usize]; - pub type DepositNonce = ::core::primitive::u64; - pub type Sender = ::subxt::ext::subxt_core::utils::AccountId32; - pub type TransferType = runtime_types::sygma_traits::TransferType; - pub type DepositData = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; - pub type HandlerResponse = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for Deposit { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "Deposit"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When proposal was executed successfully"] - pub struct ProposalExecution { - pub origin_domain_id: proposal_execution::OriginDomainId, - pub deposit_nonce: proposal_execution::DepositNonce, - pub data_hash: proposal_execution::DataHash, - } - pub mod proposal_execution { - use super::runtime_types; - pub type OriginDomainId = ::core::primitive::u8; - pub type DepositNonce = ::core::primitive::u64; - pub type DataHash = [::core::primitive::u8; 32usize]; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProposalExecution { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "ProposalExecution"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When proposal was faild to execute"] - pub struct FailedHandlerExecution { - pub error: failed_handler_execution::Error, - pub origin_domain_id: failed_handler_execution::OriginDomainId, - pub deposit_nonce: failed_handler_execution::DepositNonce, - } - pub mod failed_handler_execution { - use super::runtime_types; - pub type Error = ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; - pub type OriginDomainId = ::core::primitive::u8; - pub type DepositNonce = ::core::primitive::u64; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FailedHandlerExecution { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "FailedHandlerExecution"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When user is going to retry a bridge transfer"] - #[doc = "args: [deposit_on_block_height, dest_domain_id, sender]"] - pub struct Retry { - pub deposit_on_block_height: retry::DepositOnBlockHeight, - pub dest_domain_id: retry::DestDomainId, - pub sender: retry::Sender, - } - pub mod retry { + pub mod pallet { use super::runtime_types; - pub type DepositOnBlockHeight = ::core::primitive::u128; - pub type DestDomainId = ::core::primitive::u8; - pub type Sender = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for Retry { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "Retry"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When bridge is paused"] - #[doc = "args: [dest_domain_id]"] - pub struct BridgePaused { - pub dest_domain_id: bridge_paused::DestDomainId, + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + # [codec (index = 0)] # [doc = "See [`Pallet::submit_unsigned`]."] submit_unsigned { raw_solution : :: subxt :: ext :: subxt_core :: alloc :: boxed :: Box < runtime_types :: pallet_election_provider_multi_phase :: RawSolution < runtime_types :: tangle_testnet_runtime :: NposSolution16 > > , witness : runtime_types :: pallet_election_provider_multi_phase :: SolutionOrSnapshotSize , } , # [codec (index = 1)] # [doc = "See [`Pallet::set_minimum_untrusted_score`]."] set_minimum_untrusted_score { maybe_next_score : :: core :: option :: Option < runtime_types :: sp_npos_elections :: ElectionScore > , } , # [codec (index = 2)] # [doc = "See [`Pallet::set_emergency_election_result`]."] set_emergency_election_result { supports : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < (:: subxt :: ext :: subxt_core :: utils :: AccountId32 , runtime_types :: sp_npos_elections :: Support < :: subxt :: ext :: subxt_core :: utils :: AccountId32 > ,) > , } , # [codec (index = 3)] # [doc = "See [`Pallet::submit`]."] submit { raw_solution : :: subxt :: ext :: subxt_core :: alloc :: boxed :: Box < runtime_types :: pallet_election_provider_multi_phase :: RawSolution < runtime_types :: tangle_testnet_runtime :: NposSolution16 > > , } , # [codec (index = 4)] # [doc = "See [`Pallet::governance_fallback`]."] governance_fallback { maybe_max_voters : :: core :: option :: Option < :: core :: primitive :: u32 > , maybe_max_targets : :: core :: option :: Option < :: core :: primitive :: u32 > , } , } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Error of the pallet that can be returned in response to dispatches."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Submission was too early."] + PreDispatchEarlySubmission, + #[codec(index = 1)] + #[doc = "Wrong number of winners presented."] + PreDispatchWrongWinnerCount, + #[codec(index = 2)] + #[doc = "Submission was too weak, score-wise."] + PreDispatchWeakSubmission, + #[codec(index = 3)] + #[doc = "The queue was full, and the solution was not better than any of the existing ones."] + SignedQueueFull, + #[codec(index = 4)] + #[doc = "The origin failed to pay the deposit."] + SignedCannotPayDeposit, + #[codec(index = 5)] + #[doc = "Witness data to dispatchable is invalid."] + SignedInvalidWitness, + #[codec(index = 6)] + #[doc = "The signed submission consumes too much weight"] + SignedTooMuchWeight, + #[codec(index = 7)] + #[doc = "OCW submitted solution for wrong round"] + OcwCallWrongEra, + #[codec(index = 8)] + #[doc = "Snapshot metadata should exist but didn't."] + MissingSnapshotMetadata, + #[codec(index = 9)] + #[doc = "`Self::insert_submission` returned an invalid index."] + InvalidSubmissionIndex, + #[codec(index = 10)] + #[doc = "The call is not allowed at this point."] + CallNotAllowed, + #[codec(index = 11)] + #[doc = "The fallback failed"] + FallbackFailed, + #[codec(index = 12)] + #[doc = "Some bound not met"] + BoundNotMet, + #[codec(index = 13)] + #[doc = "Submitted solution has too many winners"] + TooManyWinners, + #[codec(index = 14)] + #[doc = "Sumission was prepared for a different round."] + PreDispatchDifferentRound, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A solution was stored with the given compute."] + #[doc = ""] + #[doc = "The `origin` indicates the origin of the solution. If `origin` is `Some(AccountId)`,"] + #[doc = "the stored solution was submited in the signed phase by a miner with the `AccountId`."] + #[doc = "Otherwise, the solution was stored either during the unsigned phase or by"] + #[doc = "`T::ForceOrigin`. The `bool` is `true` when a previous solution was ejected to make"] + #[doc = "room for this one."] + SolutionStored { + compute: + runtime_types::pallet_election_provider_multi_phase::ElectionCompute, + origin: + ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + prev_ejected: ::core::primitive::bool, + }, + #[codec(index = 1)] + #[doc = "The election has been finalized, with the given computation and score."] + ElectionFinalized { + compute: + runtime_types::pallet_election_provider_multi_phase::ElectionCompute, + score: runtime_types::sp_npos_elections::ElectionScore, + }, + #[codec(index = 2)] + #[doc = "An election failed."] + #[doc = ""] + #[doc = "Not much can be said about which computes failed in the process."] + ElectionFailed, + #[codec(index = 3)] + #[doc = "An account has been rewarded for their signed submission being finalized."] + Rewarded { + account: ::subxt::ext::subxt_core::utils::AccountId32, + value: ::core::primitive::u128, + }, + #[codec(index = 4)] + #[doc = "An account has been slashed for submitting an invalid signed submission."] + Slashed { + account: ::subxt::ext::subxt_core::utils::AccountId32, + value: ::core::primitive::u128, + }, + #[codec(index = 5)] + #[doc = "There was a phase transition in a given round."] + PhaseTransitioned { + from: runtime_types::pallet_election_provider_multi_phase::Phase< + ::core::primitive::u64, + >, + to: runtime_types::pallet_election_provider_multi_phase::Phase< + ::core::primitive::u64, + >, + round: ::core::primitive::u32, + }, + } } - pub mod bridge_paused { + pub mod signed { use super::runtime_types; - pub type DestDomainId = ::core::primitive::u8; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for BridgePaused { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "BridgePaused"; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct SignedSubmission<_0, _1, _2> { + pub who: _0, + pub deposit: _1, + pub raw_solution: + runtime_types::pallet_election_provider_multi_phase::RawSolution<_2>, + pub call_fee: _1, + } } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42740,18 +41811,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When bridge is unpaused"] - #[doc = "args: [dest_domain_id]"] - pub struct BridgeUnpaused { - pub dest_domain_id: bridge_unpaused::DestDomainId, - } - pub mod bridge_unpaused { - use super::runtime_types; - pub type DestDomainId = ::core::primitive::u8; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for BridgeUnpaused { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "BridgeUnpaused"; + pub enum ElectionCompute { + #[codec(index = 0)] + OnChain, + #[codec(index = 1)] + Signed, + #[codec(index = 2)] + Unsigned, + #[codec(index = 3)] + Fallback, + #[codec(index = 4)] + Emergency, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42766,21 +41836,15 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When registering a new dest domainID with its corresponding chainID"] - pub struct RegisterDestDomain { - pub sender: register_dest_domain::Sender, - pub domain_id: register_dest_domain::DomainId, - pub chain_id: register_dest_domain::ChainId, - } - pub mod register_dest_domain { - use super::runtime_types; - pub type Sender = ::subxt::ext::subxt_core::utils::AccountId32; - pub type DomainId = ::core::primitive::u8; - pub type ChainId = runtime_types::primitive_types::U256; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for RegisterDestDomain { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "RegisterDestDomain"; + pub enum Phase<_0> { + #[codec(index = 0)] + Off, + #[codec(index = 1)] + Signed, + #[codec(index = 2)] + Unsigned((::core::primitive::bool, _0)), + #[codec(index = 3)] + Emergency, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42795,21 +41859,10 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When unregistering a dest domainID with its corresponding chainID"] - pub struct UnregisterDestDomain { - pub sender: unregister_dest_domain::Sender, - pub domain_id: unregister_dest_domain::DomainId, - pub chain_id: unregister_dest_domain::ChainId, - } - pub mod unregister_dest_domain { - use super::runtime_types; - pub type Sender = ::subxt::ext::subxt_core::utils::AccountId32; - pub type DomainId = ::core::primitive::u8; - pub type ChainId = runtime_types::primitive_types::U256; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for UnregisterDestDomain { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "UnregisterDestDomain"; + pub struct RawSolution<_0> { + pub solution: _0, + pub score: runtime_types::sp_npos_elections::ElectionScore, + pub round: ::core::primitive::u32, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42824,25 +41877,15 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When bridge fee is collected"] - pub struct FeeCollected { - pub fee_payer: fee_collected::FeePayer, - pub dest_domain_id: fee_collected::DestDomainId, - pub resource_id: fee_collected::ResourceId, - pub fee_amount: fee_collected::FeeAmount, - pub fee_asset_id: fee_collected::FeeAssetId, - } - pub mod fee_collected { - use super::runtime_types; - pub type FeePayer = ::subxt::ext::subxt_core::utils::AccountId32; - pub type DestDomainId = ::core::primitive::u8; - pub type ResourceId = [::core::primitive::u8; 32usize]; - pub type FeeAmount = ::core::primitive::u128; - pub type FeeAssetId = runtime_types::staging_xcm::v4::asset::AssetId; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FeeCollected { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "FeeCollected"; + pub struct ReadySolution { + pub supports: runtime_types::bounded_collections::bounded_vec::BoundedVec<( + ::subxt::ext::subxt_core::utils::AccountId32, + runtime_types::sp_npos_elections::Support< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + )>, + pub score: runtime_types::sp_npos_elections::ElectionScore, + pub compute: runtime_types::pallet_election_provider_multi_phase::ElectionCompute, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42857,17 +41900,9 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When all bridges are paused"] - pub struct AllBridgePaused { - pub sender: all_bridge_paused::Sender, - } - pub mod all_bridge_paused { - use super::runtime_types; - pub type Sender = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for AllBridgePaused { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "AllBridgePaused"; + pub struct RoundSnapshot<_0, _1> { + pub voters: ::subxt::ext::subxt_core::alloc::vec::Vec<_1>, + pub targets: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -42882,466 +41917,76 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "When all bridges are unpaused"] - pub struct AllBridgeUnpaused { - pub sender: all_bridge_unpaused::Sender, - } - pub mod all_bridge_unpaused { - use super::runtime_types; - pub type Sender = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for AllBridgeUnpaused { - const PALLET: &'static str = "SygmaBridge"; - const EVENT: &'static str = "AllBridgeUnpaused"; + pub struct SolutionOrSnapshotSize { + #[codec(compact)] + pub voters: ::core::primitive::u32, + #[codec(compact)] + pub targets: ::core::primitive::u32, } } - pub mod storage { + pub mod pallet_elections_phragmen { use super::runtime_types; - pub mod types { + pub mod pallet { use super::runtime_types; - pub mod deposit_counts { - use super::runtime_types; - pub type DepositCounts = ::core::primitive::u64; - pub type Param0 = ::core::primitive::u8; - } - pub mod is_paused { - use super::runtime_types; - pub type IsPaused = ::core::primitive::bool; - pub type Param0 = ::core::primitive::u8; - } - pub mod mpc_addr { - use super::runtime_types; - pub type MpcAddr = runtime_types::sygma_traits::MpcAddress; - } - pub mod used_nonces { - use super::runtime_types; - pub type UsedNonces = ::core::primitive::u64; - pub type Param0 = ::core::primitive::u8; - pub type Param1 = ::core::primitive::u64; - } - pub mod dest_domain_ids { - use super::runtime_types; - pub type DestDomainIds = ::core::primitive::bool; - pub type Param0 = ::core::primitive::u8; - } - pub mod dest_chain_ids { - use super::runtime_types; - pub type DestChainIds = runtime_types::primitive_types::U256; - pub type Param0 = ::core::primitive::u8; - } - } - pub struct StorageApi; - impl StorageApi { - #[doc = " Deposit counter of dest domain"] - pub fn deposit_counts_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::deposit_counts::DepositCounts, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "DepositCounts", - (), - [ - 244u8, 239u8, 58u8, 175u8, 187u8, 13u8, 115u8, 85u8, 31u8, 153u8, - 189u8, 124u8, 67u8, 2u8, 96u8, 104u8, 141u8, 2u8, 161u8, 168u8, 188u8, - 18u8, 40u8, 199u8, 65u8, 66u8, 86u8, 4u8, 5u8, 120u8, 83u8, 8u8, - ], - ) - } - #[doc = " Deposit counter of dest domain"] - pub fn deposit_counts( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::deposit_counts::Param0, - >, - types::deposit_counts::DepositCounts, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "DepositCounts", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 244u8, 239u8, 58u8, 175u8, 187u8, 13u8, 115u8, 85u8, 31u8, 153u8, - 189u8, 124u8, 67u8, 2u8, 96u8, 104u8, 141u8, 2u8, 161u8, 168u8, 188u8, - 18u8, 40u8, 199u8, 65u8, 66u8, 86u8, 4u8, 5u8, 120u8, 83u8, 8u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::vote`]."] + vote { + votes: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + #[codec(compact)] + value: ::core::primitive::u128, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::remove_voter`]."] + remove_voter, + #[codec(index = 2)] + #[doc = "See [`Pallet::submit_candidacy`]."] + submit_candidacy { + #[codec(compact)] + candidate_count: ::core::primitive::u32, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::renounce_candidacy`]."] + renounce_candidacy { + renouncing: runtime_types::pallet_elections_phragmen::Renouncing, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::remove_member`]."] + remove_member { + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + slash_bond: ::core::primitive::bool, + rerun_election: ::core::primitive::bool, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::clean_defunct_voters`]."] + clean_defunct_voters { + num_voters: ::core::primitive::u32, + num_defunct: ::core::primitive::u32, + }, } - #[doc = " Bridge Pause indicator"] - #[doc = " Bridge is unpaused initially, until pause"] - #[doc = " After mpc address setup, bridge should be paused until ready to unpause"] - pub fn is_paused_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::is_paused::IsPaused, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "IsPaused", - (), - [ - 189u8, 110u8, 62u8, 199u8, 114u8, 121u8, 96u8, 148u8, 204u8, 117u8, - 168u8, 103u8, 72u8, 240u8, 2u8, 185u8, 3u8, 225u8, 107u8, 240u8, 162u8, - 156u8, 188u8, 10u8, 92u8, 61u8, 142u8, 64u8, 57u8, 155u8, 152u8, 168u8, - ], - ) - } - #[doc = " Bridge Pause indicator"] - #[doc = " Bridge is unpaused initially, until pause"] - #[doc = " After mpc address setup, bridge should be paused until ready to unpause"] - pub fn is_paused( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::is_paused::Param0, - >, - types::is_paused::IsPaused, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "IsPaused", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 189u8, 110u8, 62u8, 199u8, 114u8, 121u8, 96u8, 148u8, 204u8, 117u8, - 168u8, 103u8, 72u8, 240u8, 2u8, 185u8, 3u8, 225u8, 107u8, 240u8, 162u8, - 156u8, 188u8, 10u8, 92u8, 61u8, 142u8, 64u8, 57u8, 155u8, 152u8, 168u8, - ], - ) - } - #[doc = " Pre-set MPC address"] - pub fn mpc_addr( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::mpc_addr::MpcAddr, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "MpcAddr", - (), - [ - 250u8, 141u8, 162u8, 218u8, 132u8, 223u8, 173u8, 108u8, 121u8, 159u8, - 29u8, 116u8, 42u8, 107u8, 135u8, 156u8, 46u8, 6u8, 171u8, 91u8, 38u8, - 140u8, 202u8, 31u8, 3u8, 63u8, 171u8, 108u8, 181u8, 236u8, 113u8, - 155u8, - ], - ) - } - #[doc = " Mark whether a deposit nonce was used. Used to mark execution status of a proposal."] - pub fn used_nonces_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::used_nonces::UsedNonces, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "UsedNonces", - (), - [ - 79u8, 48u8, 187u8, 95u8, 248u8, 174u8, 128u8, 139u8, 1u8, 177u8, 189u8, - 64u8, 97u8, 224u8, 234u8, 109u8, 238u8, 182u8, 88u8, 91u8, 136u8, - 202u8, 78u8, 17u8, 85u8, 35u8, 34u8, 92u8, 34u8, 242u8, 189u8, 113u8, - ], - ) - } - #[doc = " Mark whether a deposit nonce was used. Used to mark execution status of a proposal."] - pub fn used_nonces_iter1( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::used_nonces::Param0, - >, - types::used_nonces::UsedNonces, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "UsedNonces", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 79u8, 48u8, 187u8, 95u8, 248u8, 174u8, 128u8, 139u8, 1u8, 177u8, 189u8, - 64u8, 97u8, 224u8, 234u8, 109u8, 238u8, 182u8, 88u8, 91u8, 136u8, - 202u8, 78u8, 17u8, 85u8, 35u8, 34u8, 92u8, 34u8, 242u8, 189u8, 113u8, - ], - ) - } - #[doc = " Mark whether a deposit nonce was used. Used to mark execution status of a proposal."] - pub fn used_nonces( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::used_nonces::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::used_nonces::Param1, - >, - ), - types::used_nonces::UsedNonces, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "UsedNonces", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 79u8, 48u8, 187u8, 95u8, 248u8, 174u8, 128u8, 139u8, 1u8, 177u8, 189u8, - 64u8, 97u8, 224u8, 234u8, 109u8, 238u8, 182u8, 88u8, 91u8, 136u8, - 202u8, 78u8, 17u8, 85u8, 35u8, 34u8, 92u8, 34u8, 242u8, 189u8, 113u8, - ], - ) - } - #[doc = " Mark supported dest domainID"] - pub fn dest_domain_ids_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::dest_domain_ids::DestDomainIds, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "DestDomainIds", - (), - [ - 196u8, 96u8, 128u8, 71u8, 63u8, 199u8, 126u8, 151u8, 151u8, 174u8, - 165u8, 144u8, 187u8, 251u8, 157u8, 33u8, 96u8, 54u8, 83u8, 174u8, 36u8, - 189u8, 200u8, 67u8, 88u8, 166u8, 169u8, 233u8, 196u8, 218u8, 34u8, - 40u8, - ], - ) - } - #[doc = " Mark supported dest domainID"] - pub fn dest_domain_ids( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::dest_domain_ids::Param0, - >, - types::dest_domain_ids::DestDomainIds, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "DestDomainIds", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 196u8, 96u8, 128u8, 71u8, 63u8, 199u8, 126u8, 151u8, 151u8, 174u8, - 165u8, 144u8, 187u8, 251u8, 157u8, 33u8, 96u8, 54u8, 83u8, 174u8, 36u8, - 189u8, 200u8, 67u8, 88u8, 166u8, 169u8, 233u8, 196u8, 218u8, 34u8, - 40u8, - ], - ) - } - #[doc = " Mark the pairs for supported dest domainID with its corresponding chainID"] - #[doc = " The chainID is not directly used in pallet, this map is designed more about rechecking the"] - #[doc = " domainID"] - pub fn dest_chain_ids_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::dest_chain_ids::DestChainIds, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "DestChainIds", - (), - [ - 21u8, 202u8, 192u8, 112u8, 21u8, 196u8, 42u8, 158u8, 86u8, 44u8, 133u8, - 121u8, 91u8, 44u8, 176u8, 79u8, 236u8, 210u8, 57u8, 57u8, 241u8, 89u8, - 188u8, 46u8, 170u8, 83u8, 90u8, 240u8, 57u8, 233u8, 15u8, 20u8, - ], - ) - } - #[doc = " Mark the pairs for supported dest domainID with its corresponding chainID"] - #[doc = " The chainID is not directly used in pallet, this map is designed more about rechecking the"] - #[doc = " domainID"] - pub fn dest_chain_ids( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::dest_chain_ids::Param0, - >, - types::dest_chain_ids::DestChainIds, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "SygmaBridge", - "DestChainIds", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 21u8, 202u8, 192u8, 112u8, 21u8, 196u8, 42u8, 158u8, 86u8, 44u8, 133u8, - 121u8, 91u8, 44u8, 176u8, 79u8, 236u8, 210u8, 57u8, 57u8, 241u8, 89u8, - 188u8, 46u8, 170u8, 83u8, 90u8, 240u8, 57u8, 233u8, 15u8, 20u8, - ], - ) - } - } - } - pub mod constants { - use super::runtime_types; - pub struct ConstantsApi; - impl ConstantsApi { - #[doc = " Bridge transfer reserve accounts mapping with designated assets"] - pub fn transfer_reserve_accounts( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::subxt::ext::subxt_core::utils::KeyedVec< - runtime_types::staging_xcm::v4::asset::AssetId, - ::subxt::ext::subxt_core::utils::AccountId32, - >, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "SygmaBridge", - "TransferReserveAccounts", - [ - 144u8, 215u8, 249u8, 200u8, 205u8, 135u8, 143u8, 34u8, 249u8, 252u8, - 193u8, 60u8, 176u8, 245u8, 227u8, 210u8, 244u8, 18u8, 152u8, 48u8, - 117u8, 174u8, 144u8, 229u8, 187u8, 135u8, 227u8, 253u8, 162u8, 120u8, - 9u8, 171u8, - ], - ) - } - #[doc = " EIP712 Verifying contract address"] - #[doc = " This is used in EIP712 typed data domain"] - pub fn dest_verifying_contract_address( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::subxt::ext::subxt_core::utils::H160, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "SygmaBridge", - "DestVerifyingContractAddress", - [ - 184u8, 103u8, 76u8, 37u8, 218u8, 155u8, 125u8, 78u8, 138u8, 122u8, - 255u8, 132u8, 124u8, 68u8, 65u8, 163u8, 97u8, 77u8, 80u8, 33u8, 69u8, - 55u8, 69u8, 230u8, 83u8, 135u8, 254u8, 221u8, 222u8, 177u8, 10u8, - 189u8, - ], - ) - } - #[doc = " Pallet ChainID"] - #[doc = " This is used in EIP712 typed data domain"] - pub fn eip712_chain_id( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - runtime_types::primitive_types::U256, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "SygmaBridge", - "EIP712ChainID", - [ - 183u8, 66u8, 226u8, 178u8, 103u8, 160u8, 66u8, 51u8, 57u8, 19u8, 99u8, - 192u8, 108u8, 194u8, 76u8, 29u8, 76u8, 203u8, 196u8, 114u8, 108u8, - 53u8, 17u8, 246u8, 61u8, 132u8, 91u8, 202u8, 170u8, 12u8, 123u8, 30u8, - ], - ) - } - #[doc = " Fee reserve account"] - pub fn fee_reserve_account( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "SygmaBridge", - "FeeReserveAccount", - [ - 115u8, 233u8, 13u8, 223u8, 88u8, 20u8, 202u8, 139u8, 153u8, 28u8, - 155u8, 157u8, 224u8, 66u8, 3u8, 250u8, 23u8, 53u8, 88u8, 168u8, 211u8, - 204u8, 122u8, 166u8, 248u8, 23u8, 174u8, 225u8, 99u8, 108u8, 89u8, - 135u8, - ], - ) - } - #[doc = " AssetId and ResourceId pairs"] - pub fn resource_pairs( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::subxt::ext::subxt_core::alloc::vec::Vec<( - runtime_types::staging_xcm::v4::asset::AssetId, - [::core::primitive::u8; 32usize], - )>, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "SygmaBridge", - "ResourcePairs", - [ - 208u8, 136u8, 61u8, 11u8, 87u8, 64u8, 83u8, 110u8, 69u8, 229u8, 21u8, - 107u8, 123u8, 91u8, 168u8, 208u8, 226u8, 198u8, 110u8, 107u8, 114u8, - 150u8, 152u8, 73u8, 74u8, 118u8, 56u8, 4u8, 77u8, 234u8, 57u8, 249u8, - ], - ) - } - } - } - } - pub mod runtime_types { - use super::runtime_types; - pub mod bounded_collections { - use super::runtime_types; - pub mod bounded_btree_map { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43359,12 +42004,60 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct BoundedBTreeMap<_0, _1>( - pub ::subxt::ext::subxt_core::utils::KeyedVec<_0, _1>, - ); - } - pub mod bounded_vec { - use super::runtime_types; + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Cannot vote when no candidates or members exist."] + UnableToVote, + #[codec(index = 1)] + #[doc = "Must vote for at least one candidate."] + NoVotes, + #[codec(index = 2)] + #[doc = "Cannot vote more than candidates."] + TooManyVotes, + #[codec(index = 3)] + #[doc = "Cannot vote more than maximum allowed."] + MaximumVotesExceeded, + #[codec(index = 4)] + #[doc = "Cannot vote with stake less than minimum balance."] + LowBalance, + #[codec(index = 5)] + #[doc = "Voter can not pay voting bond."] + UnableToPayBond, + #[codec(index = 6)] + #[doc = "Must be a voter."] + MustBeVoter, + #[codec(index = 7)] + #[doc = "Duplicated candidate submission."] + DuplicatedCandidate, + #[codec(index = 8)] + #[doc = "Too many candidates have been created."] + TooManyCandidates, + #[codec(index = 9)] + #[doc = "Member cannot re-submit candidacy."] + MemberSubmit, + #[codec(index = 10)] + #[doc = "Runner cannot re-submit candidacy."] + RunnerUpSubmit, + #[codec(index = 11)] + #[doc = "Candidate does not have enough funds."] + InsufficientCandidateFunds, + #[codec(index = 12)] + #[doc = "Not a member."] + NotMember, + #[codec(index = 13)] + #[doc = "The provided count of number of candidates is incorrect."] + InvalidWitnessData, + #[codec(index = 14)] + #[doc = "The provided count of number of votes is incorrect."] + InvalidVoteCount, + #[codec(index = 15)] + #[doc = "The renouncing origin presented a wrong `Renouncing` parameter."] + InvalidRenouncing, + #[codec(index = 16)] + #[doc = "Prediction regarding replacement after member removal is wrong."] + InvalidReplacement, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43382,32 +42075,72 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct BoundedVec<_0>(pub ::subxt::ext::subxt_core::alloc::vec::Vec<_0>); + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A new term with new_members. This indicates that enough candidates existed to run"] + #[doc = "the election, not that enough have has been elected. The inner value must be examined"] + #[doc = "for this purpose. A `NewTerm(\\[\\])` indicates that some candidates got their bond"] + #[doc = "slashed and none were elected, whilst `EmptyTerm` means that no candidates existed to"] + #[doc = "begin with."] + NewTerm { + new_members: ::subxt::ext::subxt_core::alloc::vec::Vec<( + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u128, + )>, + }, + #[codec(index = 1)] + #[doc = "No (or not enough) candidates existed for this round. This is different from"] + #[doc = "`NewTerm(\\[\\])`. See the description of `NewTerm`."] + EmptyTerm, + #[codec(index = 2)] + #[doc = "Internal error happened while trying to perform election."] + ElectionError, + #[codec(index = 3)] + #[doc = "A member has been removed. This should always be followed by either `NewTerm` or"] + #[doc = "`EmptyTerm`."] + MemberKicked { member: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 4)] + #[doc = "Someone has renounced their candidacy."] + Renounced { candidate: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 5)] + #[doc = "A candidate was slashed by amount due to failing to obtain a seat as member or"] + #[doc = "runner-up."] + #[doc = ""] + #[doc = "Note that old members and runners-up are also candidates."] + CandidateSlashed { + candidate: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 6)] + #[doc = "A seat holder was slashed by amount by being forcefully removed from the set."] + SeatHolderSlashed { + seat_holder: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + } } - pub mod weak_bounded_vec { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct WeakBoundedVec<_0>(pub ::subxt::ext::subxt_core::alloc::vec::Vec<_0>); + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum Renouncing { + #[codec(index = 0)] + Member, + #[codec(index = 1)] + RunnerUp, + #[codec(index = 2)] + Candidate(#[codec(compact)] ::core::primitive::u32), } - } - pub mod ethbloom { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43421,11 +42154,33 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Bloom(pub [::core::primitive::u8; 256usize]); + pub struct SeatHolder<_0, _1> { + pub who: _0, + pub stake: _1, + pub deposit: _1, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Voter<_0, _1> { + pub votes: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, + pub stake: _1, + pub deposit: _1, + } } - pub mod ethereum { + pub mod pallet_ethereum { use super::runtime_types; - pub mod block { + pub mod pallet { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43444,16 +42199,12 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Block<_0> { - pub header: runtime_types::ethereum::header::Header, - pub transactions: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, - pub ommers: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::ethereum::header::Header, - >, + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::transact`]."] + transact { transaction: runtime_types::ethereum::transaction::TransactionV2 }, } - } - pub mod header { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43471,27 +42222,15 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Header { - pub parent_hash: ::subxt::ext::subxt_core::utils::H256, - pub ommers_hash: ::subxt::ext::subxt_core::utils::H256, - pub beneficiary: ::subxt::ext::subxt_core::utils::H160, - pub state_root: ::subxt::ext::subxt_core::utils::H256, - pub transactions_root: ::subxt::ext::subxt_core::utils::H256, - pub receipts_root: ::subxt::ext::subxt_core::utils::H256, - pub logs_bloom: runtime_types::ethbloom::Bloom, - pub difficulty: runtime_types::primitive_types::U256, - pub number: runtime_types::primitive_types::U256, - pub gas_limit: runtime_types::primitive_types::U256, - pub gas_used: runtime_types::primitive_types::U256, - pub timestamp: ::core::primitive::u64, - pub extra_data: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - pub mix_hash: ::subxt::ext::subxt_core::utils::H256, - pub nonce: runtime_types::ethereum_types::hash::H64, + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Signature is invalid."] + InvalidSignature, + #[codec(index = 1)] + #[doc = "Pre-log is present, therefore transact is not allowed."] + PreLogExists, } - } - pub mod log { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43509,15 +42248,41 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Log { - pub address: ::subxt::ext::subxt_core::utils::H160, - pub topics: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::H256, - >, - pub data: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "An ethereum transaction was successfully executed."] + Executed { + from: ::subxt::ext::subxt_core::utils::H160, + to: ::subxt::ext::subxt_core::utils::H160, + transaction_hash: ::subxt::ext::subxt_core::utils::H256, + exit_reason: runtime_types::evm_core::error::ExitReason, + extra_data: + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, } } - pub mod receipt { + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum RawOrigin { + #[codec(index = 0)] + EthereumTransaction(::subxt::ext::subxt_core::utils::H160), + } + } + pub mod pallet_evm { + use super::runtime_types; + pub mod pallet { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43536,64 +42301,70 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct EIP658ReceiptData { - pub status_code: ::core::primitive::u8, - pub used_gas: runtime_types::primitive_types::U256, - pub logs_bloom: runtime_types::ethbloom::Bloom, - pub logs: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::ethereum::log::Log, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ReceiptV3 { + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { #[codec(index = 0)] - Legacy(runtime_types::ethereum::receipt::EIP658ReceiptData), + #[doc = "See [`Pallet::withdraw`]."] + withdraw { + address: ::subxt::ext::subxt_core::utils::H160, + value: ::core::primitive::u128, + }, #[codec(index = 1)] - EIP2930(runtime_types::ethereum::receipt::EIP658ReceiptData), - #[codec(index = 2)] - EIP1559(runtime_types::ethereum::receipt::EIP658ReceiptData), - } - } - pub mod transaction { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct AccessListItem { - pub address: ::subxt::ext::subxt_core::utils::H160, - pub storage_keys: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::H256, - >, + #[doc = "See [`Pallet::call`]."] + call { + source: ::subxt::ext::subxt_core::utils::H160, + target: ::subxt::ext::subxt_core::utils::H160, + input: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + value: runtime_types::primitive_types::U256, + gas_limit: ::core::primitive::u64, + max_fee_per_gas: runtime_types::primitive_types::U256, + max_priority_fee_per_gas: + ::core::option::Option, + nonce: ::core::option::Option, + access_list: ::subxt::ext::subxt_core::alloc::vec::Vec<( + ::subxt::ext::subxt_core::utils::H160, + ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H256, + >, + )>, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::create`]."] + create { + source: ::subxt::ext::subxt_core::utils::H160, + init: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + value: runtime_types::primitive_types::U256, + gas_limit: ::core::primitive::u64, + max_fee_per_gas: runtime_types::primitive_types::U256, + max_priority_fee_per_gas: + ::core::option::Option, + nonce: ::core::option::Option, + access_list: ::subxt::ext::subxt_core::alloc::vec::Vec<( + ::subxt::ext::subxt_core::utils::H160, + ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H256, + >, + )>, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::create2`]."] + create2 { + source: ::subxt::ext::subxt_core::utils::H160, + init: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + salt: ::subxt::ext::subxt_core::utils::H256, + value: runtime_types::primitive_types::U256, + gas_limit: ::core::primitive::u64, + max_fee_per_gas: runtime_types::primitive_types::U256, + max_priority_fee_per_gas: + ::core::option::Option, + nonce: ::core::option::Option, + access_list: ::subxt::ext::subxt_core::alloc::vec::Vec<( + ::subxt::ext::subxt_core::utils::H160, + ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H256, + >, + )>, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43612,21 +42383,47 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct EIP1559Transaction { - pub chain_id: ::core::primitive::u64, - pub nonce: runtime_types::primitive_types::U256, - pub max_priority_fee_per_gas: runtime_types::primitive_types::U256, - pub max_fee_per_gas: runtime_types::primitive_types::U256, - pub gas_limit: runtime_types::primitive_types::U256, - pub action: runtime_types::ethereum::transaction::TransactionAction, - pub value: runtime_types::primitive_types::U256, - pub input: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - pub access_list: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::ethereum::transaction::AccessListItem, - >, - pub odd_y_parity: ::core::primitive::bool, - pub r: ::subxt::ext::subxt_core::utils::H256, - pub s: ::subxt::ext::subxt_core::utils::H256, + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Not enough balance to perform action"] + BalanceLow, + #[codec(index = 1)] + #[doc = "Calculating total fee overflowed"] + FeeOverflow, + #[codec(index = 2)] + #[doc = "Calculating total payment overflowed"] + PaymentOverflow, + #[codec(index = 3)] + #[doc = "Withdraw fee failed"] + WithdrawFailed, + #[codec(index = 4)] + #[doc = "Gas price is too low."] + GasPriceTooLow, + #[codec(index = 5)] + #[doc = "Nonce is invalid"] + InvalidNonce, + #[codec(index = 6)] + #[doc = "Gas limit is too low."] + GasLimitTooLow, + #[codec(index = 7)] + #[doc = "Gas limit is too high."] + GasLimitTooHigh, + #[codec(index = 8)] + #[doc = "The chain id is invalid."] + InvalidChainId, + #[codec(index = 9)] + #[doc = "the signature is invalid."] + InvalidSignature, + #[codec(index = 10)] + #[doc = "EVM reentrancy"] + Reentrancy, + #[codec(index = 11)] + #[doc = "EIP-3607,"] + TransactionMustComeFromEOA, + #[codec(index = 12)] + #[doc = "Undefined error."] + Undefined, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43645,21 +42442,47 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct EIP2930Transaction { - pub chain_id: ::core::primitive::u64, - pub nonce: runtime_types::primitive_types::U256, - pub gas_price: runtime_types::primitive_types::U256, - pub gas_limit: runtime_types::primitive_types::U256, - pub action: runtime_types::ethereum::transaction::TransactionAction, - pub value: runtime_types::primitive_types::U256, - pub input: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - pub access_list: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::ethereum::transaction::AccessListItem, - >, - pub odd_y_parity: ::core::primitive::bool, - pub r: ::subxt::ext::subxt_core::utils::H256, - pub s: ::subxt::ext::subxt_core::utils::H256, + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "Ethereum events from contracts."] + Log { log: runtime_types::ethereum::log::Log }, + #[codec(index = 1)] + #[doc = "A contract has been created at given address."] + Created { address: ::subxt::ext::subxt_core::utils::H160 }, + #[codec(index = 2)] + #[doc = "A contract was attempted to be created, but the execution failed."] + CreatedFailed { address: ::subxt::ext::subxt_core::utils::H160 }, + #[codec(index = 3)] + #[doc = "A contract has been executed successfully with states applied."] + Executed { address: ::subxt::ext::subxt_core::utils::H160 }, + #[codec(index = 4)] + #[doc = "A contract has been executed with errors. States are reverted with only gas fees applied."] + ExecutedFailed { address: ::subxt::ext::subxt_core::utils::H160 }, } + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct CodeMetadata { + pub size: ::core::primitive::u64, + pub hash: ::subxt::ext::subxt_core::utils::H256, + } + } + pub mod pallet_grandpa { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43677,14 +42500,36 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct LegacyTransaction { - pub nonce: runtime_types::primitive_types::U256, - pub gas_price: runtime_types::primitive_types::U256, - pub gas_limit: runtime_types::primitive_types::U256, - pub action: runtime_types::ethereum::transaction::TransactionAction, - pub value: runtime_types::primitive_types::U256, - pub input: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - pub signature: runtime_types::ethereum::transaction::TransactionSignature, + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::report_equivocation`]."] + report_equivocation { + equivocation_proof: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::sp_consensus_grandpa::EquivocationProof< + ::subxt::ext::subxt_core::utils::H256, + ::core::primitive::u64, + >, + >, + key_owner_proof: runtime_types::sp_session::MembershipProof, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::report_equivocation_unsigned`]."] + report_equivocation_unsigned { + equivocation_proof: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::sp_consensus_grandpa::EquivocationProof< + ::subxt::ext::subxt_core::utils::H256, + ::core::primitive::u64, + >, + >, + key_owner_proof: runtime_types::sp_session::MembershipProof, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::note_stalled`]."] + note_stalled { + delay: ::core::primitive::u64, + best_finalized_block_number: ::core::primitive::u64, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43703,31 +42548,32 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum TransactionAction { + #[doc = "The `Error` enum of this pallet."] + pub enum Error { #[codec(index = 0)] - Call(::subxt::ext::subxt_core::utils::H160), + #[doc = "Attempt to signal GRANDPA pause when the authority set isn't live"] + #[doc = "(either paused or already pending pause)."] + PauseFailed, #[codec(index = 1)] - Create, + #[doc = "Attempt to signal GRANDPA resume when the authority set isn't paused"] + #[doc = "(either live or already pending resume)."] + ResumeFailed, + #[codec(index = 2)] + #[doc = "Attempt to signal GRANDPA change with one already pending."] + ChangePending, + #[codec(index = 3)] + #[doc = "Cannot signal forced change so soon after last."] + TooSoon, + #[codec(index = 4)] + #[doc = "A key ownership proof provided as part of an equivocation report is invalid."] + InvalidKeyOwnershipProof, + #[codec(index = 5)] + #[doc = "An equivocation proof provided as part of an equivocation report is invalid."] + InvalidEquivocationProof, + #[codec(index = 6)] + #[doc = "A given equivocation report is valid but already previously reported."] + DuplicateOffenceReport, } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct TransactionRecoveryId(pub ::core::primitive::u64); #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43745,11 +42591,75 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct TransactionSignature { - pub v: runtime_types::ethereum::transaction::TransactionRecoveryId, - pub r: ::subxt::ext::subxt_core::utils::H256, - pub s: ::subxt::ext::subxt_core::utils::H256, + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "New authority set has been applied."] + NewAuthorities { + authority_set: ::subxt::ext::subxt_core::alloc::vec::Vec<( + runtime_types::sp_consensus_grandpa::app::Public, + ::core::primitive::u64, + )>, + }, + #[codec(index = 1)] + #[doc = "Current authority set has been paused."] + Paused, + #[codec(index = 2)] + #[doc = "Current authority set has been resumed."] + Resumed, } + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct StoredPendingChange<_0> { + pub scheduled_at: _0, + pub delay: _0, + pub next_authorities: + runtime_types::bounded_collections::weak_bounded_vec::WeakBoundedVec<( + runtime_types::sp_consensus_grandpa::app::Public, + _0, + )>, + pub forced: ::core::option::Option<_0>, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum StoredState<_0> { + #[codec(index = 0)] + Live, + #[codec(index = 1)] + PendingPause { scheduled_at: _0, delay: _0 }, + #[codec(index = 2)] + Paused, + #[codec(index = 3)] + PendingResume { scheduled_at: _0, delay: _0 }, + } + } + pub mod pallet_hotfix_sufficients { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43767,20 +42677,16 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum TransactionV2 { + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { #[codec(index = 0)] - Legacy(runtime_types::ethereum::transaction::LegacyTransaction), - #[codec(index = 1)] - EIP2930(runtime_types::ethereum::transaction::EIP2930Transaction), - #[codec(index = 2)] - EIP1559(runtime_types::ethereum::transaction::EIP1559Transaction), + #[doc = "See [`Pallet::hotfix_inc_account_sufficients`]."] + hotfix_inc_account_sufficients { + addresses: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H160, + >, + }, } - } - } - pub mod ethereum_types { - use super::runtime_types; - pub mod hash { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43798,12 +42704,17 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct H64(pub [::core::primitive::u8; 8usize]); + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Maximum address count exceeded"] + MaxAddressCountExceeded, + } } } - pub mod evm { + pub mod pallet_identity { use super::runtime_types; - pub mod backend { + pub mod legacy { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43822,15 +42733,22 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Basic { - pub balance: runtime_types::primitive_types::U256, - pub nonce: runtime_types::primitive_types::U256, + pub struct IdentityInfo { + pub additional: runtime_types::bounded_collections::bounded_vec::BoundedVec<( + runtime_types::pallet_identity::types::Data, + runtime_types::pallet_identity::types::Data, + )>, + pub display: runtime_types::pallet_identity::types::Data, + pub legal: runtime_types::pallet_identity::types::Data, + pub web: runtime_types::pallet_identity::types::Data, + pub riot: runtime_types::pallet_identity::types::Data, + pub email: runtime_types::pallet_identity::types::Data, + pub pgp_fingerprint: ::core::option::Option<[::core::primitive::u8; 20usize]>, + pub image: runtime_types::pallet_identity::types::Data, + pub twitter: runtime_types::pallet_identity::types::Data, } } - } - pub mod evm_core { - use super::runtime_types; - pub mod error { + pub mod pallet { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43849,43 +42767,182 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ExitError { + #[doc = "Identity pallet declaration."] + pub enum Call { #[codec(index = 0)] - StackUnderflow, + #[doc = "See [`Pallet::add_registrar`]."] + add_registrar { + account: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, #[codec(index = 1)] - StackOverflow, + #[doc = "See [`Pallet::set_identity`]."] + set_identity { + info: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::pallet_identity::legacy::IdentityInfo, + >, + }, #[codec(index = 2)] - InvalidJump, + #[doc = "See [`Pallet::set_subs`]."] + set_subs { + subs: ::subxt::ext::subxt_core::alloc::vec::Vec<( + ::subxt::ext::subxt_core::utils::AccountId32, + runtime_types::pallet_identity::types::Data, + )>, + }, #[codec(index = 3)] - InvalidRange, + #[doc = "See [`Pallet::clear_identity`]."] + clear_identity, #[codec(index = 4)] - DesignatedInvalid, + #[doc = "See [`Pallet::request_judgement`]."] + request_judgement { + #[codec(compact)] + reg_index: ::core::primitive::u32, + #[codec(compact)] + max_fee: ::core::primitive::u128, + }, #[codec(index = 5)] - CallTooDeep, + #[doc = "See [`Pallet::cancel_request`]."] + cancel_request { reg_index: ::core::primitive::u32 }, #[codec(index = 6)] - CreateCollision, + #[doc = "See [`Pallet::set_fee`]."] + set_fee { + #[codec(compact)] + index: ::core::primitive::u32, + #[codec(compact)] + fee: ::core::primitive::u128, + }, #[codec(index = 7)] - CreateContractLimit, - #[codec(index = 15)] - InvalidCode(runtime_types::evm_core::opcode::Opcode), + #[doc = "See [`Pallet::set_account_id`]."] + set_account_id { + #[codec(compact)] + index: ::core::primitive::u32, + new: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, #[codec(index = 8)] - OutOfOffset, + #[doc = "See [`Pallet::set_fields`]."] + set_fields { + #[codec(compact)] + index: ::core::primitive::u32, + fields: ::core::primitive::u64, + }, #[codec(index = 9)] - OutOfGas, + #[doc = "See [`Pallet::provide_judgement`]."] + provide_judgement { + #[codec(compact)] + reg_index: ::core::primitive::u32, + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + judgement: runtime_types::pallet_identity::types::Judgement< + ::core::primitive::u128, + >, + identity: ::subxt::ext::subxt_core::utils::H256, + }, #[codec(index = 10)] - OutOfFund, + #[doc = "See [`Pallet::kill_identity`]."] + kill_identity { + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, #[codec(index = 11)] - PCUnderflow, + #[doc = "See [`Pallet::add_sub`]."] + add_sub { + sub: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + data: runtime_types::pallet_identity::types::Data, + }, #[codec(index = 12)] - CreateEmpty, + #[doc = "See [`Pallet::rename_sub`]."] + rename_sub { + sub: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + data: runtime_types::pallet_identity::types::Data, + }, #[codec(index = 13)] - Other(::subxt::ext::subxt_core::alloc::string::String), + #[doc = "See [`Pallet::remove_sub`]."] + remove_sub { + sub: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, #[codec(index = 14)] - MaxNonce, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + #[doc = "See [`Pallet::quit_sub`]."] + quit_sub, + #[codec(index = 15)] + #[doc = "See [`Pallet::add_username_authority`]."] + add_username_authority { + authority: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + suffix: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + allocation: ::core::primitive::u32, + }, + #[codec(index = 16)] + #[doc = "See [`Pallet::remove_username_authority`]."] + remove_username_authority { + authority: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 17)] + #[doc = "See [`Pallet::set_username_for`]."] + set_username_for { + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + username: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + signature: + ::core::option::Option, + }, + #[codec(index = 18)] + #[doc = "See [`Pallet::accept_username`]."] + accept_username { + username: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + }, + #[codec(index = 19)] + #[doc = "See [`Pallet::remove_expired_approval`]."] + remove_expired_approval { + username: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + }, + #[codec(index = 20)] + #[doc = "See [`Pallet::set_primary_username`]."] + set_primary_username { + username: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + }, + #[codec(index = 21)] + #[doc = "See [`Pallet::remove_dangling_username`]."] + remove_dangling_username { + username: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + }, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, Clone, @@ -43900,15 +42957,86 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ExitFatal { + #[doc = "The `Error` enum of this pallet."] + pub enum Error { #[codec(index = 0)] - NotSupported, + #[doc = "Too many subs-accounts."] + TooManySubAccounts, #[codec(index = 1)] - UnhandledInterrupt, + #[doc = "Account isn't found."] + NotFound, #[codec(index = 2)] - CallErrorAsFatal(runtime_types::evm_core::error::ExitError), + #[doc = "Account isn't named."] + NotNamed, #[codec(index = 3)] - Other(::subxt::ext::subxt_core::alloc::string::String), + #[doc = "Empty index."] + EmptyIndex, + #[codec(index = 4)] + #[doc = "Fee is changed."] + FeeChanged, + #[codec(index = 5)] + #[doc = "No identity found."] + NoIdentity, + #[codec(index = 6)] + #[doc = "Sticky judgement."] + StickyJudgement, + #[codec(index = 7)] + #[doc = "Judgement given."] + JudgementGiven, + #[codec(index = 8)] + #[doc = "Invalid judgement."] + InvalidJudgement, + #[codec(index = 9)] + #[doc = "The index is invalid."] + InvalidIndex, + #[codec(index = 10)] + #[doc = "The target is invalid."] + InvalidTarget, + #[codec(index = 11)] + #[doc = "Maximum amount of registrars reached. Cannot add any more."] + TooManyRegistrars, + #[codec(index = 12)] + #[doc = "Account ID is already named."] + AlreadyClaimed, + #[codec(index = 13)] + #[doc = "Sender is not a sub-account."] + NotSub, + #[codec(index = 14)] + #[doc = "Sub-account isn't owned by sender."] + NotOwned, + #[codec(index = 15)] + #[doc = "The provided judgement was for a different identity."] + JudgementForDifferentIdentity, + #[codec(index = 16)] + #[doc = "Error that occurs when there is an issue paying for judgement."] + JudgementPaymentFailed, + #[codec(index = 17)] + #[doc = "The provided suffix is too long."] + InvalidSuffix, + #[codec(index = 18)] + #[doc = "The sender does not have permission to issue a username."] + NotUsernameAuthority, + #[codec(index = 19)] + #[doc = "The authority cannot allocate any more usernames."] + NoAllocation, + #[codec(index = 20)] + #[doc = "The signature on a username was not valid."] + InvalidSignature, + #[codec(index = 21)] + #[doc = "Setting this username requires a signature, but none was provided."] + RequiresSignature, + #[codec(index = 22)] + #[doc = "The username does not meet the requirements."] + InvalidUsername, + #[codec(index = 23)] + #[doc = "The username is already taken."] + UsernameTaken, + #[codec(index = 24)] + #[doc = "The requested username does not exist."] + NoUsername, + #[codec(index = 25)] + #[doc = "The username cannot be forcefully removed because it can still be accepted."] + NotExpired, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43927,16 +43055,113 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ExitReason { + #[doc = "The `Event` enum of this pallet"] + pub enum Event { #[codec(index = 0)] - Succeed(runtime_types::evm_core::error::ExitSucceed), + #[doc = "A name was set or reset (which will remove all judgements)."] + IdentitySet { who: ::subxt::ext::subxt_core::utils::AccountId32 }, #[codec(index = 1)] - Error(runtime_types::evm_core::error::ExitError), + #[doc = "A name was cleared, and the given balance returned."] + IdentityCleared { + who: ::subxt::ext::subxt_core::utils::AccountId32, + deposit: ::core::primitive::u128, + }, #[codec(index = 2)] - Revert(runtime_types::evm_core::error::ExitRevert), + #[doc = "A name was removed and the given balance slashed."] + IdentityKilled { + who: ::subxt::ext::subxt_core::utils::AccountId32, + deposit: ::core::primitive::u128, + }, #[codec(index = 3)] - Fatal(runtime_types::evm_core::error::ExitFatal), + #[doc = "A judgement was asked from a registrar."] + JudgementRequested { + who: ::subxt::ext::subxt_core::utils::AccountId32, + registrar_index: ::core::primitive::u32, + }, + #[codec(index = 4)] + #[doc = "A judgement request was retracted."] + JudgementUnrequested { + who: ::subxt::ext::subxt_core::utils::AccountId32, + registrar_index: ::core::primitive::u32, + }, + #[codec(index = 5)] + #[doc = "A judgement was given by a registrar."] + JudgementGiven { + target: ::subxt::ext::subxt_core::utils::AccountId32, + registrar_index: ::core::primitive::u32, + }, + #[codec(index = 6)] + #[doc = "A registrar was added."] + RegistrarAdded { registrar_index: ::core::primitive::u32 }, + #[codec(index = 7)] + #[doc = "A sub-identity was added to an identity and the deposit paid."] + SubIdentityAdded { + sub: ::subxt::ext::subxt_core::utils::AccountId32, + main: ::subxt::ext::subxt_core::utils::AccountId32, + deposit: ::core::primitive::u128, + }, + #[codec(index = 8)] + #[doc = "A sub-identity was removed from an identity and the deposit freed."] + SubIdentityRemoved { + sub: ::subxt::ext::subxt_core::utils::AccountId32, + main: ::subxt::ext::subxt_core::utils::AccountId32, + deposit: ::core::primitive::u128, + }, + #[codec(index = 9)] + #[doc = "A sub-identity was cleared, and the given deposit repatriated from the"] + #[doc = "main identity account to the sub-identity account."] + SubIdentityRevoked { + sub: ::subxt::ext::subxt_core::utils::AccountId32, + main: ::subxt::ext::subxt_core::utils::AccountId32, + deposit: ::core::primitive::u128, + }, + #[codec(index = 10)] + #[doc = "A username authority was added."] + AuthorityAdded { authority: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 11)] + #[doc = "A username authority was removed."] + AuthorityRemoved { authority: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 12)] + #[doc = "A username was set for `who`."] + UsernameSet { + who: ::subxt::ext::subxt_core::utils::AccountId32, + username: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + }, + #[codec(index = 13)] + #[doc = "A username was queued, but `who` must accept it prior to `expiration`."] + UsernameQueued { + who: ::subxt::ext::subxt_core::utils::AccountId32, + username: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + expiration: ::core::primitive::u64, + }, + #[codec(index = 14)] + #[doc = "A queued username passed its expiration without being claimed and was removed."] + PreapprovalExpired { whose: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 15)] + #[doc = "A username was set as a primary and can be looked up from `who`."] + PrimaryUsernameSet { + who: ::subxt::ext::subxt_core::utils::AccountId32, + username: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + }, + #[codec(index = 16)] + #[doc = "A dangling username (as in, a username corresponding to an account that has removed its"] + #[doc = "identity) has been removed."] + DanglingUsernameRemoved { + who: ::subxt::ext::subxt_core::utils::AccountId32, + username: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + }, } + } + pub mod types { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -43954,9 +43179,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ExitRevert { - #[codec(index = 0)] - Reverted, + pub struct AuthorityProperties<_0> { + pub suffix: _0, + pub allocation: ::core::primitive::u32, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -43975,19 +43200,85 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ExitSucceed { + pub enum Data { #[codec(index = 0)] - Stopped, + None, #[codec(index = 1)] - Returned, + Raw0([::core::primitive::u8; 0usize]), #[codec(index = 2)] - Suicided, + Raw1([::core::primitive::u8; 1usize]), + #[codec(index = 3)] + Raw2([::core::primitive::u8; 2usize]), + #[codec(index = 4)] + Raw3([::core::primitive::u8; 3usize]), + #[codec(index = 5)] + Raw4([::core::primitive::u8; 4usize]), + #[codec(index = 6)] + Raw5([::core::primitive::u8; 5usize]), + #[codec(index = 7)] + Raw6([::core::primitive::u8; 6usize]), + #[codec(index = 8)] + Raw7([::core::primitive::u8; 7usize]), + #[codec(index = 9)] + Raw8([::core::primitive::u8; 8usize]), + #[codec(index = 10)] + Raw9([::core::primitive::u8; 9usize]), + #[codec(index = 11)] + Raw10([::core::primitive::u8; 10usize]), + #[codec(index = 12)] + Raw11([::core::primitive::u8; 11usize]), + #[codec(index = 13)] + Raw12([::core::primitive::u8; 12usize]), + #[codec(index = 14)] + Raw13([::core::primitive::u8; 13usize]), + #[codec(index = 15)] + Raw14([::core::primitive::u8; 14usize]), + #[codec(index = 16)] + Raw15([::core::primitive::u8; 15usize]), + #[codec(index = 17)] + Raw16([::core::primitive::u8; 16usize]), + #[codec(index = 18)] + Raw17([::core::primitive::u8; 17usize]), + #[codec(index = 19)] + Raw18([::core::primitive::u8; 18usize]), + #[codec(index = 20)] + Raw19([::core::primitive::u8; 19usize]), + #[codec(index = 21)] + Raw20([::core::primitive::u8; 20usize]), + #[codec(index = 22)] + Raw21([::core::primitive::u8; 21usize]), + #[codec(index = 23)] + Raw22([::core::primitive::u8; 22usize]), + #[codec(index = 24)] + Raw23([::core::primitive::u8; 23usize]), + #[codec(index = 25)] + Raw24([::core::primitive::u8; 24usize]), + #[codec(index = 26)] + Raw25([::core::primitive::u8; 25usize]), + #[codec(index = 27)] + Raw26([::core::primitive::u8; 26usize]), + #[codec(index = 28)] + Raw27([::core::primitive::u8; 27usize]), + #[codec(index = 29)] + Raw28([::core::primitive::u8; 28usize]), + #[codec(index = 30)] + Raw29([::core::primitive::u8; 29usize]), + #[codec(index = 31)] + Raw30([::core::primitive::u8; 30usize]), + #[codec(index = 32)] + Raw31([::core::primitive::u8; 31usize]), + #[codec(index = 33)] + Raw32([::core::primitive::u8; 32usize]), + #[codec(index = 34)] + BlakeTwo256([::core::primitive::u8; 32usize]), + #[codec(index = 35)] + Sha256([::core::primitive::u8; 32usize]), + #[codec(index = 36)] + Keccak256([::core::primitive::u8; 32usize]), + #[codec(index = 37)] + ShaThree256([::core::primitive::u8; 32usize]), } - } - pub mod opcode { - use super::runtime_types; #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -44004,155 +43295,22 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Opcode(pub ::core::primitive::u8); - } - } - pub mod finality_grandpa { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Equivocation<_0, _1, _2> { - pub round_number: ::core::primitive::u64, - pub identity: _0, - pub first: (_1, _2), - pub second: (_1, _2), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Precommit<_0, _1> { - pub target_hash: _0, - pub target_number: _1, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Prevote<_0, _1> { - pub target_hash: _0, - pub target_number: _1, - } - } - pub mod fp_evm { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ExecutionInfoV2<_0> { - pub exit_reason: runtime_types::evm_core::error::ExitReason, - pub value: _0, - pub used_gas: runtime_types::fp_evm::UsedGas, - pub weight_info: ::core::option::Option, - pub logs: - ::subxt::ext::subxt_core::alloc::vec::Vec, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct UsedGas { - pub standard: runtime_types::primitive_types::U256, - pub effective: runtime_types::primitive_types::U256, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct WeightInfo { - pub ref_time_limit: ::core::option::Option<::core::primitive::u64>, - pub proof_size_limit: ::core::option::Option<::core::primitive::u64>, - pub ref_time_usage: ::core::option::Option<::core::primitive::u64>, - pub proof_size_usage: ::core::option::Option<::core::primitive::u64>, - } - } - pub mod fp_rpc { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct TransactionStatus { - pub transaction_hash: ::subxt::ext::subxt_core::utils::H256, - pub transaction_index: ::core::primitive::u32, - pub from: ::subxt::ext::subxt_core::utils::H160, - pub to: ::core::option::Option<::subxt::ext::subxt_core::utils::H160>, - pub contract_address: ::core::option::Option<::subxt::ext::subxt_core::utils::H160>, - pub logs: - ::subxt::ext::subxt_core::alloc::vec::Vec, - pub logs_bloom: runtime_types::ethbloom::Bloom, - } - } - pub mod fp_self_contained { - use super::runtime_types; - pub mod unchecked_extrinsic { - use super::runtime_types; + pub enum Judgement<_0> { + #[codec(index = 0)] + Unknown, + #[codec(index = 1)] + FeePaid(_0), + #[codec(index = 2)] + Reasonable, + #[codec(index = 3)] + KnownGood, + #[codec(index = 4)] + OutOfDate, + #[codec(index = 5)] + LowQuality, + #[codec(index = 6)] + Erroneous, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -44170,77 +43328,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct UncheckedExtrinsic<_0, _1, _2, _3>( - pub ::subxt::ext::subxt_core::utils::UncheckedExtrinsic<_0, _1, _2, _3>, - ); - } - } - pub mod frame_metadata_hash_extension { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct CheckMetadataHash { - pub mode: runtime_types::frame_metadata_hash_extension::Mode, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Mode { - #[codec(index = 0)] - Disabled, - #[codec(index = 1)] - Enabled, - } - } - pub mod frame_support { - use super::runtime_types; - pub mod dispatch { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum DispatchClass { - #[codec(index = 0)] - Normal, - #[codec(index = 1)] - Operational, - #[codec(index = 2)] - Mandatory, + pub struct RegistrarInfo<_0, _1, _2> { + pub account: _1, + pub fee: _0, + pub fields: _2, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44259,11 +43350,20 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct DispatchInfo { - pub weight: runtime_types::sp_weights::weight_v2::Weight, - pub class: runtime_types::frame_support::dispatch::DispatchClass, - pub pays_fee: runtime_types::frame_support::dispatch::Pays, + pub struct Registration<_0, _2> { + pub judgements: runtime_types::bounded_collections::bounded_vec::BoundedVec<( + ::core::primitive::u32, + runtime_types::pallet_identity::types::Judgement<_0>, + )>, + pub deposit: _0, + pub info: _2, } + } + } + pub mod pallet_im_online { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -44281,11 +43381,15 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum Pays { + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { #[codec(index = 0)] - Yes, - #[codec(index = 1)] - No, + #[doc = "See [`Pallet::heartbeat`]."] + heartbeat { + heartbeat: + runtime_types::pallet_im_online::Heartbeat<::core::primitive::u64>, + signature: runtime_types::pallet_im_online::sr25519::app_sr25519::Signature, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44304,10 +43408,14 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct PerDispatchClass<_0> { - pub normal: _0, - pub operational: _0, - pub mandatory: _0, + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Non existent public key."] + InvalidKey, + #[codec(index = 1)] + #[doc = "Duplicated heartbeat."] + DuplicatedHeartbeat, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44326,210 +43434,32 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum RawOrigin<_0> { + #[doc = "The `Event` enum of this pallet"] + pub enum Event { #[codec(index = 0)] - Root, + #[doc = "A new heartbeat was received from `AuthorityId`."] + HeartbeatReceived { + authority_id: runtime_types::pallet_im_online::sr25519::app_sr25519::Public, + }, #[codec(index = 1)] - Signed(_0), + #[doc = "At the end of the session, no offence was committed."] + AllGood, #[codec(index = 2)] - None, - } - } - pub mod traits { - use super::runtime_types; - pub mod preimages { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Bounded<_0, _1> { - #[codec(index = 0)] - Legacy { - hash: ::subxt::ext::subxt_core::utils::H256, - }, - #[codec(index = 1)] - Inline( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, + #[doc = "At the end of the session, at least one validator was found to be offline."] + SomeOffline { + offline: ::subxt::ext::subxt_core::alloc::vec::Vec<( + ::subxt::ext::subxt_core::utils::AccountId32, + runtime_types::sp_staking::Exposure< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u128, >, - ), - #[codec(index = 2)] - Lookup { - hash: ::subxt::ext::subxt_core::utils::H256, - len: ::core::primitive::u32, - }, - __Ignore(::core::marker::PhantomData<(_0, _1)>), - } - } - pub mod tokens { - use super::runtime_types; - pub mod misc { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum BalanceStatus { - #[codec(index = 0)] - Free, - #[codec(index = 1)] - Reserved, - } - } + )>, + }, } } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct PalletId(pub [::core::primitive::u8; 8usize]); - } - pub mod frame_system { - use super::runtime_types; - pub mod extensions { + pub mod sr25519 { use super::runtime_types; - pub mod check_genesis { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct CheckGenesis; - } - pub mod check_mortality { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct CheckMortality(pub runtime_types::sp_runtime::generic::era::Era); - } - pub mod check_non_zero_sender { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct CheckNonZeroSender; - } - pub mod check_nonce { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct CheckNonce(#[codec(compact)] pub ::core::primitive::u32); - } - pub mod check_spec_version { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct CheckSpecVersion; - } - pub mod check_tx_version { + pub mod app_sr25519 { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44548,10 +43478,7 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct CheckTxVersion; - } - pub mod check_weight { - use super::runtime_types; + pub struct Public(pub runtime_types::sp_core::sr25519::Public); #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -44569,10 +43496,32 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct CheckWeight; + pub struct Signature(pub runtime_types::sp_core::sr25519::Signature); } } - pub mod limits { + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Heartbeat<_0> { + pub block_number: _0, + pub session_index: ::core::primitive::u32, + pub authority_index: ::core::primitive::u32, + pub validators_len: ::core::primitive::u32, + } + } + pub mod pallet_indices { + use super::runtime_types; + pub mod pallet { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44591,10 +43540,36 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct BlockLength { - pub max: runtime_types::frame_support::dispatch::PerDispatchClass< - ::core::primitive::u32, - >, + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::claim`]."] + claim { index: ::core::primitive::u32 }, + #[codec(index = 1)] + #[doc = "See [`Pallet::transfer`]."] + transfer { + new: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + index: ::core::primitive::u32, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::free`]."] + free { index: ::core::primitive::u32 }, + #[codec(index = 3)] + #[doc = "See [`Pallet::force_transfer`]."] + force_transfer { + new: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + index: ::core::primitive::u32, + freeze: ::core::primitive::bool, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::freeze`]."] + freeze { index: ::core::primitive::u32 }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44613,12 +43588,23 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct BlockWeights { - pub base_block: runtime_types::sp_weights::weight_v2::Weight, - pub max_block: runtime_types::sp_weights::weight_v2::Weight, - pub per_class: runtime_types::frame_support::dispatch::PerDispatchClass< - runtime_types::frame_system::limits::WeightsPerClass, - >, + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "The index was not already assigned."] + NotAssigned, + #[codec(index = 1)] + #[doc = "The index is assigned to another account."] + NotOwner, + #[codec(index = 2)] + #[doc = "The index was not available."] + InUse, + #[codec(index = 3)] + #[doc = "The source and destination accounts are identical."] + NotTransfer, + #[codec(index = 4)] + #[doc = "The index is permanent and may not be freed/changed."] + Permanent, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44637,16 +43623,28 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct WeightsPerClass { - pub base_extrinsic: runtime_types::sp_weights::weight_v2::Weight, - pub max_extrinsic: - ::core::option::Option, - pub max_total: - ::core::option::Option, - pub reserved: - ::core::option::Option, + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A account index was assigned."] + IndexAssigned { + who: ::subxt::ext::subxt_core::utils::AccountId32, + index: ::core::primitive::u32, + }, + #[codec(index = 1)] + #[doc = "A account index has been freed up (unassigned)."] + IndexFreed { index: ::core::primitive::u32 }, + #[codec(index = 2)] + #[doc = "A account index has been frozen to its current account ID."] + IndexFrozen { + index: ::core::primitive::u32, + who: ::subxt::ext::subxt_core::utils::AccountId32, + }, } } + } + pub mod pallet_multisig { + use super::runtime_types; pub mod pallet { use super::runtime_types; #[derive( @@ -44666,65 +43664,91 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + #[doc = "The callable functions (extrinsics) of the pallet."] pub enum Call { #[codec(index = 0)] - #[doc = "See [`Pallet::remark`]."] - remark { - remark: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, + #[doc = "See [`Pallet::join_operators`]."] + join_operators { bond_amount: ::core::primitive::u128 }, #[codec(index = 1)] - #[doc = "See [`Pallet::set_heap_pages`]."] - set_heap_pages { pages: ::core::primitive::u64 }, + #[doc = "See [`Pallet::schedule_leave_operators`]."] + schedule_leave_operators, #[codec(index = 2)] - #[doc = "See [`Pallet::set_code`]."] - set_code { - code: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, + #[doc = "See [`Pallet::cancel_leave_operators`]."] + cancel_leave_operators, #[codec(index = 3)] - #[doc = "See [`Pallet::set_code_without_checks`]."] - set_code_without_checks { - code: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, + #[doc = "See [`Pallet::execute_leave_operators`]."] + execute_leave_operators, #[codec(index = 4)] - #[doc = "See [`Pallet::set_storage`]."] - set_storage { - items: ::subxt::ext::subxt_core::alloc::vec::Vec<( - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - )>, - }, + #[doc = "See [`Pallet::operator_bond_more`]."] + operator_bond_more { additional_bond: ::core::primitive::u128 }, #[codec(index = 5)] - #[doc = "See [`Pallet::kill_storage`]."] - kill_storage { - keys: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >, - }, + #[doc = "See [`Pallet::schedule_operator_bond_less`]."] + schedule_operator_bond_less { bond_less_amount: ::core::primitive::u128 }, #[codec(index = 6)] - #[doc = "See [`Pallet::kill_prefix`]."] - kill_prefix { - prefix: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - subkeys: ::core::primitive::u32, - }, + #[doc = "See [`Pallet::execute_operator_bond_less`]."] + execute_operator_bond_less, #[codec(index = 7)] - #[doc = "See [`Pallet::remark_with_event`]."] - remark_with_event { - remark: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, + #[doc = "See [`Pallet::cancel_operator_bond_less`]."] + cancel_operator_bond_less, + #[codec(index = 8)] + #[doc = "See [`Pallet::go_offline`]."] + go_offline, #[codec(index = 9)] - #[doc = "See [`Pallet::authorize_upgrade`]."] - authorize_upgrade { code_hash: ::subxt::ext::subxt_core::utils::H256 }, + #[doc = "See [`Pallet::go_online`]."] + go_online, #[codec(index = 10)] - #[doc = "See [`Pallet::authorize_upgrade_without_checks`]."] - authorize_upgrade_without_checks { - code_hash: ::subxt::ext::subxt_core::utils::H256, + #[doc = "See [`Pallet::deposit`]."] + deposit { + asset_id: ::core::option::Option<::core::primitive::u128>, + amount: ::core::primitive::u128, }, #[codec(index = 11)] - #[doc = "See [`Pallet::apply_authorized_upgrade`]."] - apply_authorized_upgrade { - code: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, + #[doc = "See [`Pallet::schedule_unstake`]."] + schedule_unstake { + asset_id: ::core::option::Option<::core::primitive::u128>, + amount: ::core::primitive::u128, + }, + #[codec(index = 12)] + #[doc = "See [`Pallet::execute_unstake`]."] + execute_unstake, + #[codec(index = 13)] + #[doc = "See [`Pallet::cancel_unstake`]."] + cancel_unstake, + #[codec(index = 14)] + #[doc = "See [`Pallet::delegate`]."] + delegate { + operator: ::subxt::ext::subxt_core::utils::AccountId32, + asset_id: ::core::primitive::u128, + amount: ::core::primitive::u128, + }, + #[codec(index = 15)] + #[doc = "See [`Pallet::schedule_delegator_bond_less`]."] + schedule_delegator_bond_less { + operator: ::subxt::ext::subxt_core::utils::AccountId32, + asset_id: ::core::primitive::u128, + amount: ::core::primitive::u128, + }, + #[codec(index = 16)] + #[doc = "See [`Pallet::execute_delegator_bond_less`]."] + execute_delegator_bond_less, + #[codec(index = 17)] + #[doc = "See [`Pallet::cancel_delegator_bond_less`]."] + cancel_delegator_bond_less, + #[codec(index = 18)] + #[doc = "See [`Pallet::set_whitelisted_assets`]."] + set_whitelisted_assets { + assets: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>, + }, + #[codec(index = 19)] + #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] + set_incentive_apy_and_cap { + asset_id: ::core::primitive::u128, + apy: ::core::primitive::u128, + cap: ::core::primitive::u128, + }, + #[codec(index = 20)] + #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] + whitelist_blueprint_for_rewards { blueprint_id: ::core::primitive::u32 }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44743,36 +43767,86 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "Error for the System pallet"] + #[doc = "Errors emitted by the pallet."] pub enum Error { #[codec(index = 0)] - #[doc = "The name of specification does not match between the current runtime"] - #[doc = "and the new runtime."] - InvalidSpecName, + #[doc = "The account is already an operator."] + AlreadyOperator, #[codec(index = 1)] - #[doc = "The specification version is not allowed to decrease between the current runtime"] - #[doc = "and the new runtime."] - SpecVersionNeedsToIncrease, + #[doc = "The bond amount is too low."] + BondTooLow, #[codec(index = 2)] - #[doc = "Failed to extract the runtime version from the new runtime."] - #[doc = ""] - #[doc = "Either calling `Core_version` or decoding `RuntimeVersion` failed."] - FailedToExtractRuntimeVersion, + #[doc = "The account is not an operator."] + NotAnOperator, #[codec(index = 3)] - #[doc = "Suicide called when the account has non-default composite data."] - NonDefaultComposite, + #[doc = "The account cannot exit."] + CannotExit, #[codec(index = 4)] - #[doc = "There is a non-zero reference count preventing the account from being purged."] - NonZeroRefCount, + #[doc = "The operator is already leaving."] + AlreadyLeaving, #[codec(index = 5)] - #[doc = "The origin filter prevent the call to be dispatched."] - CallFiltered, + #[doc = "The account is not leaving as an operator."] + NotLeavingOperator, #[codec(index = 6)] - #[doc = "No upgrade authorized."] - NothingAuthorized, + #[doc = "The round does not match the scheduled leave round."] + NotLeavingRound, #[codec(index = 7)] - #[doc = "The submitted code is not authorized."] - Unauthorized, + #[doc = "There is no scheduled bond less request."] + NoScheduledBondLess, + #[codec(index = 8)] + #[doc = "The bond less request is not satisfied."] + BondLessRequestNotSatisfied, + #[codec(index = 9)] + #[doc = "The operator is not active."] + NotActiveOperator, + #[codec(index = 10)] + #[doc = "The operator is not offline."] + NotOfflineOperator, + #[codec(index = 11)] + #[doc = "The account is already a delegator."] + AlreadyDelegator, + #[codec(index = 12)] + #[doc = "The account is not a delegator."] + NotDelegator, + #[codec(index = 13)] + #[doc = "A withdraw request already exists."] + WithdrawRequestAlreadyExists, + #[codec(index = 14)] + #[doc = "The account has insufficient balance."] + InsufficientBalance, + #[codec(index = 15)] + #[doc = "There is no withdraw request."] + NoWithdrawRequest, + #[codec(index = 16)] + #[doc = "The unstake is not ready."] + UnstakeNotReady, + #[codec(index = 17)] + #[doc = "There is no bond less request."] + NoBondLessRequest, + #[codec(index = 18)] + #[doc = "The bond less request is not ready."] + BondLessNotReady, + #[codec(index = 19)] + #[doc = "A bond less request already exists."] + BondLessRequestAlreadyExists, + #[codec(index = 20)] + #[doc = "There are active services using the asset."] + ActiveServicesUsingAsset, + #[codec(index = 21)] + #[doc = "There is not active delegation"] + NoActiveDelegation, + #[codec(index = 22)] + #[doc = "The asset is not whitelisted"] + AssetNotWhitelisted, + #[codec(index = 23)] + #[doc = "The origin is not authorized to perform this action"] + NotAuthorized, + #[codec(index = 24)] + #[doc = "The asset ID is not found"] + AssetNotFound, + #[codec(index = 25)] + #[doc = "The blueprint ID is already whitelisted"] + BlueprintAlreadyWhitelisted, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -44791,297 +43865,106 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "Event for the System pallet."] + #[doc = "Events emitted by the pallet."] pub enum Event { #[codec(index = 0)] - #[doc = "An extrinsic completed successfully."] - ExtrinsicSuccess { - dispatch_info: runtime_types::frame_support::dispatch::DispatchInfo, - }, + #[doc = "An operator has joined."] + OperatorJoined { who: ::subxt::ext::subxt_core::utils::AccountId32 }, #[codec(index = 1)] - #[doc = "An extrinsic failed."] - ExtrinsicFailed { - dispatch_error: runtime_types::sp_runtime::DispatchError, - dispatch_info: runtime_types::frame_support::dispatch::DispatchInfo, - }, + #[doc = "An operator has scheduled to leave."] + OperatorLeavingScheduled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, #[codec(index = 2)] - #[doc = "`:code` was updated."] - CodeUpdated, + #[doc = "An operator has cancelled their leave request."] + OperatorLeaveCancelled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, #[codec(index = 3)] - #[doc = "A new account was created."] - NewAccount { account: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[doc = "An operator has executed their leave request."] + OperatorLeaveExecuted { who: ::subxt::ext::subxt_core::utils::AccountId32 }, #[codec(index = 4)] - #[doc = "An account was reaped."] - KilledAccount { account: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[doc = "An operator has increased their bond."] + OperatorBondMore { + who: ::subxt::ext::subxt_core::utils::AccountId32, + additional_bond: ::core::primitive::u128, + }, #[codec(index = 5)] - #[doc = "On on-chain remark happened."] - Remarked { - sender: ::subxt::ext::subxt_core::utils::AccountId32, - hash: ::subxt::ext::subxt_core::utils::H256, + #[doc = "An operator has scheduled to decrease their bond."] + OperatorBondLessScheduled { + who: ::subxt::ext::subxt_core::utils::AccountId32, + bond_less_amount: ::core::primitive::u128, }, #[codec(index = 6)] - #[doc = "An upgrade was authorized."] - UpgradeAuthorized { - code_hash: ::subxt::ext::subxt_core::utils::H256, - check_version: ::core::primitive::bool, - }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct AccountInfo<_0, _1> { - pub nonce: _0, - pub consumers: ::core::primitive::u32, - pub providers: ::core::primitive::u32, - pub sufficients: ::core::primitive::u32, - pub data: _1, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct CodeUpgradeAuthorization { - pub code_hash: ::subxt::ext::subxt_core::utils::H256, - pub check_version: ::core::primitive::bool, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct EventRecord<_0, _1> { - pub phase: runtime_types::frame_system::Phase, - pub event: _0, - pub topics: ::subxt::ext::subxt_core::alloc::vec::Vec<_1>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct LastRuntimeUpgradeInfo { - #[codec(compact)] - pub spec_version: ::core::primitive::u32, - pub spec_name: ::subxt::ext::subxt_core::alloc::string::String, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Phase { - #[codec(index = 0)] - ApplyExtrinsic(::core::primitive::u32), - #[codec(index = 1)] - Finalization, - #[codec(index = 2)] - Initialization, - } - } - pub mod pallet_airdrop_claims { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::claim`]."] - claim { - dest: ::core::option::Option< - runtime_types::pallet_airdrop_claims::utils::MultiAddress, - >, - signer: ::core::option::Option< - runtime_types::pallet_airdrop_claims::utils::MultiAddress, - >, - signature: - runtime_types::pallet_airdrop_claims::utils::MultiAddressSignature, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::mint_claim`]."] - mint_claim { - who: runtime_types::pallet_airdrop_claims::utils::MultiAddress, - value: ::core::primitive::u128, - vesting_schedule: ::core::option::Option< - runtime_types::bounded_collections::bounded_vec::BoundedVec<( - ::core::primitive::u128, - ::core::primitive::u128, - ::core::primitive::u64, - )>, - >, - statement: ::core::option::Option< - runtime_types::pallet_airdrop_claims::StatementKind, - >, + #[doc = "An operator has executed their bond decrease."] + OperatorBondLessExecuted { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 7)] + #[doc = "An operator has cancelled their bond decrease request."] + OperatorBondLessCancelled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 8)] + #[doc = "An operator has gone offline."] + OperatorWentOffline { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 9)] + #[doc = "An operator has gone online."] + OperatorWentOnline { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 10)] + #[doc = "A deposit has been made."] + Deposited { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + asset_id: ::core::option::Option<::core::primitive::u128>, }, - #[codec(index = 2)] - #[doc = "See [`Pallet::claim_attest`]."] - claim_attest { - dest: ::core::option::Option< - runtime_types::pallet_airdrop_claims::utils::MultiAddress, - >, - signer: ::core::option::Option< - runtime_types::pallet_airdrop_claims::utils::MultiAddress, - >, - signature: - runtime_types::pallet_airdrop_claims::utils::MultiAddressSignature, - statement: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + #[codec(index = 11)] + #[doc = "An unstake has been scheduled."] + ScheduledUnstake { + who: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + asset_id: ::core::option::Option<::core::primitive::u128>, }, - #[codec(index = 4)] - #[doc = "See [`Pallet::move_claim`]."] - move_claim { - old: runtime_types::pallet_airdrop_claims::utils::MultiAddress, - new: runtime_types::pallet_airdrop_claims::utils::MultiAddress, + #[codec(index = 12)] + #[doc = "An unstake has been executed."] + ExecutedUnstake { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 13)] + #[doc = "An unstake has been cancelled."] + CancelledUnstake { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 14)] + #[doc = "A delegation has been made."] + Delegated { + who: ::subxt::ext::subxt_core::utils::AccountId32, + operator: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + asset_id: ::core::primitive::u128, }, - #[codec(index = 5)] - #[doc = "See [`Pallet::force_set_expiry_config`]."] - force_set_expiry_config { - expiry_block: ::core::primitive::u64, - dest: runtime_types::pallet_airdrop_claims::utils::MultiAddress, + #[codec(index = 15)] + #[doc = "A delegator bond less request has been scheduled."] + ScheduledDelegatorBondLess { + who: ::subxt::ext::subxt_core::utils::AccountId32, + operator: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + asset_id: ::core::primitive::u128, }, - #[codec(index = 6)] - #[doc = "See [`Pallet::claim_signed`]."] - claim_signed { - dest: ::core::option::Option< - runtime_types::pallet_airdrop_claims::utils::MultiAddress, - >, + #[codec(index = 16)] + #[doc = "A delegator bond less request has been executed."] + ExecutedDelegatorBondLess { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 17)] + #[doc = "A delegator bond less request has been cancelled."] + CancelledDelegatorBondLess { who: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 18)] + #[doc = "New whitelisted assets set"] + WhitelistedAssetsSet { + assets: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>, }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Invalid Ethereum signature."] - InvalidEthereumSignature, - #[codec(index = 1)] - #[doc = "Invalid Native (sr25519) signature"] - InvalidNativeSignature, - #[codec(index = 2)] - #[doc = "Invalid Native account decoding"] - InvalidNativeAccount, - #[codec(index = 3)] - #[doc = "Ethereum address has no claim."] - SignerHasNoClaim, - #[codec(index = 4)] - #[doc = "Account ID sending transaction has no claim."] - SenderHasNoClaim, - #[codec(index = 5)] - #[doc = "There's not enough in the pot to pay out some unvested amount. Generally implies a"] - #[doc = "logic error."] - PotUnderflow, - #[codec(index = 6)] - #[doc = "A needed statement was not included."] - InvalidStatement, - #[codec(index = 7)] - #[doc = "The account already has a vested balance."] - VestedBalanceExists, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Someone claimed some native tokens."] - Claimed { - recipient: ::subxt::ext::subxt_core::utils::AccountId32, - source: runtime_types::pallet_airdrop_claims::utils::MultiAddress, - amount: ::core::primitive::u128, + #[codec(index = 19)] + #[doc = "Event emitted when an incentive APY and cap are set for an asset"] + IncentiveAPYAndCapSet { + asset_id: ::core::primitive::u128, + apy: ::core::primitive::u128, + cap: ::core::primitive::u128, }, + #[codec(index = 20)] + #[doc = "Event emitted when a blueprint is whitelisted for rewards"] + BlueprintWhitelisted { blueprint_id: ::core::primitive::u32 }, } } - pub mod utils { + pub mod types { use super::runtime_types; - pub mod ethereum_address { + pub mod delegator { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -45100,7 +43983,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct EcdsaSignature(pub [::core::primitive::u8; 65usize]); + pub struct BondInfoDelegator<_0, _1, _2> { + pub operator: _0, + pub amount: _1, + pub asset_id: _2, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -45118,27 +44005,299 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct EthereumAddress(pub [::core::primitive::u8; 20usize]); - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + pub struct BondLessRequest<_0, _1> { + pub asset_id: _0, + pub amount: _1, + pub requested_round: ::core::primitive::u32, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct DelegatorMetadata < _0 , _1 , _2 > { pub deposits : :: subxt :: ext :: subxt_core :: utils :: KeyedVec < _1 , _1 > , pub unstake_request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: UnstakeRequest < _1 , _1 > > , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: BondInfoDelegator < _0 , _1 , _1 > > , pub delegator_bond_less_request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: BondLessRequest < _1 , _1 > > , pub status : runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: DelegatorStatus , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum DelegatorStatus { + #[codec(index = 0)] + Active, + #[codec(index = 1)] + LeavingScheduled(::core::primitive::u32), + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct UnstakeRequest<_0, _1> { + pub asset_id: _0, + pub amount: _1, + pub requested_round: ::core::primitive::u32, + } + } + pub mod operator { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct DelegatorBond<_0, _1, _2> { + pub delegator: _0, + pub amount: _1, + pub asset_id: _2, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct OperatorBondLessRequest<_0> { + pub amount: _0, + pub request_time: ::core::primitive::u32, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct OperatorMetadata < _0 , _1 , _2 > { pub bond : _1 , pub delegation_count : :: core :: primitive :: u32 , pub request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorBondLessRequest < _1 > > , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: DelegatorBond < _0 , _1 , _1 > > , pub status : runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorStatus , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct OperatorSnapshot < _0 , _1 , _2 > { pub bond : _1 , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: DelegatorBond < _0 , _1 , _1 > > , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum OperatorStatus { + #[codec(index = 0)] + Active, + #[codec(index = 1)] + Inactive, + #[codec(index = 2)] + Leaving(::core::primitive::u32), + } + } + pub mod rewards { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct RewardConfig < _0 , _1 > { pub configs : :: subxt :: ext :: subxt_core :: utils :: KeyedVec < _0 , runtime_types :: pallet_multi_asset_delegation :: types :: rewards :: RewardConfigForAsset < _0 > > , pub whitelisted_blueprint_ids : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < :: core :: primitive :: u32 > , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _1 > } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct RewardConfigForAsset<_0> { + pub apy: ::core::primitive::u128, + pub cap: _0, + } + } + } + } + pub mod pallet_multisig { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" )] #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum MultiAddress { - # [codec (index = 0)] EVM (runtime_types :: pallet_airdrop_claims :: utils :: ethereum_address :: EthereumAddress ,) , # [codec (index = 1)] Native (:: subxt :: ext :: subxt_core :: utils :: AccountId32 ,) , } + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::as_multi_threshold_1`]."] + as_multi_threshold_1 { + other_signatories: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::as_multi`]."] + as_multi { + threshold: ::core::primitive::u16, + other_signatories: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + maybe_timepoint: ::core::option::Option< + runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, + >, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + max_weight: runtime_types::sp_weights::weight_v2::Weight, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::approve_as_multi`]."] + approve_as_multi { + threshold: ::core::primitive::u16, + other_signatories: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + maybe_timepoint: ::core::option::Option< + runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, + >, + call_hash: [::core::primitive::u8; 32usize], + max_weight: runtime_types::sp_weights::weight_v2::Weight, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::cancel_as_multi`]."] + cancel_as_multi { + threshold: ::core::primitive::u16, + other_signatories: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + timepoint: + runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, + call_hash: [::core::primitive::u8; 32usize], + }, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -45156,8 +44315,51 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum MultiAddressSignature { - # [codec (index = 0)] EVM (runtime_types :: pallet_airdrop_claims :: utils :: ethereum_address :: EcdsaSignature ,) , # [codec (index = 1)] Native (runtime_types :: pallet_airdrop_claims :: utils :: Sr25519Signature ,) , } + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Threshold must be 2 or greater."] + MinimumThreshold, + #[codec(index = 1)] + #[doc = "Call is already approved by this signatory."] + AlreadyApproved, + #[codec(index = 2)] + #[doc = "Call doesn't need any (more) approvals."] + NoApprovalsNeeded, + #[codec(index = 3)] + #[doc = "There are too few signatories in the list."] + TooFewSignatories, + #[codec(index = 4)] + #[doc = "There are too many signatories in the list."] + TooManySignatories, + #[codec(index = 5)] + #[doc = "The signatories were provided out of order; they should be ordered."] + SignatoriesOutOfOrder, + #[codec(index = 6)] + #[doc = "The sender was contained in the other signatories; it shouldn't be."] + SenderInSignatories, + #[codec(index = 7)] + #[doc = "Multisig operation not found when attempting to cancel."] + NotFound, + #[codec(index = 8)] + #[doc = "Only the account that originally created the multisig is able to cancel it."] + NotOwner, + #[codec(index = 9)] + #[doc = "No timepoint was given, yet the multisig operation is already underway."] + NoTimepoint, + #[codec(index = 10)] + #[doc = "A different timepoint was given to the multisig operation that is underway."] + WrongTimepoint, + #[codec(index = 11)] + #[doc = "A timepoint was given, yet no multisig operation is underway."] + UnexpectedTimepoint, + #[codec(index = 12)] + #[doc = "The maximum weight information provided was too low."] + MaxWeightTooLow, + #[codec(index = 13)] + #[doc = "The data to be stored is already stored."] + AlreadyStored, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -45175,7 +44377,45 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Sr25519Signature(pub runtime_types::sp_core::sr25519::Signature); + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A new multisig operation has begun."] + NewMultisig { + approving: ::subxt::ext::subxt_core::utils::AccountId32, + multisig: ::subxt::ext::subxt_core::utils::AccountId32, + call_hash: [::core::primitive::u8; 32usize], + }, + #[codec(index = 1)] + #[doc = "A multisig operation has been approved by someone."] + MultisigApproval { + approving: ::subxt::ext::subxt_core::utils::AccountId32, + timepoint: + runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, + multisig: ::subxt::ext::subxt_core::utils::AccountId32, + call_hash: [::core::primitive::u8; 32usize], + }, + #[codec(index = 2)] + #[doc = "A multisig operation has been executed."] + MultisigExecuted { + approving: ::subxt::ext::subxt_core::utils::AccountId32, + timepoint: + runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, + multisig: ::subxt::ext::subxt_core::utils::AccountId32, + call_hash: [::core::primitive::u8; 32usize], + result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, + }, + #[codec(index = 3)] + #[doc = "A multisig operation has been cancelled."] + MultisigCancelled { + cancelling: ::subxt::ext::subxt_core::utils::AccountId32, + timepoint: + runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, + multisig: ::subxt::ext::subxt_core::utils::AccountId32, + call_hash: [::core::primitive::u8; 32usize], + }, + } } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -45190,14 +44430,31 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum StatementKind { - #[codec(index = 0)] - Regular, - #[codec(index = 1)] - Safe, + pub struct Multisig<_0, _1, _2> { + pub when: runtime_types::pallet_multisig::Timepoint<_0>, + pub deposit: _1, + pub depositor: _2, + pub approvals: runtime_types::bounded_collections::bounded_vec::BoundedVec<_2>, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Timepoint<_0> { + pub height: _0, + pub index: ::core::primitive::u32, } } - pub mod pallet_assets { + pub mod pallet_nomination_pools { use super::runtime_types; pub mod pallet { use super::runtime_types; @@ -45221,334 +44478,199 @@ pub mod api { #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] pub enum Call { #[codec(index = 0)] - #[doc = "See [`Pallet::create`]."] - create { + #[doc = "See [`Pallet::join`]."] + join { #[codec(compact)] - id: ::core::primitive::u128, - admin: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - min_balance: ::core::primitive::u128, + amount: ::core::primitive::u128, + pool_id: ::core::primitive::u32, }, #[codec(index = 1)] - #[doc = "See [`Pallet::force_create`]."] - force_create { - #[codec(compact)] - id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, + #[doc = "See [`Pallet::bond_extra`]."] + bond_extra { + extra: runtime_types::pallet_nomination_pools::BondExtra< + ::core::primitive::u128, >, - is_sufficient: ::core::primitive::bool, - #[codec(compact)] - min_balance: ::core::primitive::u128, }, #[codec(index = 2)] - #[doc = "See [`Pallet::start_destroy`]."] - start_destroy { - #[codec(compact)] - id: ::core::primitive::u128, - }, + #[doc = "See [`Pallet::claim_payout`]."] + claim_payout, #[codec(index = 3)] - #[doc = "See [`Pallet::destroy_accounts`]."] - destroy_accounts { + #[doc = "See [`Pallet::unbond`]."] + unbond { + member_account: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, #[codec(compact)] - id: ::core::primitive::u128, + unbonding_points: ::core::primitive::u128, }, #[codec(index = 4)] - #[doc = "See [`Pallet::destroy_approvals`]."] - destroy_approvals { - #[codec(compact)] - id: ::core::primitive::u128, + #[doc = "See [`Pallet::pool_withdraw_unbonded`]."] + pool_withdraw_unbonded { + pool_id: ::core::primitive::u32, + num_slashing_spans: ::core::primitive::u32, }, #[codec(index = 5)] - #[doc = "See [`Pallet::finish_destroy`]."] - finish_destroy { - #[codec(compact)] - id: ::core::primitive::u128, + #[doc = "See [`Pallet::withdraw_unbonded`]."] + withdraw_unbonded { + member_account: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + num_slashing_spans: ::core::primitive::u32, }, #[codec(index = 6)] - #[doc = "See [`Pallet::mint`]."] - mint { + #[doc = "See [`Pallet::create`]."] + create { #[codec(compact)] - id: ::core::primitive::u128, - beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< + amount: ::core::primitive::u128, + root: ::subxt::ext::subxt_core::utils::MultiAddress< ::subxt::ext::subxt_core::utils::AccountId32, ::core::primitive::u32, >, - #[codec(compact)] - amount: ::core::primitive::u128, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::burn`]."] - burn { - #[codec(compact)] - id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::MultiAddress< + nominator: ::subxt::ext::subxt_core::utils::MultiAddress< ::subxt::ext::subxt_core::utils::AccountId32, ::core::primitive::u32, >, - #[codec(compact)] - amount: ::core::primitive::u128, - }, - #[codec(index = 8)] - #[doc = "See [`Pallet::transfer`]."] - transfer { - #[codec(compact)] - id: ::core::primitive::u128, - target: ::subxt::ext::subxt_core::utils::MultiAddress< + bouncer: ::subxt::ext::subxt_core::utils::MultiAddress< ::subxt::ext::subxt_core::utils::AccountId32, ::core::primitive::u32, >, - #[codec(compact)] - amount: ::core::primitive::u128, }, - #[codec(index = 9)] - #[doc = "See [`Pallet::transfer_keep_alive`]."] - transfer_keep_alive { + #[codec(index = 7)] + #[doc = "See [`Pallet::create_with_pool_id`]."] + create_with_pool_id { #[codec(compact)] - id: ::core::primitive::u128, - target: ::subxt::ext::subxt_core::utils::MultiAddress< + amount: ::core::primitive::u128, + root: ::subxt::ext::subxt_core::utils::MultiAddress< ::subxt::ext::subxt_core::utils::AccountId32, ::core::primitive::u32, >, - #[codec(compact)] - amount: ::core::primitive::u128, - }, - #[codec(index = 10)] - #[doc = "See [`Pallet::force_transfer`]."] - force_transfer { - #[codec(compact)] - id: ::core::primitive::u128, - source: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - dest: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - #[codec(compact)] - amount: ::core::primitive::u128, - }, - #[codec(index = 11)] - #[doc = "See [`Pallet::freeze`]."] - freeze { - #[codec(compact)] - id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::MultiAddress< + nominator: ::subxt::ext::subxt_core::utils::MultiAddress< ::subxt::ext::subxt_core::utils::AccountId32, ::core::primitive::u32, >, - }, - #[codec(index = 12)] - #[doc = "See [`Pallet::thaw`]."] - thaw { - #[codec(compact)] - id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::MultiAddress< + bouncer: ::subxt::ext::subxt_core::utils::MultiAddress< ::subxt::ext::subxt_core::utils::AccountId32, ::core::primitive::u32, >, + pool_id: ::core::primitive::u32, }, - #[codec(index = 13)] - #[doc = "See [`Pallet::freeze_asset`]."] - freeze_asset { - #[codec(compact)] - id: ::core::primitive::u128, - }, - #[codec(index = 14)] - #[doc = "See [`Pallet::thaw_asset`]."] - thaw_asset { - #[codec(compact)] - id: ::core::primitive::u128, - }, - #[codec(index = 15)] - #[doc = "See [`Pallet::transfer_ownership`]."] - transfer_ownership { - #[codec(compact)] - id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::MultiAddress< + #[codec(index = 8)] + #[doc = "See [`Pallet::nominate`]."] + nominate { + pool_id: ::core::primitive::u32, + validators: ::subxt::ext::subxt_core::alloc::vec::Vec< ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, >, }, - #[codec(index = 16)] - #[doc = "See [`Pallet::set_team`]."] - set_team { - #[codec(compact)] - id: ::core::primitive::u128, - issuer: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - admin: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - freezer: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, + #[codec(index = 9)] + #[doc = "See [`Pallet::set_state`]."] + set_state { + pool_id: ::core::primitive::u32, + state: runtime_types::pallet_nomination_pools::PoolState, }, - #[codec(index = 17)] + #[codec(index = 10)] #[doc = "See [`Pallet::set_metadata`]."] set_metadata { - #[codec(compact)] - id: ::core::primitive::u128, - name: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - symbol: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - decimals: ::core::primitive::u8, - }, - #[codec(index = 18)] - #[doc = "See [`Pallet::clear_metadata`]."] - clear_metadata { - #[codec(compact)] - id: ::core::primitive::u128, - }, - #[codec(index = 19)] - #[doc = "See [`Pallet::force_set_metadata`]."] - force_set_metadata { - #[codec(compact)] - id: ::core::primitive::u128, - name: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - symbol: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - decimals: ::core::primitive::u8, - is_frozen: ::core::primitive::bool, - }, - #[codec(index = 20)] - #[doc = "See [`Pallet::force_clear_metadata`]."] - force_clear_metadata { - #[codec(compact)] - id: ::core::primitive::u128, + pool_id: ::core::primitive::u32, + metadata: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, }, - #[codec(index = 21)] - #[doc = "See [`Pallet::force_asset_status`]."] - force_asset_status { - #[codec(compact)] - id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, + #[codec(index = 11)] + #[doc = "See [`Pallet::set_configs`]."] + set_configs { + min_join_bond: runtime_types::pallet_nomination_pools::ConfigOp< + ::core::primitive::u128, >, - issuer: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, + min_create_bond: runtime_types::pallet_nomination_pools::ConfigOp< + ::core::primitive::u128, >, - admin: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + max_pools: runtime_types::pallet_nomination_pools::ConfigOp< ::core::primitive::u32, >, - freezer: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + max_members: runtime_types::pallet_nomination_pools::ConfigOp< ::core::primitive::u32, >, - #[codec(compact)] - min_balance: ::core::primitive::u128, - is_sufficient: ::core::primitive::bool, - is_frozen: ::core::primitive::bool, - }, - #[codec(index = 22)] - #[doc = "See [`Pallet::approve_transfer`]."] - approve_transfer { - #[codec(compact)] - id: ::core::primitive::u128, - delegate: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + max_members_per_pool: runtime_types::pallet_nomination_pools::ConfigOp< ::core::primitive::u32, >, - #[codec(compact)] - amount: ::core::primitive::u128, + global_max_commission: runtime_types::pallet_nomination_pools::ConfigOp< + runtime_types::sp_arithmetic::per_things::Perbill, + >, }, - #[codec(index = 23)] - #[doc = "See [`Pallet::cancel_approval`]."] - cancel_approval { - #[codec(compact)] - id: ::core::primitive::u128, - delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + #[codec(index = 12)] + #[doc = "See [`Pallet::update_roles`]."] + update_roles { + pool_id: ::core::primitive::u32, + new_root: runtime_types::pallet_nomination_pools::ConfigOp< ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, >, - }, - #[codec(index = 24)] - #[doc = "See [`Pallet::force_cancel_approval`]."] - force_cancel_approval { - #[codec(compact)] - id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::MultiAddress< + new_nominator: runtime_types::pallet_nomination_pools::ConfigOp< ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, >, - delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + new_bouncer: runtime_types::pallet_nomination_pools::ConfigOp< ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, >, }, - #[codec(index = 25)] - #[doc = "See [`Pallet::transfer_approved`]."] - transfer_approved { - #[codec(compact)] - id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::MultiAddress< + #[codec(index = 13)] + #[doc = "See [`Pallet::chill`]."] + chill { pool_id: ::core::primitive::u32 }, + #[codec(index = 14)] + #[doc = "See [`Pallet::bond_extra_other`]."] + bond_extra_other { + member: ::subxt::ext::subxt_core::utils::MultiAddress< ::subxt::ext::subxt_core::utils::AccountId32, ::core::primitive::u32, >, - destination: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, + extra: runtime_types::pallet_nomination_pools::BondExtra< + ::core::primitive::u128, >, - #[codec(compact)] - amount: ::core::primitive::u128, - }, - #[codec(index = 26)] - #[doc = "See [`Pallet::touch`]."] - touch { - #[codec(compact)] - id: ::core::primitive::u128, - }, - #[codec(index = 27)] - #[doc = "See [`Pallet::refund`]."] - refund { - #[codec(compact)] - id: ::core::primitive::u128, - allow_burn: ::core::primitive::bool, }, - #[codec(index = 28)] - #[doc = "See [`Pallet::set_min_balance`]."] - set_min_balance { - #[codec(compact)] - id: ::core::primitive::u128, - min_balance: ::core::primitive::u128, + #[codec(index = 15)] + #[doc = "See [`Pallet::set_claim_permission`]."] + set_claim_permission { + permission: runtime_types::pallet_nomination_pools::ClaimPermission, }, - #[codec(index = 29)] - #[doc = "See [`Pallet::touch_other`]."] - touch_other { - #[codec(compact)] - id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::MultiAddress< + #[codec(index = 16)] + #[doc = "See [`Pallet::claim_payout_other`]."] + claim_payout_other { other: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 17)] + #[doc = "See [`Pallet::set_commission`]."] + set_commission { + pool_id: ::core::primitive::u32, + new_commission: ::core::option::Option<( + runtime_types::sp_arithmetic::per_things::Perbill, ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, + )>, }, - #[codec(index = 30)] - #[doc = "See [`Pallet::refund_other`]."] - refund_other { - #[codec(compact)] - id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, + #[codec(index = 18)] + #[doc = "See [`Pallet::set_commission_max`]."] + set_commission_max { + pool_id: ::core::primitive::u32, + max_commission: runtime_types::sp_arithmetic::per_things::Perbill, + }, + #[codec(index = 19)] + #[doc = "See [`Pallet::set_commission_change_rate`]."] + set_commission_change_rate { + pool_id: ::core::primitive::u32, + change_rate: runtime_types::pallet_nomination_pools::CommissionChangeRate< + ::core::primitive::u64, >, }, - #[codec(index = 31)] - #[doc = "See [`Pallet::block`]."] - block { - #[codec(compact)] - id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, + #[codec(index = 20)] + #[doc = "See [`Pallet::claim_commission`]."] + claim_commission { pool_id: ::core::primitive::u32 }, + #[codec(index = 21)] + #[doc = "See [`Pallet::adjust_pool_deposit`]."] + adjust_pool_deposit { pool_id: ::core::primitive::u32 }, + #[codec(index = 22)] + #[doc = "See [`Pallet::set_commission_claim_permission`]."] + set_commission_claim_permission { + pool_id: ::core::primitive::u32, + permission: ::core::option::Option< + runtime_types::pallet_nomination_pools::CommissionClaimPermission< + ::subxt::ext::subxt_core::utils::AccountId32, + >, >, }, } @@ -45569,71 +44691,141 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] + pub enum DefensiveError { + #[codec(index = 0)] + NotEnoughSpaceInUnbondPool, + #[codec(index = 1)] + PoolNotFound, + #[codec(index = 2)] + RewardPoolNotFound, + #[codec(index = 3)] + SubPoolsNotFound, + #[codec(index = 4)] + BondedStashKilledPrematurely, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] #[doc = "The `Error` enum of this pallet."] pub enum Error { #[codec(index = 0)] - #[doc = "Account balance must be greater than or equal to the transfer amount."] - BalanceLow, + #[doc = "A (bonded) pool id does not exist."] + PoolNotFound, #[codec(index = 1)] - #[doc = "The account to alter does not exist."] - NoAccount, + #[doc = "An account is not a member."] + PoolMemberNotFound, #[codec(index = 2)] - #[doc = "The signing account has no permission to do the operation."] - NoPermission, + #[doc = "A reward pool does not exist. In all cases this is a system logic error."] + RewardPoolNotFound, #[codec(index = 3)] - #[doc = "The given asset ID is unknown."] - Unknown, + #[doc = "A sub pool does not exist."] + SubPoolsNotFound, #[codec(index = 4)] - #[doc = "The origin account is frozen."] - Frozen, + #[doc = "An account is already delegating in another pool. An account may only belong to one"] + #[doc = "pool at a time."] + AccountBelongsToOtherPool, #[codec(index = 5)] - #[doc = "The asset ID is already taken."] - InUse, + #[doc = "The member is fully unbonded (and thus cannot access the bonded and reward pool"] + #[doc = "anymore to, for example, collect rewards)."] + FullyUnbonding, #[codec(index = 6)] - #[doc = "Invalid witness data given."] - BadWitness, + #[doc = "The member cannot unbond further chunks due to reaching the limit."] + MaxUnbondingLimit, #[codec(index = 7)] - #[doc = "Minimum balance should be non-zero."] - MinBalanceZero, + #[doc = "None of the funds can be withdrawn yet because the bonding duration has not passed."] + CannotWithdrawAny, #[codec(index = 8)] - #[doc = "Unable to increment the consumer reference counters on the account. Either no provider"] - #[doc = "reference exists to allow a non-zero balance of a non-self-sufficient asset, or one"] - #[doc = "fewer then the maximum number of consumers has been reached."] - UnavailableConsumer, + #[doc = "The amount does not meet the minimum bond to either join or create a pool."] + #[doc = ""] + #[doc = "The depositor can never unbond to a value less than `Pallet::depositor_min_bond`. The"] + #[doc = "caller does not have nominating permissions for the pool. Members can never unbond to a"] + #[doc = "value below `MinJoinBond`."] + MinimumBondNotMet, #[codec(index = 9)] - #[doc = "Invalid metadata given."] - BadMetadata, + #[doc = "The transaction could not be executed due to overflow risk for the pool."] + OverflowRisk, #[codec(index = 10)] - #[doc = "No approval exists that would allow the transfer."] - Unapproved, + #[doc = "A pool must be in [`PoolState::Destroying`] in order for the depositor to unbond or for"] + #[doc = "other members to be permissionlessly unbonded."] + NotDestroying, #[codec(index = 11)] - #[doc = "The source account would not survive the transfer and it needs to stay alive."] - WouldDie, + #[doc = "The caller does not have nominating permissions for the pool."] + NotNominator, #[codec(index = 12)] - #[doc = "The asset-account already exists."] - AlreadyExists, + #[doc = "Either a) the caller cannot make a valid kick or b) the pool is not destroying."] + NotKickerOrDestroying, #[codec(index = 13)] - #[doc = "The asset-account doesn't have an associated deposit."] - NoDeposit, + #[doc = "The pool is not open to join"] + NotOpen, #[codec(index = 14)] - #[doc = "The operation would result in funds being burned."] - WouldBurn, + #[doc = "The system is maxed out on pools."] + MaxPools, #[codec(index = 15)] - #[doc = "The asset is a live asset and is actively being used. Usually emit for operations such"] - #[doc = "as `start_destroy` which require the asset to be in a destroying state."] - LiveAsset, + #[doc = "Too many members in the pool or system."] + MaxPoolMembers, #[codec(index = 16)] - #[doc = "The asset is not live, and likely being destroyed."] - AssetNotLive, + #[doc = "The pools state cannot be changed."] + CanNotChangeState, #[codec(index = 17)] - #[doc = "The asset status is not the expected status."] - IncorrectStatus, + #[doc = "The caller does not have adequate permissions."] + DoesNotHavePermission, #[codec(index = 18)] - #[doc = "The asset should be frozen before the given operation."] - NotFrozen, + #[doc = "Metadata exceeds [`Config::MaxMetadataLen`]"] + MetadataExceedsMaxLen, #[codec(index = 19)] - #[doc = "Callback action resulted in error"] - CallbackFailed, + #[doc = "Some error occurred that should never happen. This should be reported to the"] + #[doc = "maintainers."] + Defensive(runtime_types::pallet_nomination_pools::pallet::DefensiveError), + #[codec(index = 20)] + #[doc = "Partial unbonding now allowed permissionlessly."] + PartialUnbondNotAllowedPermissionlessly, + #[codec(index = 21)] + #[doc = "The pool's max commission cannot be set higher than the existing value."] + MaxCommissionRestricted, + #[codec(index = 22)] + #[doc = "The supplied commission exceeds the max allowed commission."] + CommissionExceedsMaximum, + #[codec(index = 23)] + #[doc = "The supplied commission exceeds global maximum commission."] + CommissionExceedsGlobalMaximum, + #[codec(index = 24)] + #[doc = "Not enough blocks have surpassed since the last commission update."] + CommissionChangeThrottled, + #[codec(index = 25)] + #[doc = "The submitted changes to commission change rate are not allowed."] + CommissionChangeRateNotAllowed, + #[codec(index = 26)] + #[doc = "There is no pending commission to claim."] + NoPendingCommission, + #[codec(index = 27)] + #[doc = "No commission current has been set."] + NoCommissionCurrentSet, + #[codec(index = 28)] + #[doc = "Pool id currently in use."] + PoolIdInUse, + #[codec(index = 29)] + #[doc = "Pool id provided is not correct/usable."] + InvalidPoolId, + #[codec(index = 30)] + #[doc = "Bonding extra is restricted to the exact pending reward amount."] + BondExtraRestricted, + #[codec(index = 31)] + #[doc = "No imbalance in the ED deposit for the pool."] + NothingToAdjust, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -45652,158 +44844,153 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "The `Event` enum of this pallet"] + #[doc = "Events of this pallet."] pub enum Event { #[codec(index = 0)] - #[doc = "Some asset class was created."] + #[doc = "A pool has been created."] Created { - asset_id: ::core::primitive::u128, - creator: ::subxt::ext::subxt_core::utils::AccountId32, - owner: ::subxt::ext::subxt_core::utils::AccountId32, + depositor: ::subxt::ext::subxt_core::utils::AccountId32, + pool_id: ::core::primitive::u32, }, #[codec(index = 1)] - #[doc = "Some assets were issued."] - Issued { - asset_id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, + #[doc = "A member has became bonded in a pool."] + Bonded { + member: ::subxt::ext::subxt_core::utils::AccountId32, + pool_id: ::core::primitive::u32, + bonded: ::core::primitive::u128, + joined: ::core::primitive::bool, }, #[codec(index = 2)] - #[doc = "Some assets were transferred."] - Transferred { - asset_id: ::core::primitive::u128, - from: ::subxt::ext::subxt_core::utils::AccountId32, - to: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, + #[doc = "A payout has been made to a member."] + PaidOut { + member: ::subxt::ext::subxt_core::utils::AccountId32, + pool_id: ::core::primitive::u32, + payout: ::core::primitive::u128, }, #[codec(index = 3)] - #[doc = "Some assets were destroyed."] - Burned { - asset_id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "A member has unbonded from their pool."] + #[doc = ""] + #[doc = "- `balance` is the corresponding balance of the number of points that has been"] + #[doc = " requested to be unbonded (the argument of the `unbond` transaction) from the bonded"] + #[doc = " pool."] + #[doc = "- `points` is the number of points that are issued as a result of `balance` being"] + #[doc = "dissolved into the corresponding unbonding pool."] + #[doc = "- `era` is the era in which the balance will be unbonded."] + #[doc = "In the absence of slashing, these values will match. In the presence of slashing, the"] + #[doc = "number of points that are issued in the unbonding pool will be less than the amount"] + #[doc = "requested to be unbonded."] + Unbonded { + member: ::subxt::ext::subxt_core::utils::AccountId32, + pool_id: ::core::primitive::u32, balance: ::core::primitive::u128, + points: ::core::primitive::u128, + era: ::core::primitive::u32, }, #[codec(index = 4)] - #[doc = "The management team changed."] - TeamChanged { - asset_id: ::core::primitive::u128, - issuer: ::subxt::ext::subxt_core::utils::AccountId32, - admin: ::subxt::ext::subxt_core::utils::AccountId32, - freezer: ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "A member has withdrawn from their pool."] + #[doc = ""] + #[doc = "The given number of `points` have been dissolved in return of `balance`."] + #[doc = ""] + #[doc = "Similar to `Unbonded` event, in the absence of slashing, the ratio of point to balance"] + #[doc = "will be 1."] + Withdrawn { + member: ::subxt::ext::subxt_core::utils::AccountId32, + pool_id: ::core::primitive::u32, + balance: ::core::primitive::u128, + points: ::core::primitive::u128, }, #[codec(index = 5)] - #[doc = "The owner changed."] - OwnerChanged { - asset_id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::AccountId32, - }, + #[doc = "A pool has been destroyed."] + Destroyed { pool_id: ::core::primitive::u32 }, #[codec(index = 6)] - #[doc = "Some account `who` was frozen."] - Frozen { - asset_id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::AccountId32, - }, + #[doc = "The state of a pool has changed"] + StateChanged { + pool_id: ::core::primitive::u32, + new_state: runtime_types::pallet_nomination_pools::PoolState, + }, #[codec(index = 7)] - #[doc = "Some account `who` was thawed."] - Thawed { - asset_id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "A member has been removed from a pool."] + #[doc = ""] + #[doc = "The removal can be voluntary (withdrawn all unbonded funds) or involuntary (kicked)."] + MemberRemoved { + pool_id: ::core::primitive::u32, + member: ::subxt::ext::subxt_core::utils::AccountId32, }, #[codec(index = 8)] - #[doc = "Some asset `asset_id` was frozen."] - AssetFrozen { asset_id: ::core::primitive::u128 }, + #[doc = "The roles of a pool have been updated to the given new roles. Note that the depositor"] + #[doc = "can never change."] + RolesUpdated { + root: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + bouncer: + ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + nominator: + ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + }, #[codec(index = 9)] - #[doc = "Some asset `asset_id` was thawed."] - AssetThawed { asset_id: ::core::primitive::u128 }, + #[doc = "The active balance of pool `pool_id` has been slashed to `balance`."] + PoolSlashed { + pool_id: ::core::primitive::u32, + balance: ::core::primitive::u128, + }, #[codec(index = 10)] - #[doc = "Accounts were destroyed for given asset."] - AccountsDestroyed { - asset_id: ::core::primitive::u128, - accounts_destroyed: ::core::primitive::u32, - accounts_remaining: ::core::primitive::u32, + #[doc = "The unbond pool at `era` of pool `pool_id` has been slashed to `balance`."] + UnbondingPoolSlashed { + pool_id: ::core::primitive::u32, + era: ::core::primitive::u32, + balance: ::core::primitive::u128, }, #[codec(index = 11)] - #[doc = "Approvals were destroyed for given asset."] - ApprovalsDestroyed { - asset_id: ::core::primitive::u128, - approvals_destroyed: ::core::primitive::u32, - approvals_remaining: ::core::primitive::u32, + #[doc = "A pool's commission setting has been changed."] + PoolCommissionUpdated { + pool_id: ::core::primitive::u32, + current: ::core::option::Option<( + runtime_types::sp_arithmetic::per_things::Perbill, + ::subxt::ext::subxt_core::utils::AccountId32, + )>, }, #[codec(index = 12)] - #[doc = "An asset class is in the process of being destroyed."] - DestructionStarted { asset_id: ::core::primitive::u128 }, + #[doc = "A pool's maximum commission setting has been changed."] + PoolMaxCommissionUpdated { + pool_id: ::core::primitive::u32, + max_commission: runtime_types::sp_arithmetic::per_things::Perbill, + }, #[codec(index = 13)] - #[doc = "An asset class was destroyed."] - Destroyed { asset_id: ::core::primitive::u128 }, + #[doc = "A pool's commission `change_rate` has been changed."] + PoolCommissionChangeRateUpdated { + pool_id: ::core::primitive::u32, + change_rate: runtime_types::pallet_nomination_pools::CommissionChangeRate< + ::core::primitive::u64, + >, + }, #[codec(index = 14)] - #[doc = "Some asset class was force-created."] - ForceCreated { - asset_id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "Pool commission claim permission has been updated."] + PoolCommissionClaimPermissionUpdated { + pool_id: ::core::primitive::u32, + permission: ::core::option::Option< + runtime_types::pallet_nomination_pools::CommissionClaimPermission< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, }, #[codec(index = 15)] - #[doc = "New metadata has been set for an asset."] - MetadataSet { - asset_id: ::core::primitive::u128, - name: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - symbol: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - decimals: ::core::primitive::u8, - is_frozen: ::core::primitive::bool, + #[doc = "Pool commission has been claimed."] + PoolCommissionClaimed { + pool_id: ::core::primitive::u32, + commission: ::core::primitive::u128, }, #[codec(index = 16)] - #[doc = "Metadata has been cleared for an asset."] - MetadataCleared { asset_id: ::core::primitive::u128 }, - #[codec(index = 17)] - #[doc = "(Additional) funds have been approved for transfer to a destination account."] - ApprovedTransfer { - asset_id: ::core::primitive::u128, - source: ::subxt::ext::subxt_core::utils::AccountId32, - delegate: ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "Topped up deficit in frozen ED of the reward pool."] + MinBalanceDeficitAdjusted { + pool_id: ::core::primitive::u32, amount: ::core::primitive::u128, }, - #[codec(index = 18)] - #[doc = "An approval for account `delegate` was cancelled by `owner`."] - ApprovalCancelled { - asset_id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::AccountId32, - delegate: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 19)] - #[doc = "An `amount` was transferred in its entirety from `owner` to `destination` by"] - #[doc = "the approved `delegate`."] - TransferredApproved { - asset_id: ::core::primitive::u128, - owner: ::subxt::ext::subxt_core::utils::AccountId32, - delegate: ::subxt::ext::subxt_core::utils::AccountId32, - destination: ::subxt::ext::subxt_core::utils::AccountId32, + #[codec(index = 17)] + #[doc = "Claimed excess frozen ED of af the reward pool."] + MinBalanceExcessAdjusted { + pool_id: ::core::primitive::u32, amount: ::core::primitive::u128, }, - #[codec(index = 20)] - #[doc = "An asset has had its attributes changed by the `Force` origin."] - AssetStatusChanged { asset_id: ::core::primitive::u128 }, - #[codec(index = 21)] - #[doc = "The min_balance of an asset has been updated by the asset owner."] - AssetMinBalanceChanged { - asset_id: ::core::primitive::u128, - new_min_balance: ::core::primitive::u128, - }, - #[codec(index = 22)] - #[doc = "Some account `who` was created with a deposit from `depositor`."] - Touched { - asset_id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::AccountId32, - depositor: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 23)] - #[doc = "Some account `who` was blocked."] - Blocked { - asset_id: ::core::primitive::u128, - who: ::subxt::ext::subxt_core::utils::AccountId32, - }, } - } - pub mod types { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -45821,14 +45008,291 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum AccountStatus { + pub enum FreezeReason { #[codec(index = 0)] - Liquid, - #[codec(index = 1)] - Frozen, - #[codec(index = 2)] - Blocked, + PoolMinBalance, } + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum BondExtra<_0> { + #[codec(index = 0)] + FreeBalance(_0), + #[codec(index = 1)] + Rewards, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct BondedPoolInner { + pub commission: runtime_types::pallet_nomination_pools::Commission, + pub member_counter: ::core::primitive::u32, + pub points: ::core::primitive::u128, + pub roles: runtime_types::pallet_nomination_pools::PoolRoles< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + pub state: runtime_types::pallet_nomination_pools::PoolState, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum ClaimPermission { + #[codec(index = 0)] + Permissioned, + #[codec(index = 1)] + PermissionlessCompound, + #[codec(index = 2)] + PermissionlessWithdraw, + #[codec(index = 3)] + PermissionlessAll, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Commission { + pub current: ::core::option::Option<( + runtime_types::sp_arithmetic::per_things::Perbill, + ::subxt::ext::subxt_core::utils::AccountId32, + )>, + pub max: ::core::option::Option, + pub change_rate: ::core::option::Option< + runtime_types::pallet_nomination_pools::CommissionChangeRate< + ::core::primitive::u64, + >, + >, + pub throttle_from: ::core::option::Option<::core::primitive::u64>, + pub claim_permission: ::core::option::Option< + runtime_types::pallet_nomination_pools::CommissionClaimPermission< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct CommissionChangeRate<_0> { + pub max_increase: runtime_types::sp_arithmetic::per_things::Perbill, + pub min_delay: _0, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum CommissionClaimPermission<_0> { + #[codec(index = 0)] + Permissionless, + #[codec(index = 1)] + Account(_0), + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum ConfigOp<_0> { + #[codec(index = 0)] + Noop, + #[codec(index = 1)] + Set(_0), + #[codec(index = 2)] + Remove, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct PoolMember { + pub pool_id: ::core::primitive::u32, + pub points: ::core::primitive::u128, + pub last_recorded_reward_counter: + runtime_types::sp_arithmetic::fixed_point::FixedU128, + pub unbonding_eras: + runtime_types::bounded_collections::bounded_btree_map::BoundedBTreeMap< + ::core::primitive::u32, + ::core::primitive::u128, + >, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct PoolRoles<_0> { + pub depositor: _0, + pub root: ::core::option::Option<_0>, + pub nominator: ::core::option::Option<_0>, + pub bouncer: ::core::option::Option<_0>, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum PoolState { + #[codec(index = 0)] + Open, + #[codec(index = 1)] + Blocked, + #[codec(index = 2)] + Destroying, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct RewardPool { + pub last_recorded_reward_counter: + runtime_types::sp_arithmetic::fixed_point::FixedU128, + pub last_recorded_total_payouts: ::core::primitive::u128, + pub total_rewards_claimed: ::core::primitive::u128, + pub total_commission_pending: ::core::primitive::u128, + pub total_commission_claimed: ::core::primitive::u128, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct SubPools { + pub no_era: runtime_types::pallet_nomination_pools::UnbondPool, + pub with_era: + runtime_types::bounded_collections::bounded_btree_map::BoundedBTreeMap< + ::core::primitive::u32, + runtime_types::pallet_nomination_pools::UnbondPool, + >, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct UnbondPool { + pub points: ::core::primitive::u128, + pub balance: ::core::primitive::u128, + } + } + pub mod pallet_offences { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -45846,10 +45310,23 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Approval<_0, _1> { - pub amount: _0, - pub deposit: _1, + #[doc = "Events type."] + pub enum Event { + #[codec(index = 0)] + #[doc = "There is an offence reported of the given `kind` happened at the `session_index` and"] + #[doc = "(kind-specific) time slot. This event is not deposited for duplicate slashes."] + #[doc = "\\[kind, timeslot\\]."] + Offence { + kind: [::core::primitive::u8; 16usize], + timeslot: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, } + } + } + pub mod pallet_preimage { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -45867,13 +45344,29 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct AssetAccount<_0, _1, _2, _3> { - pub balance: _0, - pub status: runtime_types::pallet_assets::types::AccountStatus, - pub reason: runtime_types::pallet_assets::types::ExistenceReason<_0, _3>, - pub extra: _2, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_1>, + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::note_preimage`]."] + note_preimage { + bytes: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::unnote_preimage`]."] + unnote_preimage { hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 2)] + #[doc = "See [`Pallet::request_preimage`]."] + request_preimage { hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 3)] + #[doc = "See [`Pallet::unrequest_preimage`]."] + unrequest_preimage { hash: ::subxt::ext::subxt_core::utils::H256 }, + #[codec(index = 4)] + #[doc = "See [`Pallet::ensure_updated`]."] + ensure_updated { + hashes: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H256, + >, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -45892,43 +45385,32 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct AssetDetails<_0, _1, _2> { - pub owner: _1, - pub issuer: _1, - pub admin: _1, - pub freezer: _1, - pub supply: _0, - pub deposit: _2, - pub min_balance: _0, - pub is_sufficient: ::core::primitive::bool, - pub accounts: ::core::primitive::u32, - pub sufficients: ::core::primitive::u32, - pub approvals: ::core::primitive::u32, - pub status: runtime_types::pallet_assets::types::AssetStatus, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct AssetMetadata<_0, _1> { - pub deposit: _0, - pub name: _1, - pub symbol: _1, - pub decimals: ::core::primitive::u8, - pub is_frozen: ::core::primitive::bool, + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Preimage is too large to store on-chain."] + TooBig, + #[codec(index = 1)] + #[doc = "Preimage has already been noted on-chain."] + AlreadyNoted, + #[codec(index = 2)] + #[doc = "The user is not authorized to perform this action."] + NotAuthorized, + #[codec(index = 3)] + #[doc = "The preimage cannot be removed since it has not yet been noted."] + NotNoted, + #[codec(index = 4)] + #[doc = "A preimage may not be removed when there are outstanding requests."] + Requested, + #[codec(index = 5)] + #[doc = "The preimage request cannot be removed since no outstanding requests exist."] + NotRequested, + #[codec(index = 6)] + #[doc = "More than `MAX_HASH_UPGRADE_BULK_COUNT` hashes were requested to be upgraded at once."] + TooMany, + #[codec(index = 7)] + #[doc = "Too few hashes were requested to be upgraded (i.e. zero)."] + TooFew, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -45947,13 +45429,17 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum AssetStatus { + #[doc = "The `Event` enum of this pallet"] + pub enum Event { #[codec(index = 0)] - Live, + #[doc = "A preimage has been noted."] + Noted { hash: ::subxt::ext::subxt_core::utils::H256 }, #[codec(index = 1)] - Frozen, + #[doc = "A preimage has been requested."] + Requested { hash: ::subxt::ext::subxt_core::utils::H256 }, #[codec(index = 2)] - Destroying, + #[doc = "A preimage has ben cleared."] + Cleared { hash: ::subxt::ext::subxt_core::utils::H256 }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -45972,21 +45458,59 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ExistenceReason<_0, _1> { + pub enum HoldReason { #[codec(index = 0)] - Consumer, - #[codec(index = 1)] - Sufficient, - #[codec(index = 2)] - DepositHeld(_0), - #[codec(index = 3)] - DepositRefunded, - #[codec(index = 4)] - DepositFrom(_1, _0), + Preimage, } } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum OldRequestStatus<_0, _1> { + #[codec(index = 0)] + Unrequested { deposit: (_0, _1), len: ::core::primitive::u32 }, + #[codec(index = 1)] + Requested { + deposit: ::core::option::Option<(_0, _1)>, + count: ::core::primitive::u32, + len: ::core::option::Option<::core::primitive::u32>, + }, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum RequestStatus<_0, _1> { + #[codec(index = 0)] + Unrequested { ticket: (_0, _1), len: ::core::primitive::u32 }, + #[codec(index = 1)] + Requested { + maybe_ticket: ::core::option::Option<(_0, _1)>, + count: ::core::primitive::u32, + maybe_len: ::core::option::Option<::core::primitive::u32>, + }, + } } - pub mod pallet_babe { + pub mod pallet_proxy { use super::runtime_types; pub mod pallet { use super::runtime_types; @@ -46010,35 +45534,107 @@ pub mod api { #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] pub enum Call { #[codec(index = 0)] - #[doc = "See [`Pallet::report_equivocation`]."] - report_equivocation { - equivocation_proof: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::sp_consensus_slots::EquivocationProof< - runtime_types::sp_runtime::generic::header::Header< - ::core::primitive::u64, - >, - runtime_types::sp_consensus_babe::app::Public, - >, + #[doc = "See [`Pallet::proxy`]."] + proxy { + real: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + force_proxy_type: ::core::option::Option< + runtime_types::tangle_testnet_runtime::ProxyType, + >, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, >, - key_owner_proof: runtime_types::sp_session::MembershipProof, }, #[codec(index = 1)] - #[doc = "See [`Pallet::report_equivocation_unsigned`]."] - report_equivocation_unsigned { - equivocation_proof: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::sp_consensus_slots::EquivocationProof< - runtime_types::sp_runtime::generic::header::Header< - ::core::primitive::u64, - >, - runtime_types::sp_consensus_babe::app::Public, - >, + #[doc = "See [`Pallet::add_proxy`]."] + add_proxy { + delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, >, - key_owner_proof: runtime_types::sp_session::MembershipProof, + proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, + delay: ::core::primitive::u64, }, #[codec(index = 2)] - #[doc = "See [`Pallet::plan_config_change`]."] - plan_config_change { - config: runtime_types::sp_consensus_babe::digests::NextConfigDescriptor, + #[doc = "See [`Pallet::remove_proxy`]."] + remove_proxy { + delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, + delay: ::core::primitive::u64, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::remove_proxies`]."] + remove_proxies, + #[codec(index = 4)] + #[doc = "See [`Pallet::create_pure`]."] + create_pure { + proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, + delay: ::core::primitive::u64, + index: ::core::primitive::u16, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::kill_pure`]."] + kill_pure { + spawner: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, + index: ::core::primitive::u16, + #[codec(compact)] + height: ::core::primitive::u64, + #[codec(compact)] + ext_index: ::core::primitive::u32, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::announce`]."] + announce { + real: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + call_hash: ::subxt::ext::subxt_core::utils::H256, + }, + #[codec(index = 7)] + #[doc = "See [`Pallet::remove_announcement`]."] + remove_announcement { + real: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + call_hash: ::subxt::ext::subxt_core::utils::H256, + }, + #[codec(index = 8)] + #[doc = "See [`Pallet::reject_announcement`]."] + reject_announcement { + delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + call_hash: ::subxt::ext::subxt_core::utils::H256, + }, + #[codec(index = 9)] + #[doc = "See [`Pallet::proxy_announced`]."] + proxy_announced { + delegate: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + real: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + force_proxy_type: ::core::option::Option< + runtime_types::tangle_testnet_runtime::ProxyType, + >, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, }, } #[derive( @@ -46061,44 +45657,29 @@ pub mod api { #[doc = "The `Error` enum of this pallet."] pub enum Error { #[codec(index = 0)] - #[doc = "An equivocation proof provided as part of an equivocation report is invalid."] - InvalidEquivocationProof, + #[doc = "There are too many proxies registered or too many announcements pending."] + TooMany, #[codec(index = 1)] - #[doc = "A key ownership proof provided as part of an equivocation report is invalid."] - InvalidKeyOwnershipProof, + #[doc = "Proxy registration not found."] + NotFound, #[codec(index = 2)] - #[doc = "A given equivocation report is valid but already previously reported."] - DuplicateOffenceReport, + #[doc = "Sender is not a proxy of the account to be proxied."] + NotProxy, #[codec(index = 3)] - #[doc = "Submitted configuration is invalid."] - InvalidConfiguration, - } - } - } - pub mod pallet_bags_list { - use super::runtime_types; - pub mod list { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Bag { - pub head: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - pub tail: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + #[doc = "A call which is incompatible with the proxy type's filter was attempted."] + Unproxyable, + #[codec(index = 4)] + #[doc = "Account is already a proxy."] + Duplicate, + #[codec(index = 5)] + #[doc = "Call may not be made by proxy because it may escalate its privileges."] + NoPermission, + #[codec(index = 6)] + #[doc = "Announcement, if made at all, was made too recently."] + Unannounced, + #[codec(index = 7)] + #[doc = "Cannot add self as proxy."] + NoSelfProxy, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -46117,41 +45698,87 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ListError { + #[doc = "The `Event` enum of this pallet"] + pub enum Event { #[codec(index = 0)] - Duplicate, + #[doc = "A proxy was executed correctly, with the given."] + ProxyExecuted { + result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, + }, #[codec(index = 1)] - NotHeavier, + #[doc = "A pure account has been created by new proxy with given"] + #[doc = "disambiguation index and proxy type."] + PureCreated { + pure: ::subxt::ext::subxt_core::utils::AccountId32, + who: ::subxt::ext::subxt_core::utils::AccountId32, + proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, + disambiguation_index: ::core::primitive::u16, + }, #[codec(index = 2)] - NotInSameBag, + #[doc = "An announcement was placed to make a call in the future."] + Announced { + real: ::subxt::ext::subxt_core::utils::AccountId32, + proxy: ::subxt::ext::subxt_core::utils::AccountId32, + call_hash: ::subxt::ext::subxt_core::utils::H256, + }, #[codec(index = 3)] - NodeNotFound, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Node { - pub id: ::subxt::ext::subxt_core::utils::AccountId32, - pub prev: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - pub next: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - pub bag_upper: ::core::primitive::u64, - pub score: ::core::primitive::u64, + #[doc = "A proxy was added."] + ProxyAdded { + delegator: ::subxt::ext::subxt_core::utils::AccountId32, + delegatee: ::subxt::ext::subxt_core::utils::AccountId32, + proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, + delay: ::core::primitive::u64, + }, + #[codec(index = 4)] + #[doc = "A proxy was removed."] + ProxyRemoved { + delegator: ::subxt::ext::subxt_core::utils::AccountId32, + delegatee: ::subxt::ext::subxt_core::utils::AccountId32, + proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, + delay: ::core::primitive::u64, + }, } } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Announcement<_0, _1, _2> { + pub real: _0, + pub call_hash: _1, + pub height: _2, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct ProxyDefinition<_0, _1, _2> { + pub delegate: _0, + pub proxy_type: _1, + pub delay: _2, + } + } + pub mod pallet_roles { + use super::runtime_types; pub mod pallet { use super::runtime_types; #[derive( @@ -46174,32 +45801,101 @@ pub mod api { #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] pub enum Call { #[codec(index = 0)] - #[doc = "See [`Pallet::rebag`]."] - rebag { - dislocated: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "See [`Pallet::proxy`]."] + proxy { + real: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, ::core::primitive::u32, >, + force_proxy_type: + ::core::option::Option, + call: ::std::boxed::Box, }, #[codec(index = 1)] - #[doc = "See [`Pallet::put_in_front_of`]."] - put_in_front_of { - lighter: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "See [`Pallet::add_proxy`]."] + add_proxy { + delegate: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, ::core::primitive::u32, >, + proxy_type: runtime_types::tangle_runtime::ProxyType, + delay: ::core::primitive::u64, }, #[codec(index = 2)] - #[doc = "See [`Pallet::put_in_front_of_other`]."] - put_in_front_of_other { - heavier: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "See [`Pallet::remove_proxy`]."] + remove_proxy { + delegate: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, ::core::primitive::u32, >, - lighter: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + proxy_type: runtime_types::tangle_runtime::ProxyType, + delay: ::core::primitive::u64, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::remove_proxies`]."] + remove_proxies, + #[codec(index = 4)] + #[doc = "See [`Pallet::create_pure`]."] + create_pure { + proxy_type: runtime_types::tangle_runtime::ProxyType, + delay: ::core::primitive::u64, + index: ::core::primitive::u16, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::kill_pure`]."] + kill_pure { + spawner: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >, + proxy_type: runtime_types::tangle_runtime::ProxyType, + index: ::core::primitive::u16, + #[codec(compact)] + height: ::core::primitive::u64, + #[codec(compact)] + ext_index: ::core::primitive::u32, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::announce`]."] + announce { + real: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >, + call_hash: ::subxt::utils::H256, + }, + #[codec(index = 7)] + #[doc = "See [`Pallet::remove_announcement`]."] + remove_announcement { + real: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >, + call_hash: ::subxt::utils::H256, + }, + #[codec(index = 8)] + #[doc = "See [`Pallet::reject_announcement`]."] + reject_announcement { + delegate: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >, + call_hash: ::subxt::utils::H256, + }, + #[codec(index = 9)] + #[doc = "See [`Pallet::proxy_announced`]."] + proxy_announced { + delegate: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, + ::core::primitive::u32, + >, + real: ::subxt::utils::MultiAddress< + ::subxt::utils::AccountId32, ::core::primitive::u32, >, + force_proxy_type: + ::core::option::Option, + call: ::std::boxed::Box, }, } #[derive( @@ -46222,8 +45918,29 @@ pub mod api { #[doc = "The `Error` enum of this pallet."] pub enum Error { #[codec(index = 0)] - #[doc = "A error in the list interface implementation."] - List(runtime_types::pallet_bags_list::list::ListError), + #[doc = "There are too many proxies registered or too many announcements pending."] + TooMany, + #[codec(index = 1)] + #[doc = "Proxy registration not found."] + NotFound, + #[codec(index = 2)] + #[doc = "Sender is not a proxy of the account to be proxied."] + NotProxy, + #[codec(index = 3)] + #[doc = "A call which is incompatible with the proxy type's filter was attempted."] + Unproxyable, + #[codec(index = 4)] + #[doc = "Account is already a proxy."] + Duplicate, + #[codec(index = 5)] + #[doc = "Call may not be made by proxy because it may escalate its privileges."] + NoPermission, + #[codec(index = 6)] + #[doc = "Announcement, if made at all, was made too recently."] + Unannounced, + #[codec(index = 7)] + #[doc = "Cannot add self as proxy."] + NoSelfProxy, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -46245,23 +45962,84 @@ pub mod api { #[doc = "The `Event` enum of this pallet"] pub enum Event { #[codec(index = 0)] - #[doc = "Moved an account from one bag to another."] - Rebagged { - who: ::subxt::ext::subxt_core::utils::AccountId32, - from: ::core::primitive::u64, - to: ::core::primitive::u64, + #[doc = "A proxy was executed correctly, with the given."] + ProxyExecuted { + result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, }, #[codec(index = 1)] - #[doc = "Updated the score of some account to the given amount."] - ScoreUpdated { - who: ::subxt::ext::subxt_core::utils::AccountId32, - new_score: ::core::primitive::u64, + #[doc = "A pure account has been created by new proxy with given"] + #[doc = "disambiguation index and proxy type."] + PureCreated { + pure: ::subxt::utils::AccountId32, + who: ::subxt::utils::AccountId32, + proxy_type: runtime_types::tangle_runtime::ProxyType, + disambiguation_index: ::core::primitive::u16, + }, + #[codec(index = 2)] + #[doc = "An announcement was placed to make a call in the future."] + Announced { + real: ::subxt::utils::AccountId32, + proxy: ::subxt::utils::AccountId32, + call_hash: ::subxt::utils::H256, + }, + #[codec(index = 3)] + #[doc = "A proxy was added."] + ProxyAdded { + delegator: ::subxt::utils::AccountId32, + delegatee: ::subxt::utils::AccountId32, + proxy_type: runtime_types::tangle_runtime::ProxyType, + delay: ::core::primitive::u64, + }, + #[codec(index = 4)] + #[doc = "A proxy was removed."] + ProxyRemoved { + delegator: ::subxt::utils::AccountId32, + delegatee: ::subxt::utils::AccountId32, + proxy_type: runtime_types::tangle_runtime::ProxyType, + delay: ::core::primitive::u64, }, } } - } - pub mod pallet_balances { - use super::runtime_types; + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + pub struct Announcement<_0, _1, _2> { + pub real: _0, + pub call_hash: _1, + pub height: _2, + } + #[derive( + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + pub struct ProxyDefinition<_0, _1, _2> { + pub delegate: _0, + pub proxy_type: _1, + pub delay: _2, + } + } + pub mod pallet_scheduler { + use super::runtime_types; pub mod pallet { use super::runtime_types; #[derive( @@ -46284,80 +46062,64 @@ pub mod api { #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] pub enum Call { #[codec(index = 0)] - #[doc = "See [`Pallet::transfer_allow_death`]."] - transfer_allow_death { - dest: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "See [`Pallet::schedule`]."] + schedule { + when: ::core::primitive::u64, + maybe_periodic: ::core::option::Option<( + ::core::primitive::u64, ::core::primitive::u32, + )>, + priority: ::core::primitive::u8, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, >, - #[codec(compact)] - value: ::core::primitive::u128, }, + #[codec(index = 1)] + #[doc = "See [`Pallet::cancel`]."] + cancel { when: ::core::primitive::u64, index: ::core::primitive::u32 }, #[codec(index = 2)] - #[doc = "See [`Pallet::force_transfer`]."] - force_transfer { - source: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - dest: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "See [`Pallet::schedule_named`]."] + schedule_named { + id: [::core::primitive::u8; 32usize], + when: ::core::primitive::u64, + maybe_periodic: ::core::option::Option<( + ::core::primitive::u64, ::core::primitive::u32, + )>, + priority: ::core::primitive::u8, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, >, - #[codec(compact)] - value: ::core::primitive::u128, }, #[codec(index = 3)] - #[doc = "See [`Pallet::transfer_keep_alive`]."] - transfer_keep_alive { - dest: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - #[codec(compact)] - value: ::core::primitive::u128, - }, + #[doc = "See [`Pallet::cancel_named`]."] + cancel_named { id: [::core::primitive::u8; 32usize] }, #[codec(index = 4)] - #[doc = "See [`Pallet::transfer_all`]."] - transfer_all { - dest: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "See [`Pallet::schedule_after`]."] + schedule_after { + after: ::core::primitive::u64, + maybe_periodic: ::core::option::Option<( + ::core::primitive::u64, ::core::primitive::u32, + )>, + priority: ::core::primitive::u8, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, >, - keep_alive: ::core::primitive::bool, }, #[codec(index = 5)] - #[doc = "See [`Pallet::force_unreserve`]."] - force_unreserve { - who: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - amount: ::core::primitive::u128, - }, - #[codec(index = 6)] - #[doc = "See [`Pallet::upgrade_accounts`]."] - upgrade_accounts { - who: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - }, - #[codec(index = 8)] - #[doc = "See [`Pallet::force_set_balance`]."] - force_set_balance { - who: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "See [`Pallet::schedule_named_after`]."] + schedule_named_after { + id: [::core::primitive::u8; 32usize], + after: ::core::primitive::u64, + maybe_periodic: ::core::option::Option<( + ::core::primitive::u64, ::core::primitive::u32, + )>, + priority: ::core::primitive::u8, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, >, - #[codec(compact)] - new_free: ::core::primitive::u128, - }, - #[codec(index = 9)] - #[doc = "See [`Pallet::force_adjust_total_issuance`]."] - force_adjust_total_issuance { - direction: runtime_types::pallet_balances::types::AdjustmentDirection, - #[codec(compact)] - delta: ::core::primitive::u128, }, } #[derive( @@ -46380,41 +46142,20 @@ pub mod api { #[doc = "The `Error` enum of this pallet."] pub enum Error { #[codec(index = 0)] - #[doc = "Vesting balance too high to send value."] - VestingBalance, + #[doc = "Failed to schedule a call"] + FailedToSchedule, #[codec(index = 1)] - #[doc = "Account liquidity restrictions prevent withdrawal."] - LiquidityRestrictions, + #[doc = "Cannot find the scheduled call."] + NotFound, #[codec(index = 2)] - #[doc = "Balance too low to send value."] - InsufficientBalance, + #[doc = "Given target block number is in the past."] + TargetBlockNumberInPast, #[codec(index = 3)] - #[doc = "Value too low to create account due to existential deposit."] - ExistentialDeposit, + #[doc = "Reschedule failed because it does not change scheduled time."] + RescheduleNoChange, #[codec(index = 4)] - #[doc = "Transfer/payment would kill account."] - Expendability, - #[codec(index = 5)] - #[doc = "A vesting schedule already exists for this account."] - ExistingVestingSchedule, - #[codec(index = 6)] - #[doc = "Beneficiary account must pre-exist."] - DeadAccount, - #[codec(index = 7)] - #[doc = "Number of named reserves exceed `MaxReserves`."] - TooManyReserves, - #[codec(index = 8)] - #[doc = "Number of holds exceed `VariantCountOf`."] - TooManyHolds, - #[codec(index = 9)] - #[doc = "Number of freezes exceed `MaxFreezes`."] - TooManyFreezes, - #[codec(index = 10)] - #[doc = "The issuance cannot be modified since it is already deactivated."] - IssuanceDeactivated, - #[codec(index = 11)] - #[doc = "The delta cannot be zero."] - DeltaZero, + #[doc = "Attempt to use a non-named function on a named task."] + Named, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -46433,298 +46174,66 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "The `Event` enum of this pallet"] + #[doc = "Events type."] pub enum Event { #[codec(index = 0)] - #[doc = "An account was created with some free balance."] - Endowed { - account: ::subxt::ext::subxt_core::utils::AccountId32, - free_balance: ::core::primitive::u128, - }, + #[doc = "Scheduled some task."] + Scheduled { when: ::core::primitive::u64, index: ::core::primitive::u32 }, #[codec(index = 1)] - #[doc = "An account was removed whose balance was non-zero but below ExistentialDeposit,"] - #[doc = "resulting in an outright loss."] - DustLost { - account: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, + #[doc = "Canceled some task."] + Canceled { when: ::core::primitive::u64, index: ::core::primitive::u32 }, #[codec(index = 2)] - #[doc = "Transfer succeeded."] - Transfer { - from: ::subxt::ext::subxt_core::utils::AccountId32, - to: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, + #[doc = "Dispatched some task."] + Dispatched { + task: (::core::primitive::u64, ::core::primitive::u32), + id: ::core::option::Option<[::core::primitive::u8; 32usize]>, + result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, }, #[codec(index = 3)] - #[doc = "A balance was set by root."] - BalanceSet { - who: ::subxt::ext::subxt_core::utils::AccountId32, - free: ::core::primitive::u128, + #[doc = "The call for the provided hash was not found so the task has been aborted."] + CallUnavailable { + task: (::core::primitive::u64, ::core::primitive::u32), + id: ::core::option::Option<[::core::primitive::u8; 32usize]>, }, #[codec(index = 4)] - #[doc = "Some balance was reserved (moved from free to reserved)."] - Reserved { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, + #[doc = "The given task was unable to be renewed since the agenda is full at that block."] + PeriodicFailed { + task: (::core::primitive::u64, ::core::primitive::u32), + id: ::core::option::Option<[::core::primitive::u8; 32usize]>, }, #[codec(index = 5)] - #[doc = "Some balance was unreserved (moved from reserved to free)."] - Unreserved { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 6)] - #[doc = "Some balance was moved from the reserve of the first account to the second account."] - #[doc = "Final argument indicates the destination balance type."] - ReserveRepatriated { - from: ::subxt::ext::subxt_core::utils::AccountId32, - to: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - destination_status: - runtime_types::frame_support::traits::tokens::misc::BalanceStatus, - }, - #[codec(index = 7)] - #[doc = "Some amount was deposited (e.g. for transaction fees)."] - Deposit { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 8)] - #[doc = "Some amount was withdrawn from the account (e.g. for transaction fees)."] - Withdraw { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 9)] - #[doc = "Some amount was removed from the account (e.g. for misbehavior)."] - Slashed { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 10)] - #[doc = "Some amount was minted into an account."] - Minted { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 11)] - #[doc = "Some amount was burned from an account."] - Burned { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 12)] - #[doc = "Some amount was suspended from an account (it can be restored later)."] - Suspended { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 13)] - #[doc = "Some amount was restored into an account."] - Restored { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 14)] - #[doc = "An account was upgraded."] - Upgraded { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 15)] - #[doc = "Total issuance was increased by `amount`, creating a credit to be balanced."] - Issued { amount: ::core::primitive::u128 }, - #[codec(index = 16)] - #[doc = "Total issuance was decreased by `amount`, creating a debt to be balanced."] - Rescinded { amount: ::core::primitive::u128 }, - #[codec(index = 17)] - #[doc = "Some balance was locked."] - Locked { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 18)] - #[doc = "Some balance was unlocked."] - Unlocked { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 19)] - #[doc = "Some balance was frozen."] - Frozen { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 20)] - #[doc = "Some balance was thawed."] - Thawed { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 21)] - #[doc = "The `TotalIssuance` was forcefully changed."] - TotalIssuanceForced { - old: ::core::primitive::u128, - new: ::core::primitive::u128, + #[doc = "The given task can never be executed since it is overweight."] + PermanentlyOverweight { + task: (::core::primitive::u64, ::core::primitive::u32), + id: ::core::option::Option<[::core::primitive::u8; 32usize]>, }, } } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct AccountData<_0> { - pub free: _0, - pub reserved: _0, - pub frozen: _0, - pub flags: runtime_types::pallet_balances::types::ExtraFlags, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum AdjustmentDirection { - #[codec(index = 0)] - Increase, - #[codec(index = 1)] - Decrease, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct BalanceLock<_0> { - pub id: [::core::primitive::u8; 8usize], - pub amount: _0, - pub reasons: runtime_types::pallet_balances::types::Reasons, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ExtraFlags(pub ::core::primitive::u128); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct IdAmount<_0, _1> { - pub id: _0, - pub amount: _1, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Reasons { - #[codec(index = 0)] - Fee, - #[codec(index = 1)] - Misc, - #[codec(index = 2)] - All, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ReserveData<_0, _1> { - pub id: _0, - pub amount: _1, - } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Scheduled<_0, _1, _2, _3, _4> { + pub maybe_id: ::core::option::Option<_0>, + pub priority: ::core::primitive::u8, + pub call: _1, + pub maybe_periodic: ::core::option::Option<(_2, ::core::primitive::u32)>, + pub origin: _3, + #[codec(skip)] + pub __ignore: ::core::marker::PhantomData<_4>, } } - pub mod pallet_base_fee { + pub mod pallet_session { use super::runtime_types; pub mod pallet { use super::runtime_types; @@ -46732,10076 +46241,97 @@ pub mod api { :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_base_fee_per_gas`]."] - set_base_fee_per_gas { fee: runtime_types::primitive_types::U256 }, - #[codec(index = 1)] - #[doc = "See [`Pallet::set_elasticity`]."] - set_elasticity { elasticity: runtime_types::sp_arithmetic::per_things::Permill }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - NewBaseFeePerGas { fee: runtime_types::primitive_types::U256 }, - #[codec(index = 1)] - BaseFeeOverflow, - #[codec(index = 2)] - NewElasticity { elasticity: runtime_types::sp_arithmetic::per_things::Permill }, - } - } - } - pub mod pallet_bounties { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::propose_bounty`]."] - propose_bounty { - #[codec(compact)] - value: ::core::primitive::u128, - description: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::approve_bounty`]."] - approve_bounty { - #[codec(compact)] - bounty_id: ::core::primitive::u32, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::propose_curator`]."] - propose_curator { - #[codec(compact)] - bounty_id: ::core::primitive::u32, - curator: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - #[codec(compact)] - fee: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::unassign_curator`]."] - unassign_curator { - #[codec(compact)] - bounty_id: ::core::primitive::u32, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::accept_curator`]."] - accept_curator { - #[codec(compact)] - bounty_id: ::core::primitive::u32, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::award_bounty`]."] - award_bounty { - #[codec(compact)] - bounty_id: ::core::primitive::u32, - beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 6)] - #[doc = "See [`Pallet::claim_bounty`]."] - claim_bounty { - #[codec(compact)] - bounty_id: ::core::primitive::u32, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::close_bounty`]."] - close_bounty { - #[codec(compact)] - bounty_id: ::core::primitive::u32, - }, - #[codec(index = 8)] - #[doc = "See [`Pallet::extend_bounty_expiry`]."] - extend_bounty_expiry { - #[codec(compact)] - bounty_id: ::core::primitive::u32, - remark: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Proposer's balance is too low."] - InsufficientProposersBalance, - #[codec(index = 1)] - #[doc = "No proposal or bounty at that index."] - InvalidIndex, - #[codec(index = 2)] - #[doc = "The reason given is just too big."] - ReasonTooBig, - #[codec(index = 3)] - #[doc = "The bounty status is unexpected."] - UnexpectedStatus, - #[codec(index = 4)] - #[doc = "Require bounty curator."] - RequireCurator, - #[codec(index = 5)] - #[doc = "Invalid bounty value."] - InvalidValue, - #[codec(index = 6)] - #[doc = "Invalid bounty fee."] - InvalidFee, - #[codec(index = 7)] - #[doc = "A bounty payout is pending."] - #[doc = "To cancel the bounty, you must unassign and slash the curator."] - PendingPayout, - #[codec(index = 8)] - #[doc = "The bounties cannot be claimed/closed because it's still in the countdown period."] - Premature, - #[codec(index = 9)] - #[doc = "The bounty cannot be closed because it has active child bounties."] - HasActiveChildBounty, - #[codec(index = 10)] - #[doc = "Too many approvals are already queued."] - TooManyQueued, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "New bounty proposal."] - BountyProposed { index: ::core::primitive::u32 }, - #[codec(index = 1)] - #[doc = "A bounty proposal was rejected; funds were slashed."] - BountyRejected { index: ::core::primitive::u32, bond: ::core::primitive::u128 }, - #[codec(index = 2)] - #[doc = "A bounty proposal is funded and became active."] - BountyBecameActive { index: ::core::primitive::u32 }, - #[codec(index = 3)] - #[doc = "A bounty is awarded to a beneficiary."] - BountyAwarded { - index: ::core::primitive::u32, - beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 4)] - #[doc = "A bounty is claimed by beneficiary."] - BountyClaimed { - index: ::core::primitive::u32, - payout: ::core::primitive::u128, - beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 5)] - #[doc = "A bounty is cancelled."] - BountyCanceled { index: ::core::primitive::u32 }, - #[codec(index = 6)] - #[doc = "A bounty expiry is extended."] - BountyExtended { index: ::core::primitive::u32 }, - #[codec(index = 7)] - #[doc = "A bounty is approved."] - BountyApproved { index: ::core::primitive::u32 }, - #[codec(index = 8)] - #[doc = "A bounty curator is proposed."] - CuratorProposed { - bounty_id: ::core::primitive::u32, - curator: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 9)] - #[doc = "A bounty curator is unassigned."] - CuratorUnassigned { bounty_id: ::core::primitive::u32 }, - #[codec(index = 10)] - #[doc = "A bounty curator is accepted."] - CuratorAccepted { - bounty_id: ::core::primitive::u32, - curator: ::subxt::ext::subxt_core::utils::AccountId32, - }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Bounty<_0, _1, _2> { - pub proposer: _0, - pub value: _1, - pub fee: _1, - pub curator_deposit: _1, - pub bond: _1, - pub status: runtime_types::pallet_bounties::BountyStatus<_0, _2>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum BountyStatus<_0, _1> { - #[codec(index = 0)] - Proposed, - #[codec(index = 1)] - Approved, - #[codec(index = 2)] - Funded, - #[codec(index = 3)] - CuratorProposed { curator: _0 }, - #[codec(index = 4)] - Active { curator: _0, update_due: _1 }, - #[codec(index = 5)] - PendingPayout { curator: _0, beneficiary: _0, unlock_at: _1 }, - } - } - pub mod pallet_child_bounties { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::add_child_bounty`]."] - add_child_bounty { - #[codec(compact)] - parent_bounty_id: ::core::primitive::u32, - #[codec(compact)] - value: ::core::primitive::u128, - description: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::propose_curator`]."] - propose_curator { - #[codec(compact)] - parent_bounty_id: ::core::primitive::u32, - #[codec(compact)] - child_bounty_id: ::core::primitive::u32, - curator: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - #[codec(compact)] - fee: ::core::primitive::u128, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::accept_curator`]."] - accept_curator { - #[codec(compact)] - parent_bounty_id: ::core::primitive::u32, - #[codec(compact)] - child_bounty_id: ::core::primitive::u32, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::unassign_curator`]."] - unassign_curator { - #[codec(compact)] - parent_bounty_id: ::core::primitive::u32, - #[codec(compact)] - child_bounty_id: ::core::primitive::u32, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::award_child_bounty`]."] - award_child_bounty { - #[codec(compact)] - parent_bounty_id: ::core::primitive::u32, - #[codec(compact)] - child_bounty_id: ::core::primitive::u32, - beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::claim_child_bounty`]."] - claim_child_bounty { - #[codec(compact)] - parent_bounty_id: ::core::primitive::u32, - #[codec(compact)] - child_bounty_id: ::core::primitive::u32, - }, - #[codec(index = 6)] - #[doc = "See [`Pallet::close_child_bounty`]."] - close_child_bounty { - #[codec(compact)] - parent_bounty_id: ::core::primitive::u32, - #[codec(compact)] - child_bounty_id: ::core::primitive::u32, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "The parent bounty is not in active state."] - ParentBountyNotActive, - #[codec(index = 1)] - #[doc = "The bounty balance is not enough to add new child-bounty."] - InsufficientBountyBalance, - #[codec(index = 2)] - #[doc = "Number of child bounties exceeds limit `MaxActiveChildBountyCount`."] - TooManyChildBounties, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A child-bounty is added."] - Added { index: ::core::primitive::u32, child_index: ::core::primitive::u32 }, - #[codec(index = 1)] - #[doc = "A child-bounty is awarded to a beneficiary."] - Awarded { - index: ::core::primitive::u32, - child_index: ::core::primitive::u32, - beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 2)] - #[doc = "A child-bounty is claimed by beneficiary."] - Claimed { - index: ::core::primitive::u32, - child_index: ::core::primitive::u32, - payout: ::core::primitive::u128, - beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 3)] - #[doc = "A child-bounty is cancelled."] - Canceled { index: ::core::primitive::u32, child_index: ::core::primitive::u32 }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ChildBounty<_0, _1, _2> { - pub parent_bounty: ::core::primitive::u32, - pub value: _1, - pub fee: _1, - pub curator_deposit: _1, - pub status: runtime_types::pallet_child_bounties::ChildBountyStatus<_0, _2>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum ChildBountyStatus<_0, _1> { - #[codec(index = 0)] - Added, - #[codec(index = 1)] - CuratorProposed { curator: _0 }, - #[codec(index = 2)] - Active { curator: _0 }, - #[codec(index = 3)] - PendingPayout { curator: _0, beneficiary: _0, unlock_at: _1 }, - } - } - pub mod pallet_collective { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_members`]."] - set_members { - new_members: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - prime: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - old_count: ::core::primitive::u32, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::execute`]."] - execute { - proposal: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - #[codec(compact)] - length_bound: ::core::primitive::u32, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::propose`]."] - propose { - #[codec(compact)] - threshold: ::core::primitive::u32, - proposal: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - #[codec(compact)] - length_bound: ::core::primitive::u32, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::vote`]."] - vote { - proposal: ::subxt::ext::subxt_core::utils::H256, - #[codec(compact)] - index: ::core::primitive::u32, - approve: ::core::primitive::bool, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::disapprove_proposal`]."] - disapprove_proposal { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 6)] - #[doc = "See [`Pallet::close`]."] - close { - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - #[codec(compact)] - index: ::core::primitive::u32, - proposal_weight_bound: runtime_types::sp_weights::weight_v2::Weight, - #[codec(compact)] - length_bound: ::core::primitive::u32, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Account is not a member"] - NotMember, - #[codec(index = 1)] - #[doc = "Duplicate proposals not allowed"] - DuplicateProposal, - #[codec(index = 2)] - #[doc = "Proposal must exist"] - ProposalMissing, - #[codec(index = 3)] - #[doc = "Mismatched index"] - WrongIndex, - #[codec(index = 4)] - #[doc = "Duplicate vote ignored"] - DuplicateVote, - #[codec(index = 5)] - #[doc = "Members are already initialized!"] - AlreadyInitialized, - #[codec(index = 6)] - #[doc = "The close call was made too early, before the end of the voting."] - TooEarly, - #[codec(index = 7)] - #[doc = "There can only be a maximum of `MaxProposals` active proposals."] - TooManyProposals, - #[codec(index = 8)] - #[doc = "The given weight bound for the proposal was too low."] - WrongProposalWeight, - #[codec(index = 9)] - #[doc = "The given length bound for the proposal was too low."] - WrongProposalLength, - #[codec(index = 10)] - #[doc = "Prime account is not a member"] - PrimeAccountNotMember, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A motion (given hash) has been proposed (by given account) with a threshold (given"] - #[doc = "`MemberCount`)."] - Proposed { - account: ::subxt::ext::subxt_core::utils::AccountId32, - proposal_index: ::core::primitive::u32, - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - threshold: ::core::primitive::u32, - }, - #[codec(index = 1)] - #[doc = "A motion (given hash) has been voted on by given account, leaving"] - #[doc = "a tally (yes votes and no votes given respectively as `MemberCount`)."] - Voted { - account: ::subxt::ext::subxt_core::utils::AccountId32, - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - voted: ::core::primitive::bool, - yes: ::core::primitive::u32, - no: ::core::primitive::u32, - }, - #[codec(index = 2)] - #[doc = "A motion was approved by the required threshold."] - Approved { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 3)] - #[doc = "A motion was not approved by the required threshold."] - Disapproved { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 4)] - #[doc = "A motion was executed; result will be `Ok` if it returned without error."] - Executed { - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - result: - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, - }, - #[codec(index = 5)] - #[doc = "A single member did some action; result will be `Ok` if it returned without error."] - MemberExecuted { - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - result: - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, - }, - #[codec(index = 6)] - #[doc = "A proposal was closed because its threshold was reached or after its duration was up."] - Closed { - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - yes: ::core::primitive::u32, - no: ::core::primitive::u32, - }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum RawOrigin<_0> { - #[codec(index = 0)] - Members(::core::primitive::u32, ::core::primitive::u32), - #[codec(index = 1)] - Member(_0), - #[codec(index = 2)] - _Phantom, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Votes<_0, _1> { - pub index: ::core::primitive::u32, - pub threshold: ::core::primitive::u32, - pub ayes: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, - pub nays: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, - pub end: _1, - } - } - pub mod pallet_democracy { - use super::runtime_types; - pub mod conviction { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Conviction { - #[codec(index = 0)] - None, - #[codec(index = 1)] - Locked1x, - #[codec(index = 2)] - Locked2x, - #[codec(index = 3)] - Locked3x, - #[codec(index = 4)] - Locked4x, - #[codec(index = 5)] - Locked5x, - #[codec(index = 6)] - Locked6x, - } - } - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::propose`]."] - propose { - proposal: runtime_types::frame_support::traits::preimages::Bounded< - runtime_types::tangle_testnet_runtime::RuntimeCall, - runtime_types::sp_runtime::traits::BlakeTwo256, - >, - #[codec(compact)] - value: ::core::primitive::u128, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::second`]."] - second { - #[codec(compact)] - proposal: ::core::primitive::u32, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::vote`]."] - vote { - #[codec(compact)] - ref_index: ::core::primitive::u32, - vote: runtime_types::pallet_democracy::vote::AccountVote< - ::core::primitive::u128, - >, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::emergency_cancel`]."] - emergency_cancel { ref_index: ::core::primitive::u32 }, - #[codec(index = 4)] - #[doc = "See [`Pallet::external_propose`]."] - external_propose { - proposal: runtime_types::frame_support::traits::preimages::Bounded< - runtime_types::tangle_testnet_runtime::RuntimeCall, - runtime_types::sp_runtime::traits::BlakeTwo256, - >, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::external_propose_majority`]."] - external_propose_majority { - proposal: runtime_types::frame_support::traits::preimages::Bounded< - runtime_types::tangle_testnet_runtime::RuntimeCall, - runtime_types::sp_runtime::traits::BlakeTwo256, - >, - }, - #[codec(index = 6)] - #[doc = "See [`Pallet::external_propose_default`]."] - external_propose_default { - proposal: runtime_types::frame_support::traits::preimages::Bounded< - runtime_types::tangle_testnet_runtime::RuntimeCall, - runtime_types::sp_runtime::traits::BlakeTwo256, - >, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::fast_track`]."] - fast_track { - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - voting_period: ::core::primitive::u64, - delay: ::core::primitive::u64, - }, - #[codec(index = 8)] - #[doc = "See [`Pallet::veto_external`]."] - veto_external { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 9)] - #[doc = "See [`Pallet::cancel_referendum`]."] - cancel_referendum { - #[codec(compact)] - ref_index: ::core::primitive::u32, - }, - #[codec(index = 10)] - #[doc = "See [`Pallet::delegate`]."] - delegate { - to: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - conviction: runtime_types::pallet_democracy::conviction::Conviction, - balance: ::core::primitive::u128, - }, - #[codec(index = 11)] - #[doc = "See [`Pallet::undelegate`]."] - undelegate, - #[codec(index = 12)] - #[doc = "See [`Pallet::clear_public_proposals`]."] - clear_public_proposals, - #[codec(index = 13)] - #[doc = "See [`Pallet::unlock`]."] - unlock { - target: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 14)] - #[doc = "See [`Pallet::remove_vote`]."] - remove_vote { index: ::core::primitive::u32 }, - #[codec(index = 15)] - #[doc = "See [`Pallet::remove_other_vote`]."] - remove_other_vote { - target: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - index: ::core::primitive::u32, - }, - #[codec(index = 16)] - #[doc = "See [`Pallet::blacklist`]."] - blacklist { - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - maybe_ref_index: ::core::option::Option<::core::primitive::u32>, - }, - #[codec(index = 17)] - #[doc = "See [`Pallet::cancel_proposal`]."] - cancel_proposal { - #[codec(compact)] - prop_index: ::core::primitive::u32, - }, - #[codec(index = 18)] - #[doc = "See [`Pallet::set_metadata`]."] - set_metadata { - owner: runtime_types::pallet_democracy::types::MetadataOwner, - maybe_hash: ::core::option::Option<::subxt::ext::subxt_core::utils::H256>, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Value too low"] - ValueLow, - #[codec(index = 1)] - #[doc = "Proposal does not exist"] - ProposalMissing, - #[codec(index = 2)] - #[doc = "Cannot cancel the same proposal twice"] - AlreadyCanceled, - #[codec(index = 3)] - #[doc = "Proposal already made"] - DuplicateProposal, - #[codec(index = 4)] - #[doc = "Proposal still blacklisted"] - ProposalBlacklisted, - #[codec(index = 5)] - #[doc = "Next external proposal not simple majority"] - NotSimpleMajority, - #[codec(index = 6)] - #[doc = "Invalid hash"] - InvalidHash, - #[codec(index = 7)] - #[doc = "No external proposal"] - NoProposal, - #[codec(index = 8)] - #[doc = "Identity may not veto a proposal twice"] - AlreadyVetoed, - #[codec(index = 9)] - #[doc = "Vote given for invalid referendum"] - ReferendumInvalid, - #[codec(index = 10)] - #[doc = "No proposals waiting"] - NoneWaiting, - #[codec(index = 11)] - #[doc = "The given account did not vote on the referendum."] - NotVoter, - #[codec(index = 12)] - #[doc = "The actor has no permission to conduct the action."] - NoPermission, - #[codec(index = 13)] - #[doc = "The account is already delegating."] - AlreadyDelegating, - #[codec(index = 14)] - #[doc = "Too high a balance was provided that the account cannot afford."] - InsufficientFunds, - #[codec(index = 15)] - #[doc = "The account is not currently delegating."] - NotDelegating, - #[codec(index = 16)] - #[doc = "The account currently has votes attached to it and the operation cannot succeed until"] - #[doc = "these are removed, either through `unvote` or `reap_vote`."] - VotesExist, - #[codec(index = 17)] - #[doc = "The instant referendum origin is currently disallowed."] - InstantNotAllowed, - #[codec(index = 18)] - #[doc = "Delegation to oneself makes no sense."] - Nonsense, - #[codec(index = 19)] - #[doc = "Invalid upper bound."] - WrongUpperBound, - #[codec(index = 20)] - #[doc = "Maximum number of votes reached."] - MaxVotesReached, - #[codec(index = 21)] - #[doc = "Maximum number of items reached."] - TooMany, - #[codec(index = 22)] - #[doc = "Voting period too low"] - VotingPeriodLow, - #[codec(index = 23)] - #[doc = "The preimage does not exist."] - PreimageNotExist, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A motion has been proposed by a public account."] - Proposed { - proposal_index: ::core::primitive::u32, - deposit: ::core::primitive::u128, - }, - #[codec(index = 1)] - #[doc = "A public proposal has been tabled for referendum vote."] - Tabled { - proposal_index: ::core::primitive::u32, - deposit: ::core::primitive::u128, - }, - #[codec(index = 2)] - #[doc = "An external proposal has been tabled."] - ExternalTabled, - #[codec(index = 3)] - #[doc = "A referendum has begun."] - Started { - ref_index: ::core::primitive::u32, - threshold: runtime_types::pallet_democracy::vote_threshold::VoteThreshold, - }, - #[codec(index = 4)] - #[doc = "A proposal has been approved by referendum."] - Passed { ref_index: ::core::primitive::u32 }, - #[codec(index = 5)] - #[doc = "A proposal has been rejected by referendum."] - NotPassed { ref_index: ::core::primitive::u32 }, - #[codec(index = 6)] - #[doc = "A referendum has been cancelled."] - Cancelled { ref_index: ::core::primitive::u32 }, - #[codec(index = 7)] - #[doc = "An account has delegated their vote to another account."] - Delegated { - who: ::subxt::ext::subxt_core::utils::AccountId32, - target: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 8)] - #[doc = "An account has cancelled a previous delegation operation."] - Undelegated { account: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 9)] - #[doc = "An external proposal has been vetoed."] - Vetoed { - who: ::subxt::ext::subxt_core::utils::AccountId32, - proposal_hash: ::subxt::ext::subxt_core::utils::H256, - until: ::core::primitive::u64, - }, - #[codec(index = 10)] - #[doc = "A proposal_hash has been blacklisted permanently."] - Blacklisted { proposal_hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 11)] - #[doc = "An account has voted in a referendum"] - Voted { - voter: ::subxt::ext::subxt_core::utils::AccountId32, - ref_index: ::core::primitive::u32, - vote: runtime_types::pallet_democracy::vote::AccountVote< - ::core::primitive::u128, - >, - }, - #[codec(index = 12)] - #[doc = "An account has secconded a proposal"] - Seconded { - seconder: ::subxt::ext::subxt_core::utils::AccountId32, - prop_index: ::core::primitive::u32, - }, - #[codec(index = 13)] - #[doc = "A proposal got canceled."] - ProposalCanceled { prop_index: ::core::primitive::u32 }, - #[codec(index = 14)] - #[doc = "Metadata for a proposal or a referendum has been set."] - MetadataSet { - owner: runtime_types::pallet_democracy::types::MetadataOwner, - hash: ::subxt::ext::subxt_core::utils::H256, - }, - #[codec(index = 15)] - #[doc = "Metadata for a proposal or a referendum has been cleared."] - MetadataCleared { - owner: runtime_types::pallet_democracy::types::MetadataOwner, - hash: ::subxt::ext::subxt_core::utils::H256, - }, - #[codec(index = 16)] - #[doc = "Metadata has been transferred to new owner."] - MetadataTransferred { - prev_owner: runtime_types::pallet_democracy::types::MetadataOwner, - owner: runtime_types::pallet_democracy::types::MetadataOwner, - hash: ::subxt::ext::subxt_core::utils::H256, - }, - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Delegations<_0> { - pub votes: _0, - pub capital: _0, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum MetadataOwner { - #[codec(index = 0)] - External, - #[codec(index = 1)] - Proposal(::core::primitive::u32), - #[codec(index = 2)] - Referendum(::core::primitive::u32), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ReferendumInfo<_0, _1, _2> { - #[codec(index = 0)] - Ongoing(runtime_types::pallet_democracy::types::ReferendumStatus<_0, _1, _2>), - #[codec(index = 1)] - Finished { approved: ::core::primitive::bool, end: _0 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ReferendumStatus<_0, _1, _2> { - pub end: _0, - pub proposal: _1, - pub threshold: runtime_types::pallet_democracy::vote_threshold::VoteThreshold, - pub delay: _0, - pub tally: runtime_types::pallet_democracy::types::Tally<_2>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Tally<_0> { - pub ayes: _0, - pub nays: _0, - pub turnout: _0, - } - } - pub mod vote { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum AccountVote<_0> { - #[codec(index = 0)] - Standard { vote: runtime_types::pallet_democracy::vote::Vote, balance: _0 }, - #[codec(index = 1)] - Split { aye: _0, nay: _0 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct PriorLock<_0, _1>(pub _0, pub _1); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Vote(pub ::core::primitive::u8); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Voting<_0, _1, _2> { - #[codec(index = 0)] - Direct { - votes: runtime_types::bounded_collections::bounded_vec::BoundedVec<( - ::core::primitive::u32, - runtime_types::pallet_democracy::vote::AccountVote<_0>, - )>, - delegations: runtime_types::pallet_democracy::types::Delegations<_0>, - prior: runtime_types::pallet_democracy::vote::PriorLock<_2, _0>, - }, - #[codec(index = 1)] - Delegating { - balance: _0, - target: _1, - conviction: runtime_types::pallet_democracy::conviction::Conviction, - delegations: runtime_types::pallet_democracy::types::Delegations<_0>, - prior: runtime_types::pallet_democracy::vote::PriorLock<_2, _0>, - }, - } - } - pub mod vote_threshold { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum VoteThreshold { - #[codec(index = 0)] - SuperMajorityApprove, - #[codec(index = 1)] - SuperMajorityAgainst, - #[codec(index = 2)] - SimpleMajority, - } - } - } - pub mod pallet_dkg { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_fee`]."] - set_fee { - fee_info: - runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Cannot retreive signers from the signature"] - CannotRetreiveSigner, - #[codec(index = 1)] - #[doc = "Not enough signers for threshold"] - NotEnoughSigners, - #[codec(index = 2)] - #[doc = "The signers have signed different data"] - InvalidSignatureData, - #[codec(index = 3)] - #[doc = "No participants found"] - NoParticipantsFound, - #[codec(index = 4)] - #[doc = "No signatures found"] - NoSignaturesFound, - #[codec(index = 5)] - #[doc = "Unexpected job type"] - InvalidJobType, - #[codec(index = 6)] - #[doc = "Duplicate signature found in submission"] - DuplicateSignature, - #[codec(index = 7)] - #[doc = "Invalid signature submitted"] - InvalidSignature, - #[codec(index = 8)] - #[doc = "Invalid signature scheme"] - InvalidSignatureScheme, - #[codec(index = 9)] - #[doc = "Invalid signature deserialization"] - InvalidSignatureDeserialization, - #[codec(index = 10)] - #[doc = "Invalid verifying key submitted"] - InvalidVerifyingKey, - #[codec(index = 11)] - #[doc = "Invalid verifying key deserialization"] - InvalidVerifyingKeyDeserialization, - #[codec(index = 12)] - #[doc = "Signed with a different key"] - SigningKeyMismatch, - #[codec(index = 13)] - #[doc = "Invalid participant public key"] - InvalidParticipantPublicKey, - #[codec(index = 14)] - #[doc = "Invalid BLS public key"] - InvalidBlsPublicKey, - #[codec(index = 15)] - #[doc = "Invalid Misbehavior Role type."] - InvalidRoleType, - #[codec(index = 16)] - #[doc = "Invalid Justification type."] - InvalidJustification, - #[codec(index = 17)] - #[doc = "Could not deserialize the round message."] - MalformedRoundMessage, - #[codec(index = 18)] - #[doc = "Signed Round Message not signed by the offender."] - NotSignedByOffender, - #[codec(index = 19)] - #[doc = "The submitted decommitment is valid."] - #[doc = ""] - #[doc = "This error is returned when the decommitment is valid"] - #[doc = "but the caller claims it is invalid!"] - ValidDecommitment, - #[codec(index = 20)] - #[doc = "The submitted decommitment data size is valid."] - #[doc = ""] - #[doc = "This error is returned when the decommitment data size is valid"] - #[doc = "but the caller claims it is invalid!"] - ValidDataSize, - #[codec(index = 21)] - #[doc = "The submitted messages passed Feldman verification."] - #[doc = ""] - #[doc = "This error is returned when the messages passed Feldman verification"] - #[doc = "but the caller claims it is invalid!"] - ValidFeldmanVerification, - #[codec(index = 22)] - #[doc = "The submitted Schnorr Proof is valid."] - #[doc = ""] - #[doc = "This error is returned when the decommitment and its"] - #[doc = "Schnorr are valid. but the caller"] - #[doc = "claims it is invalid."] - ValidSchnorrProof, - #[codec(index = 23)] - #[doc = "The submitted ring pedersen parameters are valid."] - #[doc = ""] - #[doc = "This error is returned when the ring pedersen parameters are valid"] - #[doc = "but the caller claims it is invalid."] - ValidRingPedersenParameters, - #[codec(index = 24)] - #[doc = "The submitted Mod Proof is valid."] - #[doc = ""] - #[doc = "This error is returned when the Mod Proof is valid"] - #[doc = "but the caller claims it is invalid."] - ValidModProof, - #[codec(index = 25)] - #[doc = "------------------------------------------------------------ ///"] - #[doc = " FROST ERRORS ///"] - #[doc = "------------------------------------------------------------ ///"] - #[doc = "Valid FROST signature share"] - ValidFrostSignatureShare, - #[codec(index = 26)] - #[doc = "Invalid FROST message serialization"] - InvalidFrostMessageSerialization, - #[codec(index = 27)] - #[doc = "Invalid FROST message deserialization"] - InvalidFrostMessageDeserialization, - #[codec(index = 28)] - #[doc = "Invalid identifier deserialization"] - InvalidIdentifierDeserialization, - #[codec(index = 29)] - #[doc = "Valid FROST signature error for a misbehavior report"] - ValidFrostSignature, - #[codec(index = 30)] - #[doc = "Unknown identifier"] - UnknownIdentifier, - #[codec(index = 31)] - #[doc = "Duplicate identifier"] - DuplicateIdentifier, - #[codec(index = 32)] - #[doc = "Incorrect number of identifiers"] - IncorrectNumberOfIdentifiers, - #[codec(index = 33)] - #[doc = "Identifier derivation not supported"] - IdentifierDerivationNotSupported, - #[codec(index = 34)] - #[doc = "Malformed signature"] - MalformedFrostSignature, - #[codec(index = 35)] - #[doc = "Invalid FROST signature"] - InvalidFrostSignature, - #[codec(index = 36)] - #[doc = "Invalid FROST signature share"] - InvalidFrostSignatureShare, - #[codec(index = 37)] - #[doc = "Invalid FROST signature scheme"] - InvalidFrostSignatureScheme, - #[codec(index = 38)] - #[doc = "Malformed FROST verifying key"] - MalformedFrostVerifyingKey, - #[codec(index = 39)] - #[doc = "Malformed FROST signing key"] - MalformedFrostSigningKey, - #[codec(index = 40)] - #[doc = "Missing FROST commitment"] - MissingFrostCommitment, - #[codec(index = 41)] - #[doc = "Invalid FROST commitment"] - IdentityCommitment, - #[codec(index = 42)] - #[doc = "FROST Field scalar error"] - FrostFieldError, - #[codec(index = 43)] - #[doc = "FROST Group element error"] - FrostGroupError, - #[codec(index = 44)] - #[doc = "Field element error"] - FieldElementError, - #[codec(index = 45)] - #[doc = "Invalid public key error"] - InvalidPublicKey, - #[codec(index = 46)] - #[doc = "Invalid message"] - InvalidMessage, - #[codec(index = 47)] - #[doc = "Malformed Stark signature"] - MalformedStarkSignature, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Fee has been updated to the new value"] - FeeUpdated(runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>), - #[codec(index = 1)] - #[doc = "A DKG has been rotated."] - KeyRotated { - from_job_id: ::core::primitive::u64, - to_job_id: ::core::primitive::u64, - signature: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct FeeInfo<_0> { - pub base_fee: _0, - pub dkg_validator_fee: _0, - pub sig_validator_fee: _0, - pub refresh_validator_fee: _0, - pub storage_fee_per_byte: _0, - pub storage_fee_per_block: _0, - } - } - } - pub mod pallet_dynamic_fee { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::note_min_gas_price_target`]."] - note_min_gas_price_target { target: runtime_types::primitive_types::U256 }, - } - } - } - pub mod pallet_election_provider_multi_phase { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - # [codec (index = 0)] # [doc = "See [`Pallet::submit_unsigned`]."] submit_unsigned { raw_solution : :: subxt :: ext :: subxt_core :: alloc :: boxed :: Box < runtime_types :: pallet_election_provider_multi_phase :: RawSolution < runtime_types :: tangle_testnet_runtime :: NposSolution16 > > , witness : runtime_types :: pallet_election_provider_multi_phase :: SolutionOrSnapshotSize , } , # [codec (index = 1)] # [doc = "See [`Pallet::set_minimum_untrusted_score`]."] set_minimum_untrusted_score { maybe_next_score : :: core :: option :: Option < runtime_types :: sp_npos_elections :: ElectionScore > , } , # [codec (index = 2)] # [doc = "See [`Pallet::set_emergency_election_result`]."] set_emergency_election_result { supports : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < (:: subxt :: ext :: subxt_core :: utils :: AccountId32 , runtime_types :: sp_npos_elections :: Support < :: subxt :: ext :: subxt_core :: utils :: AccountId32 > ,) > , } , # [codec (index = 3)] # [doc = "See [`Pallet::submit`]."] submit { raw_solution : :: subxt :: ext :: subxt_core :: alloc :: boxed :: Box < runtime_types :: pallet_election_provider_multi_phase :: RawSolution < runtime_types :: tangle_testnet_runtime :: NposSolution16 > > , } , # [codec (index = 4)] # [doc = "See [`Pallet::governance_fallback`]."] governance_fallback { maybe_max_voters : :: core :: option :: Option < :: core :: primitive :: u32 > , maybe_max_targets : :: core :: option :: Option < :: core :: primitive :: u32 > , } , } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Error of the pallet that can be returned in response to dispatches."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Submission was too early."] - PreDispatchEarlySubmission, - #[codec(index = 1)] - #[doc = "Wrong number of winners presented."] - PreDispatchWrongWinnerCount, - #[codec(index = 2)] - #[doc = "Submission was too weak, score-wise."] - PreDispatchWeakSubmission, - #[codec(index = 3)] - #[doc = "The queue was full, and the solution was not better than any of the existing ones."] - SignedQueueFull, - #[codec(index = 4)] - #[doc = "The origin failed to pay the deposit."] - SignedCannotPayDeposit, - #[codec(index = 5)] - #[doc = "Witness data to dispatchable is invalid."] - SignedInvalidWitness, - #[codec(index = 6)] - #[doc = "The signed submission consumes too much weight"] - SignedTooMuchWeight, - #[codec(index = 7)] - #[doc = "OCW submitted solution for wrong round"] - OcwCallWrongEra, - #[codec(index = 8)] - #[doc = "Snapshot metadata should exist but didn't."] - MissingSnapshotMetadata, - #[codec(index = 9)] - #[doc = "`Self::insert_submission` returned an invalid index."] - InvalidSubmissionIndex, - #[codec(index = 10)] - #[doc = "The call is not allowed at this point."] - CallNotAllowed, - #[codec(index = 11)] - #[doc = "The fallback failed"] - FallbackFailed, - #[codec(index = 12)] - #[doc = "Some bound not met"] - BoundNotMet, - #[codec(index = 13)] - #[doc = "Submitted solution has too many winners"] - TooManyWinners, - #[codec(index = 14)] - #[doc = "Sumission was prepared for a different round."] - PreDispatchDifferentRound, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A solution was stored with the given compute."] - #[doc = ""] - #[doc = "The `origin` indicates the origin of the solution. If `origin` is `Some(AccountId)`,"] - #[doc = "the stored solution was submited in the signed phase by a miner with the `AccountId`."] - #[doc = "Otherwise, the solution was stored either during the unsigned phase or by"] - #[doc = "`T::ForceOrigin`. The `bool` is `true` when a previous solution was ejected to make"] - #[doc = "room for this one."] - SolutionStored { - compute: - runtime_types::pallet_election_provider_multi_phase::ElectionCompute, - origin: - ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - prev_ejected: ::core::primitive::bool, - }, - #[codec(index = 1)] - #[doc = "The election has been finalized, with the given computation and score."] - ElectionFinalized { - compute: - runtime_types::pallet_election_provider_multi_phase::ElectionCompute, - score: runtime_types::sp_npos_elections::ElectionScore, - }, - #[codec(index = 2)] - #[doc = "An election failed."] - #[doc = ""] - #[doc = "Not much can be said about which computes failed in the process."] - ElectionFailed, - #[codec(index = 3)] - #[doc = "An account has been rewarded for their signed submission being finalized."] - Rewarded { - account: ::subxt::ext::subxt_core::utils::AccountId32, - value: ::core::primitive::u128, - }, - #[codec(index = 4)] - #[doc = "An account has been slashed for submitting an invalid signed submission."] - Slashed { - account: ::subxt::ext::subxt_core::utils::AccountId32, - value: ::core::primitive::u128, - }, - #[codec(index = 5)] - #[doc = "There was a phase transition in a given round."] - PhaseTransitioned { - from: runtime_types::pallet_election_provider_multi_phase::Phase< - ::core::primitive::u64, - >, - to: runtime_types::pallet_election_provider_multi_phase::Phase< - ::core::primitive::u64, - >, - round: ::core::primitive::u32, - }, - } - } - pub mod signed { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct SignedSubmission<_0, _1, _2> { - pub who: _0, - pub deposit: _1, - pub raw_solution: - runtime_types::pallet_election_provider_multi_phase::RawSolution<_2>, - pub call_fee: _1, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum ElectionCompute { - #[codec(index = 0)] - OnChain, - #[codec(index = 1)] - Signed, - #[codec(index = 2)] - Unsigned, - #[codec(index = 3)] - Fallback, - #[codec(index = 4)] - Emergency, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Phase<_0> { - #[codec(index = 0)] - Off, - #[codec(index = 1)] - Signed, - #[codec(index = 2)] - Unsigned((::core::primitive::bool, _0)), - #[codec(index = 3)] - Emergency, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct RawSolution<_0> { - pub solution: _0, - pub score: runtime_types::sp_npos_elections::ElectionScore, - pub round: ::core::primitive::u32, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ReadySolution { - pub supports: runtime_types::bounded_collections::bounded_vec::BoundedVec<( - ::subxt::ext::subxt_core::utils::AccountId32, - runtime_types::sp_npos_elections::Support< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - )>, - pub score: runtime_types::sp_npos_elections::ElectionScore, - pub compute: runtime_types::pallet_election_provider_multi_phase::ElectionCompute, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct RoundSnapshot<_0, _1> { - pub voters: ::subxt::ext::subxt_core::alloc::vec::Vec<_1>, - pub targets: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct SolutionOrSnapshotSize { - #[codec(compact)] - pub voters: ::core::primitive::u32, - #[codec(compact)] - pub targets: ::core::primitive::u32, - } - } - pub mod pallet_elections_phragmen { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::vote`]."] - vote { - votes: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - #[codec(compact)] - value: ::core::primitive::u128, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::remove_voter`]."] - remove_voter, - #[codec(index = 2)] - #[doc = "See [`Pallet::submit_candidacy`]."] - submit_candidacy { - #[codec(compact)] - candidate_count: ::core::primitive::u32, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::renounce_candidacy`]."] - renounce_candidacy { - renouncing: runtime_types::pallet_elections_phragmen::Renouncing, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::remove_member`]."] - remove_member { - who: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - slash_bond: ::core::primitive::bool, - rerun_election: ::core::primitive::bool, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::clean_defunct_voters`]."] - clean_defunct_voters { - num_voters: ::core::primitive::u32, - num_defunct: ::core::primitive::u32, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Cannot vote when no candidates or members exist."] - UnableToVote, - #[codec(index = 1)] - #[doc = "Must vote for at least one candidate."] - NoVotes, - #[codec(index = 2)] - #[doc = "Cannot vote more than candidates."] - TooManyVotes, - #[codec(index = 3)] - #[doc = "Cannot vote more than maximum allowed."] - MaximumVotesExceeded, - #[codec(index = 4)] - #[doc = "Cannot vote with stake less than minimum balance."] - LowBalance, - #[codec(index = 5)] - #[doc = "Voter can not pay voting bond."] - UnableToPayBond, - #[codec(index = 6)] - #[doc = "Must be a voter."] - MustBeVoter, - #[codec(index = 7)] - #[doc = "Duplicated candidate submission."] - DuplicatedCandidate, - #[codec(index = 8)] - #[doc = "Too many candidates have been created."] - TooManyCandidates, - #[codec(index = 9)] - #[doc = "Member cannot re-submit candidacy."] - MemberSubmit, - #[codec(index = 10)] - #[doc = "Runner cannot re-submit candidacy."] - RunnerUpSubmit, - #[codec(index = 11)] - #[doc = "Candidate does not have enough funds."] - InsufficientCandidateFunds, - #[codec(index = 12)] - #[doc = "Not a member."] - NotMember, - #[codec(index = 13)] - #[doc = "The provided count of number of candidates is incorrect."] - InvalidWitnessData, - #[codec(index = 14)] - #[doc = "The provided count of number of votes is incorrect."] - InvalidVoteCount, - #[codec(index = 15)] - #[doc = "The renouncing origin presented a wrong `Renouncing` parameter."] - InvalidRenouncing, - #[codec(index = 16)] - #[doc = "Prediction regarding replacement after member removal is wrong."] - InvalidReplacement, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A new term with new_members. This indicates that enough candidates existed to run"] - #[doc = "the election, not that enough have has been elected. The inner value must be examined"] - #[doc = "for this purpose. A `NewTerm(\\[\\])` indicates that some candidates got their bond"] - #[doc = "slashed and none were elected, whilst `EmptyTerm` means that no candidates existed to"] - #[doc = "begin with."] - NewTerm { - new_members: ::subxt::ext::subxt_core::alloc::vec::Vec<( - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u128, - )>, - }, - #[codec(index = 1)] - #[doc = "No (or not enough) candidates existed for this round. This is different from"] - #[doc = "`NewTerm(\\[\\])`. See the description of `NewTerm`."] - EmptyTerm, - #[codec(index = 2)] - #[doc = "Internal error happened while trying to perform election."] - ElectionError, - #[codec(index = 3)] - #[doc = "A member has been removed. This should always be followed by either `NewTerm` or"] - #[doc = "`EmptyTerm`."] - MemberKicked { member: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 4)] - #[doc = "Someone has renounced their candidacy."] - Renounced { candidate: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 5)] - #[doc = "A candidate was slashed by amount due to failing to obtain a seat as member or"] - #[doc = "runner-up."] - #[doc = ""] - #[doc = "Note that old members and runners-up are also candidates."] - CandidateSlashed { - candidate: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 6)] - #[doc = "A seat holder was slashed by amount by being forcefully removed from the set."] - SeatHolderSlashed { - seat_holder: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Renouncing { - #[codec(index = 0)] - Member, - #[codec(index = 1)] - RunnerUp, - #[codec(index = 2)] - Candidate(#[codec(compact)] ::core::primitive::u32), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct SeatHolder<_0, _1> { - pub who: _0, - pub stake: _1, - pub deposit: _1, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Voter<_0, _1> { - pub votes: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, - pub stake: _1, - pub deposit: _1, - } - } - pub mod pallet_ethereum { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::transact`]."] - transact { transaction: runtime_types::ethereum::transaction::TransactionV2 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Signature is invalid."] - InvalidSignature, - #[codec(index = 1)] - #[doc = "Pre-log is present, therefore transact is not allowed."] - PreLogExists, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "An ethereum transaction was successfully executed."] - Executed { - from: ::subxt::ext::subxt_core::utils::H160, - to: ::subxt::ext::subxt_core::utils::H160, - transaction_hash: ::subxt::ext::subxt_core::utils::H256, - exit_reason: runtime_types::evm_core::error::ExitReason, - extra_data: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum RawOrigin { - #[codec(index = 0)] - EthereumTransaction(::subxt::ext::subxt_core::utils::H160), - } - } - pub mod pallet_evm { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::withdraw`]."] - withdraw { - address: ::subxt::ext::subxt_core::utils::H160, - value: ::core::primitive::u128, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::call`]."] - call { - source: ::subxt::ext::subxt_core::utils::H160, - target: ::subxt::ext::subxt_core::utils::H160, - input: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - value: runtime_types::primitive_types::U256, - gas_limit: ::core::primitive::u64, - max_fee_per_gas: runtime_types::primitive_types::U256, - max_priority_fee_per_gas: - ::core::option::Option, - nonce: ::core::option::Option, - access_list: ::subxt::ext::subxt_core::alloc::vec::Vec<( - ::subxt::ext::subxt_core::utils::H160, - ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::H256, - >, - )>, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::create`]."] - create { - source: ::subxt::ext::subxt_core::utils::H160, - init: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - value: runtime_types::primitive_types::U256, - gas_limit: ::core::primitive::u64, - max_fee_per_gas: runtime_types::primitive_types::U256, - max_priority_fee_per_gas: - ::core::option::Option, - nonce: ::core::option::Option, - access_list: ::subxt::ext::subxt_core::alloc::vec::Vec<( - ::subxt::ext::subxt_core::utils::H160, - ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::H256, - >, - )>, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::create2`]."] - create2 { - source: ::subxt::ext::subxt_core::utils::H160, - init: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - salt: ::subxt::ext::subxt_core::utils::H256, - value: runtime_types::primitive_types::U256, - gas_limit: ::core::primitive::u64, - max_fee_per_gas: runtime_types::primitive_types::U256, - max_priority_fee_per_gas: - ::core::option::Option, - nonce: ::core::option::Option, - access_list: ::subxt::ext::subxt_core::alloc::vec::Vec<( - ::subxt::ext::subxt_core::utils::H160, - ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::H256, - >, - )>, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Not enough balance to perform action"] - BalanceLow, - #[codec(index = 1)] - #[doc = "Calculating total fee overflowed"] - FeeOverflow, - #[codec(index = 2)] - #[doc = "Calculating total payment overflowed"] - PaymentOverflow, - #[codec(index = 3)] - #[doc = "Withdraw fee failed"] - WithdrawFailed, - #[codec(index = 4)] - #[doc = "Gas price is too low."] - GasPriceTooLow, - #[codec(index = 5)] - #[doc = "Nonce is invalid"] - InvalidNonce, - #[codec(index = 6)] - #[doc = "Gas limit is too low."] - GasLimitTooLow, - #[codec(index = 7)] - #[doc = "Gas limit is too high."] - GasLimitTooHigh, - #[codec(index = 8)] - #[doc = "The chain id is invalid."] - InvalidChainId, - #[codec(index = 9)] - #[doc = "the signature is invalid."] - InvalidSignature, - #[codec(index = 10)] - #[doc = "EVM reentrancy"] - Reentrancy, - #[codec(index = 11)] - #[doc = "EIP-3607,"] - TransactionMustComeFromEOA, - #[codec(index = 12)] - #[doc = "Undefined error."] - Undefined, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Ethereum events from contracts."] - Log { log: runtime_types::ethereum::log::Log }, - #[codec(index = 1)] - #[doc = "A contract has been created at given address."] - Created { address: ::subxt::ext::subxt_core::utils::H160 }, - #[codec(index = 2)] - #[doc = "A contract was attempted to be created, but the execution failed."] - CreatedFailed { address: ::subxt::ext::subxt_core::utils::H160 }, - #[codec(index = 3)] - #[doc = "A contract has been executed successfully with states applied."] - Executed { address: ::subxt::ext::subxt_core::utils::H160 }, - #[codec(index = 4)] - #[doc = "A contract has been executed with errors. States are reverted with only gas fees applied."] - ExecutedFailed { address: ::subxt::ext::subxt_core::utils::H160 }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct CodeMetadata { - pub size: ::core::primitive::u64, - pub hash: ::subxt::ext::subxt_core::utils::H256, - } - } - pub mod pallet_grandpa { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::report_equivocation`]."] - report_equivocation { - equivocation_proof: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::sp_consensus_grandpa::EquivocationProof< - ::subxt::ext::subxt_core::utils::H256, - ::core::primitive::u64, - >, - >, - key_owner_proof: runtime_types::sp_core::Void, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::report_equivocation_unsigned`]."] - report_equivocation_unsigned { - equivocation_proof: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::sp_consensus_grandpa::EquivocationProof< - ::subxt::ext::subxt_core::utils::H256, - ::core::primitive::u64, - >, - >, - key_owner_proof: runtime_types::sp_core::Void, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::note_stalled`]."] - note_stalled { - delay: ::core::primitive::u64, - best_finalized_block_number: ::core::primitive::u64, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Attempt to signal GRANDPA pause when the authority set isn't live"] - #[doc = "(either paused or already pending pause)."] - PauseFailed, - #[codec(index = 1)] - #[doc = "Attempt to signal GRANDPA resume when the authority set isn't paused"] - #[doc = "(either live or already pending resume)."] - ResumeFailed, - #[codec(index = 2)] - #[doc = "Attempt to signal GRANDPA change with one already pending."] - ChangePending, - #[codec(index = 3)] - #[doc = "Cannot signal forced change so soon after last."] - TooSoon, - #[codec(index = 4)] - #[doc = "A key ownership proof provided as part of an equivocation report is invalid."] - InvalidKeyOwnershipProof, - #[codec(index = 5)] - #[doc = "An equivocation proof provided as part of an equivocation report is invalid."] - InvalidEquivocationProof, - #[codec(index = 6)] - #[doc = "A given equivocation report is valid but already previously reported."] - DuplicateOffenceReport, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "New authority set has been applied."] - NewAuthorities { - authority_set: ::subxt::ext::subxt_core::alloc::vec::Vec<( - runtime_types::sp_consensus_grandpa::app::Public, - ::core::primitive::u64, - )>, - }, - #[codec(index = 1)] - #[doc = "Current authority set has been paused."] - Paused, - #[codec(index = 2)] - #[doc = "Current authority set has been resumed."] - Resumed, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct StoredPendingChange<_0> { - pub scheduled_at: _0, - pub delay: _0, - pub next_authorities: - runtime_types::bounded_collections::weak_bounded_vec::WeakBoundedVec<( - runtime_types::sp_consensus_grandpa::app::Public, - _0, - )>, - pub forced: ::core::option::Option<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum StoredState<_0> { - #[codec(index = 0)] - Live, - #[codec(index = 1)] - PendingPause { scheduled_at: _0, delay: _0 }, - #[codec(index = 2)] - Paused, - #[codec(index = 3)] - PendingResume { scheduled_at: _0, delay: _0 }, - } - } - pub mod pallet_hotfix_sufficients { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::hotfix_inc_account_sufficients`]."] - hotfix_inc_account_sufficients { - addresses: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::H160, - >, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Maximum address count exceeded"] - MaxAddressCountExceeded, - } - } - } - pub mod pallet_identity { - use super::runtime_types; - pub mod legacy { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct IdentityInfo { - pub additional: runtime_types::bounded_collections::bounded_vec::BoundedVec<( - runtime_types::pallet_identity::types::Data, - runtime_types::pallet_identity::types::Data, - )>, - pub display: runtime_types::pallet_identity::types::Data, - pub legal: runtime_types::pallet_identity::types::Data, - pub web: runtime_types::pallet_identity::types::Data, - pub riot: runtime_types::pallet_identity::types::Data, - pub email: runtime_types::pallet_identity::types::Data, - pub pgp_fingerprint: ::core::option::Option<[::core::primitive::u8; 20usize]>, - pub image: runtime_types::pallet_identity::types::Data, - pub twitter: runtime_types::pallet_identity::types::Data, - } - } - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Identity pallet declaration."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::add_registrar`]."] - add_registrar { - account: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::set_identity`]."] - set_identity { - info: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::pallet_identity::legacy::IdentityInfo, - >, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::set_subs`]."] - set_subs { - subs: ::subxt::ext::subxt_core::alloc::vec::Vec<( - ::subxt::ext::subxt_core::utils::AccountId32, - runtime_types::pallet_identity::types::Data, - )>, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::clear_identity`]."] - clear_identity, - #[codec(index = 4)] - #[doc = "See [`Pallet::request_judgement`]."] - request_judgement { - #[codec(compact)] - reg_index: ::core::primitive::u32, - #[codec(compact)] - max_fee: ::core::primitive::u128, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::cancel_request`]."] - cancel_request { reg_index: ::core::primitive::u32 }, - #[codec(index = 6)] - #[doc = "See [`Pallet::set_fee`]."] - set_fee { - #[codec(compact)] - index: ::core::primitive::u32, - #[codec(compact)] - fee: ::core::primitive::u128, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::set_account_id`]."] - set_account_id { - #[codec(compact)] - index: ::core::primitive::u32, - new: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 8)] - #[doc = "See [`Pallet::set_fields`]."] - set_fields { - #[codec(compact)] - index: ::core::primitive::u32, - fields: ::core::primitive::u64, - }, - #[codec(index = 9)] - #[doc = "See [`Pallet::provide_judgement`]."] - provide_judgement { - #[codec(compact)] - reg_index: ::core::primitive::u32, - target: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - judgement: runtime_types::pallet_identity::types::Judgement< - ::core::primitive::u128, - >, - identity: ::subxt::ext::subxt_core::utils::H256, - }, - #[codec(index = 10)] - #[doc = "See [`Pallet::kill_identity`]."] - kill_identity { - target: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 11)] - #[doc = "See [`Pallet::add_sub`]."] - add_sub { - sub: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - data: runtime_types::pallet_identity::types::Data, - }, - #[codec(index = 12)] - #[doc = "See [`Pallet::rename_sub`]."] - rename_sub { - sub: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - data: runtime_types::pallet_identity::types::Data, - }, - #[codec(index = 13)] - #[doc = "See [`Pallet::remove_sub`]."] - remove_sub { - sub: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 14)] - #[doc = "See [`Pallet::quit_sub`]."] - quit_sub, - #[codec(index = 15)] - #[doc = "See [`Pallet::add_username_authority`]."] - add_username_authority { - authority: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - suffix: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - allocation: ::core::primitive::u32, - }, - #[codec(index = 16)] - #[doc = "See [`Pallet::remove_username_authority`]."] - remove_username_authority { - authority: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 17)] - #[doc = "See [`Pallet::set_username_for`]."] - set_username_for { - who: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - username: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - signature: - ::core::option::Option, - }, - #[codec(index = 18)] - #[doc = "See [`Pallet::accept_username`]."] - accept_username { - username: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - }, - #[codec(index = 19)] - #[doc = "See [`Pallet::remove_expired_approval`]."] - remove_expired_approval { - username: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - }, - #[codec(index = 20)] - #[doc = "See [`Pallet::set_primary_username`]."] - set_primary_username { - username: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - }, - #[codec(index = 21)] - #[doc = "See [`Pallet::remove_dangling_username`]."] - remove_dangling_username { - username: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Too many subs-accounts."] - TooManySubAccounts, - #[codec(index = 1)] - #[doc = "Account isn't found."] - NotFound, - #[codec(index = 2)] - #[doc = "Account isn't named."] - NotNamed, - #[codec(index = 3)] - #[doc = "Empty index."] - EmptyIndex, - #[codec(index = 4)] - #[doc = "Fee is changed."] - FeeChanged, - #[codec(index = 5)] - #[doc = "No identity found."] - NoIdentity, - #[codec(index = 6)] - #[doc = "Sticky judgement."] - StickyJudgement, - #[codec(index = 7)] - #[doc = "Judgement given."] - JudgementGiven, - #[codec(index = 8)] - #[doc = "Invalid judgement."] - InvalidJudgement, - #[codec(index = 9)] - #[doc = "The index is invalid."] - InvalidIndex, - #[codec(index = 10)] - #[doc = "The target is invalid."] - InvalidTarget, - #[codec(index = 11)] - #[doc = "Maximum amount of registrars reached. Cannot add any more."] - TooManyRegistrars, - #[codec(index = 12)] - #[doc = "Account ID is already named."] - AlreadyClaimed, - #[codec(index = 13)] - #[doc = "Sender is not a sub-account."] - NotSub, - #[codec(index = 14)] - #[doc = "Sub-account isn't owned by sender."] - NotOwned, - #[codec(index = 15)] - #[doc = "The provided judgement was for a different identity."] - JudgementForDifferentIdentity, - #[codec(index = 16)] - #[doc = "Error that occurs when there is an issue paying for judgement."] - JudgementPaymentFailed, - #[codec(index = 17)] - #[doc = "The provided suffix is too long."] - InvalidSuffix, - #[codec(index = 18)] - #[doc = "The sender does not have permission to issue a username."] - NotUsernameAuthority, - #[codec(index = 19)] - #[doc = "The authority cannot allocate any more usernames."] - NoAllocation, - #[codec(index = 20)] - #[doc = "The signature on a username was not valid."] - InvalidSignature, - #[codec(index = 21)] - #[doc = "Setting this username requires a signature, but none was provided."] - RequiresSignature, - #[codec(index = 22)] - #[doc = "The username does not meet the requirements."] - InvalidUsername, - #[codec(index = 23)] - #[doc = "The username is already taken."] - UsernameTaken, - #[codec(index = 24)] - #[doc = "The requested username does not exist."] - NoUsername, - #[codec(index = 25)] - #[doc = "The username cannot be forcefully removed because it can still be accepted."] - NotExpired, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A name was set or reset (which will remove all judgements)."] - IdentitySet { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 1)] - #[doc = "A name was cleared, and the given balance returned."] - IdentityCleared { - who: ::subxt::ext::subxt_core::utils::AccountId32, - deposit: ::core::primitive::u128, - }, - #[codec(index = 2)] - #[doc = "A name was removed and the given balance slashed."] - IdentityKilled { - who: ::subxt::ext::subxt_core::utils::AccountId32, - deposit: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "A judgement was asked from a registrar."] - JudgementRequested { - who: ::subxt::ext::subxt_core::utils::AccountId32, - registrar_index: ::core::primitive::u32, - }, - #[codec(index = 4)] - #[doc = "A judgement request was retracted."] - JudgementUnrequested { - who: ::subxt::ext::subxt_core::utils::AccountId32, - registrar_index: ::core::primitive::u32, - }, - #[codec(index = 5)] - #[doc = "A judgement was given by a registrar."] - JudgementGiven { - target: ::subxt::ext::subxt_core::utils::AccountId32, - registrar_index: ::core::primitive::u32, - }, - #[codec(index = 6)] - #[doc = "A registrar was added."] - RegistrarAdded { registrar_index: ::core::primitive::u32 }, - #[codec(index = 7)] - #[doc = "A sub-identity was added to an identity and the deposit paid."] - SubIdentityAdded { - sub: ::subxt::ext::subxt_core::utils::AccountId32, - main: ::subxt::ext::subxt_core::utils::AccountId32, - deposit: ::core::primitive::u128, - }, - #[codec(index = 8)] - #[doc = "A sub-identity was removed from an identity and the deposit freed."] - SubIdentityRemoved { - sub: ::subxt::ext::subxt_core::utils::AccountId32, - main: ::subxt::ext::subxt_core::utils::AccountId32, - deposit: ::core::primitive::u128, - }, - #[codec(index = 9)] - #[doc = "A sub-identity was cleared, and the given deposit repatriated from the"] - #[doc = "main identity account to the sub-identity account."] - SubIdentityRevoked { - sub: ::subxt::ext::subxt_core::utils::AccountId32, - main: ::subxt::ext::subxt_core::utils::AccountId32, - deposit: ::core::primitive::u128, - }, - #[codec(index = 10)] - #[doc = "A username authority was added."] - AuthorityAdded { authority: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 11)] - #[doc = "A username authority was removed."] - AuthorityRemoved { authority: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 12)] - #[doc = "A username was set for `who`."] - UsernameSet { - who: ::subxt::ext::subxt_core::utils::AccountId32, - username: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - }, - #[codec(index = 13)] - #[doc = "A username was queued, but `who` must accept it prior to `expiration`."] - UsernameQueued { - who: ::subxt::ext::subxt_core::utils::AccountId32, - username: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - expiration: ::core::primitive::u64, - }, - #[codec(index = 14)] - #[doc = "A queued username passed its expiration without being claimed and was removed."] - PreapprovalExpired { whose: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 15)] - #[doc = "A username was set as a primary and can be looked up from `who`."] - PrimaryUsernameSet { - who: ::subxt::ext::subxt_core::utils::AccountId32, - username: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - }, - #[codec(index = 16)] - #[doc = "A dangling username (as in, a username corresponding to an account that has removed its"] - #[doc = "identity) has been removed."] - DanglingUsernameRemoved { - who: ::subxt::ext::subxt_core::utils::AccountId32, - username: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - }, - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct AuthorityProperties<_0> { - pub suffix: _0, - pub allocation: ::core::primitive::u32, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Data { - #[codec(index = 0)] - None, - #[codec(index = 1)] - Raw0([::core::primitive::u8; 0usize]), - #[codec(index = 2)] - Raw1([::core::primitive::u8; 1usize]), - #[codec(index = 3)] - Raw2([::core::primitive::u8; 2usize]), - #[codec(index = 4)] - Raw3([::core::primitive::u8; 3usize]), - #[codec(index = 5)] - Raw4([::core::primitive::u8; 4usize]), - #[codec(index = 6)] - Raw5([::core::primitive::u8; 5usize]), - #[codec(index = 7)] - Raw6([::core::primitive::u8; 6usize]), - #[codec(index = 8)] - Raw7([::core::primitive::u8; 7usize]), - #[codec(index = 9)] - Raw8([::core::primitive::u8; 8usize]), - #[codec(index = 10)] - Raw9([::core::primitive::u8; 9usize]), - #[codec(index = 11)] - Raw10([::core::primitive::u8; 10usize]), - #[codec(index = 12)] - Raw11([::core::primitive::u8; 11usize]), - #[codec(index = 13)] - Raw12([::core::primitive::u8; 12usize]), - #[codec(index = 14)] - Raw13([::core::primitive::u8; 13usize]), - #[codec(index = 15)] - Raw14([::core::primitive::u8; 14usize]), - #[codec(index = 16)] - Raw15([::core::primitive::u8; 15usize]), - #[codec(index = 17)] - Raw16([::core::primitive::u8; 16usize]), - #[codec(index = 18)] - Raw17([::core::primitive::u8; 17usize]), - #[codec(index = 19)] - Raw18([::core::primitive::u8; 18usize]), - #[codec(index = 20)] - Raw19([::core::primitive::u8; 19usize]), - #[codec(index = 21)] - Raw20([::core::primitive::u8; 20usize]), - #[codec(index = 22)] - Raw21([::core::primitive::u8; 21usize]), - #[codec(index = 23)] - Raw22([::core::primitive::u8; 22usize]), - #[codec(index = 24)] - Raw23([::core::primitive::u8; 23usize]), - #[codec(index = 25)] - Raw24([::core::primitive::u8; 24usize]), - #[codec(index = 26)] - Raw25([::core::primitive::u8; 25usize]), - #[codec(index = 27)] - Raw26([::core::primitive::u8; 26usize]), - #[codec(index = 28)] - Raw27([::core::primitive::u8; 27usize]), - #[codec(index = 29)] - Raw28([::core::primitive::u8; 28usize]), - #[codec(index = 30)] - Raw29([::core::primitive::u8; 29usize]), - #[codec(index = 31)] - Raw30([::core::primitive::u8; 30usize]), - #[codec(index = 32)] - Raw31([::core::primitive::u8; 31usize]), - #[codec(index = 33)] - Raw32([::core::primitive::u8; 32usize]), - #[codec(index = 34)] - BlakeTwo256([::core::primitive::u8; 32usize]), - #[codec(index = 35)] - Sha256([::core::primitive::u8; 32usize]), - #[codec(index = 36)] - Keccak256([::core::primitive::u8; 32usize]), - #[codec(index = 37)] - ShaThree256([::core::primitive::u8; 32usize]), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Judgement<_0> { - #[codec(index = 0)] - Unknown, - #[codec(index = 1)] - FeePaid(_0), - #[codec(index = 2)] - Reasonable, - #[codec(index = 3)] - KnownGood, - #[codec(index = 4)] - OutOfDate, - #[codec(index = 5)] - LowQuality, - #[codec(index = 6)] - Erroneous, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct RegistrarInfo<_0, _1, _2> { - pub account: _1, - pub fee: _0, - pub fields: _2, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Registration<_0, _2> { - pub judgements: runtime_types::bounded_collections::bounded_vec::BoundedVec<( - ::core::primitive::u32, - runtime_types::pallet_identity::types::Judgement<_0>, - )>, - pub deposit: _0, - pub info: _2, - } - } - } - pub mod pallet_im_online { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::heartbeat`]."] - heartbeat { - heartbeat: - runtime_types::pallet_im_online::Heartbeat<::core::primitive::u64>, - signature: runtime_types::pallet_im_online::sr25519::app_sr25519::Signature, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Non existent public key."] - InvalidKey, - #[codec(index = 1)] - #[doc = "Duplicated heartbeat."] - DuplicatedHeartbeat, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A new heartbeat was received from `AuthorityId`."] - HeartbeatReceived { - authority_id: runtime_types::pallet_im_online::sr25519::app_sr25519::Public, - }, - #[codec(index = 1)] - #[doc = "At the end of the session, no offence was committed."] - AllGood, - #[codec(index = 2)] - #[doc = "At the end of the session, at least one validator was found to be offline."] - SomeOffline { - offline: ::subxt::ext::subxt_core::alloc::vec::Vec<( - ::subxt::ext::subxt_core::utils::AccountId32, - runtime_types::sp_staking::Exposure< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u128, - >, - )>, - }, - } - } - pub mod sr25519 { - use super::runtime_types; - pub mod app_sr25519 { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Public(pub runtime_types::sp_core::sr25519::Public); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Signature(pub runtime_types::sp_core::sr25519::Signature); - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Heartbeat<_0> { - pub block_number: _0, - pub session_index: ::core::primitive::u32, - pub authority_index: ::core::primitive::u32, - pub validators_len: ::core::primitive::u32, - } - } - pub mod pallet_indices { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::claim`]."] - claim { index: ::core::primitive::u32 }, - #[codec(index = 1)] - #[doc = "See [`Pallet::transfer`]."] - transfer { - new: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - index: ::core::primitive::u32, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::free`]."] - free { index: ::core::primitive::u32 }, - #[codec(index = 3)] - #[doc = "See [`Pallet::force_transfer`]."] - force_transfer { - new: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - index: ::core::primitive::u32, - freeze: ::core::primitive::bool, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::freeze`]."] - freeze { index: ::core::primitive::u32 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "The index was not already assigned."] - NotAssigned, - #[codec(index = 1)] - #[doc = "The index is assigned to another account."] - NotOwner, - #[codec(index = 2)] - #[doc = "The index was not available."] - InUse, - #[codec(index = 3)] - #[doc = "The source and destination accounts are identical."] - NotTransfer, - #[codec(index = 4)] - #[doc = "The index is permanent and may not be freed/changed."] - Permanent, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A account index was assigned."] - IndexAssigned { - who: ::subxt::ext::subxt_core::utils::AccountId32, - index: ::core::primitive::u32, - }, - #[codec(index = 1)] - #[doc = "A account index has been freed up (unassigned)."] - IndexFreed { index: ::core::primitive::u32 }, - #[codec(index = 2)] - #[doc = "A account index has been frozen to its current account ID."] - IndexFrozen { - index: ::core::primitive::u32, - who: ::subxt::ext::subxt_core::utils::AccountId32, - }, - } - } - } - pub mod pallet_jobs { - use super::runtime_types; - pub mod module { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::submit_job`]."] - submit_job { - job: runtime_types::tangle_primitives::jobs::JobSubmission< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::submit_job_result`]."] - submit_job_result { - role_type: runtime_types::tangle_primitives::roles::RoleType, - job_id: ::core::primitive::u64, - result: runtime_types::tangle_primitives::jobs::JobResult< - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxKeyLen, - runtime_types::tangle_testnet_runtime::MaxSignatureLen, - runtime_types::tangle_testnet_runtime::MaxDataLen, - runtime_types::tangle_testnet_runtime::MaxProofLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::withdraw_rewards`]."] - withdraw_rewards, - #[codec(index = 3)] - #[doc = "See [`Pallet::report_inactive_validator`]."] - report_inactive_validator { - role_type: runtime_types::tangle_primitives::roles::RoleType, - job_id: ::core::primitive::u64, - validator: ::subxt::ext::subxt_core::utils::AccountId32, - offence: runtime_types::tangle_primitives::jobs::ValidatorOffenceType, - signatures: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::set_permitted_caller`]."] - set_permitted_caller { - role_type: runtime_types::tangle_primitives::roles::RoleType, - job_id: ::core::primitive::u64, - new_permitted_caller: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::set_time_fee`]."] - set_time_fee { new_fee: ::core::primitive::u128 }, - #[codec(index = 6)] - #[doc = "See [`Pallet::submit_misbehavior`]."] - submit_misbehavior { - misbehavior: - runtime_types::tangle_primitives::misbehavior::MisbehaviorSubmission, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::extend_job_result_ttl`]."] - extend_job_result_ttl { - role_type: runtime_types::tangle_primitives::roles::RoleType, - job_id: ::core::primitive::u64, - extend_by: ::core::primitive::u64, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "invalid phase provided"] - InvalidJobPhase, - #[codec(index = 1)] - #[doc = "Given validator not valid for job type"] - InvalidValidator, - #[codec(index = 2)] - #[doc = "invalid params, cannot execute jobs"] - InvalidJobParams, - #[codec(index = 3)] - #[doc = "cannot find phase 1 result"] - PreviousResultNotFound, - #[codec(index = 4)] - #[doc = "The previous result expired"] - ResultExpired, - #[codec(index = 5)] - #[doc = "Invalid job expiry input"] - JobAlreadyExpired, - #[codec(index = 6)] - #[doc = "The requested job was not found"] - JobNotFound, - #[codec(index = 7)] - #[doc = "P1 result not found"] - PhaseOneResultNotFound, - #[codec(index = 8)] - #[doc = "no rewards found for validator"] - NoRewards, - #[codec(index = 9)] - #[doc = "Not enough validators to exit"] - NotEnoughValidators, - #[codec(index = 10)] - #[doc = "empty result"] - EmptyResult, - #[codec(index = 11)] - #[doc = "empty job"] - EmptyJob, - #[codec(index = 12)] - #[doc = "Validator role key not found."] - ValidatorRoleKeyNotFound, - #[codec(index = 13)] - #[doc = "Unexpected result provided"] - ResultNotExpectedType, - #[codec(index = 14)] - #[doc = "No permission to change permitted caller"] - NoPermission, - #[codec(index = 15)] - #[doc = "Exceeds max participant limits"] - TooManyParticipants, - #[codec(index = 16)] - #[doc = "Invalid Key size"] - ExceedsMaxKeySize, - #[codec(index = 17)] - #[doc = "Validator exceeds limit of max active jobs"] - TooManyJobsForValidator, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A new job has been submitted"] - JobSubmitted { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - details: runtime_types::tangle_primitives::jobs::JobSubmission< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 1)] - #[doc = "A new job result has been submitted"] - JobResultSubmitted { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - }, - #[codec(index = 2)] - #[doc = "validator has earned reward"] - ValidatorRewarded { - id: ::subxt::ext::subxt_core::utils::AccountId32, - reward: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "An existing job was removed and refunded"] - JobRefunded { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - }, - #[codec(index = 4)] - #[doc = "The participants of a job has been updated"] - JobParticipantsUpdated { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - details: runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 5)] - #[doc = "A job has been resubmitted, this is when a phase1 result has been discarded"] - #[doc = "and a new phase1 job is requested"] - JobReSubmitted { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - details: runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 6)] - #[doc = "A job result expiry time has been extended"] - JobResultExtended { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - new_expiry: ::core::primitive::u64, - }, - } - } - } - pub mod pallet_multi_asset_delegation { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The callable functions (extrinsics) of the pallet."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::join_operators`]."] - join_operators { bond_amount: ::core::primitive::u128 }, - #[codec(index = 1)] - #[doc = "See [`Pallet::schedule_leave_operators`]."] - schedule_leave_operators, - #[codec(index = 2)] - #[doc = "See [`Pallet::cancel_leave_operators`]."] - cancel_leave_operators, - #[codec(index = 3)] - #[doc = "See [`Pallet::execute_leave_operators`]."] - execute_leave_operators, - #[codec(index = 4)] - #[doc = "See [`Pallet::operator_bond_more`]."] - operator_bond_more { additional_bond: ::core::primitive::u128 }, - #[codec(index = 5)] - #[doc = "See [`Pallet::schedule_operator_bond_less`]."] - schedule_operator_bond_less { bond_less_amount: ::core::primitive::u128 }, - #[codec(index = 6)] - #[doc = "See [`Pallet::execute_operator_bond_less`]."] - execute_operator_bond_less, - #[codec(index = 7)] - #[doc = "See [`Pallet::cancel_operator_bond_less`]."] - cancel_operator_bond_less, - #[codec(index = 8)] - #[doc = "See [`Pallet::go_offline`]."] - go_offline, - #[codec(index = 9)] - #[doc = "See [`Pallet::go_online`]."] - go_online, - #[codec(index = 10)] - #[doc = "See [`Pallet::deposit`]."] - deposit { - asset_id: ::core::option::Option<::core::primitive::u128>, - amount: ::core::primitive::u128, - }, - #[codec(index = 11)] - #[doc = "See [`Pallet::schedule_unstake`]."] - schedule_unstake { - asset_id: ::core::option::Option<::core::primitive::u128>, - amount: ::core::primitive::u128, - }, - #[codec(index = 12)] - #[doc = "See [`Pallet::execute_unstake`]."] - execute_unstake, - #[codec(index = 13)] - #[doc = "See [`Pallet::cancel_unstake`]."] - cancel_unstake, - #[codec(index = 14)] - #[doc = "See [`Pallet::delegate`]."] - delegate { - operator: ::subxt::ext::subxt_core::utils::AccountId32, - asset_id: ::core::primitive::u128, - amount: ::core::primitive::u128, - }, - #[codec(index = 15)] - #[doc = "See [`Pallet::schedule_delegator_bond_less`]."] - schedule_delegator_bond_less { - operator: ::subxt::ext::subxt_core::utils::AccountId32, - asset_id: ::core::primitive::u128, - amount: ::core::primitive::u128, - }, - #[codec(index = 16)] - #[doc = "See [`Pallet::execute_delegator_bond_less`]."] - execute_delegator_bond_less, - #[codec(index = 17)] - #[doc = "See [`Pallet::cancel_delegator_bond_less`]."] - cancel_delegator_bond_less, - #[codec(index = 18)] - #[doc = "See [`Pallet::set_whitelisted_assets`]."] - set_whitelisted_assets { - assets: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>, - }, - #[codec(index = 19)] - #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] - set_incentive_apy_and_cap { - asset_id: ::core::primitive::u128, - apy: ::core::primitive::u128, - cap: ::core::primitive::u128, - }, - #[codec(index = 20)] - #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] - whitelist_blueprint_for_rewards { blueprint_id: ::core::primitive::u32 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Errors emitted by the pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "The account is already an operator."] - AlreadyOperator, - #[codec(index = 1)] - #[doc = "The bond amount is too low."] - BondTooLow, - #[codec(index = 2)] - #[doc = "The account is not an operator."] - NotAnOperator, - #[codec(index = 3)] - #[doc = "The account cannot exit."] - CannotExit, - #[codec(index = 4)] - #[doc = "The operator is already leaving."] - AlreadyLeaving, - #[codec(index = 5)] - #[doc = "The account is not leaving as an operator."] - NotLeavingOperator, - #[codec(index = 6)] - #[doc = "The round does not match the scheduled leave round."] - NotLeavingRound, - #[codec(index = 7)] - #[doc = "There is no scheduled bond less request."] - NoScheduledBondLess, - #[codec(index = 8)] - #[doc = "The bond less request is not satisfied."] - BondLessRequestNotSatisfied, - #[codec(index = 9)] - #[doc = "The operator is not active."] - NotActiveOperator, - #[codec(index = 10)] - #[doc = "The operator is not offline."] - NotOfflineOperator, - #[codec(index = 11)] - #[doc = "The account is already a delegator."] - AlreadyDelegator, - #[codec(index = 12)] - #[doc = "The account is not a delegator."] - NotDelegator, - #[codec(index = 13)] - #[doc = "A withdraw request already exists."] - WithdrawRequestAlreadyExists, - #[codec(index = 14)] - #[doc = "The account has insufficient balance."] - InsufficientBalance, - #[codec(index = 15)] - #[doc = "There is no withdraw request."] - NoWithdrawRequest, - #[codec(index = 16)] - #[doc = "The unstake is not ready."] - UnstakeNotReady, - #[codec(index = 17)] - #[doc = "There is no bond less request."] - NoBondLessRequest, - #[codec(index = 18)] - #[doc = "The bond less request is not ready."] - BondLessNotReady, - #[codec(index = 19)] - #[doc = "A bond less request already exists."] - BondLessRequestAlreadyExists, - #[codec(index = 20)] - #[doc = "There are active services using the asset."] - ActiveServicesUsingAsset, - #[codec(index = 21)] - #[doc = "There is not active delegation"] - NoActiveDelegation, - #[codec(index = 22)] - #[doc = "The asset is not whitelisted"] - AssetNotWhitelisted, - #[codec(index = 23)] - #[doc = "The origin is not authorized to perform this action"] - NotAuthorized, - #[codec(index = 24)] - #[doc = "The asset ID is not found"] - AssetNotFound, - #[codec(index = 25)] - #[doc = "The blueprint ID is already whitelisted"] - BlueprintAlreadyWhitelisted, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Events emitted by the pallet."] - pub enum Event { - #[codec(index = 0)] - #[doc = "An operator has joined."] - OperatorJoined { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 1)] - #[doc = "An operator has scheduled to leave."] - OperatorLeavingScheduled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 2)] - #[doc = "An operator has cancelled their leave request."] - OperatorLeaveCancelled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 3)] - #[doc = "An operator has executed their leave request."] - OperatorLeaveExecuted { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 4)] - #[doc = "An operator has increased their bond."] - OperatorBondMore { - who: ::subxt::ext::subxt_core::utils::AccountId32, - additional_bond: ::core::primitive::u128, - }, - #[codec(index = 5)] - #[doc = "An operator has scheduled to decrease their bond."] - OperatorBondLessScheduled { - who: ::subxt::ext::subxt_core::utils::AccountId32, - bond_less_amount: ::core::primitive::u128, - }, - #[codec(index = 6)] - #[doc = "An operator has executed their bond decrease."] - OperatorBondLessExecuted { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 7)] - #[doc = "An operator has cancelled their bond decrease request."] - OperatorBondLessCancelled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 8)] - #[doc = "An operator has gone offline."] - OperatorWentOffline { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 9)] - #[doc = "An operator has gone online."] - OperatorWentOnline { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 10)] - #[doc = "A deposit has been made."] - Deposited { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - asset_id: ::core::option::Option<::core::primitive::u128>, - }, - #[codec(index = 11)] - #[doc = "An unstake has been scheduled."] - ScheduledUnstake { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - asset_id: ::core::option::Option<::core::primitive::u128>, - }, - #[codec(index = 12)] - #[doc = "An unstake has been executed."] - ExecutedUnstake { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 13)] - #[doc = "An unstake has been cancelled."] - CancelledUnstake { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 14)] - #[doc = "A delegation has been made."] - Delegated { - who: ::subxt::ext::subxt_core::utils::AccountId32, - operator: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - asset_id: ::core::primitive::u128, - }, - #[codec(index = 15)] - #[doc = "A delegator bond less request has been scheduled."] - ScheduledDelegatorBondLess { - who: ::subxt::ext::subxt_core::utils::AccountId32, - operator: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - asset_id: ::core::primitive::u128, - }, - #[codec(index = 16)] - #[doc = "A delegator bond less request has been executed."] - ExecutedDelegatorBondLess { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 17)] - #[doc = "A delegator bond less request has been cancelled."] - CancelledDelegatorBondLess { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 18)] - #[doc = "New whitelisted assets set"] - WhitelistedAssetsSet { - assets: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>, - }, - #[codec(index = 19)] - #[doc = "Event emitted when an incentive APY and cap are set for an asset"] - IncentiveAPYAndCapSet { - asset_id: ::core::primitive::u128, - apy: ::core::primitive::u128, - cap: ::core::primitive::u128, - }, - #[codec(index = 20)] - #[doc = "Event emitted when a blueprint is whitelisted for rewards"] - BlueprintWhitelisted { blueprint_id: ::core::primitive::u32 }, - } - } - pub mod types { - use super::runtime_types; - pub mod delegator { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct BondInfoDelegator<_0, _1, _2> { - pub operator: _0, - pub amount: _1, - pub asset_id: _2, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct BondLessRequest<_0, _1> { - pub asset_id: _0, - pub amount: _1, - pub requested_round: ::core::primitive::u32, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DelegatorMetadata < _0 , _1 , _2 > { pub deposits : :: subxt :: ext :: subxt_core :: utils :: KeyedVec < _1 , _1 > , pub unstake_request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: UnstakeRequest < _1 , _1 > > , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: BondInfoDelegator < _0 , _1 , _1 > > , pub delegator_bond_less_request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: BondLessRequest < _1 , _1 > > , pub status : runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: DelegatorStatus , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum DelegatorStatus { - #[codec(index = 0)] - Active, - #[codec(index = 1)] - LeavingScheduled(::core::primitive::u32), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct UnstakeRequest<_0, _1> { - pub asset_id: _0, - pub amount: _1, - pub requested_round: ::core::primitive::u32, - } - } - pub mod operator { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DelegatorBond<_0, _1, _2> { - pub delegator: _0, - pub amount: _1, - pub asset_id: _2, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct OperatorBondLessRequest<_0> { - pub amount: _0, - pub request_time: ::core::primitive::u32, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct OperatorMetadata < _0 , _1 , _2 > { pub bond : _1 , pub delegation_count : :: core :: primitive :: u32 , pub request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorBondLessRequest < _1 > > , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: DelegatorBond < _0 , _1 , _1 > > , pub status : runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorStatus , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct OperatorSnapshot < _0 , _1 , _2 > { pub bond : _1 , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: DelegatorBond < _0 , _1 , _1 > > , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum OperatorStatus { - #[codec(index = 0)] - Active, - #[codec(index = 1)] - Inactive, - #[codec(index = 2)] - Leaving(::core::primitive::u32), - } - } - pub mod rewards { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct RewardConfig < _0 , _1 > { pub configs : :: subxt :: ext :: subxt_core :: utils :: KeyedVec < _0 , runtime_types :: pallet_multi_asset_delegation :: types :: rewards :: RewardConfigForAsset < _0 > > , pub whitelisted_blueprint_ids : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < :: core :: primitive :: u32 > , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _1 > } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct RewardConfigForAsset<_0> { - pub apy: ::core::primitive::u128, - pub cap: _0, - } - } - } - } - pub mod pallet_multisig { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::as_multi_threshold_1`]."] - as_multi_threshold_1 { - other_signatories: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::as_multi`]."] - as_multi { - threshold: ::core::primitive::u16, - other_signatories: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - maybe_timepoint: ::core::option::Option< - runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, - >, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - max_weight: runtime_types::sp_weights::weight_v2::Weight, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::approve_as_multi`]."] - approve_as_multi { - threshold: ::core::primitive::u16, - other_signatories: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - maybe_timepoint: ::core::option::Option< - runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, - >, - call_hash: [::core::primitive::u8; 32usize], - max_weight: runtime_types::sp_weights::weight_v2::Weight, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::cancel_as_multi`]."] - cancel_as_multi { - threshold: ::core::primitive::u16, - other_signatories: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - timepoint: - runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, - call_hash: [::core::primitive::u8; 32usize], - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Threshold must be 2 or greater."] - MinimumThreshold, - #[codec(index = 1)] - #[doc = "Call is already approved by this signatory."] - AlreadyApproved, - #[codec(index = 2)] - #[doc = "Call doesn't need any (more) approvals."] - NoApprovalsNeeded, - #[codec(index = 3)] - #[doc = "There are too few signatories in the list."] - TooFewSignatories, - #[codec(index = 4)] - #[doc = "There are too many signatories in the list."] - TooManySignatories, - #[codec(index = 5)] - #[doc = "The signatories were provided out of order; they should be ordered."] - SignatoriesOutOfOrder, - #[codec(index = 6)] - #[doc = "The sender was contained in the other signatories; it shouldn't be."] - SenderInSignatories, - #[codec(index = 7)] - #[doc = "Multisig operation not found when attempting to cancel."] - NotFound, - #[codec(index = 8)] - #[doc = "Only the account that originally created the multisig is able to cancel it."] - NotOwner, - #[codec(index = 9)] - #[doc = "No timepoint was given, yet the multisig operation is already underway."] - NoTimepoint, - #[codec(index = 10)] - #[doc = "A different timepoint was given to the multisig operation that is underway."] - WrongTimepoint, - #[codec(index = 11)] - #[doc = "A timepoint was given, yet no multisig operation is underway."] - UnexpectedTimepoint, - #[codec(index = 12)] - #[doc = "The maximum weight information provided was too low."] - MaxWeightTooLow, - #[codec(index = 13)] - #[doc = "The data to be stored is already stored."] - AlreadyStored, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A new multisig operation has begun."] - NewMultisig { - approving: ::subxt::ext::subxt_core::utils::AccountId32, - multisig: ::subxt::ext::subxt_core::utils::AccountId32, - call_hash: [::core::primitive::u8; 32usize], - }, - #[codec(index = 1)] - #[doc = "A multisig operation has been approved by someone."] - MultisigApproval { - approving: ::subxt::ext::subxt_core::utils::AccountId32, - timepoint: - runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, - multisig: ::subxt::ext::subxt_core::utils::AccountId32, - call_hash: [::core::primitive::u8; 32usize], - }, - #[codec(index = 2)] - #[doc = "A multisig operation has been executed."] - MultisigExecuted { - approving: ::subxt::ext::subxt_core::utils::AccountId32, - timepoint: - runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, - multisig: ::subxt::ext::subxt_core::utils::AccountId32, - call_hash: [::core::primitive::u8; 32usize], - result: - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, - }, - #[codec(index = 3)] - #[doc = "A multisig operation has been cancelled."] - MultisigCancelled { - cancelling: ::subxt::ext::subxt_core::utils::AccountId32, - timepoint: - runtime_types::pallet_multisig::Timepoint<::core::primitive::u64>, - multisig: ::subxt::ext::subxt_core::utils::AccountId32, - call_hash: [::core::primitive::u8; 32usize], - }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Multisig<_0, _1, _2> { - pub when: runtime_types::pallet_multisig::Timepoint<_0>, - pub deposit: _1, - pub depositor: _2, - pub approvals: runtime_types::bounded_collections::bounded_vec::BoundedVec<_2>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Timepoint<_0> { - pub height: _0, - pub index: ::core::primitive::u32, - } - } - pub mod pallet_nomination_pools { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::join`]."] - join { - #[codec(compact)] - amount: ::core::primitive::u128, - pool_id: ::core::primitive::u32, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::bond_extra`]."] - bond_extra { - extra: runtime_types::pallet_nomination_pools::BondExtra< - ::core::primitive::u128, - >, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::claim_payout`]."] - claim_payout, - #[codec(index = 3)] - #[doc = "See [`Pallet::unbond`]."] - unbond { - member_account: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - #[codec(compact)] - unbonding_points: ::core::primitive::u128, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::pool_withdraw_unbonded`]."] - pool_withdraw_unbonded { - pool_id: ::core::primitive::u32, - num_slashing_spans: ::core::primitive::u32, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::withdraw_unbonded`]."] - withdraw_unbonded { - member_account: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - num_slashing_spans: ::core::primitive::u32, - }, - #[codec(index = 6)] - #[doc = "See [`Pallet::create`]."] - create { - #[codec(compact)] - amount: ::core::primitive::u128, - root: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - nominator: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - bouncer: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::create_with_pool_id`]."] - create_with_pool_id { - #[codec(compact)] - amount: ::core::primitive::u128, - root: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - nominator: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - bouncer: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - pool_id: ::core::primitive::u32, - }, - #[codec(index = 8)] - #[doc = "See [`Pallet::nominate`]."] - nominate { - pool_id: ::core::primitive::u32, - validators: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - }, - #[codec(index = 9)] - #[doc = "See [`Pallet::set_state`]."] - set_state { - pool_id: ::core::primitive::u32, - state: runtime_types::pallet_nomination_pools::PoolState, - }, - #[codec(index = 10)] - #[doc = "See [`Pallet::set_metadata`]."] - set_metadata { - pool_id: ::core::primitive::u32, - metadata: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - #[codec(index = 11)] - #[doc = "See [`Pallet::set_configs`]."] - set_configs { - min_join_bond: runtime_types::pallet_nomination_pools::ConfigOp< - ::core::primitive::u128, - >, - min_create_bond: runtime_types::pallet_nomination_pools::ConfigOp< - ::core::primitive::u128, - >, - max_pools: runtime_types::pallet_nomination_pools::ConfigOp< - ::core::primitive::u32, - >, - max_members: runtime_types::pallet_nomination_pools::ConfigOp< - ::core::primitive::u32, - >, - max_members_per_pool: runtime_types::pallet_nomination_pools::ConfigOp< - ::core::primitive::u32, - >, - global_max_commission: runtime_types::pallet_nomination_pools::ConfigOp< - runtime_types::sp_arithmetic::per_things::Perbill, - >, - }, - #[codec(index = 12)] - #[doc = "See [`Pallet::update_roles`]."] - update_roles { - pool_id: ::core::primitive::u32, - new_root: runtime_types::pallet_nomination_pools::ConfigOp< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - new_nominator: runtime_types::pallet_nomination_pools::ConfigOp< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - new_bouncer: runtime_types::pallet_nomination_pools::ConfigOp< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - }, - #[codec(index = 13)] - #[doc = "See [`Pallet::chill`]."] - chill { pool_id: ::core::primitive::u32 }, - #[codec(index = 14)] - #[doc = "See [`Pallet::bond_extra_other`]."] - bond_extra_other { - member: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - extra: runtime_types::pallet_nomination_pools::BondExtra< - ::core::primitive::u128, - >, - }, - #[codec(index = 15)] - #[doc = "See [`Pallet::set_claim_permission`]."] - set_claim_permission { - permission: runtime_types::pallet_nomination_pools::ClaimPermission, - }, - #[codec(index = 16)] - #[doc = "See [`Pallet::claim_payout_other`]."] - claim_payout_other { other: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 17)] - #[doc = "See [`Pallet::set_commission`]."] - set_commission { - pool_id: ::core::primitive::u32, - new_commission: ::core::option::Option<( - runtime_types::sp_arithmetic::per_things::Perbill, - ::subxt::ext::subxt_core::utils::AccountId32, - )>, - }, - #[codec(index = 18)] - #[doc = "See [`Pallet::set_commission_max`]."] - set_commission_max { - pool_id: ::core::primitive::u32, - max_commission: runtime_types::sp_arithmetic::per_things::Perbill, - }, - #[codec(index = 19)] - #[doc = "See [`Pallet::set_commission_change_rate`]."] - set_commission_change_rate { - pool_id: ::core::primitive::u32, - change_rate: runtime_types::pallet_nomination_pools::CommissionChangeRate< - ::core::primitive::u64, - >, - }, - #[codec(index = 20)] - #[doc = "See [`Pallet::claim_commission`]."] - claim_commission { pool_id: ::core::primitive::u32 }, - #[codec(index = 21)] - #[doc = "See [`Pallet::adjust_pool_deposit`]."] - adjust_pool_deposit { pool_id: ::core::primitive::u32 }, - #[codec(index = 22)] - #[doc = "See [`Pallet::set_commission_claim_permission`]."] - set_commission_claim_permission { - pool_id: ::core::primitive::u32, - permission: ::core::option::Option< - runtime_types::pallet_nomination_pools::CommissionClaimPermission< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - >, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum DefensiveError { - #[codec(index = 0)] - NotEnoughSpaceInUnbondPool, - #[codec(index = 1)] - PoolNotFound, - #[codec(index = 2)] - RewardPoolNotFound, - #[codec(index = 3)] - SubPoolsNotFound, - #[codec(index = 4)] - BondedStashKilledPrematurely, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "A (bonded) pool id does not exist."] - PoolNotFound, - #[codec(index = 1)] - #[doc = "An account is not a member."] - PoolMemberNotFound, - #[codec(index = 2)] - #[doc = "A reward pool does not exist. In all cases this is a system logic error."] - RewardPoolNotFound, - #[codec(index = 3)] - #[doc = "A sub pool does not exist."] - SubPoolsNotFound, - #[codec(index = 4)] - #[doc = "An account is already delegating in another pool. An account may only belong to one"] - #[doc = "pool at a time."] - AccountBelongsToOtherPool, - #[codec(index = 5)] - #[doc = "The member is fully unbonded (and thus cannot access the bonded and reward pool"] - #[doc = "anymore to, for example, collect rewards)."] - FullyUnbonding, - #[codec(index = 6)] - #[doc = "The member cannot unbond further chunks due to reaching the limit."] - MaxUnbondingLimit, - #[codec(index = 7)] - #[doc = "None of the funds can be withdrawn yet because the bonding duration has not passed."] - CannotWithdrawAny, - #[codec(index = 8)] - #[doc = "The amount does not meet the minimum bond to either join or create a pool."] - #[doc = ""] - #[doc = "The depositor can never unbond to a value less than `Pallet::depositor_min_bond`. The"] - #[doc = "caller does not have nominating permissions for the pool. Members can never unbond to a"] - #[doc = "value below `MinJoinBond`."] - MinimumBondNotMet, - #[codec(index = 9)] - #[doc = "The transaction could not be executed due to overflow risk for the pool."] - OverflowRisk, - #[codec(index = 10)] - #[doc = "A pool must be in [`PoolState::Destroying`] in order for the depositor to unbond or for"] - #[doc = "other members to be permissionlessly unbonded."] - NotDestroying, - #[codec(index = 11)] - #[doc = "The caller does not have nominating permissions for the pool."] - NotNominator, - #[codec(index = 12)] - #[doc = "Either a) the caller cannot make a valid kick or b) the pool is not destroying."] - NotKickerOrDestroying, - #[codec(index = 13)] - #[doc = "The pool is not open to join"] - NotOpen, - #[codec(index = 14)] - #[doc = "The system is maxed out on pools."] - MaxPools, - #[codec(index = 15)] - #[doc = "Too many members in the pool or system."] - MaxPoolMembers, - #[codec(index = 16)] - #[doc = "The pools state cannot be changed."] - CanNotChangeState, - #[codec(index = 17)] - #[doc = "The caller does not have adequate permissions."] - DoesNotHavePermission, - #[codec(index = 18)] - #[doc = "Metadata exceeds [`Config::MaxMetadataLen`]"] - MetadataExceedsMaxLen, - #[codec(index = 19)] - #[doc = "Some error occurred that should never happen. This should be reported to the"] - #[doc = "maintainers."] - Defensive(runtime_types::pallet_nomination_pools::pallet::DefensiveError), - #[codec(index = 20)] - #[doc = "Partial unbonding now allowed permissionlessly."] - PartialUnbondNotAllowedPermissionlessly, - #[codec(index = 21)] - #[doc = "The pool's max commission cannot be set higher than the existing value."] - MaxCommissionRestricted, - #[codec(index = 22)] - #[doc = "The supplied commission exceeds the max allowed commission."] - CommissionExceedsMaximum, - #[codec(index = 23)] - #[doc = "The supplied commission exceeds global maximum commission."] - CommissionExceedsGlobalMaximum, - #[codec(index = 24)] - #[doc = "Not enough blocks have surpassed since the last commission update."] - CommissionChangeThrottled, - #[codec(index = 25)] - #[doc = "The submitted changes to commission change rate are not allowed."] - CommissionChangeRateNotAllowed, - #[codec(index = 26)] - #[doc = "There is no pending commission to claim."] - NoPendingCommission, - #[codec(index = 27)] - #[doc = "No commission current has been set."] - NoCommissionCurrentSet, - #[codec(index = 28)] - #[doc = "Pool id currently in use."] - PoolIdInUse, - #[codec(index = 29)] - #[doc = "Pool id provided is not correct/usable."] - InvalidPoolId, - #[codec(index = 30)] - #[doc = "Bonding extra is restricted to the exact pending reward amount."] - BondExtraRestricted, - #[codec(index = 31)] - #[doc = "No imbalance in the ED deposit for the pool."] - NothingToAdjust, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Events of this pallet."] - pub enum Event { - #[codec(index = 0)] - #[doc = "A pool has been created."] - Created { - depositor: ::subxt::ext::subxt_core::utils::AccountId32, - pool_id: ::core::primitive::u32, - }, - #[codec(index = 1)] - #[doc = "A member has became bonded in a pool."] - Bonded { - member: ::subxt::ext::subxt_core::utils::AccountId32, - pool_id: ::core::primitive::u32, - bonded: ::core::primitive::u128, - joined: ::core::primitive::bool, - }, - #[codec(index = 2)] - #[doc = "A payout has been made to a member."] - PaidOut { - member: ::subxt::ext::subxt_core::utils::AccountId32, - pool_id: ::core::primitive::u32, - payout: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "A member has unbonded from their pool."] - #[doc = ""] - #[doc = "- `balance` is the corresponding balance of the number of points that has been"] - #[doc = " requested to be unbonded (the argument of the `unbond` transaction) from the bonded"] - #[doc = " pool."] - #[doc = "- `points` is the number of points that are issued as a result of `balance` being"] - #[doc = "dissolved into the corresponding unbonding pool."] - #[doc = "- `era` is the era in which the balance will be unbonded."] - #[doc = "In the absence of slashing, these values will match. In the presence of slashing, the"] - #[doc = "number of points that are issued in the unbonding pool will be less than the amount"] - #[doc = "requested to be unbonded."] - Unbonded { - member: ::subxt::ext::subxt_core::utils::AccountId32, - pool_id: ::core::primitive::u32, - balance: ::core::primitive::u128, - points: ::core::primitive::u128, - era: ::core::primitive::u32, - }, - #[codec(index = 4)] - #[doc = "A member has withdrawn from their pool."] - #[doc = ""] - #[doc = "The given number of `points` have been dissolved in return of `balance`."] - #[doc = ""] - #[doc = "Similar to `Unbonded` event, in the absence of slashing, the ratio of point to balance"] - #[doc = "will be 1."] - Withdrawn { - member: ::subxt::ext::subxt_core::utils::AccountId32, - pool_id: ::core::primitive::u32, - balance: ::core::primitive::u128, - points: ::core::primitive::u128, - }, - #[codec(index = 5)] - #[doc = "A pool has been destroyed."] - Destroyed { pool_id: ::core::primitive::u32 }, - #[codec(index = 6)] - #[doc = "The state of a pool has changed"] - StateChanged { - pool_id: ::core::primitive::u32, - new_state: runtime_types::pallet_nomination_pools::PoolState, - }, - #[codec(index = 7)] - #[doc = "A member has been removed from a pool."] - #[doc = ""] - #[doc = "The removal can be voluntary (withdrawn all unbonded funds) or involuntary (kicked)."] - MemberRemoved { - pool_id: ::core::primitive::u32, - member: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 8)] - #[doc = "The roles of a pool have been updated to the given new roles. Note that the depositor"] - #[doc = "can never change."] - RolesUpdated { - root: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - bouncer: - ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - nominator: - ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - }, - #[codec(index = 9)] - #[doc = "The active balance of pool `pool_id` has been slashed to `balance`."] - PoolSlashed { - pool_id: ::core::primitive::u32, - balance: ::core::primitive::u128, - }, - #[codec(index = 10)] - #[doc = "The unbond pool at `era` of pool `pool_id` has been slashed to `balance`."] - UnbondingPoolSlashed { - pool_id: ::core::primitive::u32, - era: ::core::primitive::u32, - balance: ::core::primitive::u128, - }, - #[codec(index = 11)] - #[doc = "A pool's commission setting has been changed."] - PoolCommissionUpdated { - pool_id: ::core::primitive::u32, - current: ::core::option::Option<( - runtime_types::sp_arithmetic::per_things::Perbill, - ::subxt::ext::subxt_core::utils::AccountId32, - )>, - }, - #[codec(index = 12)] - #[doc = "A pool's maximum commission setting has been changed."] - PoolMaxCommissionUpdated { - pool_id: ::core::primitive::u32, - max_commission: runtime_types::sp_arithmetic::per_things::Perbill, - }, - #[codec(index = 13)] - #[doc = "A pool's commission `change_rate` has been changed."] - PoolCommissionChangeRateUpdated { - pool_id: ::core::primitive::u32, - change_rate: runtime_types::pallet_nomination_pools::CommissionChangeRate< - ::core::primitive::u64, - >, - }, - #[codec(index = 14)] - #[doc = "Pool commission claim permission has been updated."] - PoolCommissionClaimPermissionUpdated { - pool_id: ::core::primitive::u32, - permission: ::core::option::Option< - runtime_types::pallet_nomination_pools::CommissionClaimPermission< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - >, - }, - #[codec(index = 15)] - #[doc = "Pool commission has been claimed."] - PoolCommissionClaimed { - pool_id: ::core::primitive::u32, - commission: ::core::primitive::u128, - }, - #[codec(index = 16)] - #[doc = "Topped up deficit in frozen ED of the reward pool."] - MinBalanceDeficitAdjusted { - pool_id: ::core::primitive::u32, - amount: ::core::primitive::u128, - }, - #[codec(index = 17)] - #[doc = "Claimed excess frozen ED of af the reward pool."] - MinBalanceExcessAdjusted { - pool_id: ::core::primitive::u32, - amount: ::core::primitive::u128, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum FreezeReason { - #[codec(index = 0)] - PoolMinBalance, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum BondExtra<_0> { - #[codec(index = 0)] - FreeBalance(_0), - #[codec(index = 1)] - Rewards, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct BondedPoolInner { - pub commission: runtime_types::pallet_nomination_pools::Commission, - pub member_counter: ::core::primitive::u32, - pub points: ::core::primitive::u128, - pub roles: runtime_types::pallet_nomination_pools::PoolRoles< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - pub state: runtime_types::pallet_nomination_pools::PoolState, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum ClaimPermission { - #[codec(index = 0)] - Permissioned, - #[codec(index = 1)] - PermissionlessCompound, - #[codec(index = 2)] - PermissionlessWithdraw, - #[codec(index = 3)] - PermissionlessAll, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Commission { - pub current: ::core::option::Option<( - runtime_types::sp_arithmetic::per_things::Perbill, - ::subxt::ext::subxt_core::utils::AccountId32, - )>, - pub max: ::core::option::Option, - pub change_rate: ::core::option::Option< - runtime_types::pallet_nomination_pools::CommissionChangeRate< - ::core::primitive::u64, - >, - >, - pub throttle_from: ::core::option::Option<::core::primitive::u64>, - pub claim_permission: ::core::option::Option< - runtime_types::pallet_nomination_pools::CommissionClaimPermission< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct CommissionChangeRate<_0> { - pub max_increase: runtime_types::sp_arithmetic::per_things::Perbill, - pub min_delay: _0, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum CommissionClaimPermission<_0> { - #[codec(index = 0)] - Permissionless, - #[codec(index = 1)] - Account(_0), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum ConfigOp<_0> { - #[codec(index = 0)] - Noop, - #[codec(index = 1)] - Set(_0), - #[codec(index = 2)] - Remove, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct PoolMember { - pub pool_id: ::core::primitive::u32, - pub points: ::core::primitive::u128, - pub last_recorded_reward_counter: - runtime_types::sp_arithmetic::fixed_point::FixedU128, - pub unbonding_eras: - runtime_types::bounded_collections::bounded_btree_map::BoundedBTreeMap< - ::core::primitive::u32, - ::core::primitive::u128, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct PoolRoles<_0> { - pub depositor: _0, - pub root: ::core::option::Option<_0>, - pub nominator: ::core::option::Option<_0>, - pub bouncer: ::core::option::Option<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum PoolState { - #[codec(index = 0)] - Open, - #[codec(index = 1)] - Blocked, - #[codec(index = 2)] - Destroying, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct RewardPool { - pub last_recorded_reward_counter: - runtime_types::sp_arithmetic::fixed_point::FixedU128, - pub last_recorded_total_payouts: ::core::primitive::u128, - pub total_rewards_claimed: ::core::primitive::u128, - pub total_commission_pending: ::core::primitive::u128, - pub total_commission_claimed: ::core::primitive::u128, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct SubPools { - pub no_era: runtime_types::pallet_nomination_pools::UnbondPool, - pub with_era: - runtime_types::bounded_collections::bounded_btree_map::BoundedBTreeMap< - ::core::primitive::u32, - runtime_types::pallet_nomination_pools::UnbondPool, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct UnbondPool { - pub points: ::core::primitive::u128, - pub balance: ::core::primitive::u128, - } - } - pub mod pallet_offences { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Events type."] - pub enum Event { - #[codec(index = 0)] - #[doc = "There is an offence reported of the given `kind` happened at the `session_index` and"] - #[doc = "(kind-specific) time slot. This event is not deposited for duplicate slashes."] - #[doc = "\\[kind, timeslot\\]."] - Offence { - kind: [::core::primitive::u8; 16usize], - timeslot: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - } - } - } - pub mod pallet_preimage { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::note_preimage`]."] - note_preimage { - bytes: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::unnote_preimage`]."] - unnote_preimage { hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 2)] - #[doc = "See [`Pallet::request_preimage`]."] - request_preimage { hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 3)] - #[doc = "See [`Pallet::unrequest_preimage`]."] - unrequest_preimage { hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 4)] - #[doc = "See [`Pallet::ensure_updated`]."] - ensure_updated { - hashes: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::H256, - >, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Preimage is too large to store on-chain."] - TooBig, - #[codec(index = 1)] - #[doc = "Preimage has already been noted on-chain."] - AlreadyNoted, - #[codec(index = 2)] - #[doc = "The user is not authorized to perform this action."] - NotAuthorized, - #[codec(index = 3)] - #[doc = "The preimage cannot be removed since it has not yet been noted."] - NotNoted, - #[codec(index = 4)] - #[doc = "A preimage may not be removed when there are outstanding requests."] - Requested, - #[codec(index = 5)] - #[doc = "The preimage request cannot be removed since no outstanding requests exist."] - NotRequested, - #[codec(index = 6)] - #[doc = "More than `MAX_HASH_UPGRADE_BULK_COUNT` hashes were requested to be upgraded at once."] - TooMany, - #[codec(index = 7)] - #[doc = "Too few hashes were requested to be upgraded (i.e. zero)."] - TooFew, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A preimage has been noted."] - Noted { hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 1)] - #[doc = "A preimage has been requested."] - Requested { hash: ::subxt::ext::subxt_core::utils::H256 }, - #[codec(index = 2)] - #[doc = "A preimage has ben cleared."] - Cleared { hash: ::subxt::ext::subxt_core::utils::H256 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum HoldReason { - #[codec(index = 0)] - Preimage, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum OldRequestStatus<_0, _1> { - #[codec(index = 0)] - Unrequested { deposit: (_0, _1), len: ::core::primitive::u32 }, - #[codec(index = 1)] - Requested { - deposit: ::core::option::Option<(_0, _1)>, - count: ::core::primitive::u32, - len: ::core::option::Option<::core::primitive::u32>, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum RequestStatus<_0, _1> { - #[codec(index = 0)] - Unrequested { ticket: (_0, _1), len: ::core::primitive::u32 }, - #[codec(index = 1)] - Requested { - maybe_ticket: ::core::option::Option<(_0, _1)>, - count: ::core::primitive::u32, - maybe_len: ::core::option::Option<::core::primitive::u32>, - }, - } - } - pub mod pallet_proxy { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::proxy`]."] - proxy { - real: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - force_proxy_type: ::core::option::Option< - runtime_types::tangle_testnet_runtime::ProxyType, - >, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::add_proxy`]."] - add_proxy { - delegate: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, - delay: ::core::primitive::u64, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::remove_proxy`]."] - remove_proxy { - delegate: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, - delay: ::core::primitive::u64, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::remove_proxies`]."] - remove_proxies, - #[codec(index = 4)] - #[doc = "See [`Pallet::create_pure`]."] - create_pure { - proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, - delay: ::core::primitive::u64, - index: ::core::primitive::u16, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::kill_pure`]."] - kill_pure { - spawner: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, - index: ::core::primitive::u16, - #[codec(compact)] - height: ::core::primitive::u64, - #[codec(compact)] - ext_index: ::core::primitive::u32, - }, - #[codec(index = 6)] - #[doc = "See [`Pallet::announce`]."] - announce { - real: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - call_hash: ::subxt::ext::subxt_core::utils::H256, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::remove_announcement`]."] - remove_announcement { - real: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - call_hash: ::subxt::ext::subxt_core::utils::H256, - }, - #[codec(index = 8)] - #[doc = "See [`Pallet::reject_announcement`]."] - reject_announcement { - delegate: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - call_hash: ::subxt::ext::subxt_core::utils::H256, - }, - #[codec(index = 9)] - #[doc = "See [`Pallet::proxy_announced`]."] - proxy_announced { - delegate: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - real: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - force_proxy_type: ::core::option::Option< - runtime_types::tangle_testnet_runtime::ProxyType, - >, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "There are too many proxies registered or too many announcements pending."] - TooMany, - #[codec(index = 1)] - #[doc = "Proxy registration not found."] - NotFound, - #[codec(index = 2)] - #[doc = "Sender is not a proxy of the account to be proxied."] - NotProxy, - #[codec(index = 3)] - #[doc = "A call which is incompatible with the proxy type's filter was attempted."] - Unproxyable, - #[codec(index = 4)] - #[doc = "Account is already a proxy."] - Duplicate, - #[codec(index = 5)] - #[doc = "Call may not be made by proxy because it may escalate its privileges."] - NoPermission, - #[codec(index = 6)] - #[doc = "Announcement, if made at all, was made too recently."] - Unannounced, - #[codec(index = 7)] - #[doc = "Cannot add self as proxy."] - NoSelfProxy, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A proxy was executed correctly, with the given."] - ProxyExecuted { - result: - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, - }, - #[codec(index = 1)] - #[doc = "A pure account has been created by new proxy with given"] - #[doc = "disambiguation index and proxy type."] - PureCreated { - pure: ::subxt::ext::subxt_core::utils::AccountId32, - who: ::subxt::ext::subxt_core::utils::AccountId32, - proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, - disambiguation_index: ::core::primitive::u16, - }, - #[codec(index = 2)] - #[doc = "An announcement was placed to make a call in the future."] - Announced { - real: ::subxt::ext::subxt_core::utils::AccountId32, - proxy: ::subxt::ext::subxt_core::utils::AccountId32, - call_hash: ::subxt::ext::subxt_core::utils::H256, - }, - #[codec(index = 3)] - #[doc = "A proxy was added."] - ProxyAdded { - delegator: ::subxt::ext::subxt_core::utils::AccountId32, - delegatee: ::subxt::ext::subxt_core::utils::AccountId32, - proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, - delay: ::core::primitive::u64, - }, - #[codec(index = 4)] - #[doc = "A proxy was removed."] - ProxyRemoved { - delegator: ::subxt::ext::subxt_core::utils::AccountId32, - delegatee: ::subxt::ext::subxt_core::utils::AccountId32, - proxy_type: runtime_types::tangle_testnet_runtime::ProxyType, - delay: ::core::primitive::u64, - }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Announcement<_0, _1, _2> { - pub real: _0, - pub call_hash: _1, - pub height: _2, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ProxyDefinition<_0, _1, _2> { - pub delegate: _0, - pub proxy_type: _1, - pub delay: _2, - } - } - pub mod pallet_roles { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::create_profile`]."] - create_profile { - profile: runtime_types::pallet_roles::profile::Profile, - max_active_services: ::core::option::Option<::core::primitive::u32>, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::update_profile`]."] - update_profile { - updated_profile: runtime_types::pallet_roles::profile::Profile, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::delete_profile`]."] - delete_profile, - #[codec(index = 3)] - #[doc = "See [`Pallet::chill`]."] - chill, - #[codec(index = 4)] - #[doc = "See [`Pallet::unbond_funds`]."] - unbond_funds { - #[codec(compact)] - amount: ::core::primitive::u128, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::withdraw_unbonded`]."] - withdraw_unbonded, - #[codec(index = 6)] - #[doc = "See [`Pallet::payout_stakers`]."] - payout_stakers { - validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, - era: ::core::primitive::u32, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::set_min_restaking_bond`]."] - set_min_restaking_bond { min_restaking_bond: ::core::primitive::u128 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Not a validator."] - NotValidator, - #[codec(index = 1)] - #[doc = "Validator has active role assigned."] - HasRoleAssigned, - #[codec(index = 2)] - #[doc = "Given role is not assigned to the validator."] - RoleNotAssigned, - #[codec(index = 3)] - #[doc = "Max role limit reached for the account."] - MaxRoles, - #[codec(index = 4)] - #[doc = "Role cannot due to pending jobs, which can't be opted out at the moment."] - RoleCannotBeRemoved, - #[codec(index = 5)] - #[doc = "Restaking amount cannot be lowered if there are any pending jobs. You can only add more"] - RestakingAmountCannotBeUpdated, - #[codec(index = 6)] - #[doc = "Invalid Restaking amount, should not exceed total staked amount."] - ExceedsMaxRestakeValue, - #[codec(index = 7)] - #[doc = "Re staking amount should be greater than minimum Restaking bond requirement."] - InsufficientRestakingBond, - #[codec(index = 8)] - #[doc = "Profile Update failed."] - ProfileUpdateFailed, - #[codec(index = 9)] - #[doc = "Profile already exists for given validator account."] - ProfileAlreadyExists, - #[codec(index = 10)] - #[doc = "Stash controller account not found in Roles Ledger."] - NoProfileFound, - #[codec(index = 11)] - #[doc = "Profile delete request failed due to pending jobs, which can't be opted out at the"] - #[doc = "moment."] - ProfileDeleteRequestFailed, - #[codec(index = 12)] - #[doc = "SessionKeys not provided"] - SessionKeysNotProvided, - #[codec(index = 13)] - #[doc = "Key size exceeded"] - KeySizeExceeded, - #[codec(index = 14)] - #[doc = "Cannot find Current era"] - CannotGetCurrentEra, - #[codec(index = 15)] - #[doc = "Invalid era info"] - InvalidEraToReward, - #[codec(index = 16)] - #[doc = "Out of bounds input"] - BoundNotMet, - #[codec(index = 17)] - #[doc = "Rewards already claimed"] - AlreadyClaimed, - #[codec(index = 18)] - #[doc = "Unlock chunks already filled"] - NoMoreChunks, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Role assigned to the validator."] - RoleAssigned { - account: ::subxt::ext::subxt_core::utils::AccountId32, - role: runtime_types::tangle_primitives::roles::RoleType, - }, - #[codec(index = 1)] - #[doc = "Removed validator from role."] - RoleRemoved { - account: ::subxt::ext::subxt_core::utils::AccountId32, - role: runtime_types::tangle_primitives::roles::RoleType, - }, - #[codec(index = 2)] - #[doc = "Slashed validator."] - Slashed { - account: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "New profile created."] - ProfileCreated { - account: ::subxt::ext::subxt_core::utils::AccountId32, - total_profile_restake: ::core::primitive::u128, - roles: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::roles::RoleType, - >, - }, - #[codec(index = 4)] - #[doc = "Profile updated."] - ProfileUpdated { - account: ::subxt::ext::subxt_core::utils::AccountId32, - total_profile_restake: ::core::primitive::u128, - roles: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::roles::RoleType, - >, - }, - #[codec(index = 5)] - #[doc = "Profile deleted."] - ProfileDeleted { account: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 6)] - #[doc = "Pending jobs,that cannot be opted out at the moment."] - PendingJobs { - pending_jobs: ::subxt::ext::subxt_core::alloc::vec::Vec<( - runtime_types::tangle_primitives::roles::RoleType, - ::core::primitive::u64, - )>, - }, - #[codec(index = 7)] - #[doc = "Roles inflation reward paid for era"] - RolesRewardSet { total_rewards: ::core::primitive::u128 }, - #[codec(index = 8)] - #[doc = "The re-stakers' rewards are getting paid."] - PayoutStarted { - era_index: ::core::primitive::u32, - validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 9)] - #[doc = "The re-staker has been rewarded by this amount."] - Rewarded { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 10)] - #[doc = "The min restaking bond amount has been updated"] - MinRestakingBondUpdated { value: ::core::primitive::u128 }, - } - } - pub mod profile { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct IndependentRestakeProfile { - pub records: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_roles::profile::Record, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Profile { - #[codec(index = 0)] - Independent(runtime_types::pallet_roles::profile::IndependentRestakeProfile), - #[codec(index = 1)] - Shared(runtime_types::pallet_roles::profile::SharedRestakeProfile), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Record { - pub role: runtime_types::tangle_primitives::roles::RoleType, - pub amount: ::core::option::Option<::core::primitive::u128>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct SharedRestakeProfile { - pub records: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_roles::profile::Record, - >, - pub amount: ::core::primitive::u128, - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct RestakingLedger { - pub stash: ::subxt::ext::subxt_core::utils::AccountId32, - #[codec(compact)] - pub total: ::core::primitive::u128, - pub profile: runtime_types::pallet_roles::profile::Profile, - pub roles: - runtime_types::bounded_collections::bounded_btree_map::BoundedBTreeMap< - runtime_types::tangle_primitives::roles::RoleType, - runtime_types::pallet_roles::profile::Record, - >, - pub role_key: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub unlocking: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_roles::types::UnlockChunk<::core::primitive::u128>, - >, - pub claimed_rewards: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u32, - >, - pub max_active_services: ::core::primitive::u32, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct UnlockChunk<_0> { - #[codec(compact)] - pub value: _0, - #[codec(compact)] - pub era: ::core::primitive::u32, - } - } - } - pub mod pallet_scheduler { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::schedule`]."] - schedule { - when: ::core::primitive::u64, - maybe_periodic: ::core::option::Option<( - ::core::primitive::u64, - ::core::primitive::u32, - )>, - priority: ::core::primitive::u8, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::cancel`]."] - cancel { when: ::core::primitive::u64, index: ::core::primitive::u32 }, - #[codec(index = 2)] - #[doc = "See [`Pallet::schedule_named`]."] - schedule_named { - id: [::core::primitive::u8; 32usize], - when: ::core::primitive::u64, - maybe_periodic: ::core::option::Option<( - ::core::primitive::u64, - ::core::primitive::u32, - )>, - priority: ::core::primitive::u8, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::cancel_named`]."] - cancel_named { id: [::core::primitive::u8; 32usize] }, - #[codec(index = 4)] - #[doc = "See [`Pallet::schedule_after`]."] - schedule_after { - after: ::core::primitive::u64, - maybe_periodic: ::core::option::Option<( - ::core::primitive::u64, - ::core::primitive::u32, - )>, - priority: ::core::primitive::u8, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::schedule_named_after`]."] - schedule_named_after { - id: [::core::primitive::u8; 32usize], - after: ::core::primitive::u64, - maybe_periodic: ::core::option::Option<( - ::core::primitive::u64, - ::core::primitive::u32, - )>, - priority: ::core::primitive::u8, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Failed to schedule a call"] - FailedToSchedule, - #[codec(index = 1)] - #[doc = "Cannot find the scheduled call."] - NotFound, - #[codec(index = 2)] - #[doc = "Given target block number is in the past."] - TargetBlockNumberInPast, - #[codec(index = 3)] - #[doc = "Reschedule failed because it does not change scheduled time."] - RescheduleNoChange, - #[codec(index = 4)] - #[doc = "Attempt to use a non-named function on a named task."] - Named, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Events type."] - pub enum Event { - #[codec(index = 0)] - #[doc = "Scheduled some task."] - Scheduled { when: ::core::primitive::u64, index: ::core::primitive::u32 }, - #[codec(index = 1)] - #[doc = "Canceled some task."] - Canceled { when: ::core::primitive::u64, index: ::core::primitive::u32 }, - #[codec(index = 2)] - #[doc = "Dispatched some task."] - Dispatched { - task: (::core::primitive::u64, ::core::primitive::u32), - id: ::core::option::Option<[::core::primitive::u8; 32usize]>, - result: - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, - }, - #[codec(index = 3)] - #[doc = "The call for the provided hash was not found so the task has been aborted."] - CallUnavailable { - task: (::core::primitive::u64, ::core::primitive::u32), - id: ::core::option::Option<[::core::primitive::u8; 32usize]>, - }, - #[codec(index = 4)] - #[doc = "The given task was unable to be renewed since the agenda is full at that block."] - PeriodicFailed { - task: (::core::primitive::u64, ::core::primitive::u32), - id: ::core::option::Option<[::core::primitive::u8; 32usize]>, - }, - #[codec(index = 5)] - #[doc = "The given task can never be executed since it is overweight."] - PermanentlyOverweight { - task: (::core::primitive::u64, ::core::primitive::u32), - id: ::core::option::Option<[::core::primitive::u8; 32usize]>, - }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Scheduled<_0, _1, _2, _3, _4> { - pub maybe_id: ::core::option::Option<_0>, - pub priority: ::core::primitive::u8, - pub call: _1, - pub maybe_periodic: ::core::option::Option<(_2, ::core::primitive::u32)>, - pub origin: _3, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_4>, - } - } - pub mod pallet_session { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_keys`]."] - set_keys { - keys: runtime_types::tangle_testnet_runtime::opaque::SessionKeys, - proof: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::purge_keys`]."] - purge_keys, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Error for the session pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Invalid ownership proof."] - InvalidProof, - #[codec(index = 1)] - #[doc = "No associated validator ID for account."] - NoAssociatedValidatorId, - #[codec(index = 2)] - #[doc = "Registered duplicate key."] - DuplicatedKey, - #[codec(index = 3)] - #[doc = "No keys are associated with this account."] - NoKeys, - #[codec(index = 4)] - #[doc = "Key setting account is not live, so it's impossible to associate keys."] - NoAccount, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "New session has happened. Note that the argument is the session index, not the"] - #[doc = "block number as the type might suggest."] - NewSession { session_index: ::core::primitive::u32 }, - } - } - } - pub mod pallet_staking { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::bond`]."] - bond { - #[codec(compact)] - value: ::core::primitive::u128, - payee: runtime_types::pallet_staking::RewardDestination< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::bond_extra`]."] - bond_extra { - #[codec(compact)] - max_additional: ::core::primitive::u128, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::unbond`]."] - unbond { - #[codec(compact)] - value: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::withdraw_unbonded`]."] - withdraw_unbonded { num_slashing_spans: ::core::primitive::u32 }, - #[codec(index = 4)] - #[doc = "See [`Pallet::validate`]."] - validate { prefs: runtime_types::pallet_staking::ValidatorPrefs }, - #[codec(index = 5)] - #[doc = "See [`Pallet::nominate`]."] - nominate { - targets: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - >, - }, - #[codec(index = 6)] - #[doc = "See [`Pallet::chill`]."] - chill, - #[codec(index = 7)] - #[doc = "See [`Pallet::set_payee`]."] - set_payee { - payee: runtime_types::pallet_staking::RewardDestination< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - }, - #[codec(index = 8)] - #[doc = "See [`Pallet::set_controller`]."] - set_controller, - #[codec(index = 9)] - #[doc = "See [`Pallet::set_validator_count`]."] - set_validator_count { - #[codec(compact)] - new: ::core::primitive::u32, - }, - #[codec(index = 10)] - #[doc = "See [`Pallet::increase_validator_count`]."] - increase_validator_count { - #[codec(compact)] - additional: ::core::primitive::u32, - }, - #[codec(index = 11)] - #[doc = "See [`Pallet::scale_validator_count`]."] - scale_validator_count { - factor: runtime_types::sp_arithmetic::per_things::Percent, - }, - #[codec(index = 12)] - #[doc = "See [`Pallet::force_no_eras`]."] - force_no_eras, - #[codec(index = 13)] - #[doc = "See [`Pallet::force_new_era`]."] - force_new_era, - #[codec(index = 14)] - #[doc = "See [`Pallet::set_invulnerables`]."] - set_invulnerables { - invulnerables: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - }, - #[codec(index = 15)] - #[doc = "See [`Pallet::force_unstake`]."] - force_unstake { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - num_slashing_spans: ::core::primitive::u32, - }, - #[codec(index = 16)] - #[doc = "See [`Pallet::force_new_era_always`]."] - force_new_era_always, - #[codec(index = 17)] - #[doc = "See [`Pallet::cancel_deferred_slash`]."] - cancel_deferred_slash { - era: ::core::primitive::u32, - slash_indices: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u32>, - }, - #[codec(index = 18)] - #[doc = "See [`Pallet::payout_stakers`]."] - payout_stakers { - validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, - era: ::core::primitive::u32, - }, - #[codec(index = 19)] - #[doc = "See [`Pallet::rebond`]."] - rebond { - #[codec(compact)] - value: ::core::primitive::u128, - }, - #[codec(index = 20)] - #[doc = "See [`Pallet::reap_stash`]."] - reap_stash { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - num_slashing_spans: ::core::primitive::u32, - }, - #[codec(index = 21)] - #[doc = "See [`Pallet::kick`]."] - kick { - who: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - >, - }, - #[codec(index = 22)] - #[doc = "See [`Pallet::set_staking_configs`]."] - set_staking_configs { - min_nominator_bond: - runtime_types::pallet_staking::pallet::pallet::ConfigOp< - ::core::primitive::u128, - >, - min_validator_bond: - runtime_types::pallet_staking::pallet::pallet::ConfigOp< - ::core::primitive::u128, - >, - max_nominator_count: - runtime_types::pallet_staking::pallet::pallet::ConfigOp< - ::core::primitive::u32, - >, - max_validator_count: - runtime_types::pallet_staking::pallet::pallet::ConfigOp< - ::core::primitive::u32, - >, - chill_threshold: - runtime_types::pallet_staking::pallet::pallet::ConfigOp< - runtime_types::sp_arithmetic::per_things::Percent, - >, - min_commission: runtime_types::pallet_staking::pallet::pallet::ConfigOp< - runtime_types::sp_arithmetic::per_things::Perbill, - >, - }, - #[codec(index = 23)] - #[doc = "See [`Pallet::chill_other`]."] - chill_other { stash: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 24)] - #[doc = "See [`Pallet::force_apply_min_commission`]."] - force_apply_min_commission { - validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 25)] - #[doc = "See [`Pallet::set_min_commission`]."] - set_min_commission { - new: runtime_types::sp_arithmetic::per_things::Perbill, - }, - #[codec(index = 26)] - #[doc = "See [`Pallet::payout_stakers_by_page`]."] - payout_stakers_by_page { - validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, - era: ::core::primitive::u32, - page: ::core::primitive::u32, - }, - #[codec(index = 27)] - #[doc = "See [`Pallet::update_payee`]."] - update_payee { controller: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 28)] - #[doc = "See [`Pallet::deprecate_controller_batch`]."] - deprecate_controller_batch { - controllers: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ConfigOp<_0> { - #[codec(index = 0)] - Noop, - #[codec(index = 1)] - Set(_0), - #[codec(index = 2)] - Remove, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Not a controller account."] - NotController, - #[codec(index = 1)] - #[doc = "Not a stash account."] - NotStash, - #[codec(index = 2)] - #[doc = "Stash is already bonded."] - AlreadyBonded, - #[codec(index = 3)] - #[doc = "Controller is already paired."] - AlreadyPaired, - #[codec(index = 4)] - #[doc = "Targets cannot be empty."] - EmptyTargets, - #[codec(index = 5)] - #[doc = "Duplicate index."] - DuplicateIndex, - #[codec(index = 6)] - #[doc = "Slash record index out of bounds."] - InvalidSlashIndex, - #[codec(index = 7)] - #[doc = "Cannot have a validator or nominator role, with value less than the minimum defined by"] - #[doc = "governance (see `MinValidatorBond` and `MinNominatorBond`). If unbonding is the"] - #[doc = "intention, `chill` first to remove one's role as validator/nominator."] - InsufficientBond, - #[codec(index = 8)] - #[doc = "Can not schedule more unlock chunks."] - NoMoreChunks, - #[codec(index = 9)] - #[doc = "Can not rebond without unlocking chunks."] - NoUnlockChunk, - #[codec(index = 10)] - #[doc = "Attempting to target a stash that still has funds."] - FundedTarget, - #[codec(index = 11)] - #[doc = "Invalid era to reward."] - InvalidEraToReward, - #[codec(index = 12)] - #[doc = "Invalid number of nominations."] - InvalidNumberOfNominations, - #[codec(index = 13)] - #[doc = "Items are not sorted and unique."] - NotSortedAndUnique, - #[codec(index = 14)] - #[doc = "Rewards for this era have already been claimed for this validator."] - AlreadyClaimed, - #[codec(index = 15)] - #[doc = "No nominators exist on this page."] - InvalidPage, - #[codec(index = 16)] - #[doc = "Incorrect previous history depth input provided."] - IncorrectHistoryDepth, - #[codec(index = 17)] - #[doc = "Incorrect number of slashing spans provided."] - IncorrectSlashingSpans, - #[codec(index = 18)] - #[doc = "Internal state has become somehow corrupted and the operation cannot continue."] - BadState, - #[codec(index = 19)] - #[doc = "Too many nomination targets supplied."] - TooManyTargets, - #[codec(index = 20)] - #[doc = "A nomination target was supplied that was blocked or otherwise not a validator."] - BadTarget, - #[codec(index = 21)] - #[doc = "The user has enough bond and thus cannot be chilled forcefully by an external person."] - CannotChillOther, - #[codec(index = 22)] - #[doc = "There are too many nominators in the system. Governance needs to adjust the staking"] - #[doc = "settings to keep things safe for the runtime."] - TooManyNominators, - #[codec(index = 23)] - #[doc = "There are too many validator candidates in the system. Governance needs to adjust the"] - #[doc = "staking settings to keep things safe for the runtime."] - TooManyValidators, - #[codec(index = 24)] - #[doc = "Commission is too low. Must be at least `MinCommission`."] - CommissionTooLow, - #[codec(index = 25)] - #[doc = "Some bound is not met."] - BoundNotMet, - #[codec(index = 26)] - #[doc = "Used when attempting to use deprecated controller account logic."] - ControllerDeprecated, - #[codec(index = 27)] - #[doc = "The user has active restake"] - RestakeActive, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "The era payout has been set; the first balance is the validator-payout; the second is"] - #[doc = "the remainder from the maximum amount of reward."] - EraPaid { - era_index: ::core::primitive::u32, - validator_payout: ::core::primitive::u128, - remainder: ::core::primitive::u128, - }, - #[codec(index = 1)] - #[doc = "The nominator has been rewarded by this amount to this destination."] - Rewarded { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - dest: runtime_types::pallet_staking::RewardDestination< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - amount: ::core::primitive::u128, - }, - #[codec(index = 2)] - #[doc = "A staker (validator or nominator) has been slashed by the given amount."] - Slashed { - staker: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "A slash for the given validator, for the given percentage of their stake, at the given"] - #[doc = "era as been reported."] - SlashReported { - validator: ::subxt::ext::subxt_core::utils::AccountId32, - fraction: runtime_types::sp_arithmetic::per_things::Perbill, - slash_era: ::core::primitive::u32, - }, - #[codec(index = 4)] - #[doc = "An old slashing report from a prior era was discarded because it could"] - #[doc = "not be processed."] - OldSlashingReportDiscarded { session_index: ::core::primitive::u32 }, - #[codec(index = 5)] - #[doc = "A new set of stakers was elected."] - StakersElected, - #[codec(index = 6)] - #[doc = "An account has bonded this amount. \\[stash, amount\\]"] - #[doc = ""] - #[doc = "NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably,"] - #[doc = "it will not be emitted for staking rewards when they are added to stake."] - Bonded { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 7)] - #[doc = "An account has unbonded this amount."] - Unbonded { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 8)] - #[doc = "An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance`"] - #[doc = "from the unlocking queue."] - Withdrawn { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 9)] - #[doc = "A nominator has been kicked from a validator."] - Kicked { - nominator: ::subxt::ext::subxt_core::utils::AccountId32, - stash: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 10)] - #[doc = "The election failed. No new era is planned."] - StakingElectionFailed, - #[codec(index = 11)] - #[doc = "An account has stopped participating as either a validator or nominator."] - Chilled { stash: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 12)] - #[doc = "The stakers' rewards are getting paid."] - PayoutStarted { - era_index: ::core::primitive::u32, - validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 13)] - #[doc = "A validator has set their preferences."] - ValidatorPrefsSet { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - prefs: runtime_types::pallet_staking::ValidatorPrefs, - }, - #[codec(index = 14)] - #[doc = "Voters size limit reached."] - SnapshotVotersSizeExceeded { size: ::core::primitive::u32 }, - #[codec(index = 15)] - #[doc = "Targets size limit reached."] - SnapshotTargetsSizeExceeded { size: ::core::primitive::u32 }, - #[codec(index = 16)] - #[doc = "A new force era mode was set."] - ForceEra { mode: runtime_types::pallet_staking::Forcing }, - } - } - } - pub mod slashing { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct SlashingSpans { - pub span_index: ::core::primitive::u32, - pub last_start: ::core::primitive::u32, - pub last_nonzero_slash: ::core::primitive::u32, - pub prior: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u32>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct SpanRecord<_0> { - pub slashed: _0, - pub paid_out: _0, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ActiveEraInfo { - pub index: ::core::primitive::u32, - pub start: ::core::option::Option<::core::primitive::u64>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct EraRewardPoints<_0> { - pub total: ::core::primitive::u32, - pub individual: - ::subxt::ext::subxt_core::utils::KeyedVec<_0, ::core::primitive::u32>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Forcing { - #[codec(index = 0)] - NotForcing, - #[codec(index = 1)] - ForceNew, - #[codec(index = 2)] - ForceNone, - #[codec(index = 3)] - ForceAlways, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Nominations { - pub targets: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - pub submitted_in: ::core::primitive::u32, - pub suppressed: ::core::primitive::bool, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum RewardDestination<_0> { - #[codec(index = 0)] - Staked, - #[codec(index = 1)] - Stash, - #[codec(index = 2)] - Controller, - #[codec(index = 3)] - Account(_0), - #[codec(index = 4)] - None, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct StakingLedger { - pub stash: ::subxt::ext::subxt_core::utils::AccountId32, - #[codec(compact)] - pub total: ::core::primitive::u128, - #[codec(compact)] - pub active: ::core::primitive::u128, - pub unlocking: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_staking::UnlockChunk<::core::primitive::u128>, - >, - pub legacy_claimed_rewards: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u32, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct UnappliedSlash<_0, _1> { - pub validator: _0, - pub own: _1, - pub others: ::subxt::ext::subxt_core::alloc::vec::Vec<(_0, _1)>, - pub reporters: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, - pub payout: _1, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct UnlockChunk<_0> { - #[codec(compact)] - pub value: _0, - #[codec(compact)] - pub era: ::core::primitive::u32, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ValidatorPrefs { - #[codec(compact)] - pub commission: runtime_types::sp_arithmetic::per_things::Perbill, - pub blocked: ::core::primitive::bool, - } - } - pub mod pallet_sudo { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::sudo`]."] - sudo { - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::sudo_unchecked_weight`]."] - sudo_unchecked_weight { - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - weight: runtime_types::sp_weights::weight_v2::Weight, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::set_key`]."] - set_key { - new: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::sudo_as`]."] - sudo_as { - who: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::remove_key`]."] - remove_key, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Error for the Sudo pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Sender must be the Sudo account."] - RequireSudo, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A sudo call just took place."] - Sudid { - sudo_result: - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, - }, - #[codec(index = 1)] - #[doc = "The sudo key has been updated."] - KeyChanged { - old: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, - new: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 2)] - #[doc = "The key was permanently removed."] - KeyRemoved, - #[codec(index = 3)] - #[doc = "A [sudo_as](Pallet::sudo_as) call just took place."] - SudoAsDone { - sudo_result: - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, - }, - } - } - } - pub mod pallet_timestamp { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set`]."] - set { - #[codec(compact)] - now: ::core::primitive::u64, - }, - } - } - } - pub mod pallet_transaction_payment { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee,"] - #[doc = "has been paid by `who`."] - TransactionFeePaid { - who: ::subxt::ext::subxt_core::utils::AccountId32, - actual_fee: ::core::primitive::u128, - tip: ::core::primitive::u128, - }, - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct FeeDetails<_0> { - pub inclusion_fee: ::core::option::Option< - runtime_types::pallet_transaction_payment::types::InclusionFee<_0>, - >, - pub tip: _0, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct InclusionFee<_0> { - pub base_fee: _0, - pub len_fee: _0, - pub adjusted_weight_fee: _0, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct RuntimeDispatchInfo<_0, _1> { - pub weight: _1, - pub class: runtime_types::frame_support::dispatch::DispatchClass, - pub partial_fee: _0, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ChargeTransactionPayment(#[codec(compact)] pub ::core::primitive::u128); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Releases { - #[codec(index = 0)] - V1Ancient, - #[codec(index = 1)] - V2, - } - } - pub mod pallet_treasury { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::propose_spend`]."] - propose_spend { - #[codec(compact)] - value: ::core::primitive::u128, - beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::reject_proposal`]."] - reject_proposal { - #[codec(compact)] - proposal_id: ::core::primitive::u32, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::approve_proposal`]."] - approve_proposal { - #[codec(compact)] - proposal_id: ::core::primitive::u32, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::spend_local`]."] - spend_local { - #[codec(compact)] - amount: ::core::primitive::u128, - beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::remove_approval`]."] - remove_approval { - #[codec(compact)] - proposal_id: ::core::primitive::u32, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::spend`]."] - spend { - asset_kind: ::subxt::ext::subxt_core::alloc::boxed::Box<()>, - #[codec(compact)] - amount: ::core::primitive::u128, - beneficiary: ::subxt::ext::subxt_core::alloc::boxed::Box< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - valid_from: ::core::option::Option<::core::primitive::u64>, - }, - #[codec(index = 6)] - #[doc = "See [`Pallet::payout`]."] - payout { index: ::core::primitive::u32 }, - #[codec(index = 7)] - #[doc = "See [`Pallet::check_status`]."] - check_status { index: ::core::primitive::u32 }, - #[codec(index = 8)] - #[doc = "See [`Pallet::void_spend`]."] - void_spend { index: ::core::primitive::u32 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Error for the treasury pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Proposer's balance is too low."] - InsufficientProposersBalance, - #[codec(index = 1)] - #[doc = "No proposal, bounty or spend at that index."] - InvalidIndex, - #[codec(index = 2)] - #[doc = "Too many approvals in the queue."] - TooManyApprovals, - #[codec(index = 3)] - #[doc = "The spend origin is valid but the amount it is allowed to spend is lower than the"] - #[doc = "amount to be spent."] - InsufficientPermission, - #[codec(index = 4)] - #[doc = "Proposal has not been approved."] - ProposalNotApproved, - #[codec(index = 5)] - #[doc = "The balance of the asset kind is not convertible to the balance of the native asset."] - FailedToConvertBalance, - #[codec(index = 6)] - #[doc = "The spend has expired and cannot be claimed."] - SpendExpired, - #[codec(index = 7)] - #[doc = "The spend is not yet eligible for payout."] - EarlyPayout, - #[codec(index = 8)] - #[doc = "The payment has already been attempted."] - AlreadyAttempted, - #[codec(index = 9)] - #[doc = "There was some issue with the mechanism of payment."] - PayoutError, - #[codec(index = 10)] - #[doc = "The payout was not yet attempted/claimed."] - NotAttempted, - #[codec(index = 11)] - #[doc = "The payment has neither failed nor succeeded yet."] - Inconclusive, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "New proposal."] - Proposed { proposal_index: ::core::primitive::u32 }, - #[codec(index = 1)] - #[doc = "We have ended a spend period and will now allocate funds."] - Spending { budget_remaining: ::core::primitive::u128 }, - #[codec(index = 2)] - #[doc = "Some funds have been allocated."] - Awarded { - proposal_index: ::core::primitive::u32, - award: ::core::primitive::u128, - account: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 3)] - #[doc = "A proposal was rejected; funds were slashed."] - Rejected { - proposal_index: ::core::primitive::u32, - slashed: ::core::primitive::u128, - }, - #[codec(index = 4)] - #[doc = "Some of our funds have been burnt."] - Burnt { burnt_funds: ::core::primitive::u128 }, - #[codec(index = 5)] - #[doc = "Spending has finished; this is the amount that rolls over until next spend."] - Rollover { rollover_balance: ::core::primitive::u128 }, - #[codec(index = 6)] - #[doc = "Some funds have been deposited."] - Deposit { value: ::core::primitive::u128 }, - #[codec(index = 7)] - #[doc = "A new spend proposal has been approved."] - SpendApproved { - proposal_index: ::core::primitive::u32, - amount: ::core::primitive::u128, - beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 8)] - #[doc = "The inactive funds of the pallet have been updated."] - UpdatedInactive { - reactivated: ::core::primitive::u128, - deactivated: ::core::primitive::u128, - }, - #[codec(index = 9)] - #[doc = "A new asset spend proposal has been approved."] - AssetSpendApproved { - index: ::core::primitive::u32, - asset_kind: (), - amount: ::core::primitive::u128, - beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, - valid_from: ::core::primitive::u64, - expire_at: ::core::primitive::u64, - }, - #[codec(index = 10)] - #[doc = "An approved spend was voided."] - AssetSpendVoided { index: ::core::primitive::u32 }, - #[codec(index = 11)] - #[doc = "A payment happened."] - Paid { index: ::core::primitive::u32, payment_id: () }, - #[codec(index = 12)] - #[doc = "A payment failed and can be retried."] - PaymentFailed { index: ::core::primitive::u32, payment_id: () }, - #[codec(index = 13)] - #[doc = "A spend was processed and removed from the storage. It might have been successfully"] - #[doc = "paid or it may have expired."] - SpendProcessed { index: ::core::primitive::u32 }, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum PaymentState<_0> { - #[codec(index = 0)] - Pending, - #[codec(index = 1)] - Attempted { id: _0 }, - #[codec(index = 2)] - Failed, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Proposal<_0, _1> { - pub proposer: _0, - pub value: _1, - pub beneficiary: _0, - pub bond: _1, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct SpendStatus<_0, _1, _2, _3, _4> { - pub asset_kind: _0, - pub amount: _1, - pub beneficiary: _2, - pub valid_from: _3, - pub expire_at: _3, - pub status: runtime_types::pallet_treasury::PaymentState<_0>, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_4>, - } - } - pub mod pallet_tx_pause { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::pause`]."] - pause { - full_name: ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ), - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::unpause`]."] - unpause { - ident: ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ), - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "The call is paused."] - IsPaused, - #[codec(index = 1)] - #[doc = "The call is unpaused."] - IsUnpaused, - #[codec(index = 2)] - #[doc = "The call is whitelisted and cannot be paused."] - Unpausable, - #[codec(index = 3)] - NotFound, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "This pallet, or a specific call is now paused."] - CallPaused { - full_name: ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ), - }, - #[codec(index = 1)] - #[doc = "This pallet, or a specific call is now unpaused."] - CallUnpaused { - full_name: ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ), - }, - } - } - } - pub mod pallet_utility { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::batch`]."] - batch { - calls: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::as_derivative`]."] - as_derivative { - index: ::core::primitive::u16, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::batch_all`]."] - batch_all { - calls: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::dispatch_as`]."] - dispatch_as { - as_origin: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::OriginCaller, - >, - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::force_batch`]."] - force_batch { - calls: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::with_weight`]."] - with_weight { - call: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::tangle_testnet_runtime::RuntimeCall, - >, - weight: runtime_types::sp_weights::weight_v2::Weight, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Too many calls batched."] - TooManyCalls, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Batch of dispatches did not complete fully. Index of first failing dispatch given, as"] - #[doc = "well as the error."] - BatchInterrupted { - index: ::core::primitive::u32, - error: runtime_types::sp_runtime::DispatchError, - }, - #[codec(index = 1)] - #[doc = "Batch of dispatches completed fully with no error."] - BatchCompleted, - #[codec(index = 2)] - #[doc = "Batch of dispatches completed but has errors."] - BatchCompletedWithErrors, - #[codec(index = 3)] - #[doc = "A single item within a Batch of dispatches has completed with no error."] - ItemCompleted, - #[codec(index = 4)] - #[doc = "A single item within a Batch of dispatches has completed with error."] - ItemFailed { error: runtime_types::sp_runtime::DispatchError }, - #[codec(index = 5)] - #[doc = "A call was dispatched."] - DispatchedAs { - result: - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, - }, - } - } - } - pub mod pallet_vesting { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::vest`]."] - vest, - #[codec(index = 1)] - #[doc = "See [`Pallet::vest_other`]."] - vest_other { - target: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::vested_transfer`]."] - vested_transfer { - target: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - schedule: runtime_types::pallet_vesting::vesting_info::VestingInfo< - ::core::primitive::u128, - ::core::primitive::u64, - >, - }, - #[codec(index = 3)] - #[doc = "See [`Pallet::force_vested_transfer`]."] - force_vested_transfer { - source: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - target: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - schedule: runtime_types::pallet_vesting::vesting_info::VestingInfo< - ::core::primitive::u128, - ::core::primitive::u64, - >, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::merge_schedules`]."] - merge_schedules { - schedule1_index: ::core::primitive::u32, - schedule2_index: ::core::primitive::u32, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::force_remove_vesting_schedule`]."] - force_remove_vesting_schedule { - target: ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >, - schedule_index: ::core::primitive::u32, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Error for the vesting pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "The account given is not vesting."] - NotVesting, - #[codec(index = 1)] - #[doc = "The account already has `MaxVestingSchedules` count of schedules and thus"] - #[doc = "cannot add another one. Consider merging existing schedules in order to add another."] - AtMaxVestingSchedules, - #[codec(index = 2)] - #[doc = "Amount being transferred is too low to create a vesting schedule."] - AmountLow, - #[codec(index = 3)] - #[doc = "An index was out of bounds of the vesting schedules."] - ScheduleIndexOutOfBounds, - #[codec(index = 4)] - #[doc = "Failed to create a new schedule because some parameter was invalid."] - InvalidScheduleParams, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "The amount vested has been updated. This could indicate a change in funds available."] - #[doc = "The balance given is the amount which is left unvested (and thus locked)."] - VestingUpdated { - account: ::subxt::ext::subxt_core::utils::AccountId32, - unvested: ::core::primitive::u128, - }, - #[codec(index = 1)] - #[doc = "An \\[account\\] has become fully vested."] - VestingCompleted { account: ::subxt::ext::subxt_core::utils::AccountId32 }, - } - } - pub mod vesting_info { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct VestingInfo<_0, _1> { - pub locked: _0, - pub per_block: _0, - pub starting_block: _1, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Releases { - #[codec(index = 0)] - V0, - #[codec(index = 1)] - V1, - } - } - pub mod pallet_zksaas { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_fee`]."] - set_fee { - fee_info: - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Unexpected job type"] - InvalidJobType, - #[codec(index = 1)] - #[doc = "Invalid proof"] - InvalidProof, - #[codec(index = 2)] - #[doc = "Malformed Proof"] - #[doc = "if the proof bytes is not correct."] - MalformedProof, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Fee has been updated to the new value"] - FeeUpdated( - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>, - ), - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct FeeInfo<_0> { - pub base_fee: _0, - pub circuit_fee: _0, - pub prove_fee: _0, - pub storage_fee_per_byte: _0, - } - } - } - pub mod primitive_types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct U256(pub [::core::primitive::u64; 4usize]); - } - pub mod rpc_primitives_txpool { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct TxPoolResponse { - pub ready: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::ethereum::transaction::TransactionV2, - >, - pub future: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::ethereum::transaction::TransactionV2, - >, - } - } - pub mod sp_arithmetic { - use super::runtime_types; - pub mod fixed_point { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct FixedU128(pub ::core::primitive::u128); - } - pub mod per_things { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct PerU16(pub ::core::primitive::u16); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Perbill(pub ::core::primitive::u32); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Percent(pub ::core::primitive::u8); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Permill(pub ::core::primitive::u32); - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum ArithmeticError { - #[codec(index = 0)] - Underflow, - #[codec(index = 1)] - Overflow, - #[codec(index = 2)] - DivisionByZero, - } - } - pub mod sp_consensus_babe { - use super::runtime_types; - pub mod app { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Public(pub runtime_types::sp_core::sr25519::Public); - } - pub mod digests { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum NextConfigDescriptor { - #[codec(index = 1)] - V1 { - c: (::core::primitive::u64, ::core::primitive::u64), - allowed_slots: runtime_types::sp_consensus_babe::AllowedSlots, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum PreDigest { - #[codec(index = 1)] - Primary(runtime_types::sp_consensus_babe::digests::PrimaryPreDigest), - #[codec(index = 2)] - SecondaryPlain( - runtime_types::sp_consensus_babe::digests::SecondaryPlainPreDigest, - ), - #[codec(index = 3)] - SecondaryVRF(runtime_types::sp_consensus_babe::digests::SecondaryVRFPreDigest), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct PrimaryPreDigest { - pub authority_index: ::core::primitive::u32, - pub slot: runtime_types::sp_consensus_slots::Slot, - pub vrf_signature: runtime_types::sp_core::sr25519::vrf::VrfSignature, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct SecondaryPlainPreDigest { - pub authority_index: ::core::primitive::u32, - pub slot: runtime_types::sp_consensus_slots::Slot, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct SecondaryVRFPreDigest { - pub authority_index: ::core::primitive::u32, - pub slot: runtime_types::sp_consensus_slots::Slot, - pub vrf_signature: runtime_types::sp_core::sr25519::vrf::VrfSignature, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum AllowedSlots { - #[codec(index = 0)] - PrimarySlots, - #[codec(index = 1)] - PrimaryAndSecondaryPlainSlots, - #[codec(index = 2)] - PrimaryAndSecondaryVRFSlots, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct BabeConfiguration { - pub slot_duration: ::core::primitive::u64, - pub epoch_length: ::core::primitive::u64, - pub c: (::core::primitive::u64, ::core::primitive::u64), - pub authorities: ::subxt::ext::subxt_core::alloc::vec::Vec<( - runtime_types::sp_consensus_babe::app::Public, - ::core::primitive::u64, - )>, - pub randomness: [::core::primitive::u8; 32usize], - pub allowed_slots: runtime_types::sp_consensus_babe::AllowedSlots, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct BabeEpochConfiguration { - pub c: (::core::primitive::u64, ::core::primitive::u64), - pub allowed_slots: runtime_types::sp_consensus_babe::AllowedSlots, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Epoch { - pub epoch_index: ::core::primitive::u64, - pub start_slot: runtime_types::sp_consensus_slots::Slot, - pub duration: ::core::primitive::u64, - pub authorities: ::subxt::ext::subxt_core::alloc::vec::Vec<( - runtime_types::sp_consensus_babe::app::Public, - ::core::primitive::u64, - )>, - pub randomness: [::core::primitive::u8; 32usize], - pub config: runtime_types::sp_consensus_babe::BabeEpochConfiguration, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct OpaqueKeyOwnershipProof( - pub ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - ); - } - pub mod sp_consensus_grandpa { - use super::runtime_types; - pub mod app { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Public(pub runtime_types::sp_core::ed25519::Public); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Signature(pub runtime_types::sp_core::ed25519::Signature); - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Equivocation<_0, _1> { - #[codec(index = 0)] - Prevote( - runtime_types::finality_grandpa::Equivocation< - runtime_types::sp_consensus_grandpa::app::Public, - runtime_types::finality_grandpa::Prevote<_0, _1>, - runtime_types::sp_consensus_grandpa::app::Signature, - >, - ), - #[codec(index = 1)] - Precommit( - runtime_types::finality_grandpa::Equivocation< - runtime_types::sp_consensus_grandpa::app::Public, - runtime_types::finality_grandpa::Precommit<_0, _1>, - runtime_types::sp_consensus_grandpa::app::Signature, - >, - ), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct EquivocationProof<_0, _1> { - pub set_id: ::core::primitive::u64, - pub equivocation: runtime_types::sp_consensus_grandpa::Equivocation<_0, _1>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct OpaqueKeyOwnershipProof( - pub ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - ); - } - pub mod sp_consensus_slots { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct EquivocationProof<_0, _1> { - pub offender: _1, - pub slot: runtime_types::sp_consensus_slots::Slot, - pub first_header: _0, - pub second_header: _0, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Slot(pub ::core::primitive::u64); - } - pub mod sp_core { - use super::runtime_types; - pub mod crypto { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct KeyTypeId(pub [::core::primitive::u8; 4usize]); - } - pub mod ecdsa { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Public(pub [::core::primitive::u8; 33usize]); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Signature(pub [::core::primitive::u8; 65usize]); - } - pub mod ed25519 { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Public(pub [::core::primitive::u8; 32usize]); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Signature(pub [::core::primitive::u8; 64usize]); - } - pub mod sr25519 { - use super::runtime_types; - pub mod vrf { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct VrfSignature { - pub pre_output: [::core::primitive::u8; 32usize], - pub proof: [::core::primitive::u8; 64usize], - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Public(pub [::core::primitive::u8; 32usize]); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Signature(pub [::core::primitive::u8; 64usize]); - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct OpaqueMetadata( - pub ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - ); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum Void {} - } - pub mod sp_inherents { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct CheckInherentsResult { - pub okay: ::core::primitive::bool, - pub fatal_error: ::core::primitive::bool, - pub errors: runtime_types::sp_inherents::InherentData, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct InherentData { - pub data: ::subxt::ext::subxt_core::utils::KeyedVec< - [::core::primitive::u8; 8usize], - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >, - } - } - pub mod sp_npos_elections { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ElectionScore { - pub minimal_stake: ::core::primitive::u128, - pub sum_stake: ::core::primitive::u128, - pub sum_stake_squared: ::core::primitive::u128, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Support<_0> { - pub total: ::core::primitive::u128, - pub voters: - ::subxt::ext::subxt_core::alloc::vec::Vec<(_0, ::core::primitive::u128)>, - } - } - pub mod sp_runtime { - use super::runtime_types; - pub mod generic { - use super::runtime_types; - pub mod block { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Block<_0, _1> { - pub header: _0, - pub extrinsics: ::subxt::ext::subxt_core::alloc::vec::Vec<_1>, - } - } - pub mod digest { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Digest { - pub logs: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::sp_runtime::generic::digest::DigestItem, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum DigestItem { - #[codec(index = 6)] - PreRuntime( - [::core::primitive::u8; 4usize], - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - ), - #[codec(index = 4)] - Consensus( - [::core::primitive::u8; 4usize], - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - ), - #[codec(index = 5)] - Seal( - [::core::primitive::u8; 4usize], - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - ), - #[codec(index = 0)] - Other(::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>), - #[codec(index = 8)] - RuntimeEnvironmentUpdated, - } - } - pub mod era { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Era { - #[codec(index = 0)] - Immortal, - #[codec(index = 1)] - Mortal1(::core::primitive::u8), - #[codec(index = 2)] - Mortal2(::core::primitive::u8), - #[codec(index = 3)] - Mortal3(::core::primitive::u8), - #[codec(index = 4)] - Mortal4(::core::primitive::u8), - #[codec(index = 5)] - Mortal5(::core::primitive::u8), - #[codec(index = 6)] - Mortal6(::core::primitive::u8), - #[codec(index = 7)] - Mortal7(::core::primitive::u8), - #[codec(index = 8)] - Mortal8(::core::primitive::u8), - #[codec(index = 9)] - Mortal9(::core::primitive::u8), - #[codec(index = 10)] - Mortal10(::core::primitive::u8), - #[codec(index = 11)] - Mortal11(::core::primitive::u8), - #[codec(index = 12)] - Mortal12(::core::primitive::u8), - #[codec(index = 13)] - Mortal13(::core::primitive::u8), - #[codec(index = 14)] - Mortal14(::core::primitive::u8), - #[codec(index = 15)] - Mortal15(::core::primitive::u8), - #[codec(index = 16)] - Mortal16(::core::primitive::u8), - #[codec(index = 17)] - Mortal17(::core::primitive::u8), - #[codec(index = 18)] - Mortal18(::core::primitive::u8), - #[codec(index = 19)] - Mortal19(::core::primitive::u8), - #[codec(index = 20)] - Mortal20(::core::primitive::u8), - #[codec(index = 21)] - Mortal21(::core::primitive::u8), - #[codec(index = 22)] - Mortal22(::core::primitive::u8), - #[codec(index = 23)] - Mortal23(::core::primitive::u8), - #[codec(index = 24)] - Mortal24(::core::primitive::u8), - #[codec(index = 25)] - Mortal25(::core::primitive::u8), - #[codec(index = 26)] - Mortal26(::core::primitive::u8), - #[codec(index = 27)] - Mortal27(::core::primitive::u8), - #[codec(index = 28)] - Mortal28(::core::primitive::u8), - #[codec(index = 29)] - Mortal29(::core::primitive::u8), - #[codec(index = 30)] - Mortal30(::core::primitive::u8), - #[codec(index = 31)] - Mortal31(::core::primitive::u8), - #[codec(index = 32)] - Mortal32(::core::primitive::u8), - #[codec(index = 33)] - Mortal33(::core::primitive::u8), - #[codec(index = 34)] - Mortal34(::core::primitive::u8), - #[codec(index = 35)] - Mortal35(::core::primitive::u8), - #[codec(index = 36)] - Mortal36(::core::primitive::u8), - #[codec(index = 37)] - Mortal37(::core::primitive::u8), - #[codec(index = 38)] - Mortal38(::core::primitive::u8), - #[codec(index = 39)] - Mortal39(::core::primitive::u8), - #[codec(index = 40)] - Mortal40(::core::primitive::u8), - #[codec(index = 41)] - Mortal41(::core::primitive::u8), - #[codec(index = 42)] - Mortal42(::core::primitive::u8), - #[codec(index = 43)] - Mortal43(::core::primitive::u8), - #[codec(index = 44)] - Mortal44(::core::primitive::u8), - #[codec(index = 45)] - Mortal45(::core::primitive::u8), - #[codec(index = 46)] - Mortal46(::core::primitive::u8), - #[codec(index = 47)] - Mortal47(::core::primitive::u8), - #[codec(index = 48)] - Mortal48(::core::primitive::u8), - #[codec(index = 49)] - Mortal49(::core::primitive::u8), - #[codec(index = 50)] - Mortal50(::core::primitive::u8), - #[codec(index = 51)] - Mortal51(::core::primitive::u8), - #[codec(index = 52)] - Mortal52(::core::primitive::u8), - #[codec(index = 53)] - Mortal53(::core::primitive::u8), - #[codec(index = 54)] - Mortal54(::core::primitive::u8), - #[codec(index = 55)] - Mortal55(::core::primitive::u8), - #[codec(index = 56)] - Mortal56(::core::primitive::u8), - #[codec(index = 57)] - Mortal57(::core::primitive::u8), - #[codec(index = 58)] - Mortal58(::core::primitive::u8), - #[codec(index = 59)] - Mortal59(::core::primitive::u8), - #[codec(index = 60)] - Mortal60(::core::primitive::u8), - #[codec(index = 61)] - Mortal61(::core::primitive::u8), - #[codec(index = 62)] - Mortal62(::core::primitive::u8), - #[codec(index = 63)] - Mortal63(::core::primitive::u8), - #[codec(index = 64)] - Mortal64(::core::primitive::u8), - #[codec(index = 65)] - Mortal65(::core::primitive::u8), - #[codec(index = 66)] - Mortal66(::core::primitive::u8), - #[codec(index = 67)] - Mortal67(::core::primitive::u8), - #[codec(index = 68)] - Mortal68(::core::primitive::u8), - #[codec(index = 69)] - Mortal69(::core::primitive::u8), - #[codec(index = 70)] - Mortal70(::core::primitive::u8), - #[codec(index = 71)] - Mortal71(::core::primitive::u8), - #[codec(index = 72)] - Mortal72(::core::primitive::u8), - #[codec(index = 73)] - Mortal73(::core::primitive::u8), - #[codec(index = 74)] - Mortal74(::core::primitive::u8), - #[codec(index = 75)] - Mortal75(::core::primitive::u8), - #[codec(index = 76)] - Mortal76(::core::primitive::u8), - #[codec(index = 77)] - Mortal77(::core::primitive::u8), - #[codec(index = 78)] - Mortal78(::core::primitive::u8), - #[codec(index = 79)] - Mortal79(::core::primitive::u8), - #[codec(index = 80)] - Mortal80(::core::primitive::u8), - #[codec(index = 81)] - Mortal81(::core::primitive::u8), - #[codec(index = 82)] - Mortal82(::core::primitive::u8), - #[codec(index = 83)] - Mortal83(::core::primitive::u8), - #[codec(index = 84)] - Mortal84(::core::primitive::u8), - #[codec(index = 85)] - Mortal85(::core::primitive::u8), - #[codec(index = 86)] - Mortal86(::core::primitive::u8), - #[codec(index = 87)] - Mortal87(::core::primitive::u8), - #[codec(index = 88)] - Mortal88(::core::primitive::u8), - #[codec(index = 89)] - Mortal89(::core::primitive::u8), - #[codec(index = 90)] - Mortal90(::core::primitive::u8), - #[codec(index = 91)] - Mortal91(::core::primitive::u8), - #[codec(index = 92)] - Mortal92(::core::primitive::u8), - #[codec(index = 93)] - Mortal93(::core::primitive::u8), - #[codec(index = 94)] - Mortal94(::core::primitive::u8), - #[codec(index = 95)] - Mortal95(::core::primitive::u8), - #[codec(index = 96)] - Mortal96(::core::primitive::u8), - #[codec(index = 97)] - Mortal97(::core::primitive::u8), - #[codec(index = 98)] - Mortal98(::core::primitive::u8), - #[codec(index = 99)] - Mortal99(::core::primitive::u8), - #[codec(index = 100)] - Mortal100(::core::primitive::u8), - #[codec(index = 101)] - Mortal101(::core::primitive::u8), - #[codec(index = 102)] - Mortal102(::core::primitive::u8), - #[codec(index = 103)] - Mortal103(::core::primitive::u8), - #[codec(index = 104)] - Mortal104(::core::primitive::u8), - #[codec(index = 105)] - Mortal105(::core::primitive::u8), - #[codec(index = 106)] - Mortal106(::core::primitive::u8), - #[codec(index = 107)] - Mortal107(::core::primitive::u8), - #[codec(index = 108)] - Mortal108(::core::primitive::u8), - #[codec(index = 109)] - Mortal109(::core::primitive::u8), - #[codec(index = 110)] - Mortal110(::core::primitive::u8), - #[codec(index = 111)] - Mortal111(::core::primitive::u8), - #[codec(index = 112)] - Mortal112(::core::primitive::u8), - #[codec(index = 113)] - Mortal113(::core::primitive::u8), - #[codec(index = 114)] - Mortal114(::core::primitive::u8), - #[codec(index = 115)] - Mortal115(::core::primitive::u8), - #[codec(index = 116)] - Mortal116(::core::primitive::u8), - #[codec(index = 117)] - Mortal117(::core::primitive::u8), - #[codec(index = 118)] - Mortal118(::core::primitive::u8), - #[codec(index = 119)] - Mortal119(::core::primitive::u8), - #[codec(index = 120)] - Mortal120(::core::primitive::u8), - #[codec(index = 121)] - Mortal121(::core::primitive::u8), - #[codec(index = 122)] - Mortal122(::core::primitive::u8), - #[codec(index = 123)] - Mortal123(::core::primitive::u8), - #[codec(index = 124)] - Mortal124(::core::primitive::u8), - #[codec(index = 125)] - Mortal125(::core::primitive::u8), - #[codec(index = 126)] - Mortal126(::core::primitive::u8), - #[codec(index = 127)] - Mortal127(::core::primitive::u8), - #[codec(index = 128)] - Mortal128(::core::primitive::u8), - #[codec(index = 129)] - Mortal129(::core::primitive::u8), - #[codec(index = 130)] - Mortal130(::core::primitive::u8), - #[codec(index = 131)] - Mortal131(::core::primitive::u8), - #[codec(index = 132)] - Mortal132(::core::primitive::u8), - #[codec(index = 133)] - Mortal133(::core::primitive::u8), - #[codec(index = 134)] - Mortal134(::core::primitive::u8), - #[codec(index = 135)] - Mortal135(::core::primitive::u8), - #[codec(index = 136)] - Mortal136(::core::primitive::u8), - #[codec(index = 137)] - Mortal137(::core::primitive::u8), - #[codec(index = 138)] - Mortal138(::core::primitive::u8), - #[codec(index = 139)] - Mortal139(::core::primitive::u8), - #[codec(index = 140)] - Mortal140(::core::primitive::u8), - #[codec(index = 141)] - Mortal141(::core::primitive::u8), - #[codec(index = 142)] - Mortal142(::core::primitive::u8), - #[codec(index = 143)] - Mortal143(::core::primitive::u8), - #[codec(index = 144)] - Mortal144(::core::primitive::u8), - #[codec(index = 145)] - Mortal145(::core::primitive::u8), - #[codec(index = 146)] - Mortal146(::core::primitive::u8), - #[codec(index = 147)] - Mortal147(::core::primitive::u8), - #[codec(index = 148)] - Mortal148(::core::primitive::u8), - #[codec(index = 149)] - Mortal149(::core::primitive::u8), - #[codec(index = 150)] - Mortal150(::core::primitive::u8), - #[codec(index = 151)] - Mortal151(::core::primitive::u8), - #[codec(index = 152)] - Mortal152(::core::primitive::u8), - #[codec(index = 153)] - Mortal153(::core::primitive::u8), - #[codec(index = 154)] - Mortal154(::core::primitive::u8), - #[codec(index = 155)] - Mortal155(::core::primitive::u8), - #[codec(index = 156)] - Mortal156(::core::primitive::u8), - #[codec(index = 157)] - Mortal157(::core::primitive::u8), - #[codec(index = 158)] - Mortal158(::core::primitive::u8), - #[codec(index = 159)] - Mortal159(::core::primitive::u8), - #[codec(index = 160)] - Mortal160(::core::primitive::u8), - #[codec(index = 161)] - Mortal161(::core::primitive::u8), - #[codec(index = 162)] - Mortal162(::core::primitive::u8), - #[codec(index = 163)] - Mortal163(::core::primitive::u8), - #[codec(index = 164)] - Mortal164(::core::primitive::u8), - #[codec(index = 165)] - Mortal165(::core::primitive::u8), - #[codec(index = 166)] - Mortal166(::core::primitive::u8), - #[codec(index = 167)] - Mortal167(::core::primitive::u8), - #[codec(index = 168)] - Mortal168(::core::primitive::u8), - #[codec(index = 169)] - Mortal169(::core::primitive::u8), - #[codec(index = 170)] - Mortal170(::core::primitive::u8), - #[codec(index = 171)] - Mortal171(::core::primitive::u8), - #[codec(index = 172)] - Mortal172(::core::primitive::u8), - #[codec(index = 173)] - Mortal173(::core::primitive::u8), - #[codec(index = 174)] - Mortal174(::core::primitive::u8), - #[codec(index = 175)] - Mortal175(::core::primitive::u8), - #[codec(index = 176)] - Mortal176(::core::primitive::u8), - #[codec(index = 177)] - Mortal177(::core::primitive::u8), - #[codec(index = 178)] - Mortal178(::core::primitive::u8), - #[codec(index = 179)] - Mortal179(::core::primitive::u8), - #[codec(index = 180)] - Mortal180(::core::primitive::u8), - #[codec(index = 181)] - Mortal181(::core::primitive::u8), - #[codec(index = 182)] - Mortal182(::core::primitive::u8), - #[codec(index = 183)] - Mortal183(::core::primitive::u8), - #[codec(index = 184)] - Mortal184(::core::primitive::u8), - #[codec(index = 185)] - Mortal185(::core::primitive::u8), - #[codec(index = 186)] - Mortal186(::core::primitive::u8), - #[codec(index = 187)] - Mortal187(::core::primitive::u8), - #[codec(index = 188)] - Mortal188(::core::primitive::u8), - #[codec(index = 189)] - Mortal189(::core::primitive::u8), - #[codec(index = 190)] - Mortal190(::core::primitive::u8), - #[codec(index = 191)] - Mortal191(::core::primitive::u8), - #[codec(index = 192)] - Mortal192(::core::primitive::u8), - #[codec(index = 193)] - Mortal193(::core::primitive::u8), - #[codec(index = 194)] - Mortal194(::core::primitive::u8), - #[codec(index = 195)] - Mortal195(::core::primitive::u8), - #[codec(index = 196)] - Mortal196(::core::primitive::u8), - #[codec(index = 197)] - Mortal197(::core::primitive::u8), - #[codec(index = 198)] - Mortal198(::core::primitive::u8), - #[codec(index = 199)] - Mortal199(::core::primitive::u8), - #[codec(index = 200)] - Mortal200(::core::primitive::u8), - #[codec(index = 201)] - Mortal201(::core::primitive::u8), - #[codec(index = 202)] - Mortal202(::core::primitive::u8), - #[codec(index = 203)] - Mortal203(::core::primitive::u8), - #[codec(index = 204)] - Mortal204(::core::primitive::u8), - #[codec(index = 205)] - Mortal205(::core::primitive::u8), - #[codec(index = 206)] - Mortal206(::core::primitive::u8), - #[codec(index = 207)] - Mortal207(::core::primitive::u8), - #[codec(index = 208)] - Mortal208(::core::primitive::u8), - #[codec(index = 209)] - Mortal209(::core::primitive::u8), - #[codec(index = 210)] - Mortal210(::core::primitive::u8), - #[codec(index = 211)] - Mortal211(::core::primitive::u8), - #[codec(index = 212)] - Mortal212(::core::primitive::u8), - #[codec(index = 213)] - Mortal213(::core::primitive::u8), - #[codec(index = 214)] - Mortal214(::core::primitive::u8), - #[codec(index = 215)] - Mortal215(::core::primitive::u8), - #[codec(index = 216)] - Mortal216(::core::primitive::u8), - #[codec(index = 217)] - Mortal217(::core::primitive::u8), - #[codec(index = 218)] - Mortal218(::core::primitive::u8), - #[codec(index = 219)] - Mortal219(::core::primitive::u8), - #[codec(index = 220)] - Mortal220(::core::primitive::u8), - #[codec(index = 221)] - Mortal221(::core::primitive::u8), - #[codec(index = 222)] - Mortal222(::core::primitive::u8), - #[codec(index = 223)] - Mortal223(::core::primitive::u8), - #[codec(index = 224)] - Mortal224(::core::primitive::u8), - #[codec(index = 225)] - Mortal225(::core::primitive::u8), - #[codec(index = 226)] - Mortal226(::core::primitive::u8), - #[codec(index = 227)] - Mortal227(::core::primitive::u8), - #[codec(index = 228)] - Mortal228(::core::primitive::u8), - #[codec(index = 229)] - Mortal229(::core::primitive::u8), - #[codec(index = 230)] - Mortal230(::core::primitive::u8), - #[codec(index = 231)] - Mortal231(::core::primitive::u8), - #[codec(index = 232)] - Mortal232(::core::primitive::u8), - #[codec(index = 233)] - Mortal233(::core::primitive::u8), - #[codec(index = 234)] - Mortal234(::core::primitive::u8), - #[codec(index = 235)] - Mortal235(::core::primitive::u8), - #[codec(index = 236)] - Mortal236(::core::primitive::u8), - #[codec(index = 237)] - Mortal237(::core::primitive::u8), - #[codec(index = 238)] - Mortal238(::core::primitive::u8), - #[codec(index = 239)] - Mortal239(::core::primitive::u8), - #[codec(index = 240)] - Mortal240(::core::primitive::u8), - #[codec(index = 241)] - Mortal241(::core::primitive::u8), - #[codec(index = 242)] - Mortal242(::core::primitive::u8), - #[codec(index = 243)] - Mortal243(::core::primitive::u8), - #[codec(index = 244)] - Mortal244(::core::primitive::u8), - #[codec(index = 245)] - Mortal245(::core::primitive::u8), - #[codec(index = 246)] - Mortal246(::core::primitive::u8), - #[codec(index = 247)] - Mortal247(::core::primitive::u8), - #[codec(index = 248)] - Mortal248(::core::primitive::u8), - #[codec(index = 249)] - Mortal249(::core::primitive::u8), - #[codec(index = 250)] - Mortal250(::core::primitive::u8), - #[codec(index = 251)] - Mortal251(::core::primitive::u8), - #[codec(index = 252)] - Mortal252(::core::primitive::u8), - #[codec(index = 253)] - Mortal253(::core::primitive::u8), - #[codec(index = 254)] - Mortal254(::core::primitive::u8), - #[codec(index = 255)] - Mortal255(::core::primitive::u8), - } + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::set_keys`]."] + set_keys { + keys: runtime_types::tangle_testnet_runtime::opaque::SessionKeys, + proof: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::purge_keys`]."] + purge_keys, } - pub mod header { + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Error for the session pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Invalid ownership proof."] + InvalidProof, + #[codec(index = 1)] + #[doc = "No associated validator ID for account."] + NoAssociatedValidatorId, + #[codec(index = 2)] + #[doc = "Registered duplicate key."] + DuplicatedKey, + #[codec(index = 3)] + #[doc = "No keys are associated with this account."] + NoKeys, + #[codec(index = 4)] + #[doc = "Key setting account is not live, so it's impossible to associate keys."] + NoAccount, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "New session has happened. Note that the argument is the session index, not the"] + #[doc = "block number as the type might suggest."] + NewSession { session_index: ::core::primitive::u32 }, + } + } + } + pub mod pallet_staking { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; + pub mod pallet { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -56820,38 +46350,440 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Header<_0> { - pub parent_hash: ::subxt::ext::subxt_core::utils::H256, - #[codec(compact)] - pub number: _0, - pub state_root: ::subxt::ext::subxt_core::utils::H256, - pub extrinsics_root: ::subxt::ext::subxt_core::utils::H256, - pub digest: runtime_types::sp_runtime::generic::digest::Digest, + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::bond`]."] + bond { + #[codec(compact)] + value: ::core::primitive::u128, + payee: runtime_types::pallet_staking::RewardDestination< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::bond_extra`]."] + bond_extra { + #[codec(compact)] + max_additional: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::unbond`]."] + unbond { + #[codec(compact)] + value: ::core::primitive::u128, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::withdraw_unbonded`]."] + withdraw_unbonded { num_slashing_spans: ::core::primitive::u32 }, + #[codec(index = 4)] + #[doc = "See [`Pallet::validate`]."] + validate { prefs: runtime_types::pallet_staking::ValidatorPrefs }, + #[codec(index = 5)] + #[doc = "See [`Pallet::nominate`]."] + nominate { + targets: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + >, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::chill`]."] + chill, + #[codec(index = 7)] + #[doc = "See [`Pallet::set_payee`]."] + set_payee { + payee: runtime_types::pallet_staking::RewardDestination< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + }, + #[codec(index = 8)] + #[doc = "See [`Pallet::set_controller`]."] + set_controller, + #[codec(index = 9)] + #[doc = "See [`Pallet::set_validator_count`]."] + set_validator_count { + #[codec(compact)] + new: ::core::primitive::u32, + }, + #[codec(index = 10)] + #[doc = "See [`Pallet::increase_validator_count`]."] + increase_validator_count { + #[codec(compact)] + additional: ::core::primitive::u32, + }, + #[codec(index = 11)] + #[doc = "See [`Pallet::scale_validator_count`]."] + scale_validator_count { + factor: runtime_types::sp_arithmetic::per_things::Percent, + }, + #[codec(index = 12)] + #[doc = "See [`Pallet::force_no_eras`]."] + force_no_eras, + #[codec(index = 13)] + #[doc = "See [`Pallet::force_new_era`]."] + force_new_era, + #[codec(index = 14)] + #[doc = "See [`Pallet::set_invulnerables`]."] + set_invulnerables { + invulnerables: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + }, + #[codec(index = 15)] + #[doc = "See [`Pallet::force_unstake`]."] + force_unstake { + stash: ::subxt::ext::subxt_core::utils::AccountId32, + num_slashing_spans: ::core::primitive::u32, + }, + #[codec(index = 16)] + #[doc = "See [`Pallet::force_new_era_always`]."] + force_new_era_always, + #[codec(index = 17)] + #[doc = "See [`Pallet::cancel_deferred_slash`]."] + cancel_deferred_slash { + era: ::core::primitive::u32, + slash_indices: + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u32>, + }, + #[codec(index = 18)] + #[doc = "See [`Pallet::payout_stakers`]."] + payout_stakers { + validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, + era: ::core::primitive::u32, + }, + #[codec(index = 19)] + #[doc = "See [`Pallet::rebond`]."] + rebond { + #[codec(compact)] + value: ::core::primitive::u128, + }, + #[codec(index = 20)] + #[doc = "See [`Pallet::reap_stash`]."] + reap_stash { + stash: ::subxt::ext::subxt_core::utils::AccountId32, + num_slashing_spans: ::core::primitive::u32, + }, + #[codec(index = 21)] + #[doc = "See [`Pallet::kick`]."] + kick { + who: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + >, + }, + #[codec(index = 22)] + #[doc = "See [`Pallet::set_staking_configs`]."] + set_staking_configs { + min_nominator_bond: + runtime_types::pallet_staking::pallet::pallet::ConfigOp< + ::core::primitive::u128, + >, + min_validator_bond: + runtime_types::pallet_staking::pallet::pallet::ConfigOp< + ::core::primitive::u128, + >, + max_nominator_count: + runtime_types::pallet_staking::pallet::pallet::ConfigOp< + ::core::primitive::u32, + >, + max_validator_count: + runtime_types::pallet_staking::pallet::pallet::ConfigOp< + ::core::primitive::u32, + >, + chill_threshold: + runtime_types::pallet_staking::pallet::pallet::ConfigOp< + runtime_types::sp_arithmetic::per_things::Percent, + >, + min_commission: runtime_types::pallet_staking::pallet::pallet::ConfigOp< + runtime_types::sp_arithmetic::per_things::Perbill, + >, + }, + #[codec(index = 23)] + #[doc = "See [`Pallet::chill_other`]."] + chill_other { stash: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 24)] + #[doc = "See [`Pallet::force_apply_min_commission`]."] + force_apply_min_commission { + validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 25)] + #[doc = "See [`Pallet::set_min_commission`]."] + set_min_commission { + new: runtime_types::sp_arithmetic::per_things::Perbill, + }, + #[codec(index = 26)] + #[doc = "See [`Pallet::payout_stakers_by_page`]."] + payout_stakers_by_page { + validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, + era: ::core::primitive::u32, + page: ::core::primitive::u32, + }, + #[codec(index = 27)] + #[doc = "See [`Pallet::update_payee`]."] + update_payee { controller: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 28)] + #[doc = "See [`Pallet::deprecate_controller_batch`]."] + deprecate_controller_batch { + controllers: + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + }, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum ConfigOp<_0> { + #[codec(index = 0)] + Noop, + #[codec(index = 1)] + Set(_0), + #[codec(index = 2)] + Remove, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Not a controller account."] + NotController, + #[codec(index = 1)] + #[doc = "Not a stash account."] + NotStash, + #[codec(index = 2)] + #[doc = "Stash is already bonded."] + AlreadyBonded, + #[codec(index = 3)] + #[doc = "Controller is already paired."] + AlreadyPaired, + #[codec(index = 4)] + #[doc = "Targets cannot be empty."] + EmptyTargets, + #[codec(index = 5)] + #[doc = "Duplicate index."] + DuplicateIndex, + #[codec(index = 6)] + #[doc = "Slash record index out of bounds."] + InvalidSlashIndex, + #[codec(index = 7)] + #[doc = "Cannot have a validator or nominator role, with value less than the minimum defined by"] + #[doc = "governance (see `MinValidatorBond` and `MinNominatorBond`). If unbonding is the"] + #[doc = "intention, `chill` first to remove one's role as validator/nominator."] + InsufficientBond, + #[codec(index = 8)] + #[doc = "Can not schedule more unlock chunks."] + NoMoreChunks, + #[codec(index = 9)] + #[doc = "Can not rebond without unlocking chunks."] + NoUnlockChunk, + #[codec(index = 10)] + #[doc = "Attempting to target a stash that still has funds."] + FundedTarget, + #[codec(index = 11)] + #[doc = "Invalid era to reward."] + InvalidEraToReward, + #[codec(index = 12)] + #[doc = "Invalid number of nominations."] + InvalidNumberOfNominations, + #[codec(index = 13)] + #[doc = "Items are not sorted and unique."] + NotSortedAndUnique, + #[codec(index = 14)] + #[doc = "Rewards for this era have already been claimed for this validator."] + AlreadyClaimed, + #[codec(index = 15)] + #[doc = "No nominators exist on this page."] + InvalidPage, + #[codec(index = 16)] + #[doc = "Incorrect previous history depth input provided."] + IncorrectHistoryDepth, + #[codec(index = 17)] + #[doc = "Incorrect number of slashing spans provided."] + IncorrectSlashingSpans, + #[codec(index = 18)] + #[doc = "Internal state has become somehow corrupted and the operation cannot continue."] + BadState, + #[codec(index = 19)] + #[doc = "Too many nomination targets supplied."] + TooManyTargets, + #[codec(index = 20)] + #[doc = "A nomination target was supplied that was blocked or otherwise not a validator."] + BadTarget, + #[codec(index = 21)] + #[doc = "The user has enough bond and thus cannot be chilled forcefully by an external person."] + CannotChillOther, + #[codec(index = 22)] + #[doc = "There are too many nominators in the system. Governance needs to adjust the staking"] + #[doc = "settings to keep things safe for the runtime."] + TooManyNominators, + #[codec(index = 23)] + #[doc = "There are too many validator candidates in the system. Governance needs to adjust the"] + #[doc = "staking settings to keep things safe for the runtime."] + TooManyValidators, + #[codec(index = 24)] + #[doc = "Commission is too low. Must be at least `MinCommission`."] + CommissionTooLow, + #[codec(index = 25)] + #[doc = "Some bound is not met."] + BoundNotMet, + #[codec(index = 26)] + #[doc = "Used when attempting to use deprecated controller account logic."] + ControllerDeprecated, + #[codec(index = 27)] + #[doc = "The user has active restake"] + RestakeActive, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "The era payout has been set; the first balance is the validator-payout; the second is"] + #[doc = "the remainder from the maximum amount of reward."] + EraPaid { + era_index: ::core::primitive::u32, + validator_payout: ::core::primitive::u128, + remainder: ::core::primitive::u128, + }, + #[codec(index = 1)] + #[doc = "The nominator has been rewarded by this amount to this destination."] + Rewarded { + stash: ::subxt::ext::subxt_core::utils::AccountId32, + dest: runtime_types::pallet_staking::RewardDestination< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + amount: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "A staker (validator or nominator) has been slashed by the given amount."] + Slashed { + staker: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 3)] + #[doc = "A slash for the given validator, for the given percentage of their stake, at the given"] + #[doc = "era as been reported."] + SlashReported { + validator: ::subxt::ext::subxt_core::utils::AccountId32, + fraction: runtime_types::sp_arithmetic::per_things::Perbill, + slash_era: ::core::primitive::u32, + }, + #[codec(index = 4)] + #[doc = "An old slashing report from a prior era was discarded because it could"] + #[doc = "not be processed."] + OldSlashingReportDiscarded { session_index: ::core::primitive::u32 }, + #[codec(index = 5)] + #[doc = "A new set of stakers was elected."] + StakersElected, + #[codec(index = 6)] + #[doc = "An account has bonded this amount. \\[stash, amount\\]"] + #[doc = ""] + #[doc = "NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably,"] + #[doc = "it will not be emitted for staking rewards when they are added to stake."] + Bonded { + stash: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 7)] + #[doc = "An account has unbonded this amount."] + Unbonded { + stash: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 8)] + #[doc = "An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance`"] + #[doc = "from the unlocking queue."] + Withdrawn { + stash: ::subxt::ext::subxt_core::utils::AccountId32, + amount: ::core::primitive::u128, + }, + #[codec(index = 9)] + #[doc = "A nominator has been kicked from a validator."] + Kicked { + nominator: ::subxt::ext::subxt_core::utils::AccountId32, + stash: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 10)] + #[doc = "The election failed. No new era is planned."] + StakingElectionFailed, + #[codec(index = 11)] + #[doc = "An account has stopped participating as either a validator or nominator."] + Chilled { stash: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[codec(index = 12)] + #[doc = "The stakers' rewards are getting paid."] + PayoutStarted { + era_index: ::core::primitive::u32, + validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 13)] + #[doc = "A validator has set their preferences."] + ValidatorPrefsSet { + stash: ::subxt::ext::subxt_core::utils::AccountId32, + prefs: runtime_types::pallet_staking::ValidatorPrefs, + }, + #[codec(index = 14)] + #[doc = "Voters size limit reached."] + SnapshotVotersSizeExceeded { size: ::core::primitive::u32 }, + #[codec(index = 15)] + #[doc = "Targets size limit reached."] + SnapshotTargetsSizeExceeded { size: ::core::primitive::u32 }, + #[codec(index = 16)] + #[doc = "A new force era mode was set."] + ForceEra { mode: runtime_types::pallet_staking::Forcing }, } } } - pub mod traits { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct BlakeTwo256; - } - pub mod transaction_validity { + pub mod slashing { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -56870,102 +46802,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum InvalidTransaction { - #[codec(index = 0)] - Call, - #[codec(index = 1)] - Payment, - #[codec(index = 2)] - Future, - #[codec(index = 3)] - Stale, - #[codec(index = 4)] - BadProof, - #[codec(index = 5)] - AncientBirthBlock, - #[codec(index = 6)] - ExhaustsResources, - #[codec(index = 7)] - Custom(::core::primitive::u8), - #[codec(index = 8)] - BadMandatory, - #[codec(index = 9)] - MandatoryValidation, - #[codec(index = 10)] - BadSigner, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum TransactionSource { - #[codec(index = 0)] - InBlock, - #[codec(index = 1)] - Local, - #[codec(index = 2)] - External, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum TransactionValidityError { - #[codec(index = 0)] - Invalid(runtime_types::sp_runtime::transaction_validity::InvalidTransaction), - #[codec(index = 1)] - Unknown(runtime_types::sp_runtime::transaction_validity::UnknownTransaction), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum UnknownTransaction { - #[codec(index = 0)] - CannotLookup, - #[codec(index = 1)] - NoUnsignedValidator, - #[codec(index = 2)] - Custom(::core::primitive::u8), + pub struct SlashingSpans { + pub span_index: ::core::primitive::u32, + pub last_start: ::core::primitive::u32, + pub last_nonzero_slash: ::core::primitive::u32, + pub prior: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u32>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -56984,16 +46825,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct ValidTransaction { - pub priority: ::core::primitive::u64, - pub requires: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >, - pub provides: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >, - pub longevity: ::core::primitive::u64, - pub propagate: ::core::primitive::bool, + pub struct SpanRecord<_0> { + pub slashed: _0, + pub paid_out: _0, } } #[derive( @@ -57009,35 +46843,9 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum DispatchError { - #[codec(index = 0)] - Other, - #[codec(index = 1)] - CannotLookup, - #[codec(index = 2)] - BadOrigin, - #[codec(index = 3)] - Module(runtime_types::sp_runtime::ModuleError), - #[codec(index = 4)] - ConsumerRemaining, - #[codec(index = 5)] - NoProviders, - #[codec(index = 6)] - TooManyConsumers, - #[codec(index = 7)] - Token(runtime_types::sp_runtime::TokenError), - #[codec(index = 8)] - Arithmetic(runtime_types::sp_arithmetic::ArithmeticError), - #[codec(index = 9)] - Transactional(runtime_types::sp_runtime::TransactionalError), - #[codec(index = 10)] - Exhausted, - #[codec(index = 11)] - Corruption, - #[codec(index = 12)] - Unavailable, - #[codec(index = 13)] - RootNotAllowed, + pub struct ActiveEraInfo { + pub index: ::core::primitive::u32, + pub start: ::core::option::Option<::core::primitive::u64>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57052,9 +46860,10 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ModuleError { - pub index: ::core::primitive::u8, - pub error: [::core::primitive::u8; 4usize], + pub struct EraRewardPoints<_0> { + pub total: ::core::primitive::u32, + pub individual: + ::subxt::ext::subxt_core::utils::KeyedVec<_0, ::core::primitive::u32>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57069,13 +46878,15 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum MultiSignature { + pub enum Forcing { #[codec(index = 0)] - Ed25519(runtime_types::sp_core::ed25519::Signature), + NotForcing, #[codec(index = 1)] - Sr25519(runtime_types::sp_core::sr25519::Signature), + ForceNew, #[codec(index = 2)] - Ecdsa(runtime_types::sp_core::ecdsa::Signature), + ForceNone, + #[codec(index = 3)] + ForceAlways, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57090,27 +46901,37 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum TokenError { + pub struct Nominations { + pub targets: runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + pub submitted_in: ::core::primitive::u32, + pub suppressed: ::core::primitive::bool, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum RewardDestination<_0> { #[codec(index = 0)] - FundsUnavailable, + Staked, #[codec(index = 1)] - OnlyProvider, + Stash, #[codec(index = 2)] - BelowMinimum, + Controller, #[codec(index = 3)] - CannotCreate, + Account(_0), #[codec(index = 4)] - UnknownAsset, - #[codec(index = 5)] - Frozen, - #[codec(index = 6)] - Unsupported, - #[codec(index = 7)] - CannotCreateHold, - #[codec(index = 8)] - NotExpendable, - #[codec(index = 9)] - Blocked, + None, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57125,15 +46946,20 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum TransactionalError { - #[codec(index = 0)] - LimitReached, - #[codec(index = 1)] - NoLayer, + pub struct StakingLedger { + pub stash: ::subxt::ext::subxt_core::utils::AccountId32, + #[codec(compact)] + pub total: ::core::primitive::u128, + #[codec(compact)] + pub active: ::core::primitive::u128, + pub unlocking: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::pallet_staking::UnlockChunk<::core::primitive::u128>, + >, + pub legacy_claimed_rewards: + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u32, + >, } - } - pub mod sp_session { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -57147,17 +46973,244 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MembershipProof { - pub session: ::core::primitive::u32, - pub trie_nodes: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >, - pub validator_count: ::core::primitive::u32, + pub struct UnappliedSlash<_0, _1> { + pub validator: _0, + pub own: _1, + pub others: ::subxt::ext::subxt_core::alloc::vec::Vec<(_0, _1)>, + pub reporters: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, + pub payout: _1, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct UnlockChunk<_0> { + #[codec(compact)] + pub value: _0, + #[codec(compact)] + pub era: ::core::primitive::u32, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct ValidatorPrefs { + #[codec(compact)] + pub commission: runtime_types::sp_arithmetic::per_things::Perbill, + pub blocked: ::core::primitive::bool, } } - pub mod sp_staking { + pub mod pallet_sudo { use super::runtime_types; - pub mod offence { + pub mod pallet { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::sudo`]."] + sudo { + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::sudo_unchecked_weight`]."] + sudo_unchecked_weight { + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + weight: runtime_types::sp_weights::weight_v2::Weight, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::set_key`]."] + set_key { + new: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::sudo_as`]."] + sudo_as { + who: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::remove_key`]."] + remove_key, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Error for the Sudo pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Sender must be the Sudo account."] + RequireSudo, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A sudo call just took place."] + Sudid { + sudo_result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, + }, + #[codec(index = 1)] + #[doc = "The sudo key has been updated."] + KeyChanged { + old: ::core::option::Option<::subxt::ext::subxt_core::utils::AccountId32>, + new: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 2)] + #[doc = "The key was permanently removed."] + KeyRemoved, + #[codec(index = 3)] + #[doc = "A [sudo_as](Pallet::sudo_as) call just took place."] + SudoAsDone { + sudo_result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, + }, + } + } + } + pub mod pallet_timestamp { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::set`]."] + set { + #[codec(compact)] + now: ::core::primitive::u64, + }, + } + } + } + pub mod pallet_transaction_payment { + use super::runtime_types; + pub mod pallet { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee,"] + #[doc = "has been paid by `who`."] + TransactionFeePaid { + who: ::subxt::ext::subxt_core::utils::AccountId32, + actual_fee: ::core::primitive::u128, + tip: ::core::primitive::u128, + }, + } + } + pub mod types { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57176,9 +47229,55 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct OffenceDetails<_0, _1> { - pub offender: _1, - pub reporters: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, + pub struct FeeDetails<_0> { + pub inclusion_fee: ::core::option::Option< + runtime_types::pallet_transaction_payment::types::InclusionFee<_0>, + >, + pub tip: _0, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct InclusionFee<_0> { + pub base_fee: _0, + pub len_fee: _0, + pub adjusted_weight_fee: _0, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct RuntimeDispatchInfo<_0, _1> { + pub weight: _1, + pub class: runtime_types::frame_support::dispatch::DispatchClass, + pub partial_fee: _0, } } #[derive( @@ -57194,77 +47293,7 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct Exposure<_0, _1> { - #[codec(compact)] - pub total: _1, - #[codec(compact)] - pub own: _1, - pub others: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::sp_staking::IndividualExposure<_0, _1>, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct ExposurePage<_0, _1> { - #[codec(compact)] - pub page_total: _1, - pub others: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::sp_staking::IndividualExposure<_0, _1>, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct IndividualExposure<_0, _1> { - pub who: _0, - #[codec(compact)] - pub value: _1, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct PagedExposureMetadata<_0> { - #[codec(compact)] - pub total: _0, - #[codec(compact)] - pub own: _0, - pub nominator_count: ::core::primitive::u32, - pub page_count: ::core::primitive::u32, - } - } - pub mod sp_version { - use super::runtime_types; + pub struct ChargeTransactionPayment(#[codec(compact)] pub ::core::primitive::u128); #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -57278,23 +47307,16 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct RuntimeVersion { - pub spec_name: ::subxt::ext::subxt_core::alloc::string::String, - pub impl_name: ::subxt::ext::subxt_core::alloc::string::String, - pub authoring_version: ::core::primitive::u32, - pub spec_version: ::core::primitive::u32, - pub impl_version: ::core::primitive::u32, - pub apis: ::subxt::ext::subxt_core::alloc::vec::Vec<( - [::core::primitive::u8; 8usize], - ::core::primitive::u32, - )>, - pub transaction_version: ::core::primitive::u32, - pub state_version: ::core::primitive::u8, + pub enum Releases { + #[codec(index = 0)] + V1Ancient, + #[codec(index = 1)] + V2, } } - pub mod sp_weights { + pub mod pallet_treasury { use super::runtime_types; - pub mod weight_v2 { + pub mod pallet { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57313,309 +47335,274 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Weight { - #[codec(compact)] - pub ref_time: ::core::primitive::u64, - #[codec(compact)] - pub proof_size: ::core::primitive::u64, - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct RuntimeDbWeight { - pub read: ::core::primitive::u64, - pub write: ::core::primitive::u64, - } - } - pub mod staging_xcm { - use super::runtime_types; - pub mod v4 { - use super::runtime_types; - pub mod asset { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Asset { - pub id: runtime_types::staging_xcm::v4::asset::AssetId, - pub fun: runtime_types::staging_xcm::v4::asset::Fungibility, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct AssetId(pub runtime_types::staging_xcm::v4::location::Location); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum AssetInstance { - #[codec(index = 0)] - Undefined, - #[codec(index = 1)] - Index(#[codec(compact)] ::core::primitive::u128), - #[codec(index = 2)] - Array4([::core::primitive::u8; 4usize]), - #[codec(index = 3)] - Array8([::core::primitive::u8; 8usize]), - #[codec(index = 4)] - Array16([::core::primitive::u8; 16usize]), - #[codec(index = 5)] - Array32([::core::primitive::u8; 32usize]), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Fungibility { - #[codec(index = 0)] - Fungible(#[codec(compact)] ::core::primitive::u128), - #[codec(index = 1)] - NonFungible(runtime_types::staging_xcm::v4::asset::AssetInstance), - } - } - pub mod junction { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Junction { - #[codec(index = 0)] - Parachain(#[codec(compact)] ::core::primitive::u32), - #[codec(index = 1)] - AccountId32 { - network: ::core::option::Option< - runtime_types::staging_xcm::v4::junction::NetworkId, - >, - id: [::core::primitive::u8; 32usize], - }, - #[codec(index = 2)] - AccountIndex64 { - network: ::core::option::Option< - runtime_types::staging_xcm::v4::junction::NetworkId, - >, - #[codec(compact)] - index: ::core::primitive::u64, - }, - #[codec(index = 3)] - AccountKey20 { - network: ::core::option::Option< - runtime_types::staging_xcm::v4::junction::NetworkId, - >, - key: [::core::primitive::u8; 20usize], - }, - #[codec(index = 4)] - PalletInstance(::core::primitive::u8), - #[codec(index = 5)] - GeneralIndex(#[codec(compact)] ::core::primitive::u128), - #[codec(index = 6)] - GeneralKey { - length: ::core::primitive::u8, - data: [::core::primitive::u8; 32usize], - }, - #[codec(index = 7)] - OnlyChild, - #[codec(index = 8)] - Plurality { - id: runtime_types::xcm::v3::junction::BodyId, - part: runtime_types::xcm::v3::junction::BodyPart, - }, - #[codec(index = 9)] - GlobalConsensus(runtime_types::staging_xcm::v4::junction::NetworkId), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum NetworkId { - #[codec(index = 0)] - ByGenesis([::core::primitive::u8; 32usize]), - #[codec(index = 1)] - ByFork { - block_number: ::core::primitive::u64, - block_hash: [::core::primitive::u8; 32usize], - }, - #[codec(index = 2)] - Polkadot, - #[codec(index = 3)] - Kusama, - #[codec(index = 4)] - Westend, - #[codec(index = 5)] - Rococo, - #[codec(index = 6)] - Wococo, - #[codec(index = 7)] - Ethereum { - #[codec(compact)] - chain_id: ::core::primitive::u64, - }, - #[codec(index = 8)] - BitcoinCore, - #[codec(index = 9)] - BitcoinCash, - #[codec(index = 10)] - PolkadotBulletin, - } + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See [`Pallet::propose_spend`]."] + propose_spend { + #[codec(compact)] + value: ::core::primitive::u128, + beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::reject_proposal`]."] + reject_proposal { + #[codec(compact)] + proposal_id: ::core::primitive::u32, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::approve_proposal`]."] + approve_proposal { + #[codec(compact)] + proposal_id: ::core::primitive::u32, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::spend_local`]."] + spend_local { + #[codec(compact)] + amount: ::core::primitive::u128, + beneficiary: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::remove_approval`]."] + remove_approval { + #[codec(compact)] + proposal_id: ::core::primitive::u32, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::spend`]."] + spend { + asset_kind: ::subxt::ext::subxt_core::alloc::boxed::Box<()>, + #[codec(compact)] + amount: ::core::primitive::u128, + beneficiary: ::subxt::ext::subxt_core::alloc::boxed::Box< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + valid_from: ::core::option::Option<::core::primitive::u64>, + }, + #[codec(index = 6)] + #[doc = "See [`Pallet::payout`]."] + payout { index: ::core::primitive::u32 }, + #[codec(index = 7)] + #[doc = "See [`Pallet::check_status`]."] + check_status { index: ::core::primitive::u32 }, + #[codec(index = 8)] + #[doc = "See [`Pallet::void_spend`]."] + void_spend { index: ::core::primitive::u32 }, } - pub mod junctions { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Junctions { - #[codec(index = 0)] - Here, - #[codec(index = 1)] - X1([runtime_types::staging_xcm::v4::junction::Junction; 1usize]), - #[codec(index = 2)] - X2([runtime_types::staging_xcm::v4::junction::Junction; 2usize]), - #[codec(index = 3)] - X3([runtime_types::staging_xcm::v4::junction::Junction; 3usize]), - #[codec(index = 4)] - X4([runtime_types::staging_xcm::v4::junction::Junction; 4usize]), - #[codec(index = 5)] - X5([runtime_types::staging_xcm::v4::junction::Junction; 5usize]), - #[codec(index = 6)] - X6([runtime_types::staging_xcm::v4::junction::Junction; 6usize]), - #[codec(index = 7)] - X7([runtime_types::staging_xcm::v4::junction::Junction; 7usize]), - #[codec(index = 8)] - X8([runtime_types::staging_xcm::v4::junction::Junction; 8usize]), - } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Error for the treasury pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "Proposer's balance is too low."] + InsufficientProposersBalance, + #[codec(index = 1)] + #[doc = "No proposal, bounty or spend at that index."] + InvalidIndex, + #[codec(index = 2)] + #[doc = "Too many approvals in the queue."] + TooManyApprovals, + #[codec(index = 3)] + #[doc = "The spend origin is valid but the amount it is allowed to spend is lower than the"] + #[doc = "amount to be spent."] + InsufficientPermission, + #[codec(index = 4)] + #[doc = "Proposal has not been approved."] + ProposalNotApproved, + #[codec(index = 5)] + #[doc = "The balance of the asset kind is not convertible to the balance of the native asset."] + FailedToConvertBalance, + #[codec(index = 6)] + #[doc = "The spend has expired and cannot be claimed."] + SpendExpired, + #[codec(index = 7)] + #[doc = "The spend is not yet eligible for payout."] + EarlyPayout, + #[codec(index = 8)] + #[doc = "The payment has already been attempted."] + AlreadyAttempted, + #[codec(index = 9)] + #[doc = "There was some issue with the mechanism of payment."] + PayoutError, + #[codec(index = 10)] + #[doc = "The payout was not yet attempted/claimed."] + NotAttempted, + #[codec(index = 11)] + #[doc = "The payment has neither failed nor succeeded yet."] + Inconclusive, } - pub mod location { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Location { - pub parents: ::core::primitive::u8, - pub interior: runtime_types::staging_xcm::v4::junctions::Junctions, - } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "New proposal."] + Proposed { proposal_index: ::core::primitive::u32 }, + #[codec(index = 1)] + #[doc = "We have ended a spend period and will now allocate funds."] + Spending { budget_remaining: ::core::primitive::u128 }, + #[codec(index = 2)] + #[doc = "Some funds have been allocated."] + Awarded { + proposal_index: ::core::primitive::u32, + award: ::core::primitive::u128, + account: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 3)] + #[doc = "A proposal was rejected; funds were slashed."] + Rejected { + proposal_index: ::core::primitive::u32, + slashed: ::core::primitive::u128, + }, + #[codec(index = 4)] + #[doc = "Some of our funds have been burnt."] + Burnt { burnt_funds: ::core::primitive::u128 }, + #[codec(index = 5)] + #[doc = "Spending has finished; this is the amount that rolls over until next spend."] + Rollover { rollover_balance: ::core::primitive::u128 }, + #[codec(index = 6)] + #[doc = "Some funds have been deposited."] + Deposit { value: ::core::primitive::u128 }, + #[codec(index = 7)] + #[doc = "A new spend proposal has been approved."] + SpendApproved { + proposal_index: ::core::primitive::u32, + amount: ::core::primitive::u128, + beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, + }, + #[codec(index = 8)] + #[doc = "The inactive funds of the pallet have been updated."] + UpdatedInactive { + reactivated: ::core::primitive::u128, + deactivated: ::core::primitive::u128, + }, + #[codec(index = 9)] + #[doc = "A new asset spend proposal has been approved."] + AssetSpendApproved { + index: ::core::primitive::u32, + asset_kind: (), + amount: ::core::primitive::u128, + beneficiary: ::subxt::ext::subxt_core::utils::AccountId32, + valid_from: ::core::primitive::u64, + expire_at: ::core::primitive::u64, + }, + #[codec(index = 10)] + #[doc = "An approved spend was voided."] + AssetSpendVoided { index: ::core::primitive::u32 }, + #[codec(index = 11)] + #[doc = "A payment happened."] + Paid { index: ::core::primitive::u32, payment_id: () }, + #[codec(index = 12)] + #[doc = "A payment failed and can be retried."] + PaymentFailed { index: ::core::primitive::u32, payment_id: () }, + #[codec(index = 13)] + #[doc = "A spend was processed and removed from the storage. It might have been successfully"] + #[doc = "paid or it may have expired."] + SpendProcessed { index: ::core::primitive::u32 }, } } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum PaymentState<_0> { + #[codec(index = 0)] + Pending, + #[codec(index = 1)] + Attempted { id: _0 }, + #[codec(index = 2)] + Failed, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Proposal<_0, _1> { + pub proposer: _0, + pub value: _1, + pub beneficiary: _0, + pub bond: _1, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct SpendStatus<_0, _1, _2, _3, _4> { + pub asset_kind: _0, + pub amount: _1, + pub beneficiary: _2, + pub valid_from: _3, + pub expire_at: _3, + pub status: runtime_types::pallet_treasury::PaymentState<_0>, + #[codec(skip)] + pub __ignore: ::core::marker::PhantomData<_4>, + } } - pub mod sygma_access_segregator { + pub mod pallet_tx_pause { use super::runtime_types; pub mod pallet { use super::runtime_types; @@ -57639,12 +47626,28 @@ pub mod api { #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] pub enum Call { #[codec(index = 0)] - #[doc = "See [`Pallet::grant_access`]."] - grant_access { - pallet_index: ::core::primitive::u8, - extrinsic_name: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - who: ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "See [`Pallet::pause`]."] + pause { + full_name: ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ), + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::unpause`]."] + unpause { + ident: ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ), }, } #[derive( @@ -57667,11 +47670,16 @@ pub mod api { #[doc = "The `Error` enum of this pallet."] pub enum Error { #[codec(index = 0)] - #[doc = "Function unimplemented"] - Unimplemented, + #[doc = "The call is paused."] + IsPaused, #[codec(index = 1)] - #[doc = "Failed to grant extrinsic access permission to an account"] - GrantAccessFailed, + #[doc = "The call is unpaused."] + IsUnpaused, + #[codec(index = 2)] + #[doc = "The call is whitelisted and cannot be paused."] + Unpausable, + #[codec(index = 3)] + NotFound, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57693,18 +47701,33 @@ pub mod api { #[doc = "The `Event` enum of this pallet"] pub enum Event { #[codec(index = 0)] - #[doc = "Extrinsic access grant to someone"] - #[doc = "args: [pallet_index, extrinsic_name, who]"] - AccessGranted { - pallet_index: ::core::primitive::u8, - extrinsic_name: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - who: ::subxt::ext::subxt_core::utils::AccountId32, + #[doc = "This pallet, or a specific call is now paused."] + CallPaused { + full_name: ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ), + }, + #[codec(index = 1)] + #[doc = "This pallet, or a specific call is now unpaused."] + CallUnpaused { + full_name: ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ), }, } } } - pub mod sygma_basic_feehandler { + pub mod pallet_utility { use super::runtime_types; pub mod pallet { use super::runtime_types; @@ -57728,13 +47751,51 @@ pub mod api { #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] pub enum Call { #[codec(index = 0)] - #[doc = "See [`Pallet::set_fee`]."] - set_fee { - domain: ::core::primitive::u8, - asset: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::staging_xcm::v4::asset::AssetId, + #[doc = "See [`Pallet::batch`]."] + batch { + calls: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + }, + #[codec(index = 1)] + #[doc = "See [`Pallet::as_derivative`]."] + as_derivative { + index: ::core::primitive::u16, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, >, - amount: ::core::primitive::u128, + }, + #[codec(index = 2)] + #[doc = "See [`Pallet::batch_all`]."] + batch_all { + calls: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + }, + #[codec(index = 3)] + #[doc = "See [`Pallet::dispatch_as`]."] + dispatch_as { + as_origin: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::OriginCaller, + >, + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + }, + #[codec(index = 4)] + #[doc = "See [`Pallet::force_batch`]."] + force_batch { + calls: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + }, + #[codec(index = 5)] + #[doc = "See [`Pallet::with_weight`]."] + with_weight { + call: ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_testnet_runtime::RuntimeCall, + >, + weight: runtime_types::sp_weights::weight_v2::Weight, }, } #[derive( @@ -57757,11 +47818,8 @@ pub mod api { #[doc = "The `Error` enum of this pallet."] pub enum Error { #[codec(index = 0)] - #[doc = "Function unimplemented"] - Unimplemented, - #[codec(index = 1)] - #[doc = "Account has not gained access permission"] - AccessDenied, + #[doc = "Too many calls batched."] + TooManyCalls, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57783,17 +47841,34 @@ pub mod api { #[doc = "The `Event` enum of this pallet"] pub enum Event { #[codec(index = 0)] - #[doc = "Fee set for a specific asset"] - #[doc = "args: [domain, asset, amount]"] - FeeSet { - domain: ::core::primitive::u8, - asset: runtime_types::staging_xcm::v4::asset::AssetId, - amount: ::core::primitive::u128, + #[doc = "Batch of dispatches did not complete fully. Index of first failing dispatch given, as"] + #[doc = "well as the error."] + BatchInterrupted { + index: ::core::primitive::u32, + error: runtime_types::sp_runtime::DispatchError, + }, + #[codec(index = 1)] + #[doc = "Batch of dispatches completed fully with no error."] + BatchCompleted, + #[codec(index = 2)] + #[doc = "Batch of dispatches completed but has errors."] + BatchCompletedWithErrors, + #[codec(index = 3)] + #[doc = "A single item within a Batch of dispatches has completed with no error."] + ItemCompleted, + #[codec(index = 4)] + #[doc = "A single item within a Batch of dispatches has completed with error."] + ItemFailed { error: runtime_types::sp_runtime::DispatchError }, + #[codec(index = 5)] + #[doc = "A call was dispatched."] + DispatchedAs { + result: + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>, }, } } } - pub mod sygma_bridge { + pub mod pallet_vesting { use super::runtime_types; pub mod pallet { use super::runtime_types; @@ -57817,56 +47892,59 @@ pub mod api { #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] pub enum Call { #[codec(index = 0)] - #[doc = "See [`Pallet::pause_bridge`]."] - pause_bridge { dest_domain_id: ::core::primitive::u8 }, + #[doc = "See [`Pallet::vest`]."] + vest, #[codec(index = 1)] - #[doc = "See [`Pallet::unpause_bridge`]."] - unpause_bridge { dest_domain_id: ::core::primitive::u8 }, - #[codec(index = 2)] - #[doc = "See [`Pallet::set_mpc_address`]."] - set_mpc_address { addr: runtime_types::sygma_traits::MpcAddress }, - #[codec(index = 3)] - #[doc = "See [`Pallet::register_domain`]."] - register_domain { - dest_domain_id: ::core::primitive::u8, - dest_chain_id: runtime_types::primitive_types::U256, + #[doc = "See [`Pallet::vest_other`]."] + vest_other { + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, }, - #[codec(index = 4)] - #[doc = "See [`Pallet::unregister_domain`]."] - unregister_domain { - dest_domain_id: ::core::primitive::u8, - dest_chain_id: runtime_types::primitive_types::U256, + #[codec(index = 2)] + #[doc = "See [`Pallet::vested_transfer`]."] + vested_transfer { + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + schedule: runtime_types::pallet_vesting::vesting_info::VestingInfo< + ::core::primitive::u128, + ::core::primitive::u64, + >, }, - #[codec(index = 5)] - #[doc = "See [`Pallet::deposit`]."] - deposit { - asset: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::staging_xcm::v4::asset::Asset, + #[codec(index = 3)] + #[doc = "See [`Pallet::force_vested_transfer`]."] + force_vested_transfer { + source: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >, + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, >, - dest: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::staging_xcm::v4::location::Location, + schedule: runtime_types::pallet_vesting::vesting_info::VestingInfo< + ::core::primitive::u128, + ::core::primitive::u64, >, }, - #[codec(index = 6)] - #[doc = "See [`Pallet::retry`]."] - retry { - deposit_on_block_height: ::core::primitive::u128, - dest_domain_id: ::core::primitive::u8, + #[codec(index = 4)] + #[doc = "See [`Pallet::merge_schedules`]."] + merge_schedules { + schedule1_index: ::core::primitive::u32, + schedule2_index: ::core::primitive::u32, }, - #[codec(index = 7)] - #[doc = "See [`Pallet::execute_proposal`]."] - execute_proposal { - proposals: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::sygma_bridge::pallet::Proposal, + #[codec(index = 5)] + #[doc = "See [`Pallet::force_remove_vesting_schedule`]."] + force_remove_vesting_schedule { + target: ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, >, - signature: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + schedule_index: ::core::primitive::u32, }, - #[codec(index = 8)] - #[doc = "See [`Pallet::pause_all_bridges`]."] - pause_all_bridges, - #[codec(index = 9)] - #[doc = "See [`Pallet::unpause_all_bridges`]."] - unpause_all_bridges, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57885,90 +47963,24 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "The `Error` enum of this pallet."] + #[doc = "Error for the vesting pallet."] pub enum Error { #[codec(index = 0)] - #[doc = "Account has not gained access permission"] - AccessDenied, + #[doc = "The account given is not vesting."] + NotVesting, #[codec(index = 1)] - #[doc = "Protected operation, must be performed by relayer"] - BadMpcSignature, + #[doc = "The account already has `MaxVestingSchedules` count of schedules and thus"] + #[doc = "cannot add another one. Consider merging existing schedules in order to add another."] + AtMaxVestingSchedules, #[codec(index = 2)] - #[doc = "Insufficient balance on sender account"] - InsufficientBalance, + #[doc = "Amount being transferred is too low to create a vesting schedule."] + AmountLow, #[codec(index = 3)] - #[doc = "Asset transactor execution failed"] - TransactFailedDeposit, + #[doc = "An index was out of bounds of the vesting schedules."] + ScheduleIndexOutOfBounds, #[codec(index = 4)] - TransactFailedWithdraw, - #[codec(index = 5)] - TransactFailedFeeDeposit, - #[codec(index = 6)] - TransactFailedHoldInReserved, - #[codec(index = 7)] - TransactFailedReleaseFromReserved, - #[codec(index = 8)] - #[doc = "The withdrawn amount can not cover the fee payment"] - FeeTooExpensive, - #[codec(index = 9)] - #[doc = "MPC address not set"] - MissingMpcAddress, - #[codec(index = 10)] - #[doc = "MPC address can not be updated"] - MpcAddrNotUpdatable, - #[codec(index = 11)] - #[doc = "Bridge is paused"] - BridgePaused, - #[codec(index = 12)] - #[doc = "Bridge is unpaused"] - BridgeUnpaused, - #[codec(index = 13)] - #[doc = "Fee config option missing"] - MissingFeeConfig, - #[codec(index = 14)] - #[doc = "Asset not bound to a resource id"] - AssetNotBound, - #[codec(index = 15)] - #[doc = "Proposal has either failed or succeeded"] - ProposalAlreadyComplete, - #[codec(index = 16)] - #[doc = "Proposal list empty"] - EmptyProposalList, - #[codec(index = 17)] - #[doc = "Transactor operation failed"] - TransactorFailed, - #[codec(index = 18)] - #[doc = "Deposit data not correct"] - InvalidDepositDataInvalidLength, - #[codec(index = 19)] - InvalidDepositDataInvalidAmount, - #[codec(index = 20)] - InvalidDepositDataInvalidRecipientLength, - #[codec(index = 21)] - InvalidDepositDataRecipientLengthNotMatch, - #[codec(index = 22)] - InvalidDepositDataInvalidRecipient, - #[codec(index = 23)] - #[doc = "Dest domain not supported"] - DestDomainNotSupported, - #[codec(index = 24)] - #[doc = "Dest chain id not match"] - DestChainIDNotMatch, - #[codec(index = 25)] - #[doc = "Failed to extract destination data"] - ExtractDestDataFailed, - #[codec(index = 26)] - #[doc = "Failed on the decimal converter"] - DecimalConversionFail, - #[codec(index = 27)] - #[doc = "Deposit nonce has reached max integer value"] - DepositNonceOverflow, - #[codec(index = 28)] - #[doc = "Asset not bound to a liquidity holder account"] - NoLiquidityHolderAccountBound, - #[codec(index = 29)] - #[doc = "Function unimplemented"] - Unimplemented, + #[doc = "Failed to create a new schedule because some parameter was invalid."] + InvalidScheduleParams, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -57990,80 +48002,19 @@ pub mod api { #[doc = "The `Event` enum of this pallet"] pub enum Event { #[codec(index = 0)] - #[doc = "When initial bridge transfer send to dest domain"] - #[doc = "args: [dest_domain_id, resource_id, deposit_nonce, sender, transfer_type,"] - #[doc = "deposit_data, handler_response, ]"] - Deposit { - dest_domain_id: ::core::primitive::u8, - resource_id: [::core::primitive::u8; 32usize], - deposit_nonce: ::core::primitive::u64, - sender: ::subxt::ext::subxt_core::utils::AccountId32, - transfer_type: runtime_types::sygma_traits::TransferType, - deposit_data: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - handler_response: - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + #[doc = "The amount vested has been updated. This could indicate a change in funds available."] + #[doc = "The balance given is the amount which is left unvested (and thus locked)."] + VestingUpdated { + account: ::subxt::ext::subxt_core::utils::AccountId32, + unvested: ::core::primitive::u128, }, #[codec(index = 1)] - #[doc = "When proposal was executed successfully"] - ProposalExecution { - origin_domain_id: ::core::primitive::u8, - deposit_nonce: ::core::primitive::u64, - data_hash: [::core::primitive::u8; 32usize], - }, - #[codec(index = 2)] - #[doc = "When proposal was faild to execute"] - FailedHandlerExecution { - error: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - origin_domain_id: ::core::primitive::u8, - deposit_nonce: ::core::primitive::u64, - }, - #[codec(index = 3)] - #[doc = "When user is going to retry a bridge transfer"] - #[doc = "args: [deposit_on_block_height, dest_domain_id, sender]"] - Retry { - deposit_on_block_height: ::core::primitive::u128, - dest_domain_id: ::core::primitive::u8, - sender: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 4)] - #[doc = "When bridge is paused"] - #[doc = "args: [dest_domain_id]"] - BridgePaused { dest_domain_id: ::core::primitive::u8 }, - #[codec(index = 5)] - #[doc = "When bridge is unpaused"] - #[doc = "args: [dest_domain_id]"] - BridgeUnpaused { dest_domain_id: ::core::primitive::u8 }, - #[codec(index = 6)] - #[doc = "When registering a new dest domainID with its corresponding chainID"] - RegisterDestDomain { - sender: ::subxt::ext::subxt_core::utils::AccountId32, - domain_id: ::core::primitive::u8, - chain_id: runtime_types::primitive_types::U256, - }, - #[codec(index = 7)] - #[doc = "When unregistering a dest domainID with its corresponding chainID"] - UnregisterDestDomain { - sender: ::subxt::ext::subxt_core::utils::AccountId32, - domain_id: ::core::primitive::u8, - chain_id: runtime_types::primitive_types::U256, - }, - #[codec(index = 8)] - #[doc = "When bridge fee is collected"] - FeeCollected { - fee_payer: ::subxt::ext::subxt_core::utils::AccountId32, - dest_domain_id: ::core::primitive::u8, - resource_id: [::core::primitive::u8; 32usize], - fee_amount: ::core::primitive::u128, - fee_asset_id: runtime_types::staging_xcm::v4::asset::AssetId, - }, - #[codec(index = 9)] - #[doc = "When all bridges are paused"] - AllBridgePaused { sender: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 10)] - #[doc = "When all bridges are unpaused"] - AllBridgeUnpaused { sender: ::subxt::ext::subxt_core::utils::AccountId32 }, + #[doc = "An \\[account\\] has become fully vested."] + VestingCompleted { account: ::subxt::ext::subxt_core::utils::AccountId32 }, } + } + pub mod vesting_info { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -58081,19 +48032,79 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Proposal { - pub origin_domain_id: ::core::primitive::u8, - pub deposit_nonce: ::core::primitive::u64, - pub resource_id: [::core::primitive::u8; 32usize], - pub data: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + pub struct VestingInfo<_0, _1> { + pub locked: _0, + pub per_block: _0, + pub starting_block: _1, } } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum Releases { + #[codec(index = 0)] + V0, + #[codec(index = 1)] + V1, + } } - pub mod sygma_fee_handler_router { + pub mod primitive_types { use super::runtime_types; - pub mod pallet { + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct U256(pub [::core::primitive::u64; 4usize]); + } + pub mod rpc_primitives_txpool { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct TxPoolResponse { + pub ready: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::ethereum::transaction::TransactionV2, + >, + pub future: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::ethereum::transaction::TransactionV2, + >, + } + } + pub mod sp_arithmetic { + use super::runtime_types; + pub mod fixed_point { use super::runtime_types; #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -58110,75 +48121,12 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_fee_handler`]."] - set_fee_handler { - domain: ::core::primitive::u8, - asset: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::staging_xcm::v4::asset::AssetId, - >, - handler_type: - runtime_types::sygma_fee_handler_router::pallet::FeeHandlerType, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Account has not gained access permission"] - AccessDenied, - #[codec(index = 1)] - #[doc = "Function unimplemented"] - Unimplemented, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "When fee handler was set for a specific (domain, asset) pair"] - #[doc = "args: [dest_domain_id, asset_id, handler_type]"] - FeeHandlerSet { - domain: ::core::primitive::u8, - asset: runtime_types::staging_xcm::v4::asset::AssetId, - handler_type: - runtime_types::sygma_fee_handler_router::pallet::FeeHandlerType, - }, - } + pub struct FixedU128(pub ::core::primitive::u128); + } + pub mod per_things { + use super::runtime_types; #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -58193,23 +48141,11 @@ pub mod api { crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" )] #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum FeeHandlerType { - #[codec(index = 0)] - BasicFeeHandler, - #[codec(index = 1)] - PercentageFeeHandler, - #[codec(index = 2)] - DynamicFeeHandler, - } - } - } - pub mod sygma_percentage_feehandler { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct PerU16(pub ::core::primitive::u16); #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -58226,21 +48162,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_fee_rate`]."] - set_fee_rate { - domain: ::core::primitive::u8, - asset: ::subxt::ext::subxt_core::alloc::boxed::Box< - runtime_types::staging_xcm::v4::asset::AssetId, - >, - fee_rate_basis_point: ::core::primitive::u32, - fee_lower_bound: ::core::primitive::u128, - fee_upper_bound: ::core::primitive::u128, - }, - } + pub struct Perbill(pub ::core::primitive::u32); #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -58257,22 +48181,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Function unimplemented"] - Unimplemented, - #[codec(index = 1)] - #[doc = "Account has not gained access permission"] - AccessDenied, - #[codec(index = 2)] - #[doc = "Fee rate is out of range [0, 10000)"] - FeeRateOutOfRange, - #[codec(index = 3)] - #[doc = "Percentage fee bound is invalid"] - InvalidFeeBound, - } + pub struct Percent(pub ::core::primitive::u8); #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, @@ -58289,37 +48200,8 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Fee set rate for a specific asset and domain"] - #[doc = "args: [domain, asset, rate_basis_point, fee_lower_bound, fee_upper_bound]"] - FeeRateSet { - domain: ::core::primitive::u8, - asset: runtime_types::staging_xcm::v4::asset::AssetId, - rate_basis_point: ::core::primitive::u32, - fee_lower_bound: ::core::primitive::u128, - fee_upper_bound: ::core::primitive::u128, - }, - } + pub struct Permill(pub ::core::primitive::u32); } - } - pub mod sygma_traits { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MpcAddress(pub [::core::primitive::u8; 20usize]); #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -58333,18 +48215,18 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum TransferType { + pub enum ArithmeticError { #[codec(index = 0)] - FungibleTransfer, + Underflow, #[codec(index = 1)] - NonFungibleTransfer, + Overflow, #[codec(index = 2)] - GenericTransfer, + DivisionByZero, } } - pub mod tangle_crypto_primitives { + pub mod sp_consensus_babe { use super::runtime_types; - pub mod crypto { + pub mod app { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -58363,593 +48245,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct Public(pub runtime_types::sp_core::ecdsa::Public); - } - } - pub mod tangle_primitives { - use super::runtime_types; - pub mod jobs { - use super::runtime_types; - pub mod tss { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSKeyRefreshResult { - pub signature_scheme: - runtime_types::tangle_primitives::jobs::tss::DigitalSignatureScheme, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSKeyRotationResult<_0, _1, _2> { - pub phase_one_id: ::core::primitive::u64, - pub new_phase_one_id: ::core::primitive::u64, - pub new_key: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub key: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub signature: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub signature_scheme: - runtime_types::tangle_primitives::jobs::tss::DigitalSignatureScheme, - pub derivation_path: ::core::option::Option< - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - >, - pub chain_code: ::core::option::Option<[::core::primitive::u8; 32usize]>, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<(_2, _0, _1)>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSKeySubmissionResult<_0, _1, _2> { - pub signature_scheme: - runtime_types::tangle_primitives::jobs::tss::DigitalSignatureScheme, - pub key: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub chain_code: ::core::option::Option<[::core::primitive::u8; 32usize]>, - pub participants: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - >, - pub signatures: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - >, - pub threshold: ::core::primitive::u8, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<(_1, _0, _2)>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSPhaseFourJobType { pub phase_one_id : :: core :: primitive :: u64 , pub new_phase_one_id : :: core :: primitive :: u64 , pub role_type : runtime_types :: tangle_primitives :: roles :: tss :: ThresholdSignatureRoleType , } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSPhaseOneJobType < _0 , _1 > { pub participants : runtime_types :: bounded_collections :: bounded_vec :: BoundedVec < _0 > , pub threshold : :: core :: primitive :: u8 , pub permitted_caller : :: core :: option :: Option < _0 > , pub role_type : runtime_types :: tangle_primitives :: roles :: tss :: ThresholdSignatureRoleType , pub hd_wallet : :: core :: primitive :: bool , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _1 > } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSPhaseThreeJobType { pub phase_one_id : :: core :: primitive :: u64 , pub role_type : runtime_types :: tangle_primitives :: roles :: tss :: ThresholdSignatureRoleType , } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSPhaseTwoJobType < _0 , _1 > { pub phase_one_id : :: core :: primitive :: u64 , pub submission : runtime_types :: bounded_collections :: bounded_vec :: BoundedVec < :: core :: primitive :: u8 > , pub derivation_path : :: core :: option :: Option < runtime_types :: bounded_collections :: bounded_vec :: BoundedVec < :: core :: primitive :: u8 > > , pub role_type : runtime_types :: tangle_primitives :: roles :: tss :: ThresholdSignatureRoleType , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < (_0 , _1) > } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSSignatureResult<_0, _1, _2, _3> { - pub signature_scheme: - runtime_types::tangle_primitives::jobs::tss::DigitalSignatureScheme, - pub data: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub signature: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub verifying_key: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub derivation_path: ::core::option::Option< - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - >, - pub chain_code: ::core::option::Option<[::core::primitive::u8; 32usize]>, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<(_3, _1, _2, _0)>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum DigitalSignatureScheme { - #[codec(index = 0)] - EcdsaSecp256k1, - #[codec(index = 1)] - EcdsaSecp256r1, - #[codec(index = 2)] - EcdsaStark, - #[codec(index = 3)] - SchnorrP256, - #[codec(index = 4)] - SchnorrP384, - #[codec(index = 5)] - SchnorrSecp256k1, - #[codec(index = 6)] - SchnorrSr25519, - #[codec(index = 7)] - SchnorrRistretto255, - #[codec(index = 8)] - SchnorrEd25519, - #[codec(index = 9)] - SchnorrEd448, - #[codec(index = 10)] - SchnorrTaproot, - #[codec(index = 11)] - Bls381, - } - } - pub mod zksaas { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ArkworksProofResult<_0> { - pub proof: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct CircomProofResult<_0> { - pub proof: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Groth16ProveRequest<_0> { - pub public_input: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub a_shares: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - >, - pub ax_shares: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - >, - pub qap_shares: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::tangle_primitives::jobs::zksaas::QAPShare<_0>, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Groth16System<_0> { - pub circuit: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - pub num_inputs: ::core::primitive::u64, - pub num_constraints: ::core::primitive::u64, - pub proving_key: - runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - pub verifying_key: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub wasm: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum HyperData<_0> { - #[codec(index = 0)] - Raw( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ), - #[codec(index = 1)] - IPFS( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ), - #[codec(index = 2)] - HTTP( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - ), - __Ignore(::core::marker::PhantomData<_0>), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct QAPShare<_0> { - pub a: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - pub b: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - pub c: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ZkSaaSCircuitResult<_0> { - pub job_id: ::core::primitive::u64, - pub participants: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::sp_core::ecdsa::Public, - >, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ZkSaaSPhaseOneJobType<_0, _1, _2> { - pub participants: - runtime_types::bounded_collections::bounded_vec::BoundedVec<_0>, - pub permitted_caller: ::core::option::Option<_0>, - pub system: - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSSystem<_2>, - pub role_type: - runtime_types::tangle_primitives::roles::zksaas::ZeroKnowledgeRoleType, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_1>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ZkSaaSPhaseTwoJobType<_0> { - pub phase_one_id: ::core::primitive::u64, - pub request: - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSPhaseTwoRequest< - _0, - >, - pub role_type: - runtime_types::tangle_primitives::roles::zksaas::ZeroKnowledgeRoleType, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZkSaaSPhaseTwoRequest<_0> { - #[codec(index = 0)] - Groth16( - runtime_types::tangle_primitives::jobs::zksaas::Groth16ProveRequest<_0>, - ), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZkSaaSProofResult<_0> { - #[codec(index = 0)] - Arkworks( - runtime_types::tangle_primitives::jobs::zksaas::ArkworksProofResult<_0>, - ), - #[codec(index = 1)] - Circom( - runtime_types::tangle_primitives::jobs::zksaas::CircomProofResult<_0>, - ), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZkSaaSSystem<_0> { - #[codec(index = 0)] - Groth16(runtime_types::tangle_primitives::jobs::zksaas::Groth16System<_0>), - } - } + pub struct Public(pub runtime_types::sp_core::sr25519::Public); + } + pub mod digests { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -58967,11 +48266,12 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum FallbackOptions { - #[codec(index = 0)] - Destroy, + pub enum NextConfigDescriptor { #[codec(index = 1)] - RegenerateWithThreshold(::core::primitive::u8), + V1 { + c: (::core::primitive::u64, ::core::primitive::u64), + allowed_slots: runtime_types::sp_consensus_babe::AllowedSlots, + }, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -58990,13 +48290,15 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct JobInfo<_0, _1, _2, _3, _4, _5> { - pub owner: _0, - pub expiry: _1, - pub ttl: _1, - pub job_type: runtime_types::tangle_primitives::jobs::JobType<_0, _3, _4, _5>, - pub fee: _2, - pub fallback: runtime_types::tangle_primitives::jobs::FallbackOptions, + pub enum PreDigest { + #[codec(index = 1)] + Primary(runtime_types::sp_consensus_babe::digests::PrimaryPreDigest), + #[codec(index = 2)] + SecondaryPlain( + runtime_types::sp_consensus_babe::digests::SecondaryPlainPreDigest, + ), + #[codec(index = 3)] + SecondaryVRF(runtime_types::sp_consensus_babe::digests::SecondaryVRFPreDigest), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59015,44 +48317,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum JobResult<_0, _1, _2, _3, _4, _5> { - #[codec(index = 0)] - DKGPhaseOne( - runtime_types::tangle_primitives::jobs::tss::DKGTSSKeySubmissionResult< - _1, - _0, - _2, - >, - ), - #[codec(index = 1)] - DKGPhaseTwo( - runtime_types::tangle_primitives::jobs::tss::DKGTSSSignatureResult< - _3, - _1, - _2, - _5, - >, - ), - #[codec(index = 2)] - DKGPhaseThree( - runtime_types::tangle_primitives::jobs::tss::DKGTSSKeyRefreshResult, - ), - #[codec(index = 3)] - DKGPhaseFour( - runtime_types::tangle_primitives::jobs::tss::DKGTSSKeyRotationResult< - _1, - _2, - _5, - >, - ), - #[codec(index = 4)] - ZkSaaSPhaseOne( - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSCircuitResult<_0>, - ), - #[codec(index = 5)] - ZkSaaSPhaseTwo( - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSProofResult<_4>, - ), + pub struct PrimaryPreDigest { + pub authority_index: ::core::primitive::u32, + pub slot: runtime_types::sp_consensus_slots::Slot, + pub vrf_signature: runtime_types::sp_core::sr25519::vrf::VrfSignature, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59071,11 +48339,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct JobSubmission<_0, _1, _2, _3, _4> { - pub expiry: _1, - pub ttl: _1, - pub job_type: runtime_types::tangle_primitives::jobs::JobType<_0, _2, _3, _4>, - pub fallback: runtime_types::tangle_primitives::jobs::FallbackOptions, + pub struct SecondaryPlainPreDigest { + pub authority_index: ::core::primitive::u32, + pub slot: runtime_types::sp_consensus_slots::Slot, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59094,36 +48360,119 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum JobType<_0, _1, _2, _3> { - #[codec(index = 0)] - DKGTSSPhaseOne( - runtime_types::tangle_primitives::jobs::tss::DKGTSSPhaseOneJobType<_0, _1>, - ), - #[codec(index = 1)] - DKGTSSPhaseTwo( - runtime_types::tangle_primitives::jobs::tss::DKGTSSPhaseTwoJobType<_2, _3>, - ), - #[codec(index = 2)] - DKGTSSPhaseThree( - runtime_types::tangle_primitives::jobs::tss::DKGTSSPhaseThreeJobType, - ), - #[codec(index = 3)] - DKGTSSPhaseFour( - runtime_types::tangle_primitives::jobs::tss::DKGTSSPhaseFourJobType, - ), - #[codec(index = 4)] - ZkSaaSPhaseOne( - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSPhaseOneJobType< - _0, - _1, - _2, - >, - ), - #[codec(index = 5)] - ZkSaaSPhaseTwo( - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSPhaseTwoJobType<_2>, - ), + pub struct SecondaryVRFPreDigest { + pub authority_index: ::core::primitive::u32, + pub slot: runtime_types::sp_consensus_slots::Slot, + pub vrf_signature: runtime_types::sp_core::sr25519::vrf::VrfSignature, } + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum AllowedSlots { + #[codec(index = 0)] + PrimarySlots, + #[codec(index = 1)] + PrimaryAndSecondaryPlainSlots, + #[codec(index = 2)] + PrimaryAndSecondaryVRFSlots, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct BabeConfiguration { + pub slot_duration: ::core::primitive::u64, + pub epoch_length: ::core::primitive::u64, + pub c: (::core::primitive::u64, ::core::primitive::u64), + pub authorities: ::subxt::ext::subxt_core::alloc::vec::Vec<( + runtime_types::sp_consensus_babe::app::Public, + ::core::primitive::u64, + )>, + pub randomness: [::core::primitive::u8; 32usize], + pub allowed_slots: runtime_types::sp_consensus_babe::AllowedSlots, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct BabeEpochConfiguration { + pub c: (::core::primitive::u64, ::core::primitive::u64), + pub allowed_slots: runtime_types::sp_consensus_babe::AllowedSlots, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Epoch { + pub epoch_index: ::core::primitive::u64, + pub start_slot: runtime_types::sp_consensus_slots::Slot, + pub duration: ::core::primitive::u64, + pub authorities: ::subxt::ext::subxt_core::alloc::vec::Vec<( + runtime_types::sp_consensus_babe::app::Public, + ::core::primitive::u64, + )>, + pub randomness: [::core::primitive::u8; 32usize], + pub config: runtime_types::sp_consensus_babe::BabeEpochConfiguration, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct OpaqueKeyOwnershipProof( + pub ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + ); + } + pub mod sp_consensus_grandpa { + use super::runtime_types; + pub mod app { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59141,14 +48490,7 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct PhaseResult<_0, _1, _2, _3, _4, _5, _6, _7, _8> { - pub owner: _0, - pub result: - runtime_types::tangle_primitives::jobs::JobResult<_2, _3, _5, _4, _7, _8>, - pub ttl: _1, - pub permitted_caller: ::core::option::Option<_0>, - pub job_type: runtime_types::tangle_primitives::jobs::JobType<_0, _2, _6, _8>, - } + pub struct Public(pub runtime_types::sp_core::ed25519::Public); #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59166,12 +48508,114 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct RpcResponseJobsData<_0, _1, _2, _3, _4> { - pub job_id: ::core::primitive::u64, - pub job_type: runtime_types::tangle_primitives::jobs::JobType<_0, _2, _3, _4>, - pub expiry: _1, - pub ttl: _1, - } + pub struct Signature(pub runtime_types::sp_core::ed25519::Signature); + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum Equivocation<_0, _1> { + #[codec(index = 0)] + Prevote( + runtime_types::finality_grandpa::Equivocation< + runtime_types::sp_consensus_grandpa::app::Public, + runtime_types::finality_grandpa::Prevote<_0, _1>, + runtime_types::sp_consensus_grandpa::app::Signature, + >, + ), + #[codec(index = 1)] + Precommit( + runtime_types::finality_grandpa::Equivocation< + runtime_types::sp_consensus_grandpa::app::Public, + runtime_types::finality_grandpa::Precommit<_0, _1>, + runtime_types::sp_consensus_grandpa::app::Signature, + >, + ), + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct EquivocationProof<_0, _1> { + pub set_id: ::core::primitive::u64, + pub equivocation: runtime_types::sp_consensus_grandpa::Equivocation<_0, _1>, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct OpaqueKeyOwnershipProof( + pub ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + ); + } + pub mod sp_consensus_slots { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct EquivocationProof<_0, _1> { + pub offender: _1, + pub slot: runtime_types::sp_consensus_slots::Slot, + pub first_header: _0, + pub second_header: _0, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: CompactAs, + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Slot(pub ::core::primitive::u64); + } + pub mod sp_core { + use super::runtime_types; + pub mod crypto { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59189,20 +48633,67 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ValidatorOffenceType { - #[codec(index = 0)] - Inactivity, - #[codec(index = 1)] - InvalidSignatureSubmitted, - #[codec(index = 2)] - RejectedValidAction, - #[codec(index = 3)] - ApprovedInvalidAction, - } + pub struct KeyTypeId(pub [::core::primitive::u8; 4usize]); + } + pub mod ecdsa { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] + pub struct Signature(pub [::core::primitive::u8; 65usize]); + } + pub mod ed25519 { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Public(pub [::core::primitive::u8; 32usize]); + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Signature(pub [::core::primitive::u8; 64usize]); } - pub mod misbehavior { + pub mod sr25519 { use super::runtime_types; - pub mod dfns_cggmp21 { + pub mod vrf { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59221,8 +48712,164 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum DfnsCGGMP21Justification { - # [codec (index = 0)] Keygen { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: KeygenAborted , } , # [codec (index = 1)] KeyRefresh { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: KeyRefreshAborted , } , # [codec (index = 2)] Signing { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: SigningAborted , } , } + pub struct VrfSignature { + pub pre_output: [::core::primitive::u8; 32usize], + pub proof: [::core::primitive::u8; 64usize], + } + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Public(pub [::core::primitive::u8; 32usize]); + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Signature(pub [::core::primitive::u8; 64usize]); + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct OpaqueMetadata( + pub ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + ); + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum Void {} + } + pub mod sp_inherents { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct CheckInherentsResult { + pub okay: ::core::primitive::bool, + pub fatal_error: ::core::primitive::bool, + pub errors: runtime_types::sp_inherents::InherentData, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct InherentData { + pub data: ::subxt::ext::subxt_core::utils::KeyedVec< + [::core::primitive::u8; 8usize], + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + >, + } + } + pub mod sp_npos_elections { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct ElectionScore { + pub minimal_stake: ::core::primitive::u128, + pub sum_stake: ::core::primitive::u128, + pub sum_stake_squared: ::core::primitive::u128, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct Support<_0> { + pub total: ::core::primitive::u128, + pub voters: + ::subxt::ext::subxt_core::alloc::vec::Vec<(_0, ::core::primitive::u128)>, + } + } + pub mod sp_runtime { + use super::runtime_types; + pub mod generic { + use super::runtime_types; + pub mod block { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59240,28 +48887,13 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum InvalidProofReason { - #[codec(index = 0)] - EqualityCheck(::core::primitive::u8), - #[codec(index = 1)] - RangeCheck(::core::primitive::u8), - #[codec(index = 2)] - Encryption, - #[codec(index = 3)] - PaillierEnc, - #[codec(index = 4)] - PaillierOp, - #[codec(index = 5)] - ModPow, - #[codec(index = 6)] - ModulusIsPrime, - #[codec(index = 7)] - ModulusIsEven, - #[codec(index = 8)] - IncorrectNthRoot(::core::primitive::u8), - #[codec(index = 9)] - IncorrectFourthRoot(::core::primitive::u8), + pub struct Block<_0, _1> { + pub header: _0, + pub extrinsics: ::subxt::ext::subxt_core::alloc::vec::Vec<_1>, } + } + pub mod digest { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59279,8 +48911,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum KeyRefreshAborted { - # [codec (index = 0)] InvalidDecommitment { round1 : runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage , round2 : runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage , } , # [codec (index = 1)] InvalidSchnorrProof , # [codec (index = 2)] InvalidModProof { reason : runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: InvalidProofReason , round2 : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage > , round3 : runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage , } , # [codec (index = 3)] InvalidFacProof , # [codec (index = 4)] InvalidRingPedersenParameters { round2 : runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage , } , # [codec (index = 5)] InvalidX , # [codec (index = 6)] InvalidXShare , # [codec (index = 7)] InvalidDataSize , # [codec (index = 8)] PaillierDec , } + pub struct Digest { + pub logs: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::sp_runtime::generic::digest::DigestItem, + >, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59298,35 +48933,30 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum KeygenAborted { + pub enum DigestItem { + #[codec(index = 6)] + PreRuntime( + [::core::primitive::u8; 4usize], + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + ), + #[codec(index = 4)] + Consensus( + [::core::primitive::u8; 4usize], + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + ), + #[codec(index = 5)] + Seal( + [::core::primitive::u8; 4usize], + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + ), #[codec(index = 0)] - InvalidDecommitment { - round1: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - round2a: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - #[codec(index = 1)] - InvalidSchnorrProof { - round2a: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - >, - round3: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - #[codec(index = 2)] - FeldmanVerificationFailed { - round2a: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - round2b: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - #[codec(index = 3)] - InvalidDataSize { - round2a: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, + Other(::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>), + #[codec(index = 8)] + RuntimeEnvironmentUpdated, } + } + pub mod era { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59344,18 +48974,522 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum SigningAborted { + pub enum Era { #[codec(index = 0)] - EncProofOfK, + Immortal, #[codec(index = 1)] - InvalidPsi, + Mortal1(::core::primitive::u8), #[codec(index = 2)] - InvalidPsiPrimePrime, + Mortal2(::core::primitive::u8), #[codec(index = 3)] - MismatchedDelta, + Mortal3(::core::primitive::u8), + #[codec(index = 4)] + Mortal4(::core::primitive::u8), + #[codec(index = 5)] + Mortal5(::core::primitive::u8), + #[codec(index = 6)] + Mortal6(::core::primitive::u8), + #[codec(index = 7)] + Mortal7(::core::primitive::u8), + #[codec(index = 8)] + Mortal8(::core::primitive::u8), + #[codec(index = 9)] + Mortal9(::core::primitive::u8), + #[codec(index = 10)] + Mortal10(::core::primitive::u8), + #[codec(index = 11)] + Mortal11(::core::primitive::u8), + #[codec(index = 12)] + Mortal12(::core::primitive::u8), + #[codec(index = 13)] + Mortal13(::core::primitive::u8), + #[codec(index = 14)] + Mortal14(::core::primitive::u8), + #[codec(index = 15)] + Mortal15(::core::primitive::u8), + #[codec(index = 16)] + Mortal16(::core::primitive::u8), + #[codec(index = 17)] + Mortal17(::core::primitive::u8), + #[codec(index = 18)] + Mortal18(::core::primitive::u8), + #[codec(index = 19)] + Mortal19(::core::primitive::u8), + #[codec(index = 20)] + Mortal20(::core::primitive::u8), + #[codec(index = 21)] + Mortal21(::core::primitive::u8), + #[codec(index = 22)] + Mortal22(::core::primitive::u8), + #[codec(index = 23)] + Mortal23(::core::primitive::u8), + #[codec(index = 24)] + Mortal24(::core::primitive::u8), + #[codec(index = 25)] + Mortal25(::core::primitive::u8), + #[codec(index = 26)] + Mortal26(::core::primitive::u8), + #[codec(index = 27)] + Mortal27(::core::primitive::u8), + #[codec(index = 28)] + Mortal28(::core::primitive::u8), + #[codec(index = 29)] + Mortal29(::core::primitive::u8), + #[codec(index = 30)] + Mortal30(::core::primitive::u8), + #[codec(index = 31)] + Mortal31(::core::primitive::u8), + #[codec(index = 32)] + Mortal32(::core::primitive::u8), + #[codec(index = 33)] + Mortal33(::core::primitive::u8), + #[codec(index = 34)] + Mortal34(::core::primitive::u8), + #[codec(index = 35)] + Mortal35(::core::primitive::u8), + #[codec(index = 36)] + Mortal36(::core::primitive::u8), + #[codec(index = 37)] + Mortal37(::core::primitive::u8), + #[codec(index = 38)] + Mortal38(::core::primitive::u8), + #[codec(index = 39)] + Mortal39(::core::primitive::u8), + #[codec(index = 40)] + Mortal40(::core::primitive::u8), + #[codec(index = 41)] + Mortal41(::core::primitive::u8), + #[codec(index = 42)] + Mortal42(::core::primitive::u8), + #[codec(index = 43)] + Mortal43(::core::primitive::u8), + #[codec(index = 44)] + Mortal44(::core::primitive::u8), + #[codec(index = 45)] + Mortal45(::core::primitive::u8), + #[codec(index = 46)] + Mortal46(::core::primitive::u8), + #[codec(index = 47)] + Mortal47(::core::primitive::u8), + #[codec(index = 48)] + Mortal48(::core::primitive::u8), + #[codec(index = 49)] + Mortal49(::core::primitive::u8), + #[codec(index = 50)] + Mortal50(::core::primitive::u8), + #[codec(index = 51)] + Mortal51(::core::primitive::u8), + #[codec(index = 52)] + Mortal52(::core::primitive::u8), + #[codec(index = 53)] + Mortal53(::core::primitive::u8), + #[codec(index = 54)] + Mortal54(::core::primitive::u8), + #[codec(index = 55)] + Mortal55(::core::primitive::u8), + #[codec(index = 56)] + Mortal56(::core::primitive::u8), + #[codec(index = 57)] + Mortal57(::core::primitive::u8), + #[codec(index = 58)] + Mortal58(::core::primitive::u8), + #[codec(index = 59)] + Mortal59(::core::primitive::u8), + #[codec(index = 60)] + Mortal60(::core::primitive::u8), + #[codec(index = 61)] + Mortal61(::core::primitive::u8), + #[codec(index = 62)] + Mortal62(::core::primitive::u8), + #[codec(index = 63)] + Mortal63(::core::primitive::u8), + #[codec(index = 64)] + Mortal64(::core::primitive::u8), + #[codec(index = 65)] + Mortal65(::core::primitive::u8), + #[codec(index = 66)] + Mortal66(::core::primitive::u8), + #[codec(index = 67)] + Mortal67(::core::primitive::u8), + #[codec(index = 68)] + Mortal68(::core::primitive::u8), + #[codec(index = 69)] + Mortal69(::core::primitive::u8), + #[codec(index = 70)] + Mortal70(::core::primitive::u8), + #[codec(index = 71)] + Mortal71(::core::primitive::u8), + #[codec(index = 72)] + Mortal72(::core::primitive::u8), + #[codec(index = 73)] + Mortal73(::core::primitive::u8), + #[codec(index = 74)] + Mortal74(::core::primitive::u8), + #[codec(index = 75)] + Mortal75(::core::primitive::u8), + #[codec(index = 76)] + Mortal76(::core::primitive::u8), + #[codec(index = 77)] + Mortal77(::core::primitive::u8), + #[codec(index = 78)] + Mortal78(::core::primitive::u8), + #[codec(index = 79)] + Mortal79(::core::primitive::u8), + #[codec(index = 80)] + Mortal80(::core::primitive::u8), + #[codec(index = 81)] + Mortal81(::core::primitive::u8), + #[codec(index = 82)] + Mortal82(::core::primitive::u8), + #[codec(index = 83)] + Mortal83(::core::primitive::u8), + #[codec(index = 84)] + Mortal84(::core::primitive::u8), + #[codec(index = 85)] + Mortal85(::core::primitive::u8), + #[codec(index = 86)] + Mortal86(::core::primitive::u8), + #[codec(index = 87)] + Mortal87(::core::primitive::u8), + #[codec(index = 88)] + Mortal88(::core::primitive::u8), + #[codec(index = 89)] + Mortal89(::core::primitive::u8), + #[codec(index = 90)] + Mortal90(::core::primitive::u8), + #[codec(index = 91)] + Mortal91(::core::primitive::u8), + #[codec(index = 92)] + Mortal92(::core::primitive::u8), + #[codec(index = 93)] + Mortal93(::core::primitive::u8), + #[codec(index = 94)] + Mortal94(::core::primitive::u8), + #[codec(index = 95)] + Mortal95(::core::primitive::u8), + #[codec(index = 96)] + Mortal96(::core::primitive::u8), + #[codec(index = 97)] + Mortal97(::core::primitive::u8), + #[codec(index = 98)] + Mortal98(::core::primitive::u8), + #[codec(index = 99)] + Mortal99(::core::primitive::u8), + #[codec(index = 100)] + Mortal100(::core::primitive::u8), + #[codec(index = 101)] + Mortal101(::core::primitive::u8), + #[codec(index = 102)] + Mortal102(::core::primitive::u8), + #[codec(index = 103)] + Mortal103(::core::primitive::u8), + #[codec(index = 104)] + Mortal104(::core::primitive::u8), + #[codec(index = 105)] + Mortal105(::core::primitive::u8), + #[codec(index = 106)] + Mortal106(::core::primitive::u8), + #[codec(index = 107)] + Mortal107(::core::primitive::u8), + #[codec(index = 108)] + Mortal108(::core::primitive::u8), + #[codec(index = 109)] + Mortal109(::core::primitive::u8), + #[codec(index = 110)] + Mortal110(::core::primitive::u8), + #[codec(index = 111)] + Mortal111(::core::primitive::u8), + #[codec(index = 112)] + Mortal112(::core::primitive::u8), + #[codec(index = 113)] + Mortal113(::core::primitive::u8), + #[codec(index = 114)] + Mortal114(::core::primitive::u8), + #[codec(index = 115)] + Mortal115(::core::primitive::u8), + #[codec(index = 116)] + Mortal116(::core::primitive::u8), + #[codec(index = 117)] + Mortal117(::core::primitive::u8), + #[codec(index = 118)] + Mortal118(::core::primitive::u8), + #[codec(index = 119)] + Mortal119(::core::primitive::u8), + #[codec(index = 120)] + Mortal120(::core::primitive::u8), + #[codec(index = 121)] + Mortal121(::core::primitive::u8), + #[codec(index = 122)] + Mortal122(::core::primitive::u8), + #[codec(index = 123)] + Mortal123(::core::primitive::u8), + #[codec(index = 124)] + Mortal124(::core::primitive::u8), + #[codec(index = 125)] + Mortal125(::core::primitive::u8), + #[codec(index = 126)] + Mortal126(::core::primitive::u8), + #[codec(index = 127)] + Mortal127(::core::primitive::u8), + #[codec(index = 128)] + Mortal128(::core::primitive::u8), + #[codec(index = 129)] + Mortal129(::core::primitive::u8), + #[codec(index = 130)] + Mortal130(::core::primitive::u8), + #[codec(index = 131)] + Mortal131(::core::primitive::u8), + #[codec(index = 132)] + Mortal132(::core::primitive::u8), + #[codec(index = 133)] + Mortal133(::core::primitive::u8), + #[codec(index = 134)] + Mortal134(::core::primitive::u8), + #[codec(index = 135)] + Mortal135(::core::primitive::u8), + #[codec(index = 136)] + Mortal136(::core::primitive::u8), + #[codec(index = 137)] + Mortal137(::core::primitive::u8), + #[codec(index = 138)] + Mortal138(::core::primitive::u8), + #[codec(index = 139)] + Mortal139(::core::primitive::u8), + #[codec(index = 140)] + Mortal140(::core::primitive::u8), + #[codec(index = 141)] + Mortal141(::core::primitive::u8), + #[codec(index = 142)] + Mortal142(::core::primitive::u8), + #[codec(index = 143)] + Mortal143(::core::primitive::u8), + #[codec(index = 144)] + Mortal144(::core::primitive::u8), + #[codec(index = 145)] + Mortal145(::core::primitive::u8), + #[codec(index = 146)] + Mortal146(::core::primitive::u8), + #[codec(index = 147)] + Mortal147(::core::primitive::u8), + #[codec(index = 148)] + Mortal148(::core::primitive::u8), + #[codec(index = 149)] + Mortal149(::core::primitive::u8), + #[codec(index = 150)] + Mortal150(::core::primitive::u8), + #[codec(index = 151)] + Mortal151(::core::primitive::u8), + #[codec(index = 152)] + Mortal152(::core::primitive::u8), + #[codec(index = 153)] + Mortal153(::core::primitive::u8), + #[codec(index = 154)] + Mortal154(::core::primitive::u8), + #[codec(index = 155)] + Mortal155(::core::primitive::u8), + #[codec(index = 156)] + Mortal156(::core::primitive::u8), + #[codec(index = 157)] + Mortal157(::core::primitive::u8), + #[codec(index = 158)] + Mortal158(::core::primitive::u8), + #[codec(index = 159)] + Mortal159(::core::primitive::u8), + #[codec(index = 160)] + Mortal160(::core::primitive::u8), + #[codec(index = 161)] + Mortal161(::core::primitive::u8), + #[codec(index = 162)] + Mortal162(::core::primitive::u8), + #[codec(index = 163)] + Mortal163(::core::primitive::u8), + #[codec(index = 164)] + Mortal164(::core::primitive::u8), + #[codec(index = 165)] + Mortal165(::core::primitive::u8), + #[codec(index = 166)] + Mortal166(::core::primitive::u8), + #[codec(index = 167)] + Mortal167(::core::primitive::u8), + #[codec(index = 168)] + Mortal168(::core::primitive::u8), + #[codec(index = 169)] + Mortal169(::core::primitive::u8), + #[codec(index = 170)] + Mortal170(::core::primitive::u8), + #[codec(index = 171)] + Mortal171(::core::primitive::u8), + #[codec(index = 172)] + Mortal172(::core::primitive::u8), + #[codec(index = 173)] + Mortal173(::core::primitive::u8), + #[codec(index = 174)] + Mortal174(::core::primitive::u8), + #[codec(index = 175)] + Mortal175(::core::primitive::u8), + #[codec(index = 176)] + Mortal176(::core::primitive::u8), + #[codec(index = 177)] + Mortal177(::core::primitive::u8), + #[codec(index = 178)] + Mortal178(::core::primitive::u8), + #[codec(index = 179)] + Mortal179(::core::primitive::u8), + #[codec(index = 180)] + Mortal180(::core::primitive::u8), + #[codec(index = 181)] + Mortal181(::core::primitive::u8), + #[codec(index = 182)] + Mortal182(::core::primitive::u8), + #[codec(index = 183)] + Mortal183(::core::primitive::u8), + #[codec(index = 184)] + Mortal184(::core::primitive::u8), + #[codec(index = 185)] + Mortal185(::core::primitive::u8), + #[codec(index = 186)] + Mortal186(::core::primitive::u8), + #[codec(index = 187)] + Mortal187(::core::primitive::u8), + #[codec(index = 188)] + Mortal188(::core::primitive::u8), + #[codec(index = 189)] + Mortal189(::core::primitive::u8), + #[codec(index = 190)] + Mortal190(::core::primitive::u8), + #[codec(index = 191)] + Mortal191(::core::primitive::u8), + #[codec(index = 192)] + Mortal192(::core::primitive::u8), + #[codec(index = 193)] + Mortal193(::core::primitive::u8), + #[codec(index = 194)] + Mortal194(::core::primitive::u8), + #[codec(index = 195)] + Mortal195(::core::primitive::u8), + #[codec(index = 196)] + Mortal196(::core::primitive::u8), + #[codec(index = 197)] + Mortal197(::core::primitive::u8), + #[codec(index = 198)] + Mortal198(::core::primitive::u8), + #[codec(index = 199)] + Mortal199(::core::primitive::u8), + #[codec(index = 200)] + Mortal200(::core::primitive::u8), + #[codec(index = 201)] + Mortal201(::core::primitive::u8), + #[codec(index = 202)] + Mortal202(::core::primitive::u8), + #[codec(index = 203)] + Mortal203(::core::primitive::u8), + #[codec(index = 204)] + Mortal204(::core::primitive::u8), + #[codec(index = 205)] + Mortal205(::core::primitive::u8), + #[codec(index = 206)] + Mortal206(::core::primitive::u8), + #[codec(index = 207)] + Mortal207(::core::primitive::u8), + #[codec(index = 208)] + Mortal208(::core::primitive::u8), + #[codec(index = 209)] + Mortal209(::core::primitive::u8), + #[codec(index = 210)] + Mortal210(::core::primitive::u8), + #[codec(index = 211)] + Mortal211(::core::primitive::u8), + #[codec(index = 212)] + Mortal212(::core::primitive::u8), + #[codec(index = 213)] + Mortal213(::core::primitive::u8), + #[codec(index = 214)] + Mortal214(::core::primitive::u8), + #[codec(index = 215)] + Mortal215(::core::primitive::u8), + #[codec(index = 216)] + Mortal216(::core::primitive::u8), + #[codec(index = 217)] + Mortal217(::core::primitive::u8), + #[codec(index = 218)] + Mortal218(::core::primitive::u8), + #[codec(index = 219)] + Mortal219(::core::primitive::u8), + #[codec(index = 220)] + Mortal220(::core::primitive::u8), + #[codec(index = 221)] + Mortal221(::core::primitive::u8), + #[codec(index = 222)] + Mortal222(::core::primitive::u8), + #[codec(index = 223)] + Mortal223(::core::primitive::u8), + #[codec(index = 224)] + Mortal224(::core::primitive::u8), + #[codec(index = 225)] + Mortal225(::core::primitive::u8), + #[codec(index = 226)] + Mortal226(::core::primitive::u8), + #[codec(index = 227)] + Mortal227(::core::primitive::u8), + #[codec(index = 228)] + Mortal228(::core::primitive::u8), + #[codec(index = 229)] + Mortal229(::core::primitive::u8), + #[codec(index = 230)] + Mortal230(::core::primitive::u8), + #[codec(index = 231)] + Mortal231(::core::primitive::u8), + #[codec(index = 232)] + Mortal232(::core::primitive::u8), + #[codec(index = 233)] + Mortal233(::core::primitive::u8), + #[codec(index = 234)] + Mortal234(::core::primitive::u8), + #[codec(index = 235)] + Mortal235(::core::primitive::u8), + #[codec(index = 236)] + Mortal236(::core::primitive::u8), + #[codec(index = 237)] + Mortal237(::core::primitive::u8), + #[codec(index = 238)] + Mortal238(::core::primitive::u8), + #[codec(index = 239)] + Mortal239(::core::primitive::u8), + #[codec(index = 240)] + Mortal240(::core::primitive::u8), + #[codec(index = 241)] + Mortal241(::core::primitive::u8), + #[codec(index = 242)] + Mortal242(::core::primitive::u8), + #[codec(index = 243)] + Mortal243(::core::primitive::u8), + #[codec(index = 244)] + Mortal244(::core::primitive::u8), + #[codec(index = 245)] + Mortal245(::core::primitive::u8), + #[codec(index = 246)] + Mortal246(::core::primitive::u8), + #[codec(index = 247)] + Mortal247(::core::primitive::u8), + #[codec(index = 248)] + Mortal248(::core::primitive::u8), + #[codec(index = 249)] + Mortal249(::core::primitive::u8), + #[codec(index = 250)] + Mortal250(::core::primitive::u8), + #[codec(index = 251)] + Mortal251(::core::primitive::u8), + #[codec(index = 252)] + Mortal252(::core::primitive::u8), + #[codec(index = 253)] + Mortal253(::core::primitive::u8), + #[codec(index = 254)] + Mortal254(::core::primitive::u8), + #[codec(index = 255)] + Mortal255(::core::primitive::u8), } } - pub mod zcash_frost { + pub mod header { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59374,68 +49508,18 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum KeygenAborted { - #[codec(index = 0)] - InvalidProofOfKnowledge { - round1: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - #[codec(index = 1)] - InvalidSecretShare { - round1: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - round2: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum SigningAborted { - #[codec(index = 0)] - InvalidSignatureShare { - round1: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - >, - round2: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - >, - }, + pub struct Header<_0> { + pub parent_hash: ::subxt::ext::subxt_core::utils::H256, + #[codec(compact)] + pub number: _0, + pub state_root: ::subxt::ext::subxt_core::utils::H256, + pub extrinsics_root: ::subxt::ext::subxt_core::utils::H256, + pub digest: runtime_types::sp_runtime::generic::digest::Digest, } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZCashFrostJustification { - # [codec (index = 0)] Keygen { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: zcash_frost :: KeygenAborted , } , # [codec (index = 1)] Signing { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: zcash_frost :: SigningAborted , } , } } + } + pub mod traits { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59453,8 +49537,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum DKGTSSJustification { - # [codec (index = 0)] DfnsCGGMP21 (runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: DfnsCGGMP21Justification ,) , # [codec (index = 1)] ZCashFrost (runtime_types :: tangle_primitives :: misbehavior :: zcash_frost :: ZCashFrostJustification ,) , } + pub struct BlakeTwo256; + } + pub mod transaction_validity { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59472,11 +49558,29 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum MisbehaviorJustification { + pub enum InvalidTransaction { #[codec(index = 0)] - DKGTSS(runtime_types::tangle_primitives::misbehavior::DKGTSSJustification), + Call, #[codec(index = 1)] - ZkSaaS(runtime_types::tangle_primitives::misbehavior::ZkSaaSJustification), + Payment, + #[codec(index = 2)] + Future, + #[codec(index = 3)] + Stale, + #[codec(index = 4)] + BadProof, + #[codec(index = 5)] + AncientBirthBlock, + #[codec(index = 6)] + ExhaustsResources, + #[codec(index = 7)] + Custom(::core::primitive::u8), + #[codec(index = 8)] + BadMandatory, + #[codec(index = 9)] + MandatoryValidation, + #[codec(index = 10)] + BadSigner, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59495,12 +49599,13 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct MisbehaviorSubmission { - pub role_type: runtime_types::tangle_primitives::roles::RoleType, - pub offender: [::core::primitive::u8; 33usize], - pub job_id: ::core::primitive::u64, - pub justification: - runtime_types::tangle_primitives::misbehavior::MisbehaviorJustification, + pub enum TransactionSource { + #[codec(index = 0)] + InBlock, + #[codec(index = 1)] + Local, + #[codec(index = 2)] + External, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59519,10 +49624,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct SignedRoundMessage { - pub sender: ::core::primitive::u16, - pub message: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - pub signature: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + pub enum TransactionValidityError { + #[codec(index = 0)] + Invalid(runtime_types::sp_runtime::transaction_validity::InvalidTransaction), + #[codec(index = 1)] + Unknown(runtime_types::sp_runtime::transaction_validity::UnknownTransaction), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59541,81 +49647,13 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ZkSaaSJustification {} - } - pub mod roles { - use super::runtime_types; - pub mod tss { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ThresholdSignatureRoleType { - #[codec(index = 0)] - DfnsCGGMP21Secp256k1, - #[codec(index = 1)] - DfnsCGGMP21Secp256r1, - #[codec(index = 2)] - DfnsCGGMP21Stark, - #[codec(index = 3)] - SilentShardDKLS23Secp256k1, - #[codec(index = 4)] - ZcashFrostP256, - #[codec(index = 5)] - ZcashFrostP384, - #[codec(index = 6)] - ZcashFrostSecp256k1, - #[codec(index = 7)] - ZcashFrostRistretto255, - #[codec(index = 8)] - ZcashFrostEd25519, - #[codec(index = 9)] - ZcashFrostEd448, - #[codec(index = 10)] - GennaroDKGBls381, - #[codec(index = 11)] - WstsV2, - } - } - pub mod zksaas { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZeroKnowledgeRoleType { - #[codec(index = 0)] - ZkSaaSGroth16, - #[codec(index = 1)] - ZkSaaSMarlin, - } + pub enum UnknownTransaction { + #[codec(index = 0)] + CannotLookup, + #[codec(index = 1)] + NoUnsignedValidator, + #[codec(index = 2)] + Custom(::core::primitive::u8), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59634,19 +49672,180 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum RoleType { - #[codec(index = 0)] - Tss(runtime_types::tangle_primitives::roles::tss::ThresholdSignatureRoleType), - #[codec(index = 1)] - ZkSaaS(runtime_types::tangle_primitives::roles::zksaas::ZeroKnowledgeRoleType), - #[codec(index = 2)] - LightClientRelaying, + pub struct ValidTransaction { + pub priority: ::core::primitive::u64, + pub requires: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + >, + pub provides: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + >, + pub longevity: ::core::primitive::u64, + pub propagate: ::core::primitive::bool, } } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum DispatchError { + #[codec(index = 0)] + Other, + #[codec(index = 1)] + CannotLookup, + #[codec(index = 2)] + BadOrigin, + #[codec(index = 3)] + Module(runtime_types::sp_runtime::ModuleError), + #[codec(index = 4)] + ConsumerRemaining, + #[codec(index = 5)] + NoProviders, + #[codec(index = 6)] + TooManyConsumers, + #[codec(index = 7)] + Token(runtime_types::sp_runtime::TokenError), + #[codec(index = 8)] + Arithmetic(runtime_types::sp_arithmetic::ArithmeticError), + #[codec(index = 9)] + Transactional(runtime_types::sp_runtime::TransactionalError), + #[codec(index = 10)] + Exhausted, + #[codec(index = 11)] + Corruption, + #[codec(index = 12)] + Unavailable, + #[codec(index = 13)] + RootNotAllowed, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct ModuleError { + pub index: ::core::primitive::u8, + pub error: [::core::primitive::u8; 4usize], + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum MultiSignature { + #[codec(index = 0)] + Ed25519(runtime_types::sp_core::ed25519::Signature), + #[codec(index = 1)] + Sr25519(runtime_types::sp_core::sr25519::Signature), + #[codec(index = 2)] + Ecdsa(runtime_types::sp_core::ecdsa::Signature), + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum TokenError { + #[codec(index = 0)] + FundsUnavailable, + #[codec(index = 1)] + OnlyProvider, + #[codec(index = 2)] + BelowMinimum, + #[codec(index = 3)] + CannotCreate, + #[codec(index = 4)] + UnknownAsset, + #[codec(index = 5)] + Frozen, + #[codec(index = 6)] + Unsupported, + #[codec(index = 7)] + CannotCreateHold, + #[codec(index = 8)] + NotExpendable, + #[codec(index = 9)] + Blocked, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum TransactionalError { + #[codec(index = 0)] + LimitReached, + #[codec(index = 1)] + NoLayer, + } } - pub mod tangle_testnet_runtime { + pub mod sp_session { use super::runtime_types; - pub mod opaque { + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct MembershipProof { + pub session: ::core::primitive::u32, + pub trie_nodes: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + >, + pub validator_count: ::core::primitive::u32, + } + } + pub mod sp_staking { + use super::runtime_types; + pub mod offence { use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59665,11 +49864,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct SessionKeys { - pub babe: runtime_types::sp_consensus_babe::app::Public, - pub grandpa: runtime_types::sp_consensus_grandpa::app::Public, - pub im_online: runtime_types::pallet_im_online::sr25519::app_sr25519::Public, - pub role: runtime_types::tangle_crypto_primitives::crypto::Public, + pub struct OffenceDetails<_0, _1> { + pub offender: _1, + pub reporters: ::subxt::ext::subxt_core::alloc::vec::Vec<_0>, } } #[derive( @@ -59685,21 +49882,15 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxAdditionalParamsLen; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxDataLen; + pub struct Exposure<_0, _1> { + #[codec(compact)] + pub total: _1, + #[codec(compact)] + pub own: _1, + pub others: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::sp_staking::IndividualExposure<_0, _1>, + >, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59713,7 +49904,13 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxKeyLen; + pub struct ExposurePage<_0, _1> { + #[codec(compact)] + pub page_total: _1, + pub others: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::sp_staking::IndividualExposure<_0, _1>, + >, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59727,7 +49924,11 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxParticipants; + pub struct IndividualExposure<_0, _1> { + pub who: _0, + #[codec(compact)] + pub value: _1, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59741,7 +49942,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxProofLen; + pub struct PagedExposureMetadata<_0> { + #[codec(compact)] + pub total: _0, + #[codec(compact)] + pub own: _0, + pub nominator_count: ::core::primitive::u32, + pub page_count: ::core::primitive::u32, + } + } + pub mod sp_version { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59755,7 +49966,48 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxSignatureLen; + pub struct RuntimeVersion { + pub spec_name: ::subxt::ext::subxt_core::alloc::string::String, + pub impl_name: ::subxt::ext::subxt_core::alloc::string::String, + pub authoring_version: ::core::primitive::u32, + pub spec_version: ::core::primitive::u32, + pub impl_version: ::core::primitive::u32, + pub apis: ::subxt::ext::subxt_core::alloc::vec::Vec<( + [::core::primitive::u8; 8usize], + ::core::primitive::u32, + )>, + pub transaction_version: ::core::primitive::u32, + pub state_version: ::core::primitive::u8, + } + } + pub mod sp_weights { + use super::runtime_types; + pub mod weight_v2 { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Weight { + #[codec(compact)] + pub ref_time: ::core::primitive::u64, + #[codec(compact)] + pub proof_size: ::core::primitive::u64, + } + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59769,7 +50021,38 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxSubmissionLen; + pub struct RuntimeDbWeight { + pub read: ::core::primitive::u64, + pub write: ::core::primitive::u64, + } + } + pub mod tangle_runtime { + use super::runtime_types; + pub mod opaque { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct SessionKeys { + pub babe: runtime_types::sp_consensus_babe::app::Public, + pub grandpa: runtime_types::sp_consensus_grandpa::app::Public, + pub im_online: runtime_types::pallet_im_online::sr25519::app_sr25519::Public, + } + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59780,9 +50063,9 @@ pub mod api { Eq, PartialEq, )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] pub struct NposSolution16 { pub votes1: ::subxt::ext::subxt_core::alloc::vec::Vec<( ::subxt::ext::subxt_core::ext::codec::Compact<::core::primitive::u32>, @@ -59959,12 +50242,8 @@ pub mod api { ::subxt::ext::subxt_core::utils::AccountId32, >, ), - #[codec(index = 12)] - Council( - runtime_types::pallet_collective::RawOrigin< - ::subxt::ext::subxt_core::utils::AccountId32, - >, - ), + #[codec(index = 11)] + Council(runtime_types::pallet_collective::RawOrigin<::subxt::utils::AccountId32>), #[codec(index = 32)] Ethereum(runtime_types::pallet_ethereum::RawOrigin), #[codec(index = 3)] @@ -59980,9 +50259,9 @@ pub mod api { Eq, PartialEq, )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] pub enum ProxyType { #[codec(index = 0)] Any, @@ -59994,18 +50273,18 @@ pub mod api { Staking, } #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + :: subxt :: ext :: codec :: Decode, + :: subxt :: ext :: codec :: Encode, + :: subxt :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: scale_encode :: EncodeAsType, Clone, Debug, Eq, PartialEq, )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + # [codec (crate = :: subxt :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: scale_encode")] pub struct Runtime; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -60067,6 +50346,8 @@ pub mod api { Scheduler(runtime_types::pallet_scheduler::pallet::Call), #[codec(index = 25)] Preimage(runtime_types::pallet_preimage::pallet::Call), + #[codec(index = 26)] + Proxy(runtime_types::pallet_proxy::pallet::Call), #[codec(index = 27)] TxPause(runtime_types::pallet_tx_pause::pallet::Call), #[codec(index = 28)] @@ -60089,28 +50370,6 @@ pub mod api { HotfixSufficients(runtime_types::pallet_hotfix_sufficients::pallet::Call), #[codec(index = 38)] Claims(runtime_types::pallet_airdrop_claims::pallet::Call), - #[codec(index = 39)] - Roles(runtime_types::pallet_roles::pallet::Call), - #[codec(index = 40)] - Jobs(runtime_types::pallet_jobs::module::Call), - #[codec(index = 41)] - Dkg(runtime_types::pallet_dkg::pallet::Call), - #[codec(index = 42)] - ZkSaaS(runtime_types::pallet_zksaas::pallet::Call), - #[codec(index = 43)] - Proxy(runtime_types::pallet_proxy::pallet::Call), - #[codec(index = 44)] - MultiAssetDelegation(runtime_types::pallet_multi_asset_delegation::pallet::Call), - #[codec(index = 45)] - SygmaAccessSegregator(runtime_types::sygma_access_segregator::pallet::Call), - #[codec(index = 46)] - SygmaBasicFeeHandler(runtime_types::sygma_basic_feehandler::pallet::Call), - #[codec(index = 47)] - SygmaFeeHandlerRouter(runtime_types::sygma_fee_handler_router::pallet::Call), - #[codec(index = 48)] - SygmaPercentageFeeHandler(runtime_types::sygma_percentage_feehandler::pallet::Call), - #[codec(index = 49)] - SygmaBridge(runtime_types::sygma_bridge::pallet::Call), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -60170,6 +50429,8 @@ pub mod api { Scheduler(runtime_types::pallet_scheduler::pallet::Error), #[codec(index = 25)] Preimage(runtime_types::pallet_preimage::pallet::Error), + #[codec(index = 26)] + Proxy(runtime_types::pallet_proxy::pallet::Error), #[codec(index = 27)] TxPause(runtime_types::pallet_tx_pause::pallet::Error), #[codec(index = 28)] @@ -60188,30 +50449,6 @@ pub mod api { HotfixSufficients(runtime_types::pallet_hotfix_sufficients::pallet::Error), #[codec(index = 38)] Claims(runtime_types::pallet_airdrop_claims::pallet::Error), - #[codec(index = 39)] - Roles(runtime_types::pallet_roles::pallet::Error), - #[codec(index = 40)] - Jobs(runtime_types::pallet_jobs::module::Error), - #[codec(index = 41)] - Dkg(runtime_types::pallet_dkg::pallet::Error), - #[codec(index = 42)] - ZkSaaS(runtime_types::pallet_zksaas::pallet::Error), - #[codec(index = 43)] - Proxy(runtime_types::pallet_proxy::pallet::Error), - #[codec(index = 44)] - MultiAssetDelegation(runtime_types::pallet_multi_asset_delegation::pallet::Error), - #[codec(index = 45)] - SygmaAccessSegregator(runtime_types::sygma_access_segregator::pallet::Error), - #[codec(index = 46)] - SygmaBasicFeeHandler(runtime_types::sygma_basic_feehandler::pallet::Error), - #[codec(index = 47)] - SygmaFeeHandlerRouter(runtime_types::sygma_fee_handler_router::pallet::Error), - #[codec(index = 48)] - SygmaPercentageFeeHandler( - runtime_types::sygma_percentage_feehandler::pallet::Error, - ), - #[codec(index = 49)] - SygmaBridge(runtime_types::sygma_bridge::pallet::Error), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -60272,7 +50509,7 @@ pub mod api { #[codec(index = 25)] Preimage(runtime_types::pallet_preimage::pallet::Event), #[codec(index = 26)] - Offences(runtime_types::pallet_offences::pallet::Event), + Proxy(runtime_types::pallet_proxy::pallet::Event), #[codec(index = 27)] TxPause(runtime_types::pallet_tx_pause::pallet::Event), #[codec(index = 28)] @@ -60291,30 +50528,6 @@ pub mod api { BaseFee(runtime_types::pallet_base_fee::pallet::Event), #[codec(index = 38)] Claims(runtime_types::pallet_airdrop_claims::pallet::Event), - #[codec(index = 39)] - Roles(runtime_types::pallet_roles::pallet::Event), - #[codec(index = 40)] - Jobs(runtime_types::pallet_jobs::module::Event), - #[codec(index = 41)] - Dkg(runtime_types::pallet_dkg::pallet::Event), - #[codec(index = 42)] - ZkSaaS(runtime_types::pallet_zksaas::pallet::Event), - #[codec(index = 43)] - Proxy(runtime_types::pallet_proxy::pallet::Event), - #[codec(index = 44)] - MultiAssetDelegation(runtime_types::pallet_multi_asset_delegation::pallet::Event), - #[codec(index = 45)] - SygmaAccessSegregator(runtime_types::sygma_access_segregator::pallet::Event), - #[codec(index = 46)] - SygmaBasicFeeHandler(runtime_types::sygma_basic_feehandler::pallet::Event), - #[codec(index = 47)] - SygmaFeeHandlerRouter(runtime_types::sygma_fee_handler_router::pallet::Event), - #[codec(index = 48)] - SygmaPercentageFeeHandler( - runtime_types::sygma_percentage_feehandler::pallet::Event, - ), - #[codec(index = 49)] - SygmaBridge(runtime_types::sygma_bridge::pallet::Event), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, diff --git a/tangle-subxt/src/tangle_testnet_runtime.rs b/tangle-subxt/src/tangle_testnet_runtime.rs index d3a5b2264..14d4d29f6 100644 --- a/tangle-subxt/src/tangle_testnet_runtime.rs +++ b/tangle-subxt/src/tangle_testnet_runtime.rs @@ -6,7 +6,7 @@ pub mod api { mod root_mod { pub use super::*; } - pub static PALLETS: [&str; 50usize] = [ + pub static PALLETS: [&str; 47usize] = [ "System", "Timestamp", "Sudo", @@ -46,10 +46,7 @@ pub mod api { "BaseFee", "HotfixSufficients", "Claims", - "Roles", - "Jobs", - "Dkg", - "ZkSaaS", + "Services", "Proxy", "MultiAssetDelegation", "SygmaAccessSegregator", @@ -63,7 +60,7 @@ pub mod api { "Metadata", "BlockBuilder", "SygmaBridgeApi", - "JobsApi", + "ServicesApi", "EthereumRuntimeRPCApi", "ConvertTransactionRuntimeApi", "TaggedTransactionQueue", @@ -114,8 +111,8 @@ pub mod api { pub fn sygma_bridge_api(&self) -> sygma_bridge_api::SygmaBridgeApi { sygma_bridge_api::SygmaBridgeApi } - pub fn jobs_api(&self) -> jobs_api::JobsApi { - jobs_api::JobsApi + pub fn services_api(&self) -> services_api::ServicesApi { + services_api::ServicesApi } pub fn ethereum_runtime_rpc_api( &self, @@ -726,303 +723,44 @@ pub mod api { } } } - pub mod jobs_api { + pub mod services_api { use super::root_mod; use super::runtime_types; - pub struct JobsApi; - impl JobsApi { - #[doc = " Query jobs associated with a specific validator."] + pub struct ServicesApi; + impl ServicesApi { + #[doc = " Query all the services that this operator is providing along with their blueprints."] #[doc = ""] - #[doc = " This function takes a `validator` parameter of type `AccountId` and attempts"] - #[doc = " to retrieve a list of jobs associated with the provided validator. If successful,"] - #[doc = " it constructs a vector of `RpcResponseJobsData` containing information"] - #[doc = " about the jobs and returns it as a `Result`."] - #[doc = ""] - #[doc = " # Arguments"] - #[doc = ""] - #[doc = " * `validator` - The account ID of the validator whose jobs are to be queried."] - #[doc = ""] - #[doc = " # Returns"] - #[doc = ""] - #[doc = " An optional vec of `RpcResponseJobsData` of jobs assigned to validator"] - pub fn query_jobs_by_validator( - &self, - validator: types::query_jobs_by_validator::Validator, - ) -> ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload< - types::QueryJobsByValidator, - types::query_jobs_by_validator::output::Output, - > { - ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload::new_static( - "JobsApi", - "query_jobs_by_validator", - types::QueryJobsByValidator { validator }, - [ - 223u8, 14u8, 9u8, 143u8, 170u8, 120u8, 116u8, 128u8, 35u8, 171u8, - 121u8, 158u8, 14u8, 185u8, 226u8, 134u8, 19u8, 137u8, 50u8, 17u8, - 244u8, 153u8, 165u8, 193u8, 205u8, 51u8, 13u8, 106u8, 154u8, 78u8, - 94u8, 17u8, - ], - ) - } - #[doc = " Queries a job by its key and ID."] - #[doc = ""] - #[doc = " # Arguments"] - #[doc = ""] - #[doc = " * `role_type` - The role of the job."] - #[doc = " * `job_id` - The ID of the job."] - #[doc = ""] - #[doc = " # Returns"] - #[doc = ""] - #[doc = " An optional `RpcResponseJobsData` containing the account ID of the job."] - pub fn query_job_by_id( - &self, - role_type: types::query_job_by_id::RoleType, - job_id: types::query_job_by_id::JobId, - ) -> ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload< - types::QueryJobById, - types::query_job_by_id::output::Output, - > { - ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload::new_static( - "JobsApi", - "query_job_by_id", - types::QueryJobById { role_type, job_id }, - [ - 200u8, 98u8, 170u8, 155u8, 229u8, 209u8, 33u8, 45u8, 245u8, 157u8, - 168u8, 70u8, 82u8, 210u8, 85u8, 152u8, 158u8, 82u8, 85u8, 8u8, 74u8, - 67u8, 104u8, 233u8, 226u8, 235u8, 91u8, 157u8, 160u8, 224u8, 203u8, - 20u8, - ], - ) - } - #[doc = " Queries the result of a job by its role_type and ID."] - #[doc = ""] - #[doc = " # Arguments"] - #[doc = ""] - #[doc = " * `role_type` - The role of the job."] - #[doc = " * `job_id` - The ID of the job."] - #[doc = ""] - #[doc = " # Returns"] - #[doc = ""] - #[doc = " An `Option` containing the phase one result of the job, wrapped in an `PhaseResult`."] - pub fn query_job_result( + #[doc = " ## Arguments"] + #[doc = " - `operator`: The operator account id."] + #[doc = " ## Return"] + #[doc = " - [`RpcServicesWithBlueprint`]: A list of services with their blueprints."] + pub fn query_services_with_blueprints_by_operator( &self, - role_type: types::query_job_result::RoleType, - job_id: types::query_job_result::JobId, + operator: types::query_services_with_blueprints_by_operator::Operator, ) -> ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload< - types::QueryJobResult, - types::query_job_result::output::Output, + types::QueryServicesWithBlueprintsByOperator, + types::query_services_with_blueprints_by_operator::output::Output, > { ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload::new_static( - "JobsApi", - "query_job_result", - types::QueryJobResult { role_type, job_id }, + "ServicesApi", + "query_services_with_blueprints_by_operator", + types::QueryServicesWithBlueprintsByOperator { operator }, [ - 96u8, 67u8, 141u8, 253u8, 144u8, 248u8, 159u8, 225u8, 28u8, 62u8, - 212u8, 80u8, 145u8, 119u8, 30u8, 51u8, 180u8, 135u8, 54u8, 108u8, 41u8, - 146u8, 101u8, 61u8, 89u8, 20u8, 52u8, 108u8, 248u8, 220u8, 142u8, - 240u8, - ], - ) - } - #[doc = " Queries next job ID."] - #[doc = ""] - #[doc = " # Returns"] - #[doc = " Next job ID."] - pub fn query_next_job_id( - &self, - ) -> ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload< - types::QueryNextJobId, - types::query_next_job_id::output::Output, - > { - ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload::new_static( - "JobsApi", - "query_next_job_id", - types::QueryNextJobId {}, - [ - 222u8, 11u8, 37u8, 99u8, 15u8, 155u8, 125u8, 195u8, 231u8, 147u8, 53u8, - 162u8, 75u8, 214u8, 44u8, 142u8, 254u8, 248u8, 126u8, 7u8, 240u8, - 109u8, 187u8, 148u8, 117u8, 56u8, 6u8, 134u8, 161u8, 165u8, 103u8, - 54u8, - ], - ) - } - #[doc = " Queries restaker's role key"] - #[doc = ""] - #[doc = " # Returns"] - #[doc = " Role key"] - pub fn query_restaker_role_key( - &self, - address: types::query_restaker_role_key::Address, - ) -> ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload< - types::QueryRestakerRoleKey, - types::query_restaker_role_key::output::Output, - > { - ::subxt::ext::subxt_core::runtime_api::payload::StaticPayload::new_static( - "JobsApi", - "query_restaker_role_key", - types::QueryRestakerRoleKey { address }, - [ - 189u8, 30u8, 31u8, 46u8, 133u8, 107u8, 195u8, 96u8, 225u8, 120u8, - 190u8, 6u8, 35u8, 123u8, 132u8, 228u8, 252u8, 82u8, 81u8, 90u8, 110u8, - 69u8, 231u8, 101u8, 32u8, 174u8, 150u8, 172u8, 169u8, 54u8, 114u8, - 211u8, + 207u8, 187u8, 6u8, 247u8, 80u8, 141u8, 64u8, 246u8, 156u8, 39u8, 28u8, + 166u8, 120u8, 12u8, 140u8, 251u8, 55u8, 247u8, 48u8, 225u8, 226u8, + 60u8, 69u8, 188u8, 96u8, 8u8, 85u8, 103u8, 149u8, 34u8, 20u8, 28u8, ], ) } } pub mod types { use super::runtime_types; - pub mod query_jobs_by_validator { + pub mod query_services_with_blueprints_by_operator { use super::runtime_types; - pub type Validator = ::subxt::ext::subxt_core::utils::AccountId32; - pub mod output { - use super::runtime_types; - pub type Output = ::core::option::Option< - ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::jobs::RpcResponseJobsData< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - >, - >; - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct QueryJobsByValidator { - pub validator: query_jobs_by_validator::Validator, - } - pub mod query_job_by_id { - use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub mod output { - use super::runtime_types; - pub type Output = ::core::option::Option< - runtime_types::tangle_primitives::jobs::RpcResponseJobsData< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - >; - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct QueryJobById { - pub role_type: query_job_by_id::RoleType, - pub job_id: query_job_by_id::JobId, - } - pub mod query_job_result { - use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub mod output { - use super::runtime_types; - pub type Output = ::core::option::Option< - runtime_types::tangle_primitives::jobs::PhaseResult< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxKeyLen, - runtime_types::tangle_testnet_runtime::MaxDataLen, - runtime_types::tangle_testnet_runtime::MaxSignatureLen, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxProofLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - >; - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct QueryJobResult { - pub role_type: query_job_result::RoleType, - pub job_id: query_job_result::JobId, - } - pub mod query_next_job_id { - use super::runtime_types; - pub mod output { - use super::runtime_types; - pub type Output = ::core::primitive::u64; - } - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct QueryNextJobId {} - pub mod query_restaker_role_key { - use super::runtime_types; - pub type Address = ::subxt::ext::subxt_core::utils::AccountId32; + pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; pub mod output { use super::runtime_types; - pub type Output = ::core::option::Option< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >; + pub type Output = :: core :: result :: Result < :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: tangle_primitives :: services :: RpcServicesWithBlueprint < :: subxt :: ext :: subxt_core :: utils :: AccountId32 , :: core :: primitive :: u64 > > , runtime_types :: sp_runtime :: DispatchError > ; } } #[derive( @@ -1042,8 +780,8 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct QueryRestakerRoleKey { - pub address: query_restaker_role_key::Address, + pub struct QueryServicesWithBlueprintsByOperator { + pub operator: query_services_with_blueprints_by_operator::Operator, } } } @@ -3334,11 +3072,8 @@ pub mod api { pub fn claims(&self) -> claims::constants::ConstantsApi { claims::constants::ConstantsApi } - pub fn roles(&self) -> roles::constants::ConstantsApi { - roles::constants::ConstantsApi - } - pub fn jobs(&self) -> jobs::constants::ConstantsApi { - jobs::constants::ConstantsApi + pub fn services(&self) -> services::constants::ConstantsApi { + services::constants::ConstantsApi } pub fn proxy(&self) -> proxy::constants::ConstantsApi { proxy::constants::ConstantsApi @@ -3467,17 +3202,8 @@ pub mod api { pub fn claims(&self) -> claims::storage::StorageApi { claims::storage::StorageApi } - pub fn roles(&self) -> roles::storage::StorageApi { - roles::storage::StorageApi - } - pub fn jobs(&self) -> jobs::storage::StorageApi { - jobs::storage::StorageApi - } - pub fn dkg(&self) -> dkg::storage::StorageApi { - dkg::storage::StorageApi - } - pub fn zk_saa_s(&self) -> zk_saa_s::storage::StorageApi { - zk_saa_s::storage::StorageApi + pub fn services(&self) -> services::storage::StorageApi { + services::storage::StorageApi } pub fn proxy(&self) -> proxy::storage::StorageApi { proxy::storage::StorageApi @@ -3606,17 +3332,8 @@ pub mod api { pub fn claims(&self) -> claims::calls::TransactionApi { claims::calls::TransactionApi } - pub fn roles(&self) -> roles::calls::TransactionApi { - roles::calls::TransactionApi - } - pub fn jobs(&self) -> jobs::calls::TransactionApi { - jobs::calls::TransactionApi - } - pub fn dkg(&self) -> dkg::calls::TransactionApi { - dkg::calls::TransactionApi - } - pub fn zk_saa_s(&self) -> zk_saa_s::calls::TransactionApi { - zk_saa_s::calls::TransactionApi + pub fn services(&self) -> services::calls::TransactionApi { + services::calls::TransactionApi } pub fn proxy(&self) -> proxy::calls::TransactionApi { proxy::calls::TransactionApi @@ -3651,9 +3368,9 @@ pub mod api { .hash(); runtime_metadata_hash == [ - 150u8, 53u8, 228u8, 145u8, 223u8, 87u8, 91u8, 179u8, 223u8, 18u8, 100u8, 239u8, - 152u8, 60u8, 55u8, 103u8, 186u8, 163u8, 132u8, 134u8, 244u8, 206u8, 179u8, 150u8, - 142u8, 231u8, 255u8, 201u8, 169u8, 90u8, 146u8, 181u8, + 115u8, 26u8, 128u8, 61u8, 249u8, 187u8, 129u8, 248u8, 219u8, 24u8, 125u8, 92u8, + 42u8, 203u8, 246u8, 191u8, 120u8, 195u8, 119u8, 3u8, 59u8, 247u8, 53u8, 95u8, 47u8, + 114u8, 125u8, 174u8, 37u8, 162u8, 23u8, 237u8, ] } pub mod system { @@ -4761,10 +4478,10 @@ pub mod api { "Events", (), [ - 73u8, 190u8, 94u8, 175u8, 216u8, 244u8, 199u8, 114u8, 139u8, 194u8, - 152u8, 241u8, 104u8, 24u8, 212u8, 189u8, 90u8, 252u8, 218u8, 20u8, - 223u8, 229u8, 183u8, 17u8, 243u8, 61u8, 224u8, 65u8, 206u8, 105u8, - 61u8, 80u8, + 115u8, 97u8, 205u8, 172u8, 93u8, 80u8, 191u8, 235u8, 169u8, 210u8, + 168u8, 23u8, 44u8, 204u8, 28u8, 110u8, 187u8, 105u8, 206u8, 81u8, + 175u8, 182u8, 93u8, 5u8, 180u8, 187u8, 64u8, 9u8, 236u8, 34u8, 97u8, + 53u8, ], ) } @@ -5406,10 +5123,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 188u8, 150u8, 182u8, 90u8, 40u8, 179u8, 109u8, 218u8, 212u8, 0u8, - 208u8, 163u8, 110u8, 4u8, 90u8, 250u8, 217u8, 108u8, 219u8, 107u8, - 206u8, 230u8, 119u8, 52u8, 231u8, 161u8, 173u8, 51u8, 72u8, 90u8, 15u8, - 28u8, + 107u8, 197u8, 156u8, 243u8, 56u8, 70u8, 138u8, 113u8, 87u8, 132u8, + 14u8, 203u8, 68u8, 208u8, 189u8, 227u8, 49u8, 224u8, 127u8, 170u8, + 102u8, 115u8, 175u8, 126u8, 255u8, 209u8, 238u8, 26u8, 153u8, 253u8, + 182u8, 250u8, ], ) } @@ -5428,9 +5145,10 @@ pub mod api { weight, }, [ - 34u8, 48u8, 40u8, 84u8, 143u8, 39u8, 190u8, 42u8, 223u8, 172u8, 14u8, - 56u8, 205u8, 40u8, 187u8, 51u8, 177u8, 17u8, 189u8, 145u8, 150u8, 45u8, - 36u8, 52u8, 151u8, 240u8, 252u8, 41u8, 118u8, 2u8, 246u8, 207u8, + 10u8, 235u8, 43u8, 53u8, 132u8, 246u8, 143u8, 7u8, 222u8, 247u8, 197u8, + 72u8, 73u8, 212u8, 227u8, 251u8, 191u8, 251u8, 157u8, 122u8, 136u8, + 180u8, 113u8, 42u8, 87u8, 222u8, 163u8, 24u8, 124u8, 232u8, 28u8, + 182u8, ], ) } @@ -5465,9 +5183,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 121u8, 215u8, 151u8, 234u8, 64u8, 20u8, 128u8, 108u8, 23u8, 152u8, - 117u8, 43u8, 14u8, 117u8, 203u8, 216u8, 11u8, 3u8, 113u8, 24u8, 167u8, - 6u8, 61u8, 119u8, 218u8, 110u8, 236u8, 4u8, 63u8, 170u8, 102u8, 187u8, + 237u8, 170u8, 121u8, 217u8, 155u8, 204u8, 236u8, 227u8, 181u8, 29u8, + 233u8, 79u8, 248u8, 152u8, 251u8, 17u8, 89u8, 69u8, 217u8, 102u8, 38u8, + 164u8, 253u8, 92u8, 37u8, 234u8, 140u8, 143u8, 142u8, 88u8, 250u8, + 83u8, ], ) } @@ -14499,9 +14218,10 @@ pub mod api { length_bound, }, [ - 170u8, 165u8, 74u8, 56u8, 46u8, 204u8, 190u8, 189u8, 16u8, 182u8, 89u8, - 34u8, 155u8, 102u8, 198u8, 70u8, 51u8, 82u8, 123u8, 42u8, 161u8, 249u8, - 110u8, 85u8, 6u8, 249u8, 211u8, 189u8, 236u8, 253u8, 137u8, 224u8, + 129u8, 161u8, 152u8, 90u8, 68u8, 134u8, 153u8, 169u8, 93u8, 124u8, + 241u8, 160u8, 110u8, 34u8, 213u8, 119u8, 161u8, 156u8, 20u8, 42u8, + 213u8, 243u8, 87u8, 65u8, 110u8, 217u8, 254u8, 62u8, 87u8, 76u8, 181u8, + 22u8, ], ) } @@ -14521,10 +14241,9 @@ pub mod api { length_bound, }, [ - 220u8, 31u8, 214u8, 222u8, 102u8, 197u8, 156u8, 130u8, 233u8, 32u8, - 207u8, 86u8, 69u8, 43u8, 198u8, 126u8, 1u8, 129u8, 220u8, 117u8, 50u8, - 126u8, 169u8, 134u8, 167u8, 113u8, 129u8, 50u8, 199u8, 178u8, 9u8, - 46u8, + 132u8, 38u8, 89u8, 245u8, 38u8, 101u8, 38u8, 205u8, 210u8, 64u8, 165u8, + 234u8, 57u8, 20u8, 11u8, 41u8, 54u8, 220u8, 72u8, 209u8, 21u8, 54u8, + 28u8, 131u8, 62u8, 70u8, 65u8, 65u8, 248u8, 177u8, 175u8, 176u8, ], ) } @@ -14868,10 +14587,10 @@ pub mod api { "ProposalOf", (), [ - 132u8, 146u8, 76u8, 29u8, 104u8, 215u8, 211u8, 31u8, 242u8, 207u8, - 182u8, 166u8, 11u8, 37u8, 165u8, 205u8, 150u8, 1u8, 18u8, 157u8, 186u8, - 242u8, 171u8, 123u8, 204u8, 169u8, 237u8, 99u8, 172u8, 200u8, 253u8, - 37u8, + 2u8, 132u8, 188u8, 202u8, 224u8, 194u8, 133u8, 78u8, 38u8, 5u8, 205u8, + 25u8, 231u8, 25u8, 87u8, 229u8, 201u8, 92u8, 229u8, 184u8, 129u8, + 150u8, 77u8, 111u8, 127u8, 181u8, 129u8, 76u8, 180u8, 130u8, 127u8, + 35u8, ], ) } @@ -14895,10 +14614,10 @@ pub mod api { _0.borrow(), ), [ - 132u8, 146u8, 76u8, 29u8, 104u8, 215u8, 211u8, 31u8, 242u8, 207u8, - 182u8, 166u8, 11u8, 37u8, 165u8, 205u8, 150u8, 1u8, 18u8, 157u8, 186u8, - 242u8, 171u8, 123u8, 204u8, 169u8, 237u8, 99u8, 172u8, 200u8, 253u8, - 37u8, + 2u8, 132u8, 188u8, 202u8, 224u8, 194u8, 133u8, 78u8, 38u8, 5u8, 205u8, + 25u8, 231u8, 25u8, 87u8, 229u8, 201u8, 92u8, 229u8, 184u8, 129u8, + 150u8, 77u8, 111u8, 127u8, 181u8, 129u8, 76u8, 180u8, 130u8, 127u8, + 35u8, ], ) } @@ -21866,9 +21585,10 @@ pub mod api { "set_keys", types::SetKeys { keys, proof }, [ - 53u8, 192u8, 83u8, 155u8, 68u8, 70u8, 208u8, 171u8, 57u8, 34u8, 177u8, - 200u8, 16u8, 91u8, 176u8, 234u8, 27u8, 73u8, 242u8, 86u8, 71u8, 79u8, - 11u8, 154u8, 253u8, 65u8, 122u8, 144u8, 6u8, 152u8, 243u8, 72u8, + 198u8, 58u8, 144u8, 226u8, 111u8, 226u8, 216u8, 212u8, 82u8, 116u8, + 160u8, 253u8, 180u8, 252u8, 117u8, 151u8, 175u8, 116u8, 92u8, 82u8, + 228u8, 139u8, 243u8, 50u8, 196u8, 252u8, 240u8, 118u8, 253u8, 245u8, + 20u8, 226u8, ], ) } @@ -22048,9 +21768,9 @@ pub mod api { "QueuedKeys", (), [ - 91u8, 161u8, 137u8, 28u8, 192u8, 226u8, 146u8, 6u8, 197u8, 86u8, 247u8, - 15u8, 209u8, 200u8, 197u8, 248u8, 187u8, 80u8, 133u8, 30u8, 12u8, 70u8, - 175u8, 55u8, 47u8, 0u8, 46u8, 57u8, 182u8, 200u8, 210u8, 161u8, + 216u8, 27u8, 59u8, 207u8, 116u8, 44u8, 89u8, 114u8, 88u8, 97u8, 160u8, + 35u8, 82u8, 91u8, 187u8, 14u8, 229u8, 114u8, 91u8, 94u8, 108u8, 91u8, + 99u8, 90u8, 127u8, 211u8, 78u8, 56u8, 183u8, 184u8, 135u8, 254u8, ], ) } @@ -22094,9 +21814,10 @@ pub mod api { "NextKeys", (), [ - 140u8, 85u8, 129u8, 223u8, 77u8, 166u8, 46u8, 184u8, 49u8, 27u8, 185u8, - 59u8, 28u8, 171u8, 93u8, 8u8, 107u8, 48u8, 103u8, 97u8, 55u8, 52u8, - 251u8, 57u8, 184u8, 216u8, 141u8, 167u8, 31u8, 255u8, 67u8, 165u8, + 63u8, 202u8, 188u8, 188u8, 181u8, 211u8, 192u8, 102u8, 236u8, 143u8, + 178u8, 237u8, 251u8, 116u8, 231u8, 105u8, 71u8, 253u8, 92u8, 128u8, + 145u8, 238u8, 124u8, 68u8, 111u8, 32u8, 29u8, 82u8, 217u8, 213u8, 51u8, + 166u8, ], ) } @@ -22120,9 +21841,10 @@ pub mod api { _0.borrow(), ), [ - 140u8, 85u8, 129u8, 223u8, 77u8, 166u8, 46u8, 184u8, 49u8, 27u8, 185u8, - 59u8, 28u8, 171u8, 93u8, 8u8, 107u8, 48u8, 103u8, 97u8, 55u8, 52u8, - 251u8, 57u8, 184u8, 216u8, 141u8, 167u8, 31u8, 255u8, 67u8, 165u8, + 63u8, 202u8, 188u8, 188u8, 181u8, 211u8, 192u8, 102u8, 236u8, 143u8, + 178u8, 237u8, 251u8, 116u8, 231u8, 105u8, 71u8, 253u8, 92u8, 128u8, + 145u8, 238u8, 124u8, 68u8, 111u8, 32u8, 29u8, 82u8, 217u8, 213u8, 51u8, + 166u8, ], ) } @@ -28732,10 +28454,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 50u8, 252u8, 245u8, 190u8, 177u8, 188u8, 141u8, 211u8, 117u8, 172u8, - 111u8, 227u8, 203u8, 148u8, 181u8, 109u8, 124u8, 62u8, 51u8, 180u8, - 179u8, 203u8, 181u8, 84u8, 33u8, 172u8, 190u8, 135u8, 45u8, 22u8, - 139u8, 243u8, + 163u8, 224u8, 13u8, 232u8, 204u8, 231u8, 107u8, 88u8, 47u8, 196u8, + 198u8, 179u8, 66u8, 95u8, 70u8, 184u8, 176u8, 143u8, 91u8, 179u8, 39u8, + 36u8, 245u8, 111u8, 158u8, 153u8, 216u8, 207u8, 106u8, 214u8, 95u8, + 78u8, ], ) } @@ -28777,9 +28499,9 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 11u8, 96u8, 30u8, 80u8, 175u8, 50u8, 14u8, 38u8, 194u8, 250u8, 134u8, - 201u8, 195u8, 88u8, 60u8, 201u8, 50u8, 89u8, 88u8, 63u8, 67u8, 195u8, - 193u8, 68u8, 216u8, 2u8, 237u8, 6u8, 196u8, 89u8, 165u8, 7u8, + 171u8, 63u8, 241u8, 46u8, 1u8, 216u8, 178u8, 114u8, 149u8, 28u8, 128u8, + 157u8, 53u8, 229u8, 99u8, 234u8, 130u8, 183u8, 238u8, 254u8, 45u8, + 63u8, 221u8, 81u8, 109u8, 141u8, 83u8, 128u8, 69u8, 37u8, 142u8, 6u8, ], ) } @@ -28817,10 +28539,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 26u8, 156u8, 237u8, 235u8, 33u8, 252u8, 11u8, 211u8, 155u8, 242u8, - 121u8, 103u8, 113u8, 213u8, 87u8, 105u8, 15u8, 90u8, 230u8, 200u8, - 96u8, 65u8, 93u8, 158u8, 9u8, 112u8, 251u8, 39u8, 114u8, 88u8, 157u8, - 175u8, + 144u8, 85u8, 178u8, 85u8, 168u8, 90u8, 147u8, 230u8, 194u8, 150u8, + 36u8, 90u8, 67u8, 243u8, 162u8, 186u8, 130u8, 100u8, 6u8, 226u8, 180u8, + 68u8, 109u8, 185u8, 221u8, 234u8, 132u8, 140u8, 54u8, 18u8, 204u8, + 148u8, ], ) } @@ -28845,10 +28567,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 242u8, 201u8, 182u8, 26u8, 165u8, 241u8, 92u8, 63u8, 222u8, 95u8, - 246u8, 221u8, 21u8, 71u8, 36u8, 17u8, 226u8, 90u8, 33u8, 192u8, 134u8, - 202u8, 251u8, 72u8, 119u8, 229u8, 69u8, 193u8, 194u8, 238u8, 180u8, - 66u8, + 177u8, 89u8, 242u8, 102u8, 59u8, 195u8, 234u8, 220u8, 62u8, 203u8, + 246u8, 77u8, 114u8, 108u8, 56u8, 151u8, 170u8, 115u8, 205u8, 136u8, + 126u8, 133u8, 68u8, 76u8, 17u8, 148u8, 174u8, 215u8, 241u8, 231u8, + 102u8, 184u8, ], ) } @@ -33095,10 +32817,10 @@ pub mod api { "batch", types::Batch { calls }, [ - 132u8, 127u8, 147u8, 90u8, 245u8, 244u8, 115u8, 31u8, 112u8, 18u8, - 128u8, 189u8, 229u8, 135u8, 128u8, 13u8, 3u8, 99u8, 146u8, 176u8, 63u8, - 35u8, 248u8, 226u8, 21u8, 176u8, 178u8, 90u8, 171u8, 182u8, 210u8, - 148u8, + 131u8, 27u8, 113u8, 67u8, 49u8, 22u8, 195u8, 92u8, 104u8, 243u8, 73u8, + 191u8, 232u8, 104u8, 159u8, 175u8, 101u8, 254u8, 232u8, 14u8, 252u8, + 220u8, 170u8, 246u8, 112u8, 71u8, 252u8, 255u8, 218u8, 3u8, 193u8, + 67u8, ], ) } @@ -33116,9 +32838,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 193u8, 215u8, 4u8, 71u8, 228u8, 29u8, 227u8, 162u8, 203u8, 166u8, - 215u8, 223u8, 63u8, 76u8, 46u8, 26u8, 95u8, 162u8, 242u8, 27u8, 117u8, - 47u8, 2u8, 238u8, 95u8, 30u8, 164u8, 84u8, 136u8, 53u8, 90u8, 73u8, + 134u8, 135u8, 212u8, 156u8, 156u8, 164u8, 64u8, 8u8, 138u8, 182u8, + 187u8, 16u8, 185u8, 137u8, 7u8, 27u8, 15u8, 153u8, 85u8, 33u8, 124u8, + 39u8, 248u8, 240u8, 204u8, 198u8, 158u8, 179u8, 239u8, 92u8, 45u8, + 247u8, ], ) } @@ -33132,9 +32855,9 @@ pub mod api { "batch_all", types::BatchAll { calls }, [ - 25u8, 88u8, 119u8, 119u8, 65u8, 128u8, 40u8, 251u8, 226u8, 50u8, 30u8, - 242u8, 4u8, 54u8, 162u8, 168u8, 110u8, 224u8, 62u8, 96u8, 32u8, 184u8, - 106u8, 31u8, 73u8, 244u8, 60u8, 65u8, 62u8, 174u8, 54u8, 42u8, + 55u8, 219u8, 75u8, 16u8, 48u8, 159u8, 139u8, 111u8, 165u8, 155u8, + 118u8, 59u8, 2u8, 170u8, 218u8, 61u8, 244u8, 143u8, 183u8, 45u8, 146u8, + 204u8, 108u8, 71u8, 29u8, 40u8, 74u8, 27u8, 38u8, 32u8, 206u8, 219u8, ], ) } @@ -33152,10 +32875,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 194u8, 62u8, 35u8, 169u8, 145u8, 104u8, 226u8, 20u8, 170u8, 100u8, - 151u8, 68u8, 25u8, 176u8, 19u8, 143u8, 29u8, 93u8, 163u8, 14u8, 140u8, - 150u8, 64u8, 143u8, 32u8, 109u8, 105u8, 164u8, 223u8, 53u8, 130u8, - 220u8, + 237u8, 62u8, 148u8, 199u8, 229u8, 17u8, 116u8, 37u8, 207u8, 101u8, + 248u8, 160u8, 49u8, 250u8, 87u8, 236u8, 28u8, 5u8, 164u8, 98u8, 94u8, + 112u8, 131u8, 253u8, 114u8, 209u8, 25u8, 131u8, 75u8, 164u8, 19u8, + 46u8, ], ) } @@ -33169,9 +32892,10 @@ pub mod api { "force_batch", types::ForceBatch { calls }, [ - 63u8, 253u8, 190u8, 214u8, 2u8, 104u8, 20u8, 87u8, 0u8, 103u8, 212u8, - 51u8, 232u8, 212u8, 196u8, 250u8, 30u8, 13u8, 38u8, 205u8, 194u8, 64u8, - 202u8, 129u8, 73u8, 71u8, 46u8, 63u8, 172u8, 55u8, 208u8, 133u8, + 214u8, 241u8, 204u8, 55u8, 116u8, 163u8, 138u8, 111u8, 176u8, 195u8, + 50u8, 14u8, 63u8, 163u8, 32u8, 155u8, 235u8, 179u8, 158u8, 198u8, + 196u8, 1u8, 95u8, 189u8, 235u8, 187u8, 48u8, 169u8, 208u8, 194u8, + 135u8, 74u8, ], ) } @@ -33189,9 +32913,10 @@ pub mod api { weight, }, [ - 69u8, 157u8, 26u8, 51u8, 80u8, 165u8, 204u8, 44u8, 251u8, 150u8, 225u8, - 218u8, 189u8, 240u8, 86u8, 134u8, 47u8, 44u8, 225u8, 4u8, 149u8, 194u8, - 15u8, 35u8, 152u8, 87u8, 112u8, 246u8, 50u8, 81u8, 152u8, 151u8, + 81u8, 126u8, 120u8, 100u8, 128u8, 200u8, 22u8, 187u8, 16u8, 131u8, + 203u8, 248u8, 53u8, 71u8, 147u8, 193u8, 192u8, 47u8, 80u8, 197u8, + 157u8, 123u8, 98u8, 51u8, 167u8, 49u8, 250u8, 160u8, 12u8, 214u8, 89u8, + 187u8, ], ) } @@ -33547,10 +33272,10 @@ pub mod api { call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), }, [ - 208u8, 238u8, 253u8, 218u8, 48u8, 133u8, 68u8, 209u8, 19u8, 243u8, - 42u8, 31u8, 197u8, 120u8, 68u8, 135u8, 147u8, 140u8, 130u8, 123u8, - 150u8, 75u8, 135u8, 195u8, 190u8, 232u8, 54u8, 190u8, 133u8, 160u8, - 246u8, 215u8, + 115u8, 70u8, 119u8, 122u8, 151u8, 83u8, 241u8, 26u8, 136u8, 235u8, + 127u8, 149u8, 205u8, 181u8, 197u8, 166u8, 231u8, 109u8, 78u8, 223u8, + 45u8, 225u8, 126u8, 202u8, 20u8, 72u8, 178u8, 188u8, 47u8, 79u8, 39u8, + 138u8, ], ) } @@ -33574,10 +33299,9 @@ pub mod api { max_weight, }, [ - 199u8, 52u8, 141u8, 174u8, 10u8, 219u8, 72u8, 71u8, 141u8, 182u8, 38u8, - 199u8, 217u8, 248u8, 129u8, 242u8, 39u8, 109u8, 235u8, 36u8, 211u8, - 203u8, 140u8, 237u8, 249u8, 246u8, 43u8, 222u8, 246u8, 193u8, 91u8, - 243u8, + 37u8, 248u8, 115u8, 174u8, 103u8, 75u8, 159u8, 167u8, 110u8, 82u8, + 160u8, 115u8, 167u8, 99u8, 188u8, 195u8, 125u8, 54u8, 6u8, 18u8, 112u8, + 69u8, 0u8, 229u8, 20u8, 178u8, 91u8, 179u8, 73u8, 230u8, 2u8, 153u8, ], ) } @@ -35997,13 +35721,13 @@ pub mod api { } } } - pub mod roles { + pub mod services { use super::root_mod; use super::runtime_types; #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_roles::pallet::Error; + pub type Error = runtime_types::pallet_services::module::Error; #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_roles::pallet::Call; + pub type Call = runtime_types::pallet_services::module::Call; pub mod calls { use super::root_mod; use super::runtime_types; @@ -36027,19 +35751,18 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::create_profile`]."] - pub struct CreateProfile { - pub profile: create_profile::Profile, - pub max_active_services: create_profile::MaxActiveServices, + #[doc = "See `Pallet::create_blueprint`."] + pub struct CreateBlueprint { + pub blueprint: create_blueprint::Blueprint, } - pub mod create_profile { + pub mod create_blueprint { use super::runtime_types; - pub type Profile = runtime_types::pallet_roles::profile::Profile; - pub type MaxActiveServices = ::core::option::Option<::core::primitive::u32>; + pub type Blueprint = + runtime_types::tangle_primitives::services::ServiceBlueprint; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CreateProfile { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "create_profile"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CreateBlueprint { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "create_blueprint"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36058,17 +35781,27 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::update_profile`]."] - pub struct UpdateProfile { - pub updated_profile: update_profile::UpdatedProfile, + #[doc = "See `Pallet::register`."] + pub struct Register { + #[codec(compact)] + pub blueprint_id: register::BlueprintId, + pub preferences: register::Preferences, + pub registration_args: register::RegistrationArgs, } - pub mod update_profile { + pub mod register { use super::runtime_types; - pub type UpdatedProfile = runtime_types::pallet_roles::profile::Profile; + pub type BlueprintId = ::core::primitive::u64; + pub type Preferences = + runtime_types::tangle_primitives::services::OperatorPreferences; + pub type RegistrationArgs = ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for UpdateProfile { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "update_profile"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Register { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "register"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36087,11 +35820,18 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::delete_profile`]."] - pub struct DeleteProfile; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for DeleteProfile { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "delete_profile"; + #[doc = "See `Pallet::unregister`."] + pub struct Unregister { + #[codec(compact)] + pub blueprint_id: unregister::BlueprintId, + } + pub mod unregister { + use super::runtime_types; + pub type BlueprintId = ::core::primitive::u64; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Unregister { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "unregister"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36110,11 +35850,21 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::chill`]."] - pub struct Chill; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Chill { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "chill"; + #[doc = "See `Pallet::update_approval_preference`."] + pub struct UpdateApprovalPreference { + #[codec(compact)] + pub blueprint_id: update_approval_preference::BlueprintId, + pub approval_preference: update_approval_preference::ApprovalPreference, + } + pub mod update_approval_preference { + use super::runtime_types; + pub type BlueprintId = ::core::primitive::u64; + pub type ApprovalPreference = + runtime_types::tangle_primitives::services::ApprovalPrefrence; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for UpdateApprovalPreference { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "update_approval_preference"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36133,18 +35883,35 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::unbond_funds`]."] - pub struct UnbondFunds { + #[doc = "See `Pallet::request`."] + pub struct Request { + #[codec(compact)] + pub blueprint_id: request::BlueprintId, + pub permitted_callers: request::PermittedCallers, + pub service_providers: request::ServiceProviders, #[codec(compact)] - pub amount: unbond_funds::Amount, + pub ttl: request::Ttl, + pub request_args: request::RequestArgs, } - pub mod unbond_funds { + pub mod request { use super::runtime_types; - pub type Amount = ::core::primitive::u128; + pub type BlueprintId = ::core::primitive::u64; + pub type PermittedCallers = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >; + pub type ServiceProviders = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >; + pub type Ttl = ::core::primitive::u64; + pub type RequestArgs = ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for UnbondFunds { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "unbond_funds"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Request { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "request"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36163,11 +35930,18 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::withdraw_unbonded`]."] - pub struct WithdrawUnbonded; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for WithdrawUnbonded { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "withdraw_unbonded"; + #[doc = "See `Pallet::approve`."] + pub struct Approve { + #[codec(compact)] + pub request_id: approve::RequestId, + } + pub mod approve { + use super::runtime_types; + pub type RequestId = ::core::primitive::u64; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Approve { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "approve"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36186,19 +35960,48 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::payout_stakers`]."] - pub struct PayoutStakers { - pub validator_stash: payout_stakers::ValidatorStash, - pub era: payout_stakers::Era, + #[doc = "See `Pallet::reject`."] + pub struct Reject { + #[codec(compact)] + pub request_id: reject::RequestId, } - pub mod payout_stakers { + pub mod reject { use super::runtime_types; - pub type ValidatorStash = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Era = ::core::primitive::u32; + pub type RequestId = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for PayoutStakers { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "payout_stakers"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Reject { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "reject"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See `Pallet::terminate`."] + pub struct Terminate { + #[codec(compact)] + pub service_id: terminate::ServiceId, + } + pub mod terminate { + use super::runtime_types; + pub type ServiceId = ::core::primitive::u64; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Terminate { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "terminate"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36217,155 +36020,257 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_min_restaking_bond`]."] - pub struct SetMinRestakingBond { - pub min_restaking_bond: set_min_restaking_bond::MinRestakingBond, + #[doc = "See `Pallet::call`."] + pub struct Call { + #[codec(compact)] + pub service_id: call::ServiceId, + #[codec(compact)] + pub job: call::Job, + pub args: call::Args, } - pub mod set_min_restaking_bond { + pub mod call { use super::runtime_types; - pub type MinRestakingBond = ::core::primitive::u128; + pub type ServiceId = ::core::primitive::u64; + pub type Job = ::core::primitive::u8; + pub type Args = ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Call { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "call"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See `Pallet::submit_result`."] + pub struct SubmitResult { + #[codec(compact)] + pub service_id: submit_result::ServiceId, + #[codec(compact)] + pub call_id: submit_result::CallId, + pub result: submit_result::Result, + } + pub mod submit_result { + use super::runtime_types; + pub type ServiceId = ::core::primitive::u64; + pub type CallId = ::core::primitive::u64; + pub type Result = ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetMinRestakingBond { - const PALLET: &'static str = "Roles"; - const CALL: &'static str = "set_min_restaking_bond"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SubmitResult { + const PALLET: &'static str = "Services"; + const CALL: &'static str = "submit_result"; } } pub struct TransactionApi; impl TransactionApi { - #[doc = "See [`Pallet::create_profile`]."] - pub fn create_profile( + #[doc = "See `Pallet::create_blueprint`."] + pub fn create_blueprint( &self, - profile: types::create_profile::Profile, - max_active_services: types::create_profile::MaxActiveServices, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + blueprint: types::create_blueprint::Blueprint, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "create_profile", - types::CreateProfile { profile, max_active_services }, + "Services", + "create_blueprint", + types::CreateBlueprint { blueprint }, [ - 37u8, 113u8, 152u8, 32u8, 7u8, 51u8, 181u8, 115u8, 23u8, 122u8, 46u8, - 193u8, 63u8, 217u8, 110u8, 216u8, 43u8, 165u8, 250u8, 18u8, 247u8, - 78u8, 94u8, 15u8, 169u8, 40u8, 133u8, 237u8, 117u8, 51u8, 203u8, 53u8, + 214u8, 105u8, 127u8, 26u8, 39u8, 27u8, 180u8, 210u8, 8u8, 141u8, 230u8, + 77u8, 55u8, 181u8, 198u8, 253u8, 66u8, 99u8, 160u8, 124u8, 5u8, 112u8, + 211u8, 42u8, 106u8, 193u8, 32u8, 210u8, 150u8, 56u8, 163u8, 138u8, ], ) } - #[doc = "See [`Pallet::update_profile`]."] - pub fn update_profile( + #[doc = "See `Pallet::register`."] + pub fn register( &self, - updated_profile: types::update_profile::UpdatedProfile, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + blueprint_id: types::register::BlueprintId, + preferences: types::register::Preferences, + registration_args: types::register::RegistrationArgs, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "update_profile", - types::UpdateProfile { updated_profile }, + "Services", + "register", + types::Register { blueprint_id, preferences, registration_args }, [ - 24u8, 87u8, 130u8, 251u8, 183u8, 220u8, 129u8, 43u8, 53u8, 5u8, 236u8, - 129u8, 169u8, 247u8, 136u8, 182u8, 176u8, 46u8, 34u8, 87u8, 176u8, - 206u8, 202u8, 52u8, 191u8, 27u8, 137u8, 104u8, 173u8, 126u8, 83u8, - 213u8, + 202u8, 12u8, 19u8, 47u8, 154u8, 166u8, 68u8, 28u8, 253u8, 137u8, 127u8, + 80u8, 8u8, 80u8, 113u8, 249u8, 80u8, 206u8, 108u8, 249u8, 40u8, 48u8, + 21u8, 178u8, 254u8, 30u8, 186u8, 148u8, 48u8, 131u8, 24u8, 15u8, ], ) } - #[doc = "See [`Pallet::delete_profile`]."] - pub fn delete_profile( + #[doc = "See `Pallet::unregister`."] + pub fn unregister( &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + blueprint_id: types::unregister::BlueprintId, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "delete_profile", - types::DeleteProfile {}, + "Services", + "unregister", + types::Unregister { blueprint_id }, [ - 183u8, 103u8, 250u8, 206u8, 24u8, 200u8, 142u8, 200u8, 204u8, 109u8, - 97u8, 16u8, 145u8, 37u8, 215u8, 153u8, 210u8, 241u8, 239u8, 4u8, 150u8, - 117u8, 92u8, 200u8, 163u8, 54u8, 145u8, 6u8, 94u8, 255u8, 220u8, 118u8, + 159u8, 137u8, 225u8, 1u8, 158u8, 129u8, 192u8, 17u8, 9u8, 163u8, 73u8, + 108u8, 130u8, 155u8, 196u8, 141u8, 203u8, 128u8, 3u8, 198u8, 23u8, + 48u8, 174u8, 104u8, 254u8, 98u8, 29u8, 51u8, 187u8, 122u8, 203u8, 14u8, ], ) } - #[doc = "See [`Pallet::chill`]."] - pub fn chill( + #[doc = "See `Pallet::update_approval_preference`."] + pub fn update_approval_preference( &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + blueprint_id: types::update_approval_preference::BlueprintId, + approval_preference: types::update_approval_preference::ApprovalPreference, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::UpdateApprovalPreference, + > { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "chill", - types::Chill {}, + "Services", + "update_approval_preference", + types::UpdateApprovalPreference { blueprint_id, approval_preference }, [ - 157u8, 75u8, 243u8, 69u8, 110u8, 192u8, 22u8, 27u8, 107u8, 68u8, 236u8, - 58u8, 179u8, 34u8, 118u8, 98u8, 131u8, 62u8, 242u8, 84u8, 149u8, 24u8, - 83u8, 223u8, 78u8, 12u8, 192u8, 22u8, 111u8, 11u8, 171u8, 149u8, + 150u8, 101u8, 19u8, 2u8, 197u8, 0u8, 109u8, 208u8, 93u8, 192u8, 3u8, + 1u8, 129u8, 181u8, 28u8, 50u8, 249u8, 87u8, 137u8, 22u8, 63u8, 189u8, + 220u8, 24u8, 120u8, 130u8, 181u8, 203u8, 253u8, 107u8, 4u8, 159u8, ], ) } - #[doc = "See [`Pallet::unbond_funds`]."] - pub fn unbond_funds( + #[doc = "See `Pallet::request`."] + pub fn request( &self, - amount: types::unbond_funds::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + blueprint_id: types::request::BlueprintId, + permitted_callers: types::request::PermittedCallers, + service_providers: types::request::ServiceProviders, + ttl: types::request::Ttl, + request_args: types::request::RequestArgs, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "unbond_funds", - types::UnbondFunds { amount }, + "Services", + "request", + types::Request { + blueprint_id, + permitted_callers, + service_providers, + ttl, + request_args, + }, [ - 156u8, 162u8, 131u8, 178u8, 50u8, 254u8, 82u8, 29u8, 224u8, 210u8, - 134u8, 156u8, 219u8, 6u8, 67u8, 32u8, 20u8, 118u8, 54u8, 252u8, 60u8, - 28u8, 45u8, 10u8, 234u8, 76u8, 104u8, 191u8, 13u8, 186u8, 154u8, 180u8, + 31u8, 232u8, 63u8, 221u8, 95u8, 148u8, 171u8, 48u8, 237u8, 110u8, + 216u8, 155u8, 113u8, 80u8, 20u8, 212u8, 138u8, 232u8, 145u8, 208u8, + 174u8, 209u8, 93u8, 255u8, 113u8, 77u8, 192u8, 21u8, 168u8, 172u8, + 73u8, 133u8, ], ) } - #[doc = "See [`Pallet::withdraw_unbonded`]."] - pub fn withdraw_unbonded( + #[doc = "See `Pallet::approve`."] + pub fn approve( &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + request_id: types::approve::RequestId, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "withdraw_unbonded", - types::WithdrawUnbonded {}, + "Services", + "approve", + types::Approve { request_id }, [ - 80u8, 176u8, 200u8, 141u8, 68u8, 48u8, 226u8, 210u8, 103u8, 124u8, - 204u8, 178u8, 234u8, 34u8, 83u8, 205u8, 100u8, 166u8, 173u8, 10u8, - 251u8, 249u8, 128u8, 53u8, 101u8, 145u8, 210u8, 204u8, 245u8, 229u8, - 164u8, 113u8, + 248u8, 232u8, 185u8, 96u8, 244u8, 127u8, 41u8, 179u8, 130u8, 237u8, + 105u8, 221u8, 26u8, 83u8, 199u8, 91u8, 0u8, 241u8, 218u8, 78u8, 209u8, + 104u8, 40u8, 141u8, 68u8, 89u8, 213u8, 52u8, 20u8, 255u8, 120u8, 109u8, ], ) } - #[doc = "See [`Pallet::payout_stakers`]."] - pub fn payout_stakers( + #[doc = "See `Pallet::reject`."] + pub fn reject( &self, - validator_stash: types::payout_stakers::ValidatorStash, - era: types::payout_stakers::Era, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + request_id: types::reject::RequestId, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "payout_stakers", - types::PayoutStakers { validator_stash, era }, + "Services", + "reject", + types::Reject { request_id }, [ - 69u8, 67u8, 140u8, 197u8, 89u8, 20u8, 59u8, 55u8, 142u8, 197u8, 62u8, - 107u8, 239u8, 50u8, 237u8, 52u8, 4u8, 65u8, 119u8, 73u8, 138u8, 57u8, - 46u8, 78u8, 252u8, 157u8, 187u8, 14u8, 232u8, 244u8, 217u8, 171u8, + 119u8, 137u8, 83u8, 229u8, 178u8, 252u8, 111u8, 82u8, 34u8, 195u8, + 132u8, 26u8, 136u8, 69u8, 244u8, 124u8, 138u8, 82u8, 249u8, 95u8, + 177u8, 91u8, 236u8, 63u8, 153u8, 82u8, 50u8, 207u8, 145u8, 86u8, 135u8, + 202u8, ], ) } - #[doc = "See [`Pallet::set_min_restaking_bond`]."] - pub fn set_min_restaking_bond( + #[doc = "See `Pallet::terminate`."] + pub fn terminate( &self, - min_restaking_bond: types::set_min_restaking_bond::MinRestakingBond, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { + service_id: types::terminate::ServiceId, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "Services", + "terminate", + types::Terminate { service_id }, + [ + 80u8, 226u8, 169u8, 82u8, 37u8, 5u8, 44u8, 217u8, 228u8, 230u8, 40u8, + 144u8, 149u8, 62u8, 225u8, 232u8, 222u8, 111u8, 67u8, 78u8, 31u8, + 209u8, 89u8, 183u8, 19u8, 187u8, 250u8, 1u8, 230u8, 160u8, 252u8, 91u8, + ], + ) + } + #[doc = "See `Pallet::call`."] + pub fn call( + &self, + service_id: types::call::ServiceId, + job: types::call::Job, + args: types::call::Args, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "Services", + "call", + types::Call { service_id, job, args }, + [ + 211u8, 128u8, 33u8, 122u8, 27u8, 241u8, 107u8, 16u8, 144u8, 85u8, 29u8, + 152u8, 143u8, 161u8, 22u8, 130u8, 101u8, 107u8, 17u8, 145u8, 106u8, + 198u8, 184u8, 238u8, 202u8, 173u8, 195u8, 0u8, 248u8, 230u8, 13u8, + 53u8, + ], + ) + } + #[doc = "See `Pallet::submit_result`."] + pub fn submit_result( + &self, + service_id: types::submit_result::ServiceId, + call_id: types::submit_result::CallId, + result: types::submit_result::Result, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Roles", - "set_min_restaking_bond", - types::SetMinRestakingBond { min_restaking_bond }, + "Services", + "submit_result", + types::SubmitResult { service_id, call_id, result }, [ - 17u8, 172u8, 96u8, 141u8, 192u8, 227u8, 80u8, 28u8, 239u8, 35u8, 244u8, - 106u8, 177u8, 60u8, 249u8, 46u8, 112u8, 230u8, 141u8, 134u8, 68u8, - 57u8, 83u8, 69u8, 227u8, 107u8, 149u8, 133u8, 220u8, 82u8, 77u8, 50u8, + 65u8, 66u8, 115u8, 54u8, 48u8, 16u8, 67u8, 120u8, 239u8, 41u8, 202u8, + 127u8, 211u8, 253u8, 112u8, 134u8, 0u8, 13u8, 68u8, 221u8, 118u8, + 204u8, 33u8, 191u8, 204u8, 2u8, 93u8, 151u8, 200u8, 243u8, 212u8, + 214u8, ], ) } } } #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_roles::pallet::Event; + pub type Event = runtime_types::pallet_services::module::Event; pub mod events { use super::runtime_types; #[derive( @@ -36381,19 +36286,19 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Role assigned to the validator."] - pub struct RoleAssigned { - pub account: role_assigned::Account, - pub role: role_assigned::Role, + #[doc = "A new service blueprint has been created."] + pub struct BlueprintCreated { + pub owner: blueprint_created::Owner, + pub blueprint_id: blueprint_created::BlueprintId, } - pub mod role_assigned { + pub mod blueprint_created { use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Role = runtime_types::tangle_primitives::roles::RoleType; + pub type Owner = ::subxt::ext::subxt_core::utils::AccountId32; + pub type BlueprintId = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::events::StaticEvent for RoleAssigned { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "RoleAssigned"; + impl ::subxt::ext::subxt_core::events::StaticEvent for BlueprintCreated { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "BlueprintCreated"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36408,19 +36313,28 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Removed validator from role."] - pub struct RoleRemoved { - pub account: role_removed::Account, - pub role: role_removed::Role, + #[doc = "An new operator has been registered."] + pub struct Registered { + pub provider: registered::Provider, + pub blueprint_id: registered::BlueprintId, + pub preferences: registered::Preferences, + pub registration_args: registered::RegistrationArgs, } - pub mod role_removed { + pub mod registered { use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Role = runtime_types::tangle_primitives::roles::RoleType; + pub type Provider = ::subxt::ext::subxt_core::utils::AccountId32; + pub type BlueprintId = ::core::primitive::u64; + pub type Preferences = + runtime_types::tangle_primitives::services::OperatorPreferences; + pub type RegistrationArgs = ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >; } - impl ::subxt::ext::subxt_core::events::StaticEvent for RoleRemoved { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "RoleRemoved"; + impl ::subxt::ext::subxt_core::events::StaticEvent for Registered { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "Registered"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36435,19 +36349,19 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Slashed validator."] - pub struct Slashed { - pub account: slashed::Account, - pub amount: slashed::Amount, + #[doc = "An operator has been unregistered."] + pub struct Unregistered { + pub operator: unregistered::Operator, + pub blueprint_id: unregistered::BlueprintId, } - pub mod slashed { + pub mod unregistered { use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Amount = ::core::primitive::u128; + pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type BlueprintId = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::events::StaticEvent for Slashed { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "Slashed"; + impl ::subxt::ext::subxt_core::events::StaticEvent for Unregistered { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "Unregistered"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36462,23 +36376,59 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "New profile created."] - pub struct ProfileCreated { - pub account: profile_created::Account, - pub total_profile_restake: profile_created::TotalProfileRestake, - pub roles: profile_created::Roles, + #[doc = "The approval preference for an operator has been updated."] + pub struct ApprovalPreferenceUpdated { + pub operator: approval_preference_updated::Operator, + pub blueprint_id: approval_preference_updated::BlueprintId, + pub approval_preference: approval_preference_updated::ApprovalPreference, } - pub mod profile_created { + pub mod approval_preference_updated { use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type TotalProfileRestake = ::core::primitive::u128; - pub type Roles = ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::roles::RoleType, + pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type BlueprintId = ::core::primitive::u64; + pub type ApprovalPreference = + runtime_types::tangle_primitives::services::ApprovalPrefrence; + } + impl ::subxt::ext::subxt_core::events::StaticEvent for ApprovalPreferenceUpdated { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "ApprovalPreferenceUpdated"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + #[doc = "A new service has been requested."] + pub struct ServiceRequested { + pub owner: service_requested::Owner, + pub request_id: service_requested::RequestId, + pub blueprint_id: service_requested::BlueprintId, + pub pending_approvals: service_requested::PendingApprovals, + pub approved: service_requested::Approved, + } + pub mod service_requested { + use super::runtime_types; + pub type Owner = ::subxt::ext::subxt_core::utils::AccountId32; + pub type RequestId = ::core::primitive::u64; + pub type BlueprintId = ::core::primitive::u64; + pub type PendingApprovals = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >; + pub type Approved = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, >; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProfileCreated { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "ProfileCreated"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ServiceRequested { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "ServiceRequested"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36493,23 +36443,29 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Profile updated."] - pub struct ProfileUpdated { - pub account: profile_updated::Account, - pub total_profile_restake: profile_updated::TotalProfileRestake, - pub roles: profile_updated::Roles, + #[doc = "A service request has been approved."] + pub struct ServiceRequestApproved { + pub operator: service_request_approved::Operator, + pub request_id: service_request_approved::RequestId, + pub blueprint_id: service_request_approved::BlueprintId, + pub pending_approvals: service_request_approved::PendingApprovals, + pub approved: service_request_approved::Approved, } - pub mod profile_updated { + pub mod service_request_approved { use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; - pub type TotalProfileRestake = ::core::primitive::u128; - pub type Roles = ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::roles::RoleType, + pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type RequestId = ::core::primitive::u64; + pub type BlueprintId = ::core::primitive::u64; + pub type PendingApprovals = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >; + pub type Approved = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, >; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProfileUpdated { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "ProfileUpdated"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ServiceRequestApproved { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "ServiceRequestApproved"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36524,17 +36480,21 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Profile deleted."] - pub struct ProfileDeleted { - pub account: profile_deleted::Account, + #[doc = "A service request has been rejected."] + pub struct ServiceRequestRejected { + pub operator: service_request_rejected::Operator, + pub request_id: service_request_rejected::RequestId, + pub blueprint_id: service_request_rejected::BlueprintId, } - pub mod profile_deleted { + pub mod service_request_rejected { use super::runtime_types; - pub type Account = ::subxt::ext::subxt_core::utils::AccountId32; + pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type RequestId = ::core::primitive::u64; + pub type BlueprintId = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProfileDeleted { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "ProfileDeleted"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ServiceRequestRejected { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "ServiceRequestRejected"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36549,20 +36509,29 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Pending jobs,that cannot be opted out at the moment."] - pub struct PendingJobs { - pub pending_jobs: pending_jobs::PendingJobs, + #[doc = "A service request has been updated or modified."] + pub struct ServiceRequestUpdated { + pub owner: service_request_updated::Owner, + pub request_id: service_request_updated::RequestId, + pub blueprint_id: service_request_updated::BlueprintId, + pub pending_approvals: service_request_updated::PendingApprovals, + pub approved: service_request_updated::Approved, } - pub mod pending_jobs { + pub mod service_request_updated { use super::runtime_types; - pub type PendingJobs = ::subxt::ext::subxt_core::alloc::vec::Vec<( - runtime_types::tangle_primitives::roles::RoleType, - ::core::primitive::u64, - )>; + pub type Owner = ::subxt::ext::subxt_core::utils::AccountId32; + pub type RequestId = ::core::primitive::u64; + pub type BlueprintId = ::core::primitive::u64; + pub type PendingApprovals = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >; + pub type Approved = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >; } - impl ::subxt::ext::subxt_core::events::StaticEvent for PendingJobs { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "PendingJobs"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ServiceRequestUpdated { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "ServiceRequestUpdated"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36577,17 +36546,23 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Roles inflation reward paid for era"] - pub struct RolesRewardSet { - pub total_rewards: roles_reward_set::TotalRewards, + #[doc = "A service has been initiated."] + pub struct ServiceInitiated { + pub owner: service_initiated::Owner, + pub request_id: service_initiated::RequestId, + pub service_id: service_initiated::ServiceId, + pub blueprint_id: service_initiated::BlueprintId, } - pub mod roles_reward_set { + pub mod service_initiated { use super::runtime_types; - pub type TotalRewards = ::core::primitive::u128; + pub type Owner = ::subxt::ext::subxt_core::utils::AccountId32; + pub type RequestId = ::core::option::Option<::core::primitive::u64>; + pub type ServiceId = ::core::primitive::u64; + pub type BlueprintId = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::events::StaticEvent for RolesRewardSet { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "RolesRewardSet"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ServiceInitiated { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "ServiceInitiated"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36602,19 +36577,21 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "The re-stakers' rewards are getting paid."] - pub struct PayoutStarted { - pub era_index: payout_started::EraIndex, - pub validator_stash: payout_started::ValidatorStash, + #[doc = "A service has been terminated."] + pub struct ServiceTerminated { + pub owner: service_terminated::Owner, + pub service_id: service_terminated::ServiceId, + pub blueprint_id: service_terminated::BlueprintId, } - pub mod payout_started { + pub mod service_terminated { use super::runtime_types; - pub type EraIndex = ::core::primitive::u32; - pub type ValidatorStash = ::subxt::ext::subxt_core::utils::AccountId32; + pub type Owner = ::subxt::ext::subxt_core::utils::AccountId32; + pub type ServiceId = ::core::primitive::u64; + pub type BlueprintId = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::events::StaticEvent for PayoutStarted { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "PayoutStarted"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ServiceTerminated { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "ServiceTerminated"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36629,19 +36606,29 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "The re-staker has been rewarded by this amount."] - pub struct Rewarded { - pub stash: rewarded::Stash, - pub amount: rewarded::Amount, + #[doc = "A job has been called."] + pub struct JobCalled { + pub caller: job_called::Caller, + pub service_id: job_called::ServiceId, + pub call_id: job_called::CallId, + pub job: job_called::Job, + pub args: job_called::Args, } - pub mod rewarded { + pub mod job_called { use super::runtime_types; - pub type Stash = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Amount = ::core::primitive::u128; + pub type Caller = ::subxt::ext::subxt_core::utils::AccountId32; + pub type ServiceId = ::core::primitive::u64; + pub type CallId = ::core::primitive::u64; + pub type Job = ::core::primitive::u8; + pub type Args = ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >; } - impl ::subxt::ext::subxt_core::events::StaticEvent for Rewarded { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "Rewarded"; + impl ::subxt::ext::subxt_core::events::StaticEvent for JobCalled { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "JobCalled"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -36656,301 +36643,768 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "The min restaking bond amount has been updated"] - pub struct MinRestakingBondUpdated { - pub value: min_restaking_bond_updated::Value, + #[doc = "A job result has been submitted."] + pub struct JobResultSubmitted { + pub operator: job_result_submitted::Operator, + pub service_id: job_result_submitted::ServiceId, + pub call_id: job_result_submitted::CallId, + pub job: job_result_submitted::Job, + pub result: job_result_submitted::Result, } - pub mod min_restaking_bond_updated { + pub mod job_result_submitted { use super::runtime_types; - pub type Value = ::core::primitive::u128; + pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type ServiceId = ::core::primitive::u64; + pub type CallId = ::core::primitive::u64; + pub type Job = ::core::primitive::u8; + pub type Result = ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >; + } + impl ::subxt::ext::subxt_core::events::StaticEvent for JobResultSubmitted { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "JobResultSubmitted"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + #[doc = "An EVM log has been emitted during an execution."] + pub struct EvmLog { + pub address: evm_log::Address, + pub topics: evm_log::Topics, + pub data: evm_log::Data, + } + pub mod evm_log { + use super::runtime_types; + pub type Address = ::subxt::ext::subxt_core::utils::H160; + pub type Topics = ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H256, + >; + pub type Data = ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; + } + impl ::subxt::ext::subxt_core::events::StaticEvent for EvmLog { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "EvmLog"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + #[doc = "EVM execution reverted with a reason."] + pub struct EvmReverted { + pub from: evm_reverted::From, + pub to: evm_reverted::To, + pub data: evm_reverted::Data, + pub reason: evm_reverted::Reason, + } + pub mod evm_reverted { + use super::runtime_types; + pub type From = ::subxt::ext::subxt_core::utils::H160; + pub type To = ::subxt::ext::subxt_core::utils::H160; + pub type Data = ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; + pub type Reason = ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; } - impl ::subxt::ext::subxt_core::events::StaticEvent for MinRestakingBondUpdated { - const PALLET: &'static str = "Roles"; - const EVENT: &'static str = "MinRestakingBondUpdated"; + impl ::subxt::ext::subxt_core::events::StaticEvent for EvmReverted { + const PALLET: &'static str = "Services"; + const EVENT: &'static str = "EvmReverted"; } } pub mod storage { use super::runtime_types; pub mod types { use super::runtime_types; - pub mod ledger { + pub mod next_blueprint_id { use super::runtime_types; - pub type Ledger = runtime_types::pallet_roles::types::RestakingLedger; - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; + pub type NextBlueprintId = ::core::primitive::u64; } - pub mod account_roles_mapping { + pub mod next_service_request_id { use super::runtime_types; - pub type AccountRolesMapping = - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::tangle_primitives::roles::RoleType, - >; - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; + pub type NextServiceRequestId = ::core::primitive::u64; } - pub mod min_restaking_bond { + pub mod next_instance_id { use super::runtime_types; - pub type MinRestakingBond = ::core::primitive::u128; + pub type NextInstanceId = ::core::primitive::u64; } - pub mod total_restake { + pub mod next_job_call_id { + use super::runtime_types; + pub type NextJobCallId = ::core::primitive::u64; + } + pub mod blueprints { + use super::runtime_types; + pub type Blueprints = ( + ::subxt::ext::subxt_core::utils::AccountId32, + runtime_types::tangle_primitives::services::ServiceBlueprint, + ); + pub type Param0 = ::core::primitive::u64; + } + pub mod operators { use super::runtime_types; - pub type TotalRestake = ::core::primitive::u128; + pub type Operators = + runtime_types::tangle_primitives::services::OperatorPreferences; + pub type Param0 = ::core::primitive::u64; + pub type Param1 = ::subxt::ext::subxt_core::utils::AccountId32; } - pub mod validator_jobs_in_era { + pub mod service_requests { use super::runtime_types; - pub type ValidatorJobsInEra = - runtime_types::bounded_collections::bounded_btree_map::BoundedBTreeMap< + pub type ServiceRequests = + runtime_types::tangle_primitives::services::ServiceRequest< ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, + ::core::primitive::u64, >; + pub type Param0 = ::core::primitive::u64; } - pub mod eras_restake_reward_points { + pub mod instances { use super::runtime_types; - pub type ErasRestakeRewardPoints = - runtime_types::pallet_staking::EraRewardPoints< - ::subxt::ext::subxt_core::utils::AccountId32, + pub type Instances = runtime_types::tangle_primitives::services::Service< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u64, + >; + pub type Param0 = ::core::primitive::u64; + } + pub mod user_services { + use super::runtime_types; + pub type UserServices = + runtime_types::bounded_collections::bounded_btree_set::BoundedBTreeSet< + ::core::primitive::u64, >; - pub type Param0 = ::core::primitive::u32; + pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; + } + pub mod job_calls { + use super::runtime_types; + pub type JobCalls = runtime_types::tangle_primitives::services::JobCall< + ::subxt::ext::subxt_core::utils::AccountId32, + >; + pub type Param0 = ::core::primitive::u64; + pub type Param1 = ::core::primitive::u64; + } + pub mod job_results { + use super::runtime_types; + pub type JobResults = runtime_types::tangle_primitives::services::JobCallResult< + ::subxt::ext::subxt_core::utils::AccountId32, + >; + pub type Param0 = ::core::primitive::u64; + pub type Param1 = ::core::primitive::u64; } - pub mod active_restaker_era { + pub mod operators_profile { use super::runtime_types; - pub type ActiveRestakerEra = runtime_types::pallet_staking::ActiveEraInfo; + pub type OperatorsProfile = + runtime_types::tangle_primitives::services::OperatorProfile; + pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; } } pub struct StorageApi; impl StorageApi { - #[doc = " Map from all \"controller\" accounts to the info regarding the staking."] - pub fn ledger_iter( + #[doc = " The next free ID for a service blueprint."] + pub fn next_blueprint_id( &self, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< (), - types::ledger::Ledger, + types::next_blueprint_id::NextBlueprintId, + ::subxt::ext::subxt_core::utils::Yes, + ::subxt::ext::subxt_core::utils::Yes, (), + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "NextBlueprintId", + (), + [ + 35u8, 44u8, 121u8, 43u8, 47u8, 227u8, 24u8, 214u8, 105u8, 224u8, 192u8, + 107u8, 93u8, 67u8, 237u8, 105u8, 147u8, 12u8, 106u8, 77u8, 106u8, 60u8, + 125u8, 136u8, 29u8, 74u8, 32u8, 116u8, 169u8, 29u8, 248u8, 191u8, + ], + ) + } + #[doc = " The next free ID for a service request."] + pub fn next_service_request_id( + &self, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< (), + types::next_service_request_id::NextServiceRequestId, + ::subxt::ext::subxt_core::utils::Yes, ::subxt::ext::subxt_core::utils::Yes, + (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "Ledger", + "Services", + "NextServiceRequestId", (), [ - 121u8, 10u8, 98u8, 199u8, 221u8, 202u8, 221u8, 30u8, 121u8, 135u8, - 145u8, 134u8, 230u8, 199u8, 212u8, 184u8, 129u8, 124u8, 172u8, 143u8, - 51u8, 99u8, 112u8, 81u8, 123u8, 187u8, 113u8, 177u8, 126u8, 0u8, 168u8, - 4u8, + 40u8, 205u8, 139u8, 150u8, 30u8, 95u8, 231u8, 50u8, 201u8, 122u8, 18u8, + 86u8, 153u8, 52u8, 66u8, 18u8, 223u8, 123u8, 81u8, 25u8, 124u8, 181u8, + 88u8, 131u8, 156u8, 54u8, 121u8, 244u8, 206u8, 54u8, 15u8, 218u8, ], ) } - #[doc = " Map from all \"controller\" accounts to the info regarding the staking."] - pub fn ledger( + #[doc = " The next free ID for a service Instance."] + pub fn next_instance_id( &self, - _0: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + (), + types::next_instance_id::NextInstanceId, + ::subxt::ext::subxt_core::utils::Yes, + ::subxt::ext::subxt_core::utils::Yes, + (), + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "NextInstanceId", + (), + [ + 134u8, 80u8, 72u8, 175u8, 246u8, 17u8, 135u8, 164u8, 20u8, 191u8, 89u8, + 166u8, 9u8, 94u8, 74u8, 92u8, 98u8, 189u8, 199u8, 136u8, 27u8, 203u8, + 96u8, 193u8, 212u8, 151u8, 83u8, 178u8, 71u8, 44u8, 229u8, 101u8, + ], + ) + } + #[doc = " The next free ID for a service call."] + pub fn next_job_call_id( + &self, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + (), + types::next_job_call_id::NextJobCallId, + ::subxt::ext::subxt_core::utils::Yes, + ::subxt::ext::subxt_core::utils::Yes, + (), + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "NextJobCallId", + (), + [ + 91u8, 154u8, 224u8, 213u8, 133u8, 241u8, 107u8, 25u8, 9u8, 22u8, 190u8, + 236u8, 246u8, 67u8, 142u8, 223u8, 38u8, 184u8, 60u8, 6u8, 154u8, 229u8, + 170u8, 195u8, 109u8, 160u8, 23u8, 104u8, 229u8, 202u8, 10u8, 76u8, + ], + ) + } + #[doc = " The service blueprints along with their owner."] + pub fn blueprints_iter( + &self, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + (), + types::blueprints::Blueprints, + (), + (), + ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "Blueprints", + (), + [ + 157u8, 79u8, 96u8, 118u8, 209u8, 72u8, 156u8, 208u8, 43u8, 242u8, + 208u8, 21u8, 44u8, 97u8, 230u8, 165u8, 13u8, 46u8, 167u8, 111u8, 30u8, + 188u8, 88u8, 59u8, 61u8, 237u8, 239u8, 115u8, 208u8, 218u8, 35u8, + 164u8, + ], + ) + } + #[doc = " The service blueprints along with their owner."] + pub fn blueprints( + &self, + _0: impl ::core::borrow::Borrow, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::ledger::Param0, + types::blueprints::Param0, >, - types::ledger::Ledger, + types::blueprints::Blueprints, ::subxt::ext::subxt_core::utils::Yes, (), (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "Ledger", + "Services", + "Blueprints", ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( _0.borrow(), ), [ - 121u8, 10u8, 98u8, 199u8, 221u8, 202u8, 221u8, 30u8, 121u8, 135u8, - 145u8, 134u8, 230u8, 199u8, 212u8, 184u8, 129u8, 124u8, 172u8, 143u8, - 51u8, 99u8, 112u8, 81u8, 123u8, 187u8, 113u8, 177u8, 126u8, 0u8, 168u8, - 4u8, + 157u8, 79u8, 96u8, 118u8, 209u8, 72u8, 156u8, 208u8, 43u8, 242u8, + 208u8, 21u8, 44u8, 97u8, 230u8, 165u8, 13u8, 46u8, 167u8, 111u8, 30u8, + 188u8, 88u8, 59u8, 61u8, 237u8, 239u8, 115u8, 208u8, 218u8, 35u8, + 164u8, ], ) } - #[doc = " Mapping of resource to bridge index"] - pub fn account_roles_mapping_iter( + #[doc = " The operators for a specific service blueprint."] + #[doc = " Blueprint ID -> Operator -> Operator Preferences"] + pub fn operators_iter( &self, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< (), - types::account_roles_mapping::AccountRolesMapping, + types::operators::Operators, + (), (), ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "AccountRolesMapping", + "Services", + "Operators", (), [ - 152u8, 61u8, 77u8, 167u8, 227u8, 122u8, 37u8, 69u8, 238u8, 183u8, - 175u8, 126u8, 229u8, 92u8, 113u8, 128u8, 171u8, 42u8, 196u8, 65u8, - 251u8, 130u8, 60u8, 8u8, 136u8, 135u8, 128u8, 219u8, 155u8, 97u8, 50u8, - 109u8, + 175u8, 94u8, 215u8, 216u8, 65u8, 112u8, 95u8, 19u8, 154u8, 48u8, 102u8, + 133u8, 46u8, 197u8, 71u8, 61u8, 81u8, 196u8, 91u8, 54u8, 24u8, 207u8, + 36u8, 18u8, 55u8, 216u8, 100u8, 66u8, 39u8, 55u8, 47u8, 203u8, ], ) } - #[doc = " Mapping of resource to bridge index"] - pub fn account_roles_mapping( + #[doc = " The operators for a specific service blueprint."] + #[doc = " Blueprint ID -> Operator -> Operator Preferences"] + pub fn operators_iter1( &self, - _0: impl ::core::borrow::Borrow, + _0: impl ::core::borrow::Borrow, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::account_roles_mapping::Param0, + types::operators::Param0, >, - types::account_roles_mapping::AccountRolesMapping, + types::operators::Operators, + (), + (), + ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "Operators", + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), + [ + 175u8, 94u8, 215u8, 216u8, 65u8, 112u8, 95u8, 19u8, 154u8, 48u8, 102u8, + 133u8, 46u8, 197u8, 71u8, 61u8, 81u8, 196u8, 91u8, 54u8, 24u8, 207u8, + 36u8, 18u8, 55u8, 216u8, 100u8, 66u8, 39u8, 55u8, 47u8, 203u8, + ], + ) + } + #[doc = " The operators for a specific service blueprint."] + #[doc = " Blueprint ID -> Operator -> Operator Preferences"] + pub fn operators( + &self, + _0: impl ::core::borrow::Borrow, + _1: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + ( + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::operators::Param0, + >, + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::operators::Param1, + >, + ), + types::operators::Operators, + ::subxt::ext::subxt_core::utils::Yes, + (), + (), + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "Operators", + ( + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _1.borrow(), + ), + ), + [ + 175u8, 94u8, 215u8, 216u8, 65u8, 112u8, 95u8, 19u8, 154u8, 48u8, 102u8, + 133u8, 46u8, 197u8, 71u8, 61u8, 81u8, 196u8, 91u8, 54u8, 24u8, 207u8, + 36u8, 18u8, 55u8, 216u8, 100u8, 66u8, 39u8, 55u8, 47u8, 203u8, + ], + ) + } + #[doc = " The service requests along with their owner."] + #[doc = " Request ID -> Service Request"] + pub fn service_requests_iter( + &self, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + (), + types::service_requests::ServiceRequests, + (), + (), ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "ServiceRequests", + (), + [ + 209u8, 40u8, 90u8, 166u8, 245u8, 129u8, 31u8, 68u8, 249u8, 249u8, 36u8, + 159u8, 0u8, 43u8, 133u8, 85u8, 117u8, 104u8, 97u8, 146u8, 67u8, 58u8, + 183u8, 202u8, 82u8, 3u8, 144u8, 9u8, 11u8, 90u8, 131u8, 237u8, + ], + ) + } + #[doc = " The service requests along with their owner."] + #[doc = " Request ID -> Service Request"] + pub fn service_requests( + &self, + _0: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::service_requests::Param0, + >, + types::service_requests::ServiceRequests, ::subxt::ext::subxt_core::utils::Yes, (), + (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "AccountRolesMapping", + "Services", + "ServiceRequests", ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( _0.borrow(), ), [ - 152u8, 61u8, 77u8, 167u8, 227u8, 122u8, 37u8, 69u8, 238u8, 183u8, - 175u8, 126u8, 229u8, 92u8, 113u8, 128u8, 171u8, 42u8, 196u8, 65u8, - 251u8, 130u8, 60u8, 8u8, 136u8, 135u8, 128u8, 219u8, 155u8, 97u8, 50u8, - 109u8, + 209u8, 40u8, 90u8, 166u8, 245u8, 129u8, 31u8, 68u8, 249u8, 249u8, 36u8, + 159u8, 0u8, 43u8, 133u8, 85u8, 117u8, 104u8, 97u8, 146u8, 67u8, 58u8, + 183u8, 202u8, 82u8, 3u8, 144u8, 9u8, 11u8, 90u8, 131u8, 237u8, ], ) } - #[doc = " The minimum re staking bond to become and maintain the role."] - pub fn min_restaking_bond( + #[doc = " The Services Instances"] + #[doc = " Service ID -> Service"] + pub fn instances_iter( &self, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< (), - types::min_restaking_bond::MinRestakingBond, + types::instances::Instances, + (), + (), ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "Instances", + (), + [ + 23u8, 60u8, 55u8, 29u8, 241u8, 164u8, 199u8, 144u8, 71u8, 190u8, 14u8, + 81u8, 133u8, 10u8, 142u8, 158u8, 126u8, 80u8, 206u8, 209u8, 174u8, + 74u8, 246u8, 188u8, 164u8, 220u8, 105u8, 159u8, 73u8, 143u8, 85u8, + 147u8, + ], + ) + } + #[doc = " The Services Instances"] + #[doc = " Service ID -> Service"] + pub fn instances( + &self, + _0: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::instances::Param0, + >, + types::instances::Instances, ::subxt::ext::subxt_core::utils::Yes, (), + (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "MinRestakingBond", - (), + "Services", + "Instances", + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), [ - 123u8, 51u8, 109u8, 15u8, 125u8, 106u8, 197u8, 51u8, 217u8, 199u8, - 164u8, 206u8, 55u8, 134u8, 104u8, 31u8, 43u8, 169u8, 63u8, 95u8, 245u8, - 251u8, 22u8, 230u8, 65u8, 77u8, 60u8, 121u8, 76u8, 204u8, 24u8, 63u8, + 23u8, 60u8, 55u8, 29u8, 241u8, 164u8, 199u8, 144u8, 71u8, 190u8, 14u8, + 81u8, 133u8, 10u8, 142u8, 158u8, 126u8, 80u8, 206u8, 209u8, 174u8, + 74u8, 246u8, 188u8, 164u8, 220u8, 105u8, 159u8, 73u8, 143u8, 85u8, + 147u8, ], ) } - #[doc = " The total restake amount in the system"] - pub fn total_restake( + #[doc = " User Service Instances"] + #[doc = " User Account ID -> Service ID"] + pub fn user_services_iter( &self, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< (), - types::total_restake::TotalRestake, + types::user_services::UserServices, + (), ::subxt::ext::subxt_core::utils::Yes, ::subxt::ext::subxt_core::utils::Yes, - (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "TotalRestake", + "Services", + "UserServices", (), [ - 107u8, 101u8, 27u8, 228u8, 156u8, 103u8, 64u8, 157u8, 134u8, 42u8, - 196u8, 65u8, 103u8, 110u8, 213u8, 44u8, 132u8, 40u8, 239u8, 145u8, - 182u8, 130u8, 201u8, 57u8, 225u8, 98u8, 197u8, 162u8, 72u8, 171u8, - 85u8, 109u8, + 228u8, 80u8, 139u8, 177u8, 57u8, 117u8, 175u8, 212u8, 37u8, 201u8, + 176u8, 12u8, 79u8, 136u8, 65u8, 250u8, 105u8, 37u8, 13u8, 176u8, 86u8, + 119u8, 111u8, 6u8, 44u8, 109u8, 193u8, 103u8, 199u8, 195u8, 56u8, + 235u8, ], ) } - #[doc = " The number of jobs completed by a validator in era"] - pub fn validator_jobs_in_era( + #[doc = " User Service Instances"] + #[doc = " User Account ID -> Service ID"] + pub fn user_services( &self, + _0: impl ::core::borrow::Borrow, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::validator_jobs_in_era::ValidatorJobsInEra, + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::user_services::Param0, + >, + types::user_services::UserServices, ::subxt::ext::subxt_core::utils::Yes, ::subxt::ext::subxt_core::utils::Yes, (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "ValidatorJobsInEra", - (), + "Services", + "UserServices", + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), [ - 125u8, 130u8, 184u8, 34u8, 6u8, 164u8, 104u8, 92u8, 61u8, 187u8, 55u8, - 30u8, 100u8, 18u8, 89u8, 140u8, 36u8, 162u8, 165u8, 29u8, 192u8, 46u8, - 100u8, 113u8, 189u8, 222u8, 177u8, 207u8, 162u8, 229u8, 216u8, 124u8, + 228u8, 80u8, 139u8, 177u8, 57u8, 117u8, 175u8, 212u8, 37u8, 201u8, + 176u8, 12u8, 79u8, 136u8, 65u8, 250u8, 105u8, 37u8, 13u8, 176u8, 86u8, + 119u8, 111u8, 6u8, 44u8, 109u8, 193u8, 103u8, 199u8, 195u8, 56u8, + 235u8, ], ) } - #[doc = " Rewards for the last `HISTORY_DEPTH` eras."] - #[doc = " If reward hasn't been set or has been removed then 0 reward is returned."] - pub fn eras_restake_reward_points_iter( + #[doc = " The Service Job Calls"] + #[doc = " Service ID -> Call ID -> Job Call"] + pub fn job_calls_iter( &self, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< (), - types::eras_restake_reward_points::ErasRestakeRewardPoints, + types::job_calls::JobCalls, + (), (), - ::subxt::ext::subxt_core::utils::Yes, ::subxt::ext::subxt_core::utils::Yes, > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "ErasRestakeRewardPoints", + "Services", + "JobCalls", (), [ - 179u8, 194u8, 204u8, 246u8, 160u8, 127u8, 200u8, 83u8, 71u8, 165u8, - 162u8, 209u8, 254u8, 220u8, 201u8, 209u8, 75u8, 45u8, 247u8, 247u8, - 148u8, 234u8, 191u8, 79u8, 202u8, 107u8, 186u8, 72u8, 106u8, 154u8, - 140u8, 107u8, + 81u8, 153u8, 130u8, 10u8, 7u8, 145u8, 215u8, 187u8, 40u8, 251u8, 182u8, + 5u8, 54u8, 174u8, 243u8, 163u8, 104u8, 140u8, 58u8, 84u8, 36u8, 246u8, + 235u8, 223u8, 56u8, 242u8, 38u8, 155u8, 182u8, 252u8, 47u8, 222u8, ], ) } - #[doc = " Rewards for the last `HISTORY_DEPTH` eras."] - #[doc = " If reward hasn't been set or has been removed then 0 reward is returned."] - pub fn eras_restake_reward_points( + #[doc = " The Service Job Calls"] + #[doc = " Service ID -> Call ID -> Job Call"] + pub fn job_calls_iter1( &self, - _0: impl ::core::borrow::Borrow, + _0: impl ::core::borrow::Borrow, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::eras_restake_reward_points::Param0, + types::job_calls::Param0, >, - types::eras_restake_reward_points::ErasRestakeRewardPoints, + types::job_calls::JobCalls, + (), + (), + ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "JobCalls", + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), + [ + 81u8, 153u8, 130u8, 10u8, 7u8, 145u8, 215u8, 187u8, 40u8, 251u8, 182u8, + 5u8, 54u8, 174u8, 243u8, 163u8, 104u8, 140u8, 58u8, 84u8, 36u8, 246u8, + 235u8, 223u8, 56u8, 242u8, 38u8, 155u8, 182u8, 252u8, 47u8, 222u8, + ], + ) + } + #[doc = " The Service Job Calls"] + #[doc = " Service ID -> Call ID -> Job Call"] + pub fn job_calls( + &self, + _0: impl ::core::borrow::Borrow, + _1: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + ( + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::job_calls::Param0, + >, + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::job_calls::Param1, + >, + ), + types::job_calls::JobCalls, ::subxt::ext::subxt_core::utils::Yes, + (), + (), + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "JobCalls", + ( + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _1.borrow(), + ), + ), + [ + 81u8, 153u8, 130u8, 10u8, 7u8, 145u8, 215u8, 187u8, 40u8, 251u8, 182u8, + 5u8, 54u8, 174u8, 243u8, 163u8, 104u8, 140u8, 58u8, 84u8, 36u8, 246u8, + 235u8, 223u8, 56u8, 242u8, 38u8, 155u8, 182u8, 252u8, 47u8, 222u8, + ], + ) + } + #[doc = " The Service Job Call Results"] + #[doc = " Service ID -> Call ID -> Job Call Result"] + pub fn job_results_iter( + &self, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + (), + types::job_results::JobResults, + (), + (), ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "JobResults", + (), + [ + 73u8, 18u8, 125u8, 187u8, 92u8, 54u8, 109u8, 224u8, 218u8, 111u8, 27u8, + 135u8, 238u8, 20u8, 109u8, 113u8, 154u8, 233u8, 37u8, 170u8, 20u8, + 210u8, 166u8, 14u8, 68u8, 195u8, 213u8, 243u8, 157u8, 98u8, 241u8, + 105u8, + ], + ) + } + #[doc = " The Service Job Call Results"] + #[doc = " Service ID -> Call ID -> Job Call Result"] + pub fn job_results_iter1( + &self, + _0: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::job_results::Param0, + >, + types::job_results::JobResults, + (), (), + ::subxt::ext::subxt_core::utils::Yes, > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "ErasRestakeRewardPoints", + "Services", + "JobResults", ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( _0.borrow(), ), [ - 179u8, 194u8, 204u8, 246u8, 160u8, 127u8, 200u8, 83u8, 71u8, 165u8, - 162u8, 209u8, 254u8, 220u8, 201u8, 209u8, 75u8, 45u8, 247u8, 247u8, - 148u8, 234u8, 191u8, 79u8, 202u8, 107u8, 186u8, 72u8, 106u8, 154u8, - 140u8, 107u8, + 73u8, 18u8, 125u8, 187u8, 92u8, 54u8, 109u8, 224u8, 218u8, 111u8, 27u8, + 135u8, 238u8, 20u8, 109u8, 113u8, 154u8, 233u8, 37u8, 170u8, 20u8, + 210u8, 166u8, 14u8, 68u8, 195u8, 213u8, 243u8, 157u8, 98u8, 241u8, + 105u8, ], ) } - #[doc = " The active era information, it holds index and start."] - #[doc = ""] - #[doc = " The active era is the era being currently rewarded."] - pub fn active_restaker_era( + #[doc = " The Service Job Call Results"] + #[doc = " Service ID -> Call ID -> Job Call Result"] + pub fn job_results( &self, + _0: impl ::core::borrow::Borrow, + _1: impl ::core::borrow::Borrow, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::active_restaker_era::ActiveRestakerEra, + ( + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::job_results::Param0, + >, + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::job_results::Param1, + >, + ), + types::job_results::JobResults, ::subxt::ext::subxt_core::utils::Yes, (), (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Roles", - "ActiveRestakerEra", + "Services", + "JobResults", + ( + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _1.borrow(), + ), + ), + [ + 73u8, 18u8, 125u8, 187u8, 92u8, 54u8, 109u8, 224u8, 218u8, 111u8, 27u8, + 135u8, 238u8, 20u8, 109u8, 113u8, 154u8, 233u8, 37u8, 170u8, 20u8, + 210u8, 166u8, 14u8, 68u8, 195u8, 213u8, 243u8, 157u8, 98u8, 241u8, + 105u8, + ], + ) + } + pub fn operators_profile_iter( + &self, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + (), + types::operators_profile::OperatorsProfile, + (), + (), + ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "OperatorsProfile", (), [ - 169u8, 15u8, 202u8, 51u8, 247u8, 216u8, 207u8, 213u8, 236u8, 134u8, - 159u8, 33u8, 151u8, 188u8, 225u8, 168u8, 127u8, 34u8, 229u8, 148u8, - 64u8, 183u8, 151u8, 101u8, 245u8, 214u8, 150u8, 198u8, 47u8, 84u8, - 216u8, 177u8, + 187u8, 96u8, 245u8, 44u8, 238u8, 169u8, 69u8, 44u8, 209u8, 127u8, + 169u8, 188u8, 60u8, 70u8, 17u8, 69u8, 200u8, 49u8, 27u8, 60u8, 179u8, + 198u8, 226u8, 207u8, 151u8, 248u8, 86u8, 97u8, 149u8, 68u8, 42u8, 66u8, + ], + ) + } + pub fn operators_profile( + &self, + _0: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::operators_profile::Param0, + >, + types::operators_profile::OperatorsProfile, + ::subxt::ext::subxt_core::utils::Yes, + (), + (), + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "Services", + "OperatorsProfile", + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), + [ + 187u8, 96u8, 245u8, 44u8, 238u8, 169u8, 69u8, 44u8, 209u8, 127u8, + 169u8, 188u8, 60u8, 70u8, 17u8, 69u8, 200u8, 49u8, 27u8, 60u8, 179u8, + 198u8, 226u8, 207u8, 151u8, 248u8, 86u8, 97u8, 149u8, 68u8, 42u8, 66u8, ], ) } @@ -36960,15 +37414,31 @@ pub mod api { use super::runtime_types; pub struct ConstantsApi; impl ConstantsApi { - #[doc = " Max roles per account."] - pub fn max_roles_per_account( + #[doc = " `PalletId` for the services pallet."] + pub fn pallet_id( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + runtime_types::frame_support::PalletId, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "PalletId", + [ + 56u8, 243u8, 53u8, 83u8, 154u8, 179u8, 170u8, 80u8, 133u8, 173u8, 61u8, + 161u8, 47u8, 225u8, 146u8, 21u8, 50u8, 229u8, 248u8, 27u8, 104u8, 58u8, + 129u8, 197u8, 102u8, 160u8, 168u8, 205u8, 154u8, 42u8, 217u8, 53u8, + ], + ) + } + #[doc = " Maximum number of fields in a job call."] + pub fn max_fields( &self, ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< ::core::primitive::u32, > { ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Roles", - "MaxRolesPerAccount", + "Services", + "MaxFields", [ 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, @@ -36977,56 +37447,400 @@ pub mod api { ], ) } - } - } - } - pub mod jobs { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_jobs::module::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_jobs::module::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + #[doc = " Maximum size of a field in a job call."] + pub fn max_fields_size( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxFieldsSize", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum length of metadata string length."] + pub fn max_metadata_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxMetadataLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum number of jobs per service."] + pub fn max_jobs_per_service( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxJobsPerService", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum number of Operators per service."] + pub fn max_operators_per_service( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxOperatorsPerService", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum number of permitted callers per service."] + pub fn max_permitted_callers( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxPermittedCallers", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum number of services per operator."] + pub fn max_services_per_operator( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxServicesPerOperator", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum number of blueprints per operator."] + pub fn max_blueprints_per_operator( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxBlueprintsPerOperator", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum number of services per user."] + pub fn max_services_per_user( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxServicesPerUser", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum number of binaries per gadget."] + pub fn max_binaries_per_gadget( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxBinariesPerGadget", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Maximum number of sources per gadget."] + pub fn max_sources_per_gadget( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxSourcesPerGadget", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Git owner maximum length."] + pub fn max_git_owner_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxGitOwnerLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Git repository maximum length."] + pub fn max_git_repo_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxGitRepoLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Git tag maximum length."] + pub fn max_git_tag_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxGitTagLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " binary name maximum length."] + pub fn max_binary_name_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxBinaryNameLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " IPFS hash maximum length."] + pub fn max_ipfs_hash_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxIpfsHashLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Container registry maximum length."] + pub fn max_container_registry_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxContainerRegistryLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Container image name maximum length."] + pub fn max_container_image_name_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxContainerImageNameLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + #[doc = " Container image tag maximum length."] + pub fn max_container_image_tag_length( + &self, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, + > { + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Services", + "MaxContainerImageTagLength", + [ + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, + ], + ) + } + } + } + } + pub mod proxy { + use super::root_mod; + use super::runtime_types; + #[doc = "The `Error` enum of this pallet."] + pub type Error = runtime_types::pallet_proxy::pallet::Error; + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub type Call = runtime_types::pallet_proxy::pallet::Call; + pub mod calls { + use super::root_mod; + use super::runtime_types; + type DispatchError = runtime_types::sp_runtime::DispatchError; + pub mod types { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" )] #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::submit_job`]."] - pub struct SubmitJob { - pub job: submit_job::Job, + #[doc = "See [`Pallet::proxy`]."] + pub struct Proxy { + pub real: proxy::Real, + pub force_proxy_type: proxy::ForceProxyType, + pub call: ::subxt::ext::subxt_core::alloc::boxed::Box, } - pub mod submit_job { + pub mod proxy { use super::runtime_types; - pub type Job = runtime_types::tangle_primitives::jobs::JobSubmission< + pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, + ::core::primitive::u32, + >; + pub type ForceProxyType = + ::core::option::Option; + pub type Call = runtime_types::tangle_testnet_runtime::RuntimeCall; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Proxy { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "proxy"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::add_proxy`]."] + pub struct AddProxy { + pub delegate: add_proxy::Delegate, + pub proxy_type: add_proxy::ProxyType, + pub delay: add_proxy::Delay, + } + pub mod add_proxy { + use super::runtime_types; + pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, >; + pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SubmitJob { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "submit_job"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for AddProxy { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "add_proxy"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37045,28 +37859,24 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::submit_job_result`]."] - pub struct SubmitJobResult { - pub role_type: submit_job_result::RoleType, - pub job_id: submit_job_result::JobId, - pub result: submit_job_result::Result, + #[doc = "See [`Pallet::remove_proxy`]."] + pub struct RemoveProxy { + pub delegate: remove_proxy::Delegate, + pub proxy_type: remove_proxy::ProxyType, + pub delay: remove_proxy::Delay, } - pub mod submit_job_result { + pub mod remove_proxy { use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub type Result = runtime_types::tangle_primitives::jobs::JobResult< - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxKeyLen, - runtime_types::tangle_testnet_runtime::MaxSignatureLen, - runtime_types::tangle_testnet_runtime::MaxDataLen, - runtime_types::tangle_testnet_runtime::MaxProofLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, + pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, >; + pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SubmitJobResult { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "submit_job_result"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveProxy { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "remove_proxy"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37085,11 +37895,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::withdraw_rewards`]."] - pub struct WithdrawRewards; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for WithdrawRewards { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "withdraw_rewards"; + #[doc = "See [`Pallet::remove_proxies`]."] + pub struct RemoveProxies; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveProxies { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "remove_proxies"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37108,27 +37918,63 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::report_inactive_validator`]."] - pub struct ReportInactiveValidator { - pub role_type: report_inactive_validator::RoleType, - pub job_id: report_inactive_validator::JobId, - pub validator: report_inactive_validator::Validator, - pub offence: report_inactive_validator::Offence, - pub signatures: report_inactive_validator::Signatures, + #[doc = "See [`Pallet::create_pure`]."] + pub struct CreatePure { + pub proxy_type: create_pure::ProxyType, + pub delay: create_pure::Delay, + pub index: create_pure::Index, } - pub mod report_inactive_validator { + pub mod create_pure { use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub type Validator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Offence = runtime_types::tangle_primitives::jobs::ValidatorOffenceType; - pub type Signatures = ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; + pub type Index = ::core::primitive::u16; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CreatePure { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "create_pure"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::kill_pure`]."] + pub struct KillPure { + pub spawner: kill_pure::Spawner, + pub proxy_type: kill_pure::ProxyType, + pub index: kill_pure::Index, + #[codec(compact)] + pub height: kill_pure::Height, + #[codec(compact)] + pub ext_index: kill_pure::ExtIndex, + } + pub mod kill_pure { + use super::runtime_types; + pub type Spawner = ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, >; + pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; + pub type Index = ::core::primitive::u16; + pub type Height = ::core::primitive::u64; + pub type ExtIndex = ::core::primitive::u32; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ReportInactiveValidator { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "report_inactive_validator"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for KillPure { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "kill_pure"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37147,21 +37993,22 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_permitted_caller`]."] - pub struct SetPermittedCaller { - pub role_type: set_permitted_caller::RoleType, - pub job_id: set_permitted_caller::JobId, - pub new_permitted_caller: set_permitted_caller::NewPermittedCaller, + #[doc = "See [`Pallet::announce`]."] + pub struct Announce { + pub real: announce::Real, + pub call_hash: announce::CallHash, } - pub mod set_permitted_caller { + pub mod announce { use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub type NewPermittedCaller = ::subxt::ext::subxt_core::utils::AccountId32; + pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >; + pub type CallHash = ::subxt::ext::subxt_core::utils::H256; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetPermittedCaller { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "set_permitted_caller"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Announce { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "announce"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37180,17 +38027,22 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_time_fee`]."] - pub struct SetTimeFee { - pub new_fee: set_time_fee::NewFee, + #[doc = "See [`Pallet::remove_announcement`]."] + pub struct RemoveAnnouncement { + pub real: remove_announcement::Real, + pub call_hash: remove_announcement::CallHash, } - pub mod set_time_fee { + pub mod remove_announcement { use super::runtime_types; - pub type NewFee = ::core::primitive::u128; + pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >; + pub type CallHash = ::subxt::ext::subxt_core::utils::H256; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetTimeFee { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "set_time_fee"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveAnnouncement { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "remove_announcement"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37209,18 +38061,22 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::submit_misbehavior`]."] - pub struct SubmitMisbehavior { - pub misbehavior: submit_misbehavior::Misbehavior, + #[doc = "See [`Pallet::reject_announcement`]."] + pub struct RejectAnnouncement { + pub delegate: reject_announcement::Delegate, + pub call_hash: reject_announcement::CallHash, } - pub mod submit_misbehavior { + pub mod reject_announcement { use super::runtime_types; - pub type Misbehavior = - runtime_types::tangle_primitives::misbehavior::MisbehaviorSubmission; + pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >; + pub type CallHash = ::subxt::ext::subxt_core::utils::H256; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SubmitMisbehavior { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "submit_misbehavior"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RejectAnnouncement { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "reject_announcement"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37239,181 +38095,228 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::extend_job_result_ttl`]."] - pub struct ExtendJobResultTtl { - pub role_type: extend_job_result_ttl::RoleType, - pub job_id: extend_job_result_ttl::JobId, - pub extend_by: extend_job_result_ttl::ExtendBy, + #[doc = "See [`Pallet::proxy_announced`]."] + pub struct ProxyAnnounced { + pub delegate: proxy_announced::Delegate, + pub real: proxy_announced::Real, + pub force_proxy_type: proxy_announced::ForceProxyType, + pub call: ::subxt::ext::subxt_core::alloc::boxed::Box, } - pub mod extend_job_result_ttl { + pub mod proxy_announced { use super::runtime_types; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type JobId = ::core::primitive::u64; - pub type ExtendBy = ::core::primitive::u64; + pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >; + pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< + ::subxt::ext::subxt_core::utils::AccountId32, + ::core::primitive::u32, + >; + pub type ForceProxyType = + ::core::option::Option; + pub type Call = runtime_types::tangle_testnet_runtime::RuntimeCall; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExtendJobResultTtl { - const PALLET: &'static str = "Jobs"; - const CALL: &'static str = "extend_job_result_ttl"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ProxyAnnounced { + const PALLET: &'static str = "Proxy"; + const CALL: &'static str = "proxy_announced"; } } pub struct TransactionApi; impl TransactionApi { - #[doc = "See [`Pallet::submit_job`]."] - pub fn submit_job( + #[doc = "See [`Pallet::proxy`]."] + pub fn proxy( &self, - job: types::submit_job::Job, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + real: types::proxy::Real, + force_proxy_type: types::proxy::ForceProxyType, + call: types::proxy::Call, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "submit_job", - types::SubmitJob { job }, + "Proxy", + "proxy", + types::Proxy { + real, + force_proxy_type, + call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), + }, [ - 234u8, 37u8, 219u8, 251u8, 193u8, 105u8, 242u8, 126u8, 243u8, 219u8, - 7u8, 252u8, 31u8, 45u8, 208u8, 230u8, 91u8, 208u8, 228u8, 84u8, 206u8, - 131u8, 128u8, 42u8, 95u8, 246u8, 28u8, 124u8, 106u8, 115u8, 254u8, 6u8, + 142u8, 194u8, 254u8, 83u8, 118u8, 51u8, 20u8, 105u8, 144u8, 219u8, + 216u8, 158u8, 67u8, 92u8, 108u8, 54u8, 187u8, 90u8, 233u8, 29u8, 153u8, + 203u8, 105u8, 238u8, 122u8, 174u8, 243u8, 163u8, 61u8, 109u8, 29u8, + 82u8, ], ) } - #[doc = "See [`Pallet::submit_job_result`]."] - pub fn submit_job_result( + #[doc = "See [`Pallet::add_proxy`]."] + pub fn add_proxy( &self, - role_type: types::submit_job_result::RoleType, - job_id: types::submit_job_result::JobId, - result: types::submit_job_result::Result, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + delegate: types::add_proxy::Delegate, + proxy_type: types::add_proxy::ProxyType, + delay: types::add_proxy::Delay, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "submit_job_result", - types::SubmitJobResult { role_type, job_id, result }, + "Proxy", + "add_proxy", + types::AddProxy { delegate, proxy_type, delay }, [ - 113u8, 96u8, 154u8, 198u8, 116u8, 24u8, 135u8, 225u8, 85u8, 145u8, - 181u8, 27u8, 29u8, 119u8, 147u8, 88u8, 161u8, 195u8, 252u8, 228u8, - 247u8, 171u8, 186u8, 246u8, 143u8, 83u8, 98u8, 250u8, 149u8, 192u8, - 152u8, 239u8, + 204u8, 170u8, 8u8, 148u8, 160u8, 168u8, 107u8, 62u8, 50u8, 75u8, 3u8, + 71u8, 179u8, 30u8, 109u8, 127u8, 108u8, 156u8, 239u8, 38u8, 97u8, 92u8, + 28u8, 253u8, 230u8, 97u8, 205u8, 44u8, 214u8, 237u8, 137u8, 27u8, ], ) } - #[doc = "See [`Pallet::withdraw_rewards`]."] - pub fn withdraw_rewards( + #[doc = "See [`Pallet::remove_proxy`]."] + pub fn remove_proxy( &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + delegate: types::remove_proxy::Delegate, + proxy_type: types::remove_proxy::ProxyType, + delay: types::remove_proxy::Delay, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "withdraw_rewards", - types::WithdrawRewards {}, + "Proxy", + "remove_proxy", + types::RemoveProxy { delegate, proxy_type, delay }, [ - 138u8, 171u8, 8u8, 216u8, 66u8, 163u8, 109u8, 39u8, 254u8, 155u8, - 224u8, 193u8, 244u8, 132u8, 176u8, 97u8, 204u8, 107u8, 148u8, 64u8, - 33u8, 213u8, 227u8, 164u8, 77u8, 51u8, 100u8, 174u8, 182u8, 247u8, - 187u8, 18u8, + 191u8, 2u8, 69u8, 93u8, 184u8, 207u8, 70u8, 111u8, 8u8, 255u8, 11u8, + 157u8, 4u8, 29u8, 102u8, 245u8, 223u8, 103u8, 132u8, 196u8, 238u8, + 252u8, 127u8, 91u8, 243u8, 48u8, 176u8, 86u8, 99u8, 63u8, 108u8, 111u8, ], ) } - #[doc = "See [`Pallet::report_inactive_validator`]."] - pub fn report_inactive_validator( + #[doc = "See [`Pallet::remove_proxies`]."] + pub fn remove_proxies( &self, - role_type: types::report_inactive_validator::RoleType, - job_id: types::report_inactive_validator::JobId, - validator: types::report_inactive_validator::Validator, - offence: types::report_inactive_validator::Offence, - signatures: types::report_inactive_validator::Signatures, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ReportInactiveValidator, - > { + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "report_inactive_validator", - types::ReportInactiveValidator { - role_type, - job_id, - validator, - offence, - signatures, - }, + "Proxy", + "remove_proxies", + types::RemoveProxies {}, [ - 224u8, 157u8, 189u8, 43u8, 200u8, 241u8, 81u8, 242u8, 66u8, 210u8, - 222u8, 125u8, 89u8, 40u8, 85u8, 192u8, 204u8, 120u8, 6u8, 53u8, 123u8, - 163u8, 33u8, 86u8, 19u8, 94u8, 228u8, 184u8, 168u8, 159u8, 207u8, 52u8, + 1u8, 126u8, 36u8, 227u8, 185u8, 34u8, 218u8, 236u8, 125u8, 231u8, 68u8, + 185u8, 145u8, 63u8, 250u8, 225u8, 103u8, 3u8, 189u8, 37u8, 172u8, + 195u8, 197u8, 216u8, 99u8, 210u8, 240u8, 162u8, 158u8, 132u8, 24u8, + 6u8, ], ) } - #[doc = "See [`Pallet::set_permitted_caller`]."] - pub fn set_permitted_caller( + #[doc = "See [`Pallet::create_pure`]."] + pub fn create_pure( &self, - role_type: types::set_permitted_caller::RoleType, - job_id: types::set_permitted_caller::JobId, - new_permitted_caller: types::set_permitted_caller::NewPermittedCaller, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { + proxy_type: types::create_pure::ProxyType, + delay: types::create_pure::Delay, + index: types::create_pure::Index, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "set_permitted_caller", - types::SetPermittedCaller { role_type, job_id, new_permitted_caller }, + "Proxy", + "create_pure", + types::CreatePure { proxy_type, delay, index }, [ - 81u8, 223u8, 133u8, 76u8, 65u8, 232u8, 140u8, 191u8, 65u8, 174u8, - 185u8, 102u8, 178u8, 135u8, 207u8, 119u8, 101u8, 234u8, 234u8, 148u8, - 70u8, 30u8, 157u8, 30u8, 107u8, 137u8, 135u8, 188u8, 145u8, 101u8, - 125u8, 243u8, + 239u8, 72u8, 255u8, 141u8, 190u8, 115u8, 141u8, 227u8, 164u8, 59u8, + 113u8, 0u8, 87u8, 101u8, 142u8, 147u8, 43u8, 13u8, 59u8, 213u8, 162u8, + 48u8, 67u8, 167u8, 223u8, 72u8, 153u8, 148u8, 219u8, 71u8, 53u8, 4u8, ], ) } - #[doc = "See [`Pallet::set_time_fee`]."] - pub fn set_time_fee( + #[doc = "See [`Pallet::kill_pure`]."] + pub fn kill_pure( &self, - new_fee: types::set_time_fee::NewFee, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + spawner: types::kill_pure::Spawner, + proxy_type: types::kill_pure::ProxyType, + index: types::kill_pure::Index, + height: types::kill_pure::Height, + ext_index: types::kill_pure::ExtIndex, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "Proxy", + "kill_pure", + types::KillPure { spawner, proxy_type, index, height, ext_index }, + [ + 125u8, 59u8, 127u8, 47u8, 63u8, 48u8, 101u8, 56u8, 61u8, 192u8, 198u8, + 217u8, 119u8, 91u8, 186u8, 35u8, 119u8, 222u8, 16u8, 246u8, 42u8, + 248u8, 19u8, 89u8, 246u8, 20u8, 66u8, 14u8, 133u8, 32u8, 118u8, 118u8, + ], + ) + } + #[doc = "See [`Pallet::announce`]."] + pub fn announce( + &self, + real: types::announce::Real, + call_hash: types::announce::CallHash, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "set_time_fee", - types::SetTimeFee { new_fee }, + "Proxy", + "announce", + types::Announce { real, call_hash }, [ - 9u8, 96u8, 202u8, 11u8, 3u8, 232u8, 45u8, 199u8, 233u8, 22u8, 24u8, - 5u8, 99u8, 150u8, 171u8, 12u8, 56u8, 41u8, 124u8, 128u8, 88u8, 143u8, - 124u8, 215u8, 75u8, 17u8, 222u8, 183u8, 238u8, 230u8, 43u8, 24u8, + 32u8, 88u8, 145u8, 33u8, 55u8, 44u8, 136u8, 153u8, 26u8, 111u8, 73u8, + 15u8, 247u8, 188u8, 14u8, 236u8, 221u8, 222u8, 60u8, 97u8, 71u8, 229u8, + 18u8, 120u8, 182u8, 43u8, 67u8, 248u8, 169u8, 80u8, 170u8, 207u8, ], ) } - #[doc = "See [`Pallet::submit_misbehavior`]."] - pub fn submit_misbehavior( + #[doc = "See [`Pallet::remove_announcement`]."] + pub fn remove_announcement( &self, - misbehavior: types::submit_misbehavior::Misbehavior, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload + real: types::remove_announcement::Real, + call_hash: types::remove_announcement::CallHash, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "submit_misbehavior", - types::SubmitMisbehavior { misbehavior }, + "Proxy", + "remove_announcement", + types::RemoveAnnouncement { real, call_hash }, [ - 217u8, 234u8, 26u8, 61u8, 224u8, 215u8, 223u8, 198u8, 22u8, 165u8, - 177u8, 131u8, 85u8, 208u8, 20u8, 26u8, 233u8, 140u8, 154u8, 79u8, 72u8, - 230u8, 119u8, 96u8, 186u8, 153u8, 98u8, 184u8, 162u8, 82u8, 189u8, - 92u8, + 195u8, 224u8, 61u8, 33u8, 27u8, 100u8, 168u8, 18u8, 105u8, 23u8, 220u8, + 168u8, 207u8, 231u8, 136u8, 46u8, 181u8, 85u8, 15u8, 151u8, 126u8, + 227u8, 97u8, 162u8, 232u8, 39u8, 45u8, 255u8, 44u8, 167u8, 237u8, 38u8, ], ) } - #[doc = "See [`Pallet::extend_job_result_ttl`]."] - pub fn extend_job_result_ttl( + #[doc = "See [`Pallet::reject_announcement`]."] + pub fn reject_announcement( &self, - role_type: types::extend_job_result_ttl::RoleType, - job_id: types::extend_job_result_ttl::JobId, - extend_by: types::extend_job_result_ttl::ExtendBy, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload + delegate: types::reject_announcement::Delegate, + call_hash: types::reject_announcement::CallHash, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Jobs", - "extend_job_result_ttl", - types::ExtendJobResultTtl { role_type, job_id, extend_by }, + "Proxy", + "reject_announcement", + types::RejectAnnouncement { delegate, call_hash }, + [ + 29u8, 140u8, 243u8, 165u8, 143u8, 166u8, 205u8, 203u8, 111u8, 196u8, + 11u8, 2u8, 4u8, 230u8, 11u8, 136u8, 249u8, 139u8, 224u8, 242u8, 96u8, + 146u8, 118u8, 210u8, 104u8, 77u8, 168u8, 28u8, 67u8, 244u8, 91u8, 65u8, + ], + ) + } + #[doc = "See [`Pallet::proxy_announced`]."] + pub fn proxy_announced( + &self, + delegate: types::proxy_announced::Delegate, + real: types::proxy_announced::Real, + force_proxy_type: types::proxy_announced::ForceProxyType, + call: types::proxy_announced::Call, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "Proxy", + "proxy_announced", + types::ProxyAnnounced { + delegate, + real, + force_proxy_type, + call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), + }, [ - 21u8, 94u8, 118u8, 169u8, 90u8, 219u8, 91u8, 210u8, 146u8, 126u8, 58u8, - 102u8, 10u8, 226u8, 107u8, 114u8, 80u8, 108u8, 10u8, 205u8, 169u8, - 84u8, 214u8, 61u8, 146u8, 178u8, 45u8, 81u8, 253u8, 239u8, 219u8, 87u8, + 35u8, 124u8, 140u8, 18u8, 1u8, 16u8, 155u8, 91u8, 182u8, 153u8, 249u8, + 170u8, 208u8, 210u8, 29u8, 104u8, 159u8, 240u8, 104u8, 19u8, 198u8, + 230u8, 136u8, 131u8, 196u8, 190u8, 150u8, 89u8, 81u8, 0u8, 37u8, 181u8, ], ) } } } #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_jobs::module::Event; + pub type Event = runtime_types::pallet_proxy::pallet::Event; pub mod events { use super::runtime_types; #[derive( @@ -37429,81 +38332,18 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A new job has been submitted"] - pub struct JobSubmitted { - pub job_id: job_submitted::JobId, - pub role_type: job_submitted::RoleType, - pub details: job_submitted::Details, - } - pub mod job_submitted { - use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type Details = runtime_types::tangle_primitives::jobs::JobSubmission< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobSubmitted { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobSubmitted"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A new job result has been submitted"] - pub struct JobResultSubmitted { - pub job_id: job_result_submitted::JobId, - pub role_type: job_result_submitted::RoleType, - } - pub mod job_result_submitted { - use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobResultSubmitted { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobResultSubmitted"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "validator has earned reward"] - pub struct ValidatorRewarded { - pub id: validator_rewarded::Id, - pub reward: validator_rewarded::Reward, + #[doc = "A proxy was executed correctly, with the given."] + pub struct ProxyExecuted { + pub result: proxy_executed::Result, } - pub mod validator_rewarded { + pub mod proxy_executed { use super::runtime_types; - pub type Id = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Reward = ::core::primitive::u128; + pub type Result = + ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ValidatorRewarded { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "ValidatorRewarded"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyExecuted { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "ProxyExecuted"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37518,19 +38358,24 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An existing job was removed and refunded"] - pub struct JobRefunded { - pub job_id: job_refunded::JobId, - pub role_type: job_refunded::RoleType, + #[doc = "A pure account has been created by new proxy with given"] + #[doc = "disambiguation index and proxy type."] + pub struct PureCreated { + pub pure: pure_created::Pure, + pub who: pure_created::Who, + pub proxy_type: pure_created::ProxyType, + pub disambiguation_index: pure_created::DisambiguationIndex, } - pub mod job_refunded { + pub mod pure_created { use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; + pub type Pure = ::subxt::ext::subxt_core::utils::AccountId32; + pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; + pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; + pub type DisambiguationIndex = ::core::primitive::u16; } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobRefunded { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobRefunded"; + impl ::subxt::ext::subxt_core::events::StaticEvent for PureCreated { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "PureCreated"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37545,28 +38390,21 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "The participants of a job has been updated"] - pub struct JobParticipantsUpdated { - pub job_id: job_participants_updated::JobId, - pub role_type: job_participants_updated::RoleType, - pub details: job_participants_updated::Details, + #[doc = "An announcement was placed to make a call in the future."] + pub struct Announced { + pub real: announced::Real, + pub proxy: announced::Proxy, + pub call_hash: announced::CallHash, } - pub mod job_participants_updated { + pub mod announced { use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type Details = runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; + pub type Real = ::subxt::ext::subxt_core::utils::AccountId32; + pub type Proxy = ::subxt::ext::subxt_core::utils::AccountId32; + pub type CallHash = ::subxt::ext::subxt_core::utils::H256; } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobParticipantsUpdated { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobParticipantsUpdated"; + impl ::subxt::ext::subxt_core::events::StaticEvent for Announced { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "Announced"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37581,29 +38419,23 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A job has been resubmitted, this is when a phase1 result has been discarded"] - #[doc = "and a new phase1 job is requested"] - pub struct JobReSubmitted { - pub job_id: job_re_submitted::JobId, - pub role_type: job_re_submitted::RoleType, - pub details: job_re_submitted::Details, + #[doc = "A proxy was added."] + pub struct ProxyAdded { + pub delegator: proxy_added::Delegator, + pub delegatee: proxy_added::Delegatee, + pub proxy_type: proxy_added::ProxyType, + pub delay: proxy_added::Delay, } - pub mod job_re_submitted { + pub mod proxy_added { use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type Details = runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; + pub type Delegator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type Delegatee = ::subxt::ext::subxt_core::utils::AccountId32; + pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobReSubmitted { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobReSubmitted"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyAdded { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "ProxyAdded"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -37618,463 +38450,285 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A job result expiry time has been extended"] - pub struct JobResultExtended { - pub job_id: job_result_extended::JobId, - pub role_type: job_result_extended::RoleType, - pub new_expiry: job_result_extended::NewExpiry, + #[doc = "A proxy was removed."] + pub struct ProxyRemoved { + pub delegator: proxy_removed::Delegator, + pub delegatee: proxy_removed::Delegatee, + pub proxy_type: proxy_removed::ProxyType, + pub delay: proxy_removed::Delay, } - pub mod job_result_extended { + pub mod proxy_removed { use super::runtime_types; - pub type JobId = ::core::primitive::u64; - pub type RoleType = runtime_types::tangle_primitives::roles::RoleType; - pub type NewExpiry = ::core::primitive::u64; + pub type Delegator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type Delegatee = ::subxt::ext::subxt_core::utils::AccountId32; + pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; + pub type Delay = ::core::primitive::u64; } - impl ::subxt::ext::subxt_core::events::StaticEvent for JobResultExtended { - const PALLET: &'static str = "Jobs"; - const EVENT: &'static str = "JobResultExtended"; + impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyRemoved { + const PALLET: &'static str = "Proxy"; + const EVENT: &'static str = "ProxyRemoved"; } } pub mod storage { use super::runtime_types; pub mod types { use super::runtime_types; - pub mod submitted_jobs { + pub mod proxies { use super::runtime_types; - pub type SubmittedJobs = runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, + pub type Proxies = ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::pallet_proxy::ProxyDefinition< + ::subxt::ext::subxt_core::utils::AccountId32, + runtime_types::tangle_testnet_runtime::ProxyType, + ::core::primitive::u64, + >, + >, ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - pub type Param0 = runtime_types::tangle_primitives::roles::RoleType; - pub type Param1 = ::core::primitive::u64; - } - pub mod submitted_jobs_role { - use super::runtime_types; - pub type SubmittedJobsRole = runtime_types::tangle_primitives::roles::RoleType; - pub type Param0 = ::core::primitive::u64; - } - pub mod known_results { - use super::runtime_types; - pub type KnownResults = runtime_types::tangle_primitives::jobs::PhaseResult< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxKeyLen, - runtime_types::tangle_testnet_runtime::MaxDataLen, - runtime_types::tangle_testnet_runtime::MaxSignatureLen, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxProofLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >; - pub type Param0 = runtime_types::tangle_primitives::roles::RoleType; - pub type Param1 = ::core::primitive::u64; - } - pub mod validator_job_id_lookup { - use super::runtime_types; - pub type ValidatorJobIdLookup = - runtime_types::bounded_collections::bounded_vec::BoundedVec<( - runtime_types::tangle_primitives::roles::RoleType, - ::core::primitive::u64, - )>; + ); pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; } - pub mod validator_rewards { + pub mod announcements { use super::runtime_types; - pub type ValidatorRewards = ::core::primitive::u128; + pub type Announcements = ( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::pallet_proxy::Announcement< + ::subxt::ext::subxt_core::utils::AccountId32, + ::subxt::ext::subxt_core::utils::H256, + ::core::primitive::u64, + >, + >, + ::core::primitive::u128, + ); pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; } - pub mod next_job_id { - use super::runtime_types; - pub type NextJobId = ::core::primitive::u64; - } - pub mod time_fee_per_block { - use super::runtime_types; - pub type TimeFeePerBlock = ::core::primitive::u128; - } } pub struct StorageApi; impl StorageApi { - pub fn submitted_jobs_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::submitted_jobs::SubmittedJobs, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobs", - (), - [ - 21u8, 254u8, 83u8, 32u8, 101u8, 238u8, 45u8, 58u8, 41u8, 97u8, 232u8, - 125u8, 234u8, 22u8, 4u8, 43u8, 39u8, 73u8, 205u8, 216u8, 159u8, 186u8, - 76u8, 178u8, 126u8, 165u8, 157u8, 87u8, 182u8, 90u8, 132u8, 59u8, - ], - ) - } - pub fn submitted_jobs_iter1( + #[doc = " The set of account proxies. Maps the account which has delegated to the accounts"] + #[doc = " which are being delegated to, together with the amount held on deposit."] + pub fn proxies_iter( &self, - _0: impl ::core::borrow::Borrow, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::submitted_jobs::Param0, - >, - types::submitted_jobs::SubmittedJobs, (), + types::proxies::Proxies, (), ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobs", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 21u8, 254u8, 83u8, 32u8, 101u8, 238u8, 45u8, 58u8, 41u8, 97u8, 232u8, - 125u8, 234u8, 22u8, 4u8, 43u8, 39u8, 73u8, 205u8, 216u8, 159u8, 186u8, - 76u8, 178u8, 126u8, 165u8, 157u8, 87u8, 182u8, 90u8, 132u8, 59u8, - ], - ) - } - pub fn submitted_jobs( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::submitted_jobs::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::submitted_jobs::Param1, - >, - ), - types::submitted_jobs::SubmittedJobs, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobs", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), - ), - [ - 21u8, 254u8, 83u8, 32u8, 101u8, 238u8, 45u8, 58u8, 41u8, 97u8, 232u8, - 125u8, 234u8, 22u8, 4u8, 43u8, 39u8, 73u8, 205u8, 216u8, 159u8, 186u8, - 76u8, 178u8, 126u8, 165u8, 157u8, 87u8, 182u8, 90u8, 132u8, 59u8, - ], - ) - } - pub fn submitted_jobs_role_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::submitted_jobs_role::SubmittedJobsRole, - (), - (), ::subxt::ext::subxt_core::utils::Yes, > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobsRole", + "Proxy", + "Proxies", (), [ - 205u8, 201u8, 222u8, 40u8, 74u8, 116u8, 104u8, 95u8, 238u8, 134u8, - 148u8, 253u8, 255u8, 180u8, 210u8, 135u8, 104u8, 52u8, 146u8, 179u8, - 136u8, 27u8, 197u8, 193u8, 135u8, 28u8, 64u8, 153u8, 100u8, 144u8, - 62u8, 167u8, + 223u8, 41u8, 16u8, 124u8, 14u8, 158u8, 113u8, 7u8, 229u8, 203u8, 172u8, + 71u8, 221u8, 164u8, 20u8, 177u8, 252u8, 14u8, 117u8, 176u8, 21u8, + 236u8, 79u8, 107u8, 57u8, 148u8, 170u8, 107u8, 179u8, 144u8, 255u8, + 10u8, ], ) } - pub fn submitted_jobs_role( + #[doc = " The set of account proxies. Maps the account which has delegated to the accounts"] + #[doc = " which are being delegated to, together with the amount held on deposit."] + pub fn proxies( &self, - _0: impl ::core::borrow::Borrow, + _0: impl ::core::borrow::Borrow, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::submitted_jobs_role::Param0, + types::proxies::Param0, >, - types::submitted_jobs_role::SubmittedJobsRole, + types::proxies::Proxies, + ::subxt::ext::subxt_core::utils::Yes, ::subxt::ext::subxt_core::utils::Yes, - (), (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "SubmittedJobsRole", + "Proxy", + "Proxies", ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( _0.borrow(), ), [ - 205u8, 201u8, 222u8, 40u8, 74u8, 116u8, 104u8, 95u8, 238u8, 134u8, - 148u8, 253u8, 255u8, 180u8, 210u8, 135u8, 104u8, 52u8, 146u8, 179u8, - 136u8, 27u8, 197u8, 193u8, 135u8, 28u8, 64u8, 153u8, 100u8, 144u8, - 62u8, 167u8, + 223u8, 41u8, 16u8, 124u8, 14u8, 158u8, 113u8, 7u8, 229u8, 203u8, 172u8, + 71u8, 221u8, 164u8, 20u8, 177u8, 252u8, 14u8, 117u8, 176u8, 21u8, + 236u8, 79u8, 107u8, 57u8, 148u8, 170u8, 107u8, 179u8, 144u8, 255u8, + 10u8, ], ) } - pub fn known_results_iter( + #[doc = " The announcements made by the proxy (key)."] + pub fn announcements_iter( &self, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< (), - types::known_results::KnownResults, - (), + types::announcements::Announcements, (), ::subxt::ext::subxt_core::utils::Yes, + ::subxt::ext::subxt_core::utils::Yes, > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "KnownResults", + "Proxy", + "Announcements", (), [ - 40u8, 205u8, 192u8, 253u8, 76u8, 224u8, 194u8, 44u8, 178u8, 50u8, 46u8, - 100u8, 82u8, 184u8, 205u8, 89u8, 155u8, 234u8, 54u8, 61u8, 166u8, 65u8, - 47u8, 191u8, 129u8, 188u8, 96u8, 143u8, 242u8, 24u8, 18u8, 129u8, + 36u8, 91u8, 194u8, 19u8, 186u8, 110u8, 217u8, 123u8, 101u8, 197u8, + 249u8, 185u8, 42u8, 5u8, 244u8, 249u8, 18u8, 156u8, 41u8, 19u8, 86u8, + 12u8, 253u8, 126u8, 232u8, 9u8, 226u8, 210u8, 25u8, 3u8, 115u8, 40u8, ], ) } - pub fn known_results_iter1( + #[doc = " The announcements made by the proxy (key)."] + pub fn announcements( &self, - _0: impl ::core::borrow::Borrow, + _0: impl ::core::borrow::Borrow, ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::known_results::Param0, + types::announcements::Param0, >, - types::known_results::KnownResults, - (), - (), + types::announcements::Announcements, ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "KnownResults", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 40u8, 205u8, 192u8, 253u8, 76u8, 224u8, 194u8, 44u8, 178u8, 50u8, 46u8, - 100u8, 82u8, 184u8, 205u8, 89u8, 155u8, 234u8, 54u8, 61u8, 166u8, 65u8, - 47u8, 191u8, 129u8, 188u8, 96u8, 143u8, 242u8, 24u8, 18u8, 129u8, - ], - ) - } - pub fn known_results( - &self, - _0: impl ::core::borrow::Borrow, - _1: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::known_results::Param0, - >, - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::known_results::Param1, - >, - ), - types::known_results::KnownResults, ::subxt::ext::subxt_core::utils::Yes, (), - (), > { ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "KnownResults", - ( - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _1.borrow(), - ), + "Proxy", + "Announcements", + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), ), [ - 40u8, 205u8, 192u8, 253u8, 76u8, 224u8, 194u8, 44u8, 178u8, 50u8, 46u8, - 100u8, 82u8, 184u8, 205u8, 89u8, 155u8, 234u8, 54u8, 61u8, 166u8, 65u8, - 47u8, 191u8, 129u8, 188u8, 96u8, 143u8, 242u8, 24u8, 18u8, 129u8, - ], - ) - } - pub fn validator_job_id_lookup_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::validator_job_id_lookup::ValidatorJobIdLookup, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "ValidatorJobIdLookup", - (), - [ - 44u8, 89u8, 105u8, 245u8, 225u8, 98u8, 155u8, 40u8, 86u8, 148u8, 5u8, - 130u8, 241u8, 142u8, 173u8, 130u8, 189u8, 28u8, 240u8, 46u8, 242u8, - 95u8, 212u8, 77u8, 182u8, 182u8, 240u8, 135u8, 230u8, 194u8, 41u8, - 65u8, + 36u8, 91u8, 194u8, 19u8, 186u8, 110u8, 217u8, 123u8, 101u8, 197u8, + 249u8, 185u8, 42u8, 5u8, 244u8, 249u8, 18u8, 156u8, 41u8, 19u8, 86u8, + 12u8, 253u8, 126u8, 232u8, 9u8, 226u8, 210u8, 25u8, 3u8, 115u8, 40u8, ], ) } - pub fn validator_job_id_lookup( + } + } + pub mod constants { + use super::runtime_types; + pub struct ConstantsApi; + impl ConstantsApi { + #[doc = " The base amount of currency needed to reserve for creating a proxy."] + #[doc = ""] + #[doc = " This is held for an additional storage item whose value size is"] + #[doc = " `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes."] + pub fn proxy_deposit_base( &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::validator_job_id_lookup::Param0, - >, - types::validator_job_id_lookup::ValidatorJobIdLookup, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u128, > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "ValidatorJobIdLookup", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Proxy", + "ProxyDepositBase", [ - 44u8, 89u8, 105u8, 245u8, 225u8, 98u8, 155u8, 40u8, 86u8, 148u8, 5u8, - 130u8, 241u8, 142u8, 173u8, 130u8, 189u8, 28u8, 240u8, 46u8, 242u8, - 95u8, 212u8, 77u8, 182u8, 182u8, 240u8, 135u8, 230u8, 194u8, 41u8, - 65u8, + 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, + 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, + 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, ], ) } - pub fn validator_rewards_iter( + #[doc = " The amount of currency needed per proxy added."] + #[doc = ""] + #[doc = " This is held for adding 32 bytes plus an instance of `ProxyType` more into a"] + #[doc = " pre-existing storage value. Thus, when configuring `ProxyDepositFactor` one should take"] + #[doc = " into account `32 + proxy_type.encode().len()` bytes of data."] + pub fn proxy_deposit_factor( &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::validator_rewards::ValidatorRewards, - (), - (), - ::subxt::ext::subxt_core::utils::Yes, + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u128, > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "ValidatorRewards", - (), + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Proxy", + "ProxyDepositFactor", [ - 181u8, 120u8, 201u8, 9u8, 183u8, 177u8, 113u8, 198u8, 209u8, 245u8, - 205u8, 165u8, 183u8, 122u8, 147u8, 151u8, 35u8, 109u8, 45u8, 215u8, - 195u8, 93u8, 226u8, 8u8, 106u8, 98u8, 217u8, 231u8, 26u8, 81u8, 123u8, - 224u8, + 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, + 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, + 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, ], ) } - pub fn validator_rewards( + #[doc = " The maximum amount of proxies allowed for a single account."] + pub fn max_proxies( &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::validator_rewards::Param0, - >, - types::validator_rewards::ValidatorRewards, - ::subxt::ext::subxt_core::utils::Yes, - (), - (), + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "ValidatorRewards", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Proxy", + "MaxProxies", [ - 181u8, 120u8, 201u8, 9u8, 183u8, 177u8, 113u8, 198u8, 209u8, 245u8, - 205u8, 165u8, 183u8, 122u8, 147u8, 151u8, 35u8, 109u8, 45u8, 215u8, - 195u8, 93u8, 226u8, 8u8, 106u8, 98u8, 217u8, 231u8, 26u8, 81u8, 123u8, - 224u8, + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, ], ) } - #[doc = " The job-id storage"] - pub fn next_job_id( + #[doc = " The maximum amount of time-delayed announcements that are allowed to be pending."] + pub fn max_pending( &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::next_job_id::NextJobId, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u32, > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "NextJobId", - (), + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Proxy", + "MaxPending", [ - 168u8, 152u8, 73u8, 23u8, 111u8, 17u8, 85u8, 129u8, 97u8, 59u8, 245u8, - 42u8, 36u8, 190u8, 47u8, 245u8, 249u8, 45u8, 2u8, 29u8, 174u8, 60u8, - 177u8, 145u8, 143u8, 80u8, 147u8, 159u8, 216u8, 232u8, 21u8, 25u8, + 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, + 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, + 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, + 145u8, ], ) } - pub fn time_fee_per_block( + #[doc = " The base amount of currency needed to reserve for creating an announcement."] + #[doc = ""] + #[doc = " This is held when a new storage item holding a `Balance` is created (typically 16"] + #[doc = " bytes)."] + pub fn announcement_deposit_base( &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::time_fee_per_block::TimeFeePerBlock, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), + ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< + ::core::primitive::u128, > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Jobs", - "TimeFeePerBlock", - (), + ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( + "Proxy", + "AnnouncementDepositBase", [ - 69u8, 177u8, 229u8, 105u8, 52u8, 200u8, 169u8, 194u8, 249u8, 38u8, - 165u8, 189u8, 88u8, 51u8, 40u8, 252u8, 11u8, 238u8, 246u8, 119u8, 97u8, - 122u8, 235u8, 214u8, 160u8, 209u8, 240u8, 123u8, 237u8, 110u8, 170u8, - 253u8, + 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, + 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, + 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, ], ) } - } - } - pub mod constants { - use super::runtime_types; - pub struct ConstantsApi; - impl ConstantsApi { - #[doc = " `PalletId` for the jobs pallet."] - pub fn pallet_id( + #[doc = " The amount of currency needed per announcement made."] + #[doc = ""] + #[doc = " This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes)"] + #[doc = " into a pre-existing storage value."] + pub fn announcement_deposit_factor( &self, ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - runtime_types::frame_support::PalletId, + ::core::primitive::u128, > { ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Jobs", - "PalletId", + "Proxy", + "AnnouncementDepositFactor", [ - 56u8, 243u8, 53u8, 83u8, 154u8, 179u8, 170u8, 80u8, 133u8, 173u8, 61u8, - 161u8, 47u8, 225u8, 146u8, 21u8, 50u8, 229u8, 248u8, 27u8, 104u8, 58u8, - 129u8, 197u8, 102u8, 160u8, 168u8, 205u8, 154u8, 42u8, 217u8, 53u8, + 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, + 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, + 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, ], ) } } } } - pub mod dkg { + pub mod multi_asset_delegation { use super::root_mod; use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_dkg::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_dkg::pallet::Call; + #[doc = "Errors emitted by the pallet."] + pub type Error = runtime_types::pallet_multi_asset_delegation::pallet::Error; + #[doc = "The callable functions (extrinsics) of the pallet."] + pub type Call = runtime_types::pallet_multi_asset_delegation::pallet::Call; pub mod calls { use super::root_mod; use super::runtime_types; @@ -38098,147 +38752,87 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_fee`]."] - pub struct SetFee { - pub fee_info: set_fee::FeeInfo, - } - pub mod set_fee { + #[doc = "See [`Pallet::join_operators`]."] + pub struct JoinOperators { + pub bond_amount: join_operators::BondAmount, + } + pub mod join_operators { use super::runtime_types; - pub type FeeInfo = - runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>; + pub type BondAmount = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetFee { - const PALLET: &'static str = "Dkg"; - const CALL: &'static str = "set_fee"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for JoinOperators { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "join_operators"; } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::set_fee`]."] - pub fn set_fee( - &self, - fee_info: types::set_fee::FeeInfo, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Dkg", - "set_fee", - types::SetFee { fee_info }, - [ - 8u8, 176u8, 223u8, 110u8, 249u8, 26u8, 70u8, 181u8, 1u8, 52u8, 217u8, - 119u8, 111u8, 75u8, 199u8, 164u8, 75u8, 147u8, 118u8, 27u8, 92u8, 42u8, - 0u8, 118u8, 101u8, 38u8, 24u8, 242u8, 216u8, 10u8, 100u8, 182u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::schedule_leave_operators`]."] + pub struct ScheduleLeaveOperators; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleLeaveOperators { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "schedule_leave_operators"; } - } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_dkg::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Fee has been updated to the new value"] - pub struct FeeUpdated(pub fee_updated::Field0); - pub mod fee_updated { - use super::runtime_types; - pub type Field0 = - runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FeeUpdated { - const PALLET: &'static str = "Dkg"; - const EVENT: &'static str = "FeeUpdated"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A DKG has been rotated."] - pub struct KeyRotated { - pub from_job_id: key_rotated::FromJobId, - pub to_job_id: key_rotated::ToJobId, - pub signature: key_rotated::Signature, - } - pub mod key_rotated { - use super::runtime_types; - pub type FromJobId = ::core::primitive::u64; - pub type ToJobId = ::core::primitive::u64; - pub type Signature = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for KeyRotated { - const PALLET: &'static str = "Dkg"; - const EVENT: &'static str = "KeyRotated"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod fee_info { - use super::runtime_types; - pub type FeeInfo = - runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::cancel_leave_operators`]."] + pub struct CancelLeaveOperators; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelLeaveOperators { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "cancel_leave_operators"; } - } - pub struct StorageApi; - impl StorageApi { - pub fn fee_info( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::fee_info::FeeInfo, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Dkg", - "FeeInfo", - (), - [ - 16u8, 232u8, 221u8, 27u8, 216u8, 118u8, 157u8, 132u8, 160u8, 235u8, - 161u8, 70u8, 59u8, 47u8, 67u8, 91u8, 28u8, 208u8, 187u8, 20u8, 206u8, - 45u8, 122u8, 83u8, 98u8, 39u8, 174u8, 24u8, 252u8, 212u8, 141u8, 90u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::execute_leave_operators`]."] + pub struct ExecuteLeaveOperators; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteLeaveOperators { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "execute_leave_operators"; } - } - } - } - pub mod zk_saa_s { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_zksaas::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_zksaas::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -38256,117 +38850,47 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::set_fee`]."] - pub struct SetFee { - pub fee_info: set_fee::FeeInfo, + #[doc = "See [`Pallet::operator_bond_more`]."] + pub struct OperatorBondMore { + pub additional_bond: operator_bond_more::AdditionalBond, } - pub mod set_fee { + pub mod operator_bond_more { use super::runtime_types; - pub type FeeInfo = - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>; + pub type AdditionalBond = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetFee { - const PALLET: &'static str = "ZkSaaS"; - const CALL: &'static str = "set_fee"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for OperatorBondMore { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "operator_bond_more"; } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::set_fee`]."] - pub fn set_fee( - &self, - fee_info: types::set_fee::FeeInfo, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "ZkSaaS", - "set_fee", - types::SetFee { fee_info }, - [ - 104u8, 154u8, 14u8, 206u8, 235u8, 157u8, 140u8, 180u8, 26u8, 214u8, - 243u8, 248u8, 217u8, 42u8, 20u8, 108u8, 206u8, 77u8, 49u8, 91u8, 167u8, - 97u8, 93u8, 121u8, 118u8, 177u8, 42u8, 121u8, 2u8, 101u8, 138u8, 129u8, - ], - ) + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::schedule_operator_unstake`]."] + pub struct ScheduleOperatorUnstake { + pub unstake_amount: schedule_operator_unstake::UnstakeAmount, } - } - } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_zksaas::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Fee has been updated to the new value"] - pub struct FeeUpdated(pub fee_updated::Field0); - pub mod fee_updated { - use super::runtime_types; - pub type Field0 = - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for FeeUpdated { - const PALLET: &'static str = "ZkSaaS"; - const EVENT: &'static str = "FeeUpdated"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod fee_info { + pub mod schedule_operator_unstake { use super::runtime_types; - pub type FeeInfo = - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>; + pub type UnstakeAmount = ::core::primitive::u128; } - } - pub struct StorageApi; - impl StorageApi { - pub fn fee_info( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::fee_info::FeeInfo, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "ZkSaaS", - "FeeInfo", - (), - [ - 237u8, 49u8, 62u8, 207u8, 21u8, 52u8, 36u8, 20u8, 102u8, 210u8, 65u8, - 28u8, 216u8, 196u8, 60u8, 128u8, 141u8, 162u8, 60u8, 16u8, 164u8, 80u8, - 142u8, 210u8, 114u8, 30u8, 80u8, 76u8, 82u8, 236u8, 152u8, 81u8, - ], - ) + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleOperatorUnstake { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "schedule_operator_unstake"; } - } - } - } - pub mod proxy { - use super::root_mod; - use super::runtime_types; - #[doc = "The `Error` enum of this pallet."] - pub type Error = runtime_types::pallet_proxy::pallet::Error; - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub type Call = runtime_types::pallet_proxy::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -38384,25 +38908,57 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::proxy`]."] - pub struct Proxy { - pub real: proxy::Real, - pub force_proxy_type: proxy::ForceProxyType, - pub call: ::subxt::ext::subxt_core::alloc::boxed::Box, + #[doc = "See [`Pallet::execute_operator_unstake`]."] + pub struct ExecuteOperatorUnstake; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteOperatorUnstake { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "execute_operator_unstake"; } - pub mod proxy { - use super::runtime_types; - pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ForceProxyType = - ::core::option::Option; - pub type Call = runtime_types::tangle_testnet_runtime::RuntimeCall; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::cancel_operator_unstake`]."] + pub struct CancelOperatorUnstake; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelOperatorUnstake { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "cancel_operator_unstake"; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Proxy { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "proxy"; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::go_offline`]."] + pub struct GoOffline; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for GoOffline { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "go_offline"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38421,24 +38977,42 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::add_proxy`]."] - pub struct AddProxy { - pub delegate: add_proxy::Delegate, - pub proxy_type: add_proxy::ProxyType, - pub delay: add_proxy::Delay, + #[doc = "See [`Pallet::go_online`]."] + pub struct GoOnline; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for GoOnline { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "go_online"; } - pub mod add_proxy { + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::deposit`]."] + pub struct Deposit { + pub asset_id: deposit::AssetId, + pub amount: deposit::Amount, + } + pub mod deposit { use super::runtime_types; - pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; + pub type AssetId = ::core::primitive::u128; + pub type Amount = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for AddProxy { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "add_proxy"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Deposit { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "deposit"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38457,24 +39031,19 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::remove_proxy`]."] - pub struct RemoveProxy { - pub delegate: remove_proxy::Delegate, - pub proxy_type: remove_proxy::ProxyType, - pub delay: remove_proxy::Delay, + #[doc = "See [`Pallet::schedule_withdraw`]."] + pub struct ScheduleWithdraw { + pub asset_id: schedule_withdraw::AssetId, + pub amount: schedule_withdraw::Amount, } - pub mod remove_proxy { + pub mod schedule_withdraw { use super::runtime_types; - pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; + pub type AssetId = ::core::primitive::u128; + pub type Amount = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveProxy { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "remove_proxy"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleWithdraw { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "schedule_withdraw"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38493,11 +39062,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::remove_proxies`]."] - pub struct RemoveProxies; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveProxies { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "remove_proxies"; + #[doc = "See [`Pallet::execute_withdraw`]."] + pub struct ExecuteWithdraw; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteWithdraw { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "execute_withdraw"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38516,21 +39085,19 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::create_pure`]."] - pub struct CreatePure { - pub proxy_type: create_pure::ProxyType, - pub delay: create_pure::Delay, - pub index: create_pure::Index, + #[doc = "See [`Pallet::cancel_withdraw`]."] + pub struct CancelWithdraw { + pub asset_id: cancel_withdraw::AssetId, + pub amount: cancel_withdraw::Amount, } - pub mod create_pure { + pub mod cancel_withdraw { use super::runtime_types; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; - pub type Index = ::core::primitive::u16; + pub type AssetId = ::core::primitive::u128; + pub type Amount = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CreatePure { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "create_pure"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelWithdraw { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "cancel_withdraw"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38549,30 +39116,21 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::kill_pure`]."] - pub struct KillPure { - pub spawner: kill_pure::Spawner, - pub proxy_type: kill_pure::ProxyType, - pub index: kill_pure::Index, - #[codec(compact)] - pub height: kill_pure::Height, - #[codec(compact)] - pub ext_index: kill_pure::ExtIndex, + #[doc = "See [`Pallet::delegate`]."] + pub struct Delegate { + pub operator: delegate::Operator, + pub asset_id: delegate::AssetId, + pub amount: delegate::Amount, } - pub mod kill_pure { + pub mod delegate { use super::runtime_types; - pub type Spawner = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Index = ::core::primitive::u16; - pub type Height = ::core::primitive::u64; - pub type ExtIndex = ::core::primitive::u32; + pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type AssetId = ::core::primitive::u128; + pub type Amount = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for KillPure { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "kill_pure"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Delegate { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "delegate"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38591,22 +39149,21 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::announce`]."] - pub struct Announce { - pub real: announce::Real, - pub call_hash: announce::CallHash, + #[doc = "See [`Pallet::schedule_delegator_unstake`]."] + pub struct ScheduleDelegatorUnstake { + pub operator: schedule_delegator_unstake::Operator, + pub asset_id: schedule_delegator_unstake::AssetId, + pub amount: schedule_delegator_unstake::Amount, } - pub mod announce { + pub mod schedule_delegator_unstake { use super::runtime_types; - pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type CallHash = ::subxt::ext::subxt_core::utils::H256; + pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; + pub type AssetId = ::core::primitive::u128; + pub type Amount = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Announce { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "announce"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleDelegatorUnstake { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "schedule_delegator_unstake"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38625,22 +39182,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::remove_announcement`]."] - pub struct RemoveAnnouncement { - pub real: remove_announcement::Real, - pub call_hash: remove_announcement::CallHash, - } - pub mod remove_announcement { - use super::runtime_types; - pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type CallHash = ::subxt::ext::subxt_core::utils::H256; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RemoveAnnouncement { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "remove_announcement"; + #[doc = "See [`Pallet::execute_delegator_unstake`]."] + pub struct ExecuteDelegatorUnstake; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteDelegatorUnstake { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "execute_delegator_unstake"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38659,22 +39205,19 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::reject_announcement`]."] - pub struct RejectAnnouncement { - pub delegate: reject_announcement::Delegate, - pub call_hash: reject_announcement::CallHash, + #[doc = "See [`Pallet::cancel_delegator_unstake`]."] + pub struct CancelDelegatorUnstake { + pub asset_id: cancel_delegator_unstake::AssetId, + pub amount: cancel_delegator_unstake::Amount, } - pub mod reject_announcement { + pub mod cancel_delegator_unstake { use super::runtime_types; - pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type CallHash = ::subxt::ext::subxt_core::utils::H256; + pub type AssetId = ::core::primitive::u128; + pub type Amount = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for RejectAnnouncement { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "reject_announcement"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelDelegatorUnstake { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "cancel_delegator_unstake"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38693,228 +39236,463 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - #[doc = "See [`Pallet::proxy_announced`]."] - pub struct ProxyAnnounced { - pub delegate: proxy_announced::Delegate, - pub real: proxy_announced::Real, - pub force_proxy_type: proxy_announced::ForceProxyType, - pub call: ::subxt::ext::subxt_core::alloc::boxed::Box, + #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] + pub struct SetIncentiveApyAndCap { + pub pool_id: set_incentive_apy_and_cap::PoolId, + pub apy: set_incentive_apy_and_cap::Apy, + pub cap: set_incentive_apy_and_cap::Cap, } - pub mod proxy_announced { + pub mod set_incentive_apy_and_cap { use super::runtime_types; - pub type Delegate = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type Real = ::subxt::ext::subxt_core::utils::MultiAddress< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u32, - >; - pub type ForceProxyType = - ::core::option::Option; - pub type Call = runtime_types::tangle_testnet_runtime::RuntimeCall; + pub type PoolId = ::core::primitive::u128; + pub type Apy = runtime_types::sp_arithmetic::per_things::Percent; + pub type Cap = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ProxyAnnounced { - const PALLET: &'static str = "Proxy"; - const CALL: &'static str = "proxy_announced"; + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetIncentiveApyAndCap { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "set_incentive_apy_and_cap"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] + pub struct WhitelistBlueprintForRewards { + pub blueprint_id: whitelist_blueprint_for_rewards::BlueprintId, + } + pub mod whitelist_blueprint_for_rewards { + use super::runtime_types; + pub type BlueprintId = ::core::primitive::u32; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for WhitelistBlueprintForRewards { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "whitelist_blueprint_for_rewards"; + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "See [`Pallet::manage_asset_in_pool`]."] + pub struct ManageAssetInPool { + pub pool_id: manage_asset_in_pool::PoolId, + pub asset_id: manage_asset_in_pool::AssetId, + pub action: manage_asset_in_pool::Action, + } + pub mod manage_asset_in_pool { + use super::runtime_types; + pub type PoolId = ::core::primitive::u128; + pub type AssetId = ::core::primitive::u128; + pub type Action = + runtime_types::pallet_multi_asset_delegation::types::rewards::AssetAction; + } + impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ManageAssetInPool { + const PALLET: &'static str = "MultiAssetDelegation"; + const CALL: &'static str = "manage_asset_in_pool"; } } pub struct TransactionApi; impl TransactionApi { - #[doc = "See [`Pallet::proxy`]."] - pub fn proxy( + #[doc = "See [`Pallet::join_operators`]."] + pub fn join_operators( &self, - real: types::proxy::Real, - force_proxy_type: types::proxy::ForceProxyType, - call: types::proxy::Call, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + bond_amount: types::join_operators::BondAmount, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "proxy", - types::Proxy { - real, - force_proxy_type, - call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), - }, + "MultiAssetDelegation", + "join_operators", + types::JoinOperators { bond_amount }, [ - 38u8, 97u8, 48u8, 48u8, 150u8, 65u8, 217u8, 169u8, 192u8, 191u8, 188u8, - 78u8, 150u8, 189u8, 7u8, 157u8, 156u8, 48u8, 150u8, 11u8, 37u8, 132u8, - 234u8, 78u8, 217u8, 1u8, 162u8, 71u8, 78u8, 244u8, 230u8, 206u8, + 200u8, 51u8, 233u8, 253u8, 180u8, 90u8, 81u8, 7u8, 248u8, 218u8, 76u8, + 136u8, 126u8, 106u8, 132u8, 111u8, 26u8, 70u8, 68u8, 40u8, 153u8, + 179u8, 25u8, 198u8, 10u8, 105u8, 214u8, 38u8, 79u8, 102u8, 183u8, + 115u8, ], ) } - #[doc = "See [`Pallet::add_proxy`]."] - pub fn add_proxy( + #[doc = "See [`Pallet::schedule_leave_operators`]."] + pub fn schedule_leave_operators( &self, - delegate: types::add_proxy::Delegate, - proxy_type: types::add_proxy::ProxyType, - delay: types::add_proxy::Delay, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::ScheduleLeaveOperators, + > { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "add_proxy", - types::AddProxy { delegate, proxy_type, delay }, + "MultiAssetDelegation", + "schedule_leave_operators", + types::ScheduleLeaveOperators {}, [ - 204u8, 170u8, 8u8, 148u8, 160u8, 168u8, 107u8, 62u8, 50u8, 75u8, 3u8, - 71u8, 179u8, 30u8, 109u8, 127u8, 108u8, 156u8, 239u8, 38u8, 97u8, 92u8, - 28u8, 253u8, 230u8, 97u8, 205u8, 44u8, 214u8, 237u8, 137u8, 27u8, + 40u8, 228u8, 5u8, 223u8, 70u8, 47u8, 223u8, 89u8, 229u8, 174u8, 84u8, + 232u8, 216u8, 104u8, 83u8, 134u8, 59u8, 234u8, 89u8, 53u8, 238u8, + 253u8, 150u8, 13u8, 19u8, 178u8, 179u8, 191u8, 209u8, 45u8, 53u8, 85u8, ], ) } - #[doc = "See [`Pallet::remove_proxy`]."] - pub fn remove_proxy( + #[doc = "See [`Pallet::cancel_leave_operators`]."] + pub fn cancel_leave_operators( &self, - delegate: types::remove_proxy::Delegate, - proxy_type: types::remove_proxy::ProxyType, - delay: types::remove_proxy::Delay, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload + { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "remove_proxy", - types::RemoveProxy { delegate, proxy_type, delay }, + "MultiAssetDelegation", + "cancel_leave_operators", + types::CancelLeaveOperators {}, [ - 191u8, 2u8, 69u8, 93u8, 184u8, 207u8, 70u8, 111u8, 8u8, 255u8, 11u8, - 157u8, 4u8, 29u8, 102u8, 245u8, 223u8, 103u8, 132u8, 196u8, 238u8, - 252u8, 127u8, 91u8, 243u8, 48u8, 176u8, 86u8, 99u8, 63u8, 108u8, 111u8, + 69u8, 106u8, 203u8, 11u8, 3u8, 80u8, 201u8, 178u8, 156u8, 17u8, 142u8, + 173u8, 37u8, 245u8, 0u8, 84u8, 213u8, 189u8, 221u8, 34u8, 28u8, 204u8, + 88u8, 240u8, 72u8, 190u8, 173u8, 115u8, 82u8, 210u8, 212u8, 6u8, ], ) } - #[doc = "See [`Pallet::remove_proxies`]."] - pub fn remove_proxies( + #[doc = "See [`Pallet::execute_leave_operators`]."] + pub fn execute_leave_operators( &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::ExecuteLeaveOperators, + > { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "remove_proxies", - types::RemoveProxies {}, + "MultiAssetDelegation", + "execute_leave_operators", + types::ExecuteLeaveOperators {}, [ - 1u8, 126u8, 36u8, 227u8, 185u8, 34u8, 218u8, 236u8, 125u8, 231u8, 68u8, - 185u8, 145u8, 63u8, 250u8, 225u8, 103u8, 3u8, 189u8, 37u8, 172u8, - 195u8, 197u8, 216u8, 99u8, 210u8, 240u8, 162u8, 158u8, 132u8, 24u8, - 6u8, + 57u8, 188u8, 97u8, 173u8, 224u8, 57u8, 203u8, 116u8, 132u8, 111u8, + 60u8, 129u8, 153u8, 1u8, 222u8, 163u8, 102u8, 230u8, 13u8, 177u8, + 221u8, 246u8, 53u8, 106u8, 229u8, 133u8, 240u8, 136u8, 179u8, 21u8, + 143u8, 180u8, ], ) } - #[doc = "See [`Pallet::create_pure`]."] - pub fn create_pure( + #[doc = "See [`Pallet::operator_bond_more`]."] + pub fn operator_bond_more( &self, - proxy_type: types::create_pure::ProxyType, - delay: types::create_pure::Delay, - index: types::create_pure::Index, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + additional_bond: types::operator_bond_more::AdditionalBond, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "create_pure", - types::CreatePure { proxy_type, delay, index }, + "MultiAssetDelegation", + "operator_bond_more", + types::OperatorBondMore { additional_bond }, [ - 239u8, 72u8, 255u8, 141u8, 190u8, 115u8, 141u8, 227u8, 164u8, 59u8, - 113u8, 0u8, 87u8, 101u8, 142u8, 147u8, 43u8, 13u8, 59u8, 213u8, 162u8, - 48u8, 67u8, 167u8, 223u8, 72u8, 153u8, 148u8, 219u8, 71u8, 53u8, 4u8, + 124u8, 33u8, 17u8, 157u8, 169u8, 58u8, 82u8, 138u8, 216u8, 98u8, 111u8, + 31u8, 223u8, 183u8, 172u8, 219u8, 224u8, 196u8, 180u8, 92u8, 156u8, + 215u8, 145u8, 66u8, 172u8, 96u8, 81u8, 20u8, 210u8, 182u8, 144u8, + 172u8, ], ) } - #[doc = "See [`Pallet::kill_pure`]."] - pub fn kill_pure( + #[doc = "See [`Pallet::schedule_operator_unstake`]."] + pub fn schedule_operator_unstake( &self, - spawner: types::kill_pure::Spawner, - proxy_type: types::kill_pure::ProxyType, - index: types::kill_pure::Index, - height: types::kill_pure::Height, - ext_index: types::kill_pure::ExtIndex, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + unstake_amount: types::schedule_operator_unstake::UnstakeAmount, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::ScheduleOperatorUnstake, + > { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "kill_pure", - types::KillPure { spawner, proxy_type, index, height, ext_index }, + "MultiAssetDelegation", + "schedule_operator_unstake", + types::ScheduleOperatorUnstake { unstake_amount }, [ - 125u8, 59u8, 127u8, 47u8, 63u8, 48u8, 101u8, 56u8, 61u8, 192u8, 198u8, - 217u8, 119u8, 91u8, 186u8, 35u8, 119u8, 222u8, 16u8, 246u8, 42u8, - 248u8, 19u8, 89u8, 246u8, 20u8, 66u8, 14u8, 133u8, 32u8, 118u8, 118u8, + 34u8, 99u8, 195u8, 190u8, 177u8, 99u8, 126u8, 217u8, 214u8, 187u8, + 152u8, 53u8, 223u8, 100u8, 68u8, 17u8, 188u8, 148u8, 25u8, 21u8, 75u8, + 48u8, 52u8, 208u8, 221u8, 62u8, 146u8, 65u8, 60u8, 209u8, 206u8, 44u8, ], ) } - #[doc = "See [`Pallet::announce`]."] - pub fn announce( + #[doc = "See [`Pallet::execute_operator_unstake`]."] + pub fn execute_operator_unstake( &self, - real: types::announce::Real, - call_hash: types::announce::CallHash, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::ExecuteOperatorUnstake, + > { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "announce", - types::Announce { real, call_hash }, + "MultiAssetDelegation", + "execute_operator_unstake", + types::ExecuteOperatorUnstake {}, [ - 32u8, 88u8, 145u8, 33u8, 55u8, 44u8, 136u8, 153u8, 26u8, 111u8, 73u8, - 15u8, 247u8, 188u8, 14u8, 236u8, 221u8, 222u8, 60u8, 97u8, 71u8, 229u8, - 18u8, 120u8, 182u8, 43u8, 67u8, 248u8, 169u8, 80u8, 170u8, 207u8, + 22u8, 7u8, 144u8, 170u8, 57u8, 205u8, 226u8, 10u8, 36u8, 245u8, 197u8, + 184u8, 137u8, 7u8, 252u8, 56u8, 186u8, 50u8, 30u8, 179u8, 244u8, 203u8, + 242u8, 90u8, 93u8, 130u8, 82u8, 225u8, 192u8, 92u8, 211u8, 14u8, ], ) } - #[doc = "See [`Pallet::remove_announcement`]."] - pub fn remove_announcement( + #[doc = "See [`Pallet::cancel_operator_unstake`]."] + pub fn cancel_operator_unstake( &self, - real: types::remove_announcement::Real, - call_hash: types::remove_announcement::CallHash, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::CancelOperatorUnstake, + > { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "remove_announcement", - types::RemoveAnnouncement { real, call_hash }, + "MultiAssetDelegation", + "cancel_operator_unstake", + types::CancelOperatorUnstake {}, [ - 195u8, 224u8, 61u8, 33u8, 27u8, 100u8, 168u8, 18u8, 105u8, 23u8, 220u8, - 168u8, 207u8, 231u8, 136u8, 46u8, 181u8, 85u8, 15u8, 151u8, 126u8, - 227u8, 97u8, 162u8, 232u8, 39u8, 45u8, 255u8, 44u8, 167u8, 237u8, 38u8, + 9u8, 153u8, 57u8, 25u8, 35u8, 233u8, 83u8, 162u8, 125u8, 240u8, 57u8, + 179u8, 110u8, 131u8, 115u8, 69u8, 96u8, 139u8, 228u8, 20u8, 33u8, 30u8, + 207u8, 176u8, 175u8, 233u8, 141u8, 152u8, 197u8, 134u8, 78u8, 40u8, ], ) } - #[doc = "See [`Pallet::reject_announcement`]."] - pub fn reject_announcement( + #[doc = "See [`Pallet::go_offline`]."] + pub fn go_offline( &self, - delegate: types::reject_announcement::Delegate, - call_hash: types::reject_announcement::CallHash, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "reject_announcement", - types::RejectAnnouncement { delegate, call_hash }, + "MultiAssetDelegation", + "go_offline", + types::GoOffline {}, [ - 29u8, 140u8, 243u8, 165u8, 143u8, 166u8, 205u8, 203u8, 111u8, 196u8, - 11u8, 2u8, 4u8, 230u8, 11u8, 136u8, 249u8, 139u8, 224u8, 242u8, 96u8, - 146u8, 118u8, 210u8, 104u8, 77u8, 168u8, 28u8, 67u8, 244u8, 91u8, 65u8, + 229u8, 123u8, 37u8, 67u8, 121u8, 41u8, 249u8, 87u8, 1u8, 78u8, 249u8, + 173u8, 135u8, 228u8, 239u8, 244u8, 177u8, 153u8, 242u8, 112u8, 157u8, + 150u8, 12u8, 213u8, 38u8, 250u8, 85u8, 150u8, 252u8, 60u8, 204u8, + 134u8, ], ) } - #[doc = "See [`Pallet::proxy_announced`]."] - pub fn proxy_announced( + #[doc = "See [`Pallet::go_online`]."] + pub fn go_online( &self, - delegate: types::proxy_announced::Delegate, - real: types::proxy_announced::Real, - force_proxy_type: types::proxy_announced::ForceProxyType, - call: types::proxy_announced::Call, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "Proxy", - "proxy_announced", - types::ProxyAnnounced { - delegate, - real, - force_proxy_type, - call: ::subxt::ext::subxt_core::alloc::boxed::Box::new(call), - }, + "MultiAssetDelegation", + "go_online", + types::GoOnline {}, + [ + 58u8, 44u8, 183u8, 212u8, 2u8, 121u8, 216u8, 100u8, 238u8, 222u8, + 118u8, 20u8, 145u8, 231u8, 226u8, 156u8, 130u8, 2u8, 113u8, 3u8, 49u8, + 119u8, 211u8, 112u8, 151u8, 192u8, 181u8, 139u8, 108u8, 209u8, 80u8, + 47u8, + ], + ) + } + #[doc = "See [`Pallet::deposit`]."] + pub fn deposit( + &self, + asset_id: types::deposit::AssetId, + amount: types::deposit::Amount, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "deposit", + types::Deposit { asset_id, amount }, + [ + 25u8, 39u8, 77u8, 183u8, 182u8, 45u8, 116u8, 55u8, 125u8, 104u8, 78u8, + 42u8, 142u8, 86u8, 182u8, 200u8, 101u8, 149u8, 90u8, 22u8, 156u8, + 217u8, 246u8, 111u8, 114u8, 255u8, 241u8, 215u8, 111u8, 223u8, 141u8, + 76u8, + ], + ) + } + #[doc = "See [`Pallet::schedule_withdraw`]."] + pub fn schedule_withdraw( + &self, + asset_id: types::schedule_withdraw::AssetId, + amount: types::schedule_withdraw::Amount, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "schedule_withdraw", + types::ScheduleWithdraw { asset_id, amount }, + [ + 40u8, 210u8, 230u8, 206u8, 225u8, 11u8, 174u8, 19u8, 194u8, 166u8, + 107u8, 100u8, 26u8, 173u8, 183u8, 29u8, 19u8, 216u8, 240u8, 58u8, 39u8, + 135u8, 143u8, 252u8, 235u8, 221u8, 152u8, 255u8, 108u8, 134u8, 78u8, + 103u8, + ], + ) + } + #[doc = "See [`Pallet::execute_withdraw`]."] + pub fn execute_withdraw( + &self, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "execute_withdraw", + types::ExecuteWithdraw {}, + [ + 113u8, 223u8, 166u8, 138u8, 53u8, 85u8, 30u8, 76u8, 4u8, 251u8, 52u8, + 29u8, 41u8, 224u8, 40u8, 64u8, 67u8, 230u8, 19u8, 43u8, 114u8, 166u8, + 56u8, 18u8, 19u8, 208u8, 3u8, 93u8, 131u8, 140u8, 223u8, 28u8, + ], + ) + } + #[doc = "See [`Pallet::cancel_withdraw`]."] + pub fn cancel_withdraw( + &self, + asset_id: types::cancel_withdraw::AssetId, + amount: types::cancel_withdraw::Amount, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "cancel_withdraw", + types::CancelWithdraw { asset_id, amount }, + [ + 153u8, 92u8, 147u8, 28u8, 101u8, 84u8, 56u8, 240u8, 202u8, 89u8, 138u8, + 195u8, 166u8, 73u8, 49u8, 48u8, 119u8, 135u8, 221u8, 36u8, 92u8, 223u8, + 46u8, 152u8, 252u8, 193u8, 43u8, 214u8, 175u8, 33u8, 128u8, 110u8, + ], + ) + } + #[doc = "See [`Pallet::delegate`]."] + pub fn delegate( + &self, + operator: types::delegate::Operator, + asset_id: types::delegate::AssetId, + amount: types::delegate::Amount, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "delegate", + types::Delegate { operator, asset_id, amount }, + [ + 227u8, 11u8, 47u8, 236u8, 76u8, 251u8, 39u8, 73u8, 131u8, 239u8, 207u8, + 202u8, 101u8, 233u8, 134u8, 54u8, 216u8, 29u8, 130u8, 54u8, 144u8, + 192u8, 233u8, 73u8, 53u8, 91u8, 5u8, 170u8, 250u8, 197u8, 113u8, 38u8, + ], + ) + } + #[doc = "See [`Pallet::schedule_delegator_unstake`]."] + pub fn schedule_delegator_unstake( + &self, + operator: types::schedule_delegator_unstake::Operator, + asset_id: types::schedule_delegator_unstake::AssetId, + amount: types::schedule_delegator_unstake::Amount, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::ScheduleDelegatorUnstake, + > { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "schedule_delegator_unstake", + types::ScheduleDelegatorUnstake { operator, asset_id, amount }, + [ + 59u8, 253u8, 25u8, 246u8, 47u8, 194u8, 135u8, 112u8, 106u8, 76u8, 33u8, + 166u8, 129u8, 10u8, 202u8, 94u8, 0u8, 22u8, 17u8, 52u8, 93u8, 95u8, + 136u8, 18u8, 216u8, 102u8, 20u8, 20u8, 183u8, 199u8, 55u8, 116u8, + ], + ) + } + #[doc = "See [`Pallet::execute_delegator_unstake`]."] + pub fn execute_delegator_unstake( + &self, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::ExecuteDelegatorUnstake, + > { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "execute_delegator_unstake", + types::ExecuteDelegatorUnstake {}, + [ + 122u8, 83u8, 15u8, 157u8, 106u8, 98u8, 132u8, 80u8, 95u8, 3u8, 89u8, + 166u8, 247u8, 83u8, 9u8, 238u8, 2u8, 100u8, 2u8, 49u8, 99u8, 203u8, + 99u8, 139u8, 21u8, 210u8, 78u8, 212u8, 47u8, 214u8, 38u8, 29u8, + ], + ) + } + #[doc = "See [`Pallet::cancel_delegator_unstake`]."] + pub fn cancel_delegator_unstake( + &self, + asset_id: types::cancel_delegator_unstake::AssetId, + amount: types::cancel_delegator_unstake::Amount, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::CancelDelegatorUnstake, + > { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "cancel_delegator_unstake", + types::CancelDelegatorUnstake { asset_id, amount }, + [ + 210u8, 14u8, 186u8, 64u8, 217u8, 34u8, 226u8, 34u8, 62u8, 186u8, 72u8, + 112u8, 218u8, 19u8, 216u8, 249u8, 62u8, 68u8, 34u8, 12u8, 123u8, 63u8, + 150u8, 154u8, 34u8, 179u8, 31u8, 254u8, 117u8, 44u8, 98u8, 62u8, + ], + ) + } + #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] + pub fn set_incentive_apy_and_cap( + &self, + pool_id: types::set_incentive_apy_and_cap::PoolId, + apy: types::set_incentive_apy_and_cap::Apy, + cap: types::set_incentive_apy_and_cap::Cap, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::SetIncentiveApyAndCap, + > { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "set_incentive_apy_and_cap", + types::SetIncentiveApyAndCap { pool_id, apy, cap }, + [ + 14u8, 124u8, 76u8, 147u8, 132u8, 187u8, 69u8, 246u8, 153u8, 108u8, + 236u8, 19u8, 141u8, 104u8, 228u8, 176u8, 13u8, 231u8, 149u8, 132u8, + 226u8, 11u8, 170u8, 90u8, 3u8, 159u8, 241u8, 193u8, 97u8, 196u8, 212u8, + 241u8, + ], + ) + } + #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] + pub fn whitelist_blueprint_for_rewards( + &self, + blueprint_id: types::whitelist_blueprint_for_rewards::BlueprintId, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< + types::WhitelistBlueprintForRewards, + > { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "whitelist_blueprint_for_rewards", + types::WhitelistBlueprintForRewards { blueprint_id }, + [ + 200u8, 143u8, 250u8, 243u8, 185u8, 186u8, 117u8, 67u8, 9u8, 186u8, + 103u8, 240u8, 211u8, 39u8, 0u8, 197u8, 101u8, 62u8, 27u8, 237u8, 182u8, + 179u8, 251u8, 81u8, 142u8, 195u8, 213u8, 24u8, 123u8, 134u8, 80u8, + 187u8, + ], + ) + } + #[doc = "See [`Pallet::manage_asset_in_pool`]."] + pub fn manage_asset_in_pool( + &self, + pool_id: types::manage_asset_in_pool::PoolId, + asset_id: types::manage_asset_in_pool::AssetId, + action: types::manage_asset_in_pool::Action, + ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload + { + ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( + "MultiAssetDelegation", + "manage_asset_in_pool", + types::ManageAssetInPool { pool_id, asset_id, action }, [ - 78u8, 59u8, 179u8, 142u8, 23u8, 136u8, 246u8, 3u8, 254u8, 32u8, 210u8, - 90u8, 172u8, 204u8, 246u8, 247u8, 83u8, 181u8, 203u8, 225u8, 232u8, - 42u8, 199u8, 133u8, 164u8, 105u8, 61u8, 100u8, 131u8, 50u8, 221u8, - 14u8, + 144u8, 244u8, 190u8, 106u8, 70u8, 105u8, 245u8, 42u8, 187u8, 243u8, + 43u8, 73u8, 15u8, 92u8, 193u8, 21u8, 58u8, 142u8, 169u8, 139u8, 164u8, + 7u8, 151u8, 182u8, 188u8, 214u8, 193u8, 162u8, 151u8, 16u8, 166u8, + 43u8, ], ) } } } - #[doc = "The `Event` enum of this pallet"] - pub type Event = runtime_types::pallet_proxy::pallet::Event; + #[doc = "Events emitted by the pallet."] + pub type Event = runtime_types::pallet_multi_asset_delegation::pallet::Event; pub mod events { use super::runtime_types; #[derive( @@ -38930,18 +39708,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A proxy was executed correctly, with the given."] - pub struct ProxyExecuted { - pub result: proxy_executed::Result, + #[doc = "An operator has joined."] + pub struct OperatorJoined { + pub who: operator_joined::Who, } - pub mod proxy_executed { + pub mod operator_joined { use super::runtime_types; - pub type Result = - ::core::result::Result<(), runtime_types::sp_runtime::DispatchError>; + pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyExecuted { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "ProxyExecuted"; + impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorJoined { + const PALLET: &'static str = "MultiAssetDelegation"; + const EVENT: &'static str = "OperatorJoined"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38956,24 +39733,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A pure account has been created by new proxy with given"] - #[doc = "disambiguation index and proxy type."] - pub struct PureCreated { - pub pure: pure_created::Pure, - pub who: pure_created::Who, - pub proxy_type: pure_created::ProxyType, - pub disambiguation_index: pure_created::DisambiguationIndex, + #[doc = "An operator has scheduled to leave."] + pub struct OperatorLeavingScheduled { + pub who: operator_leaving_scheduled::Who, } - pub mod pure_created { + pub mod operator_leaving_scheduled { use super::runtime_types; - pub type Pure = ::subxt::ext::subxt_core::utils::AccountId32; pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type DisambiguationIndex = ::core::primitive::u16; } - impl ::subxt::ext::subxt_core::events::StaticEvent for PureCreated { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "PureCreated"; + impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeavingScheduled { + const PALLET: &'static str = "MultiAssetDelegation"; + const EVENT: &'static str = "OperatorLeavingScheduled"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -38988,21 +39758,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An announcement was placed to make a call in the future."] - pub struct Announced { - pub real: announced::Real, - pub proxy: announced::Proxy, - pub call_hash: announced::CallHash, + #[doc = "An operator has cancelled their leave request."] + pub struct OperatorLeaveCancelled { + pub who: operator_leave_cancelled::Who, } - pub mod announced { + pub mod operator_leave_cancelled { use super::runtime_types; - pub type Real = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Proxy = ::subxt::ext::subxt_core::utils::AccountId32; - pub type CallHash = ::subxt::ext::subxt_core::utils::H256; + pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; } - impl ::subxt::ext::subxt_core::events::StaticEvent for Announced { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "Announced"; + impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeaveCancelled { + const PALLET: &'static str = "MultiAssetDelegation"; + const EVENT: &'static str = "OperatorLeaveCancelled"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39017,23 +39783,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A proxy was added."] - pub struct ProxyAdded { - pub delegator: proxy_added::Delegator, - pub delegatee: proxy_added::Delegatee, - pub proxy_type: proxy_added::ProxyType, - pub delay: proxy_added::Delay, + #[doc = "An operator has executed their leave request."] + pub struct OperatorLeaveExecuted { + pub who: operator_leave_executed::Who, } - pub mod proxy_added { + pub mod operator_leave_executed { use super::runtime_types; - pub type Delegator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Delegatee = ::subxt::ext::subxt_core::utils::AccountId32; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; + pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyAdded { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "ProxyAdded"; + impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeaveExecuted { + const PALLET: &'static str = "MultiAssetDelegation"; + const EVENT: &'static str = "OperatorLeaveExecuted"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -39048,1354 +39808,19 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A proxy was removed."] - pub struct ProxyRemoved { - pub delegator: proxy_removed::Delegator, - pub delegatee: proxy_removed::Delegatee, - pub proxy_type: proxy_removed::ProxyType, - pub delay: proxy_removed::Delay, + #[doc = "An operator has increased their stake."] + pub struct OperatorBondMore { + pub who: operator_bond_more::Who, + pub additional_bond: operator_bond_more::AdditionalBond, } - pub mod proxy_removed { + pub mod operator_bond_more { use super::runtime_types; - pub type Delegator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type Delegatee = ::subxt::ext::subxt_core::utils::AccountId32; - pub type ProxyType = runtime_types::tangle_testnet_runtime::ProxyType; - pub type Delay = ::core::primitive::u64; + pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; + pub type AdditionalBond = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ProxyRemoved { - const PALLET: &'static str = "Proxy"; - const EVENT: &'static str = "ProxyRemoved"; - } - } - pub mod storage { - use super::runtime_types; - pub mod types { - use super::runtime_types; - pub mod proxies { - use super::runtime_types; - pub type Proxies = ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_proxy::ProxyDefinition< - ::subxt::ext::subxt_core::utils::AccountId32, - runtime_types::tangle_testnet_runtime::ProxyType, - ::core::primitive::u64, - >, - >, - ::core::primitive::u128, - ); - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; - } - pub mod announcements { - use super::runtime_types; - pub type Announcements = ( - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_proxy::Announcement< - ::subxt::ext::subxt_core::utils::AccountId32, - ::subxt::ext::subxt_core::utils::H256, - ::core::primitive::u64, - >, - >, - ::core::primitive::u128, - ); - pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; - } - } - pub struct StorageApi; - impl StorageApi { - #[doc = " The set of account proxies. Maps the account which has delegated to the accounts"] - #[doc = " which are being delegated to, together with the amount held on deposit."] - pub fn proxies_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::proxies::Proxies, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Proxy", - "Proxies", - (), - [ - 223u8, 41u8, 16u8, 124u8, 14u8, 158u8, 113u8, 7u8, 229u8, 203u8, 172u8, - 71u8, 221u8, 164u8, 20u8, 177u8, 252u8, 14u8, 117u8, 176u8, 21u8, - 236u8, 79u8, 107u8, 57u8, 148u8, 170u8, 107u8, 179u8, 144u8, 255u8, - 10u8, - ], - ) - } - #[doc = " The set of account proxies. Maps the account which has delegated to the accounts"] - #[doc = " which are being delegated to, together with the amount held on deposit."] - pub fn proxies( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::proxies::Param0, - >, - types::proxies::Proxies, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Proxy", - "Proxies", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 223u8, 41u8, 16u8, 124u8, 14u8, 158u8, 113u8, 7u8, 229u8, 203u8, 172u8, - 71u8, 221u8, 164u8, 20u8, 177u8, 252u8, 14u8, 117u8, 176u8, 21u8, - 236u8, 79u8, 107u8, 57u8, 148u8, 170u8, 107u8, 179u8, 144u8, 255u8, - 10u8, - ], - ) - } - #[doc = " The announcements made by the proxy (key)."] - pub fn announcements_iter( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::announcements::Announcements, - (), - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Proxy", - "Announcements", - (), - [ - 36u8, 91u8, 194u8, 19u8, 186u8, 110u8, 217u8, 123u8, 101u8, 197u8, - 249u8, 185u8, 42u8, 5u8, 244u8, 249u8, 18u8, 156u8, 41u8, 19u8, 86u8, - 12u8, 253u8, 126u8, 232u8, 9u8, 226u8, 210u8, 25u8, 3u8, 115u8, 40u8, - ], - ) - } - #[doc = " The announcements made by the proxy (key)."] - pub fn announcements( - &self, - _0: impl ::core::borrow::Borrow, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - ::subxt::ext::subxt_core::storage::address::StaticStorageKey< - types::announcements::Param0, - >, - types::announcements::Announcements, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "Proxy", - "Announcements", - ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( - _0.borrow(), - ), - [ - 36u8, 91u8, 194u8, 19u8, 186u8, 110u8, 217u8, 123u8, 101u8, 197u8, - 249u8, 185u8, 42u8, 5u8, 244u8, 249u8, 18u8, 156u8, 41u8, 19u8, 86u8, - 12u8, 253u8, 126u8, 232u8, 9u8, 226u8, 210u8, 25u8, 3u8, 115u8, 40u8, - ], - ) - } - } - } - pub mod constants { - use super::runtime_types; - pub struct ConstantsApi; - impl ConstantsApi { - #[doc = " The base amount of currency needed to reserve for creating a proxy."] - #[doc = ""] - #[doc = " This is held for an additional storage item whose value size is"] - #[doc = " `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes."] - pub fn proxy_deposit_base( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "ProxyDepositBase", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - #[doc = " The amount of currency needed per proxy added."] - #[doc = ""] - #[doc = " This is held for adding 32 bytes plus an instance of `ProxyType` more into a"] - #[doc = " pre-existing storage value. Thus, when configuring `ProxyDepositFactor` one should take"] - #[doc = " into account `32 + proxy_type.encode().len()` bytes of data."] - pub fn proxy_deposit_factor( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "ProxyDepositFactor", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - #[doc = " The maximum amount of proxies allowed for a single account."] - pub fn max_proxies( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "MaxProxies", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - #[doc = " The maximum amount of time-delayed announcements that are allowed to be pending."] - pub fn max_pending( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u32, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "MaxPending", - [ - 98u8, 252u8, 116u8, 72u8, 26u8, 180u8, 225u8, 83u8, 200u8, 157u8, - 125u8, 151u8, 53u8, 76u8, 168u8, 26u8, 10u8, 9u8, 98u8, 68u8, 9u8, - 178u8, 197u8, 113u8, 31u8, 79u8, 200u8, 90u8, 203u8, 100u8, 41u8, - 145u8, - ], - ) - } - #[doc = " The base amount of currency needed to reserve for creating an announcement."] - #[doc = ""] - #[doc = " This is held when a new storage item holding a `Balance` is created (typically 16"] - #[doc = " bytes)."] - pub fn announcement_deposit_base( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "AnnouncementDepositBase", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - #[doc = " The amount of currency needed per announcement made."] - #[doc = ""] - #[doc = " This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes)"] - #[doc = " into a pre-existing storage value."] - pub fn announcement_deposit_factor( - &self, - ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< - ::core::primitive::u128, - > { - ::subxt::ext::subxt_core::constants::address::StaticAddress::new_static( - "Proxy", - "AnnouncementDepositFactor", - [ - 84u8, 157u8, 140u8, 4u8, 93u8, 57u8, 29u8, 133u8, 105u8, 200u8, 214u8, - 27u8, 144u8, 208u8, 218u8, 160u8, 130u8, 109u8, 101u8, 54u8, 210u8, - 136u8, 71u8, 63u8, 49u8, 237u8, 234u8, 15u8, 178u8, 98u8, 148u8, 156u8, - ], - ) - } - } - } - } - pub mod multi_asset_delegation { - use super::root_mod; - use super::runtime_types; - #[doc = "Errors emitted by the pallet."] - pub type Error = runtime_types::pallet_multi_asset_delegation::pallet::Error; - #[doc = "The callable functions (extrinsics) of the pallet."] - pub type Call = runtime_types::pallet_multi_asset_delegation::pallet::Call; - pub mod calls { - use super::root_mod; - use super::runtime_types; - type DispatchError = runtime_types::sp_runtime::DispatchError; - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::join_operators`]."] - pub struct JoinOperators { - pub bond_amount: join_operators::BondAmount, - } - pub mod join_operators { - use super::runtime_types; - pub type BondAmount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for JoinOperators { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "join_operators"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::schedule_leave_operators`]."] - pub struct ScheduleLeaveOperators; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleLeaveOperators { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "schedule_leave_operators"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::cancel_leave_operators`]."] - pub struct CancelLeaveOperators; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelLeaveOperators { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "cancel_leave_operators"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::execute_leave_operators`]."] - pub struct ExecuteLeaveOperators; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteLeaveOperators { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "execute_leave_operators"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::operator_bond_more`]."] - pub struct OperatorBondMore { - pub additional_bond: operator_bond_more::AdditionalBond, - } - pub mod operator_bond_more { - use super::runtime_types; - pub type AdditionalBond = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for OperatorBondMore { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "operator_bond_more"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::schedule_operator_bond_less`]."] - pub struct ScheduleOperatorBondLess { - pub bond_less_amount: schedule_operator_bond_less::BondLessAmount, - } - pub mod schedule_operator_bond_less { - use super::runtime_types; - pub type BondLessAmount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleOperatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "schedule_operator_bond_less"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::execute_operator_bond_less`]."] - pub struct ExecuteOperatorBondLess; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteOperatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "execute_operator_bond_less"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::cancel_operator_bond_less`]."] - pub struct CancelOperatorBondLess; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelOperatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "cancel_operator_bond_less"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::go_offline`]."] - pub struct GoOffline; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for GoOffline { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "go_offline"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::go_online`]."] - pub struct GoOnline; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for GoOnline { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "go_online"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::deposit`]."] - pub struct Deposit { - pub asset_id: deposit::AssetId, - pub amount: deposit::Amount, - } - pub mod deposit { - use super::runtime_types; - pub type AssetId = ::core::option::Option<::core::primitive::u128>; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Deposit { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "deposit"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::schedule_unstake`]."] - pub struct ScheduleUnstake { - pub asset_id: schedule_unstake::AssetId, - pub amount: schedule_unstake::Amount, - } - pub mod schedule_unstake { - use super::runtime_types; - pub type AssetId = ::core::option::Option<::core::primitive::u128>; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "schedule_unstake"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::execute_unstake`]."] - pub struct ExecuteUnstake; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "execute_unstake"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::cancel_unstake`]."] - pub struct CancelUnstake; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelUnstake { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "cancel_unstake"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::delegate`]."] - pub struct Delegate { - pub operator: delegate::Operator, - pub asset_id: delegate::AssetId, - pub amount: delegate::Amount, - } - pub mod delegate { - use super::runtime_types; - pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type AssetId = ::core::primitive::u128; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for Delegate { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "delegate"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::schedule_delegator_bond_less`]."] - pub struct ScheduleDelegatorBondLess { - pub operator: schedule_delegator_bond_less::Operator, - pub asset_id: schedule_delegator_bond_less::AssetId, - pub amount: schedule_delegator_bond_less::Amount, - } - pub mod schedule_delegator_bond_less { - use super::runtime_types; - pub type Operator = ::subxt::ext::subxt_core::utils::AccountId32; - pub type AssetId = ::core::primitive::u128; - pub type Amount = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ScheduleDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "schedule_delegator_bond_less"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::execute_delegator_bond_less`]."] - pub struct ExecuteDelegatorBondLess; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for ExecuteDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "execute_delegator_bond_less"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::cancel_delegator_bond_less`]."] - pub struct CancelDelegatorBondLess; - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for CancelDelegatorBondLess { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "cancel_delegator_bond_less"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::set_whitelisted_assets`]."] - pub struct SetWhitelistedAssets { - pub assets: set_whitelisted_assets::Assets, - } - pub mod set_whitelisted_assets { - use super::runtime_types; - pub type Assets = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetWhitelistedAssets { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "set_whitelisted_assets"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] - pub struct SetIncentiveApyAndCap { - pub asset_id: set_incentive_apy_and_cap::AssetId, - pub apy: set_incentive_apy_and_cap::Apy, - pub cap: set_incentive_apy_and_cap::Cap, - } - pub mod set_incentive_apy_and_cap { - use super::runtime_types; - pub type AssetId = ::core::primitive::u128; - pub type Apy = ::core::primitive::u128; - pub type Cap = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for SetIncentiveApyAndCap { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "set_incentive_apy_and_cap"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] - pub struct WhitelistBlueprintForRewards { - pub blueprint_id: whitelist_blueprint_for_rewards::BlueprintId, - } - pub mod whitelist_blueprint_for_rewards { - use super::runtime_types; - pub type BlueprintId = ::core::primitive::u32; - } - impl ::subxt::ext::subxt_core::blocks::StaticExtrinsic for WhitelistBlueprintForRewards { - const PALLET: &'static str = "MultiAssetDelegation"; - const CALL: &'static str = "whitelist_blueprint_for_rewards"; - } - } - pub struct TransactionApi; - impl TransactionApi { - #[doc = "See [`Pallet::join_operators`]."] - pub fn join_operators( - &self, - bond_amount: types::join_operators::BondAmount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "join_operators", - types::JoinOperators { bond_amount }, - [ - 200u8, 51u8, 233u8, 253u8, 180u8, 90u8, 81u8, 7u8, 248u8, 218u8, 76u8, - 136u8, 126u8, 106u8, 132u8, 111u8, 26u8, 70u8, 68u8, 40u8, 153u8, - 179u8, 25u8, 198u8, 10u8, 105u8, 214u8, 38u8, 79u8, 102u8, 183u8, - 115u8, - ], - ) - } - #[doc = "See [`Pallet::schedule_leave_operators`]."] - pub fn schedule_leave_operators( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ScheduleLeaveOperators, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "schedule_leave_operators", - types::ScheduleLeaveOperators {}, - [ - 40u8, 228u8, 5u8, 223u8, 70u8, 47u8, 223u8, 89u8, 229u8, 174u8, 84u8, - 232u8, 216u8, 104u8, 83u8, 134u8, 59u8, 234u8, 89u8, 53u8, 238u8, - 253u8, 150u8, 13u8, 19u8, 178u8, 179u8, 191u8, 209u8, 45u8, 53u8, 85u8, - ], - ) - } - #[doc = "See [`Pallet::cancel_leave_operators`]."] - pub fn cancel_leave_operators( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "cancel_leave_operators", - types::CancelLeaveOperators {}, - [ - 69u8, 106u8, 203u8, 11u8, 3u8, 80u8, 201u8, 178u8, 156u8, 17u8, 142u8, - 173u8, 37u8, 245u8, 0u8, 84u8, 213u8, 189u8, 221u8, 34u8, 28u8, 204u8, - 88u8, 240u8, 72u8, 190u8, 173u8, 115u8, 82u8, 210u8, 212u8, 6u8, - ], - ) - } - #[doc = "See [`Pallet::execute_leave_operators`]."] - pub fn execute_leave_operators( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ExecuteLeaveOperators, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "execute_leave_operators", - types::ExecuteLeaveOperators {}, - [ - 57u8, 188u8, 97u8, 173u8, 224u8, 57u8, 203u8, 116u8, 132u8, 111u8, - 60u8, 129u8, 153u8, 1u8, 222u8, 163u8, 102u8, 230u8, 13u8, 177u8, - 221u8, 246u8, 53u8, 106u8, 229u8, 133u8, 240u8, 136u8, 179u8, 21u8, - 143u8, 180u8, - ], - ) - } - #[doc = "See [`Pallet::operator_bond_more`]."] - pub fn operator_bond_more( - &self, - additional_bond: types::operator_bond_more::AdditionalBond, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "operator_bond_more", - types::OperatorBondMore { additional_bond }, - [ - 124u8, 33u8, 17u8, 157u8, 169u8, 58u8, 82u8, 138u8, 216u8, 98u8, 111u8, - 31u8, 223u8, 183u8, 172u8, 219u8, 224u8, 196u8, 180u8, 92u8, 156u8, - 215u8, 145u8, 66u8, 172u8, 96u8, 81u8, 20u8, 210u8, 182u8, 144u8, - 172u8, - ], - ) - } - #[doc = "See [`Pallet::schedule_operator_bond_less`]."] - pub fn schedule_operator_bond_less( - &self, - bond_less_amount: types::schedule_operator_bond_less::BondLessAmount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ScheduleOperatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "schedule_operator_bond_less", - types::ScheduleOperatorBondLess { bond_less_amount }, - [ - 221u8, 206u8, 7u8, 82u8, 56u8, 222u8, 84u8, 233u8, 255u8, 170u8, 90u8, - 78u8, 48u8, 196u8, 247u8, 45u8, 86u8, 87u8, 72u8, 103u8, 94u8, 137u8, - 63u8, 146u8, 45u8, 151u8, 224u8, 227u8, 208u8, 234u8, 134u8, 233u8, - ], - ) - } - #[doc = "See [`Pallet::execute_operator_bond_less`]."] - pub fn execute_operator_bond_less( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ExecuteOperatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "execute_operator_bond_less", - types::ExecuteOperatorBondLess {}, - [ - 217u8, 107u8, 87u8, 164u8, 114u8, 104u8, 78u8, 24u8, 205u8, 164u8, - 171u8, 191u8, 238u8, 76u8, 94u8, 193u8, 55u8, 254u8, 167u8, 42u8, - 107u8, 222u8, 67u8, 38u8, 241u8, 73u8, 88u8, 12u8, 133u8, 135u8, 104u8, - 145u8, - ], - ) - } - #[doc = "See [`Pallet::cancel_operator_bond_less`]."] - pub fn cancel_operator_bond_less( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::CancelOperatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "cancel_operator_bond_less", - types::CancelOperatorBondLess {}, - [ - 197u8, 50u8, 218u8, 234u8, 28u8, 186u8, 243u8, 22u8, 240u8, 137u8, - 36u8, 185u8, 125u8, 201u8, 147u8, 81u8, 16u8, 170u8, 246u8, 126u8, - 235u8, 52u8, 122u8, 61u8, 120u8, 167u8, 180u8, 147u8, 252u8, 19u8, - 143u8, 200u8, - ], - ) - } - #[doc = "See [`Pallet::go_offline`]."] - pub fn go_offline( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "go_offline", - types::GoOffline {}, - [ - 229u8, 123u8, 37u8, 67u8, 121u8, 41u8, 249u8, 87u8, 1u8, 78u8, 249u8, - 173u8, 135u8, 228u8, 239u8, 244u8, 177u8, 153u8, 242u8, 112u8, 157u8, - 150u8, 12u8, 213u8, 38u8, 250u8, 85u8, 150u8, 252u8, 60u8, 204u8, - 134u8, - ], - ) - } - #[doc = "See [`Pallet::go_online`]."] - pub fn go_online( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "go_online", - types::GoOnline {}, - [ - 58u8, 44u8, 183u8, 212u8, 2u8, 121u8, 216u8, 100u8, 238u8, 222u8, - 118u8, 20u8, 145u8, 231u8, 226u8, 156u8, 130u8, 2u8, 113u8, 3u8, 49u8, - 119u8, 211u8, 112u8, 151u8, 192u8, 181u8, 139u8, 108u8, 209u8, 80u8, - 47u8, - ], - ) - } - #[doc = "See [`Pallet::deposit`]."] - pub fn deposit( - &self, - asset_id: types::deposit::AssetId, - amount: types::deposit::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "deposit", - types::Deposit { asset_id, amount }, - [ - 109u8, 175u8, 182u8, 203u8, 142u8, 22u8, 205u8, 225u8, 68u8, 221u8, - 253u8, 86u8, 33u8, 127u8, 183u8, 165u8, 181u8, 26u8, 29u8, 66u8, 179u8, - 99u8, 127u8, 5u8, 104u8, 162u8, 190u8, 51u8, 96u8, 193u8, 140u8, 207u8, - ], - ) - } - #[doc = "See [`Pallet::schedule_unstake`]."] - pub fn schedule_unstake( - &self, - asset_id: types::schedule_unstake::AssetId, - amount: types::schedule_unstake::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "schedule_unstake", - types::ScheduleUnstake { asset_id, amount }, - [ - 43u8, 31u8, 22u8, 55u8, 105u8, 92u8, 90u8, 86u8, 44u8, 175u8, 156u8, - 115u8, 177u8, 108u8, 104u8, 87u8, 139u8, 57u8, 174u8, 72u8, 88u8, - 112u8, 143u8, 130u8, 41u8, 238u8, 8u8, 227u8, 169u8, 131u8, 180u8, - 182u8, - ], - ) - } - #[doc = "See [`Pallet::execute_unstake`]."] - pub fn execute_unstake( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "execute_unstake", - types::ExecuteUnstake {}, - [ - 209u8, 178u8, 220u8, 148u8, 64u8, 107u8, 116u8, 42u8, 55u8, 179u8, - 233u8, 56u8, 246u8, 139u8, 83u8, 241u8, 217u8, 132u8, 50u8, 70u8, - 245u8, 220u8, 182u8, 120u8, 227u8, 161u8, 13u8, 132u8, 198u8, 176u8, - 18u8, 174u8, - ], - ) - } - #[doc = "See [`Pallet::cancel_unstake`]."] - pub fn cancel_unstake( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "cancel_unstake", - types::CancelUnstake {}, - [ - 125u8, 191u8, 138u8, 157u8, 197u8, 239u8, 240u8, 105u8, 239u8, 139u8, - 203u8, 113u8, 227u8, 122u8, 224u8, 106u8, 120u8, 160u8, 33u8, 203u8, - 113u8, 113u8, 53u8, 220u8, 212u8, 41u8, 75u8, 164u8, 0u8, 178u8, 122u8, - 163u8, - ], - ) - } - #[doc = "See [`Pallet::delegate`]."] - pub fn delegate( - &self, - operator: types::delegate::Operator, - asset_id: types::delegate::AssetId, - amount: types::delegate::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "delegate", - types::Delegate { operator, asset_id, amount }, - [ - 227u8, 11u8, 47u8, 236u8, 76u8, 251u8, 39u8, 73u8, 131u8, 239u8, 207u8, - 202u8, 101u8, 233u8, 134u8, 54u8, 216u8, 29u8, 130u8, 54u8, 144u8, - 192u8, 233u8, 73u8, 53u8, 91u8, 5u8, 170u8, 250u8, 197u8, 113u8, 38u8, - ], - ) - } - #[doc = "See [`Pallet::schedule_delegator_bond_less`]."] - pub fn schedule_delegator_bond_less( - &self, - operator: types::schedule_delegator_bond_less::Operator, - asset_id: types::schedule_delegator_bond_less::AssetId, - amount: types::schedule_delegator_bond_less::Amount, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ScheduleDelegatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "schedule_delegator_bond_less", - types::ScheduleDelegatorBondLess { operator, asset_id, amount }, - [ - 200u8, 201u8, 197u8, 147u8, 249u8, 179u8, 18u8, 136u8, 249u8, 188u8, - 198u8, 210u8, 3u8, 255u8, 87u8, 70u8, 114u8, 77u8, 153u8, 107u8, 125u8, - 239u8, 130u8, 51u8, 9u8, 10u8, 114u8, 79u8, 232u8, 206u8, 217u8, 203u8, - ], - ) - } - #[doc = "See [`Pallet::execute_delegator_bond_less`]."] - pub fn execute_delegator_bond_less( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::ExecuteDelegatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "execute_delegator_bond_less", - types::ExecuteDelegatorBondLess {}, - [ - 144u8, 251u8, 240u8, 33u8, 69u8, 238u8, 25u8, 43u8, 16u8, 246u8, 148u8, - 135u8, 115u8, 149u8, 6u8, 191u8, 133u8, 173u8, 162u8, 129u8, 73u8, - 141u8, 3u8, 193u8, 138u8, 137u8, 215u8, 2u8, 157u8, 96u8, 0u8, 249u8, - ], - ) - } - #[doc = "See [`Pallet::cancel_delegator_bond_less`]."] - pub fn cancel_delegator_bond_less( - &self, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::CancelDelegatorBondLess, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "cancel_delegator_bond_less", - types::CancelDelegatorBondLess {}, - [ - 63u8, 243u8, 247u8, 78u8, 123u8, 163u8, 78u8, 97u8, 70u8, 77u8, 175u8, - 111u8, 59u8, 192u8, 117u8, 121u8, 61u8, 22u8, 43u8, 32u8, 80u8, 74u8, - 62u8, 236u8, 188u8, 255u8, 209u8, 163u8, 140u8, 218u8, 50u8, 21u8, - ], - ) - } - #[doc = "See [`Pallet::set_whitelisted_assets`]."] - pub fn set_whitelisted_assets( - &self, - assets: types::set_whitelisted_assets::Assets, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload - { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "set_whitelisted_assets", - types::SetWhitelistedAssets { assets }, - [ - 206u8, 117u8, 163u8, 226u8, 67u8, 11u8, 170u8, 142u8, 186u8, 71u8, - 242u8, 35u8, 162u8, 22u8, 211u8, 16u8, 180u8, 170u8, 45u8, 11u8, 87u8, - 200u8, 237u8, 225u8, 48u8, 86u8, 100u8, 23u8, 161u8, 212u8, 16u8, - 200u8, - ], - ) - } - #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] - pub fn set_incentive_apy_and_cap( - &self, - asset_id: types::set_incentive_apy_and_cap::AssetId, - apy: types::set_incentive_apy_and_cap::Apy, - cap: types::set_incentive_apy_and_cap::Cap, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::SetIncentiveApyAndCap, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "set_incentive_apy_and_cap", - types::SetIncentiveApyAndCap { asset_id, apy, cap }, - [ - 230u8, 216u8, 229u8, 146u8, 250u8, 201u8, 231u8, 242u8, 247u8, 104u8, - 164u8, 85u8, 87u8, 245u8, 24u8, 10u8, 24u8, 175u8, 41u8, 177u8, 155u8, - 81u8, 253u8, 222u8, 218u8, 241u8, 115u8, 52u8, 230u8, 246u8, 199u8, - 214u8, - ], - ) - } - #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] - pub fn whitelist_blueprint_for_rewards( - &self, - blueprint_id: types::whitelist_blueprint_for_rewards::BlueprintId, - ) -> ::subxt::ext::subxt_core::tx::payload::StaticPayload< - types::WhitelistBlueprintForRewards, - > { - ::subxt::ext::subxt_core::tx::payload::StaticPayload::new_static( - "MultiAssetDelegation", - "whitelist_blueprint_for_rewards", - types::WhitelistBlueprintForRewards { blueprint_id }, - [ - 200u8, 143u8, 250u8, 243u8, 185u8, 186u8, 117u8, 67u8, 9u8, 186u8, - 103u8, 240u8, 211u8, 39u8, 0u8, 197u8, 101u8, 62u8, 27u8, 237u8, 182u8, - 179u8, 251u8, 81u8, 142u8, 195u8, 213u8, 24u8, 123u8, 134u8, 80u8, - 187u8, - ], - ) - } - } - } - #[doc = "Events emitted by the pallet."] - pub type Event = runtime_types::pallet_multi_asset_delegation::pallet::Event; - pub mod events { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has joined."] - pub struct OperatorJoined { - pub who: operator_joined::Who, - } - pub mod operator_joined { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorJoined { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorJoined"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has scheduled to leave."] - pub struct OperatorLeavingScheduled { - pub who: operator_leaving_scheduled::Who, - } - pub mod operator_leaving_scheduled { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeavingScheduled { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorLeavingScheduled"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has cancelled their leave request."] - pub struct OperatorLeaveCancelled { - pub who: operator_leave_cancelled::Who, - } - pub mod operator_leave_cancelled { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeaveCancelled { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorLeaveCancelled"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has executed their leave request."] - pub struct OperatorLeaveExecuted { - pub who: operator_leave_executed::Who, - } - pub mod operator_leave_executed { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorLeaveExecuted { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorLeaveExecuted"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has increased their bond."] - pub struct OperatorBondMore { - pub who: operator_bond_more::Who, - pub additional_bond: operator_bond_more::AdditionalBond, - } - pub mod operator_bond_more { - use super::runtime_types; - pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type AdditionalBond = ::core::primitive::u128; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorBondMore { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "OperatorBondMore"; + impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorBondMore { + const PALLET: &'static str = "MultiAssetDelegation"; + const EVENT: &'static str = "OperatorBondMore"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40410,15 +39835,15 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has scheduled to decrease their bond."] + #[doc = "An operator has scheduled to decrease their stake."] pub struct OperatorBondLessScheduled { pub who: operator_bond_less_scheduled::Who, - pub bond_less_amount: operator_bond_less_scheduled::BondLessAmount, + pub unstake_amount: operator_bond_less_scheduled::UnstakeAmount, } pub mod operator_bond_less_scheduled { use super::runtime_types; pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; - pub type BondLessAmount = ::core::primitive::u128; + pub type UnstakeAmount = ::core::primitive::u128; } impl ::subxt::ext::subxt_core::events::StaticEvent for OperatorBondLessScheduled { const PALLET: &'static str = "MultiAssetDelegation"; @@ -40437,7 +39862,7 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has executed their bond decrease."] + #[doc = "An operator has executed their stake decrease."] pub struct OperatorBondLessExecuted { pub who: operator_bond_less_executed::Who, } @@ -40462,7 +39887,7 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An operator has cancelled their bond decrease request."] + #[doc = "An operator has cancelled their stake decrease request."] pub struct OperatorBondLessCancelled { pub who: operator_bond_less_cancelled::Who, } @@ -40547,7 +39972,7 @@ pub mod api { use super::runtime_types; pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; pub type Amount = ::core::primitive::u128; - pub type AssetId = ::core::option::Option<::core::primitive::u128>; + pub type AssetId = ::core::primitive::u128; } impl ::subxt::ext::subxt_core::events::StaticEvent for Deposited { const PALLET: &'static str = "MultiAssetDelegation"; @@ -40566,21 +39991,21 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An unstake has been scheduled."] - pub struct ScheduledUnstake { - pub who: scheduled_unstake::Who, - pub amount: scheduled_unstake::Amount, - pub asset_id: scheduled_unstake::AssetId, + #[doc = "An withdraw has been scheduled."] + pub struct Scheduledwithdraw { + pub who: scheduledwithdraw::Who, + pub amount: scheduledwithdraw::Amount, + pub asset_id: scheduledwithdraw::AssetId, } - pub mod scheduled_unstake { + pub mod scheduledwithdraw { use super::runtime_types; pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; pub type Amount = ::core::primitive::u128; - pub type AssetId = ::core::option::Option<::core::primitive::u128>; + pub type AssetId = ::core::primitive::u128; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ScheduledUnstake { + impl ::subxt::ext::subxt_core::events::StaticEvent for Scheduledwithdraw { const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "ScheduledUnstake"; + const EVENT: &'static str = "Scheduledwithdraw"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40595,17 +40020,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An unstake has been executed."] - pub struct ExecutedUnstake { - pub who: executed_unstake::Who, + #[doc = "An withdraw has been executed."] + pub struct Executedwithdraw { + pub who: executedwithdraw::Who, } - pub mod executed_unstake { + pub mod executedwithdraw { use super::runtime_types; pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; } - impl ::subxt::ext::subxt_core::events::StaticEvent for ExecutedUnstake { + impl ::subxt::ext::subxt_core::events::StaticEvent for Executedwithdraw { const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "ExecutedUnstake"; + const EVENT: &'static str = "Executedwithdraw"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40620,17 +40045,17 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "An unstake has been cancelled."] - pub struct CancelledUnstake { - pub who: cancelled_unstake::Who, + #[doc = "An withdraw has been cancelled."] + pub struct Cancelledwithdraw { + pub who: cancelledwithdraw::Who, } - pub mod cancelled_unstake { + pub mod cancelledwithdraw { use super::runtime_types; pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; } - impl ::subxt::ext::subxt_core::events::StaticEvent for CancelledUnstake { + impl ::subxt::ext::subxt_core::events::StaticEvent for Cancelledwithdraw { const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "CancelledUnstake"; + const EVENT: &'static str = "Cancelledwithdraw"; } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -40676,7 +40101,7 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A delegator bond less request has been scheduled."] + #[doc = "A delegator unstake request has been scheduled."] pub struct ScheduledDelegatorBondLess { pub who: scheduled_delegator_bond_less::Who, pub operator: scheduled_delegator_bond_less::Operator, @@ -40707,7 +40132,7 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A delegator bond less request has been executed."] + #[doc = "A delegator unstake request has been executed."] pub struct ExecutedDelegatorBondLess { pub who: executed_delegator_bond_less::Who, } @@ -40732,7 +40157,7 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "A delegator bond less request has been cancelled."] + #[doc = "A delegator unstake request has been cancelled."] pub struct CancelledDelegatorBondLess { pub who: cancelled_delegator_bond_less::Who, } @@ -40757,42 +40182,16 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "New whitelisted assets set"] - pub struct WhitelistedAssetsSet { - pub assets: whitelisted_assets_set::Assets, - } - pub mod whitelisted_assets_set { - use super::runtime_types; - pub type Assets = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>; - } - impl ::subxt::ext::subxt_core::events::StaticEvent for WhitelistedAssetsSet { - const PALLET: &'static str = "MultiAssetDelegation"; - const EVENT: &'static str = "WhitelistedAssetsSet"; - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - #[doc = "Event emitted when an incentive APY and cap are set for an asset"] + #[doc = "Event emitted when an incentive APY and cap are set for a reward pool"] pub struct IncentiveAPYAndCapSet { - pub asset_id: incentive_apy_and_cap_set::AssetId, + pub pool_id: incentive_apy_and_cap_set::PoolId, pub apy: incentive_apy_and_cap_set::Apy, pub cap: incentive_apy_and_cap_set::Cap, } pub mod incentive_apy_and_cap_set { use super::runtime_types; - pub type AssetId = ::core::primitive::u128; - pub type Apy = ::core::primitive::u128; + pub type PoolId = ::core::primitive::u128; + pub type Apy = runtime_types::sp_arithmetic::per_things::Percent; pub type Cap = ::core::primitive::u128; } impl ::subxt::ext::subxt_core::events::StaticEvent for IncentiveAPYAndCapSet { @@ -40824,6 +40223,38 @@ pub mod api { const PALLET: &'static str = "MultiAssetDelegation"; const EVENT: &'static str = "BlueprintWhitelisted"; } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + #[doc = "Asset has been updated to reward pool"] + pub struct AssetUpdatedInPool { + pub who: asset_updated_in_pool::Who, + pub pool_id: asset_updated_in_pool::PoolId, + pub asset_id: asset_updated_in_pool::AssetId, + pub action: asset_updated_in_pool::Action, + } + pub mod asset_updated_in_pool { + use super::runtime_types; + pub type Who = ::subxt::ext::subxt_core::utils::AccountId32; + pub type PoolId = ::core::primitive::u128; + pub type AssetId = ::core::primitive::u128; + pub type Action = + runtime_types::pallet_multi_asset_delegation::types::rewards::AssetAction; + } + impl ::subxt::ext::subxt_core::events::StaticEvent for AssetUpdatedInPool { + const PALLET: &'static str = "MultiAssetDelegation"; + const EVENT: &'static str = "AssetUpdatedInPool"; + } } pub mod storage { use super::runtime_types; @@ -40838,11 +40269,6 @@ pub mod api { use super::runtime_types; pub type CurrentRound = ::core::primitive::u32; } - pub mod whitelisted_assets { - use super::runtime_types; - pub type WhitelistedAssets = - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>; - } pub mod at_stake { use super::runtime_types; pub type AtStake = runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorSnapshot < :: subxt :: ext :: subxt_core :: utils :: AccountId32 , :: core :: primitive :: u128 , :: core :: primitive :: u128 > ; @@ -40854,6 +40280,17 @@ pub mod api { pub type Delegators = runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: DelegatorMetadata < :: subxt :: ext :: subxt_core :: utils :: AccountId32 , :: core :: primitive :: u128 , :: core :: primitive :: u128 > ; pub type Param0 = ::subxt::ext::subxt_core::utils::AccountId32; } + pub mod reward_pools { + use super::runtime_types; + pub type RewardPools = + ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>; + pub type Param0 = ::core::primitive::u128; + } + pub mod asset_lookup_reward_pools { + use super::runtime_types; + pub type AssetLookupRewardPools = ::core::primitive::u128; + pub type Param0 = ::core::primitive::u128; + } pub mod reward_config_storage { use super::runtime_types; pub type RewardConfigStorage = @@ -40880,9 +40317,10 @@ pub mod api { "Operators", (), [ - 118u8, 148u8, 197u8, 187u8, 30u8, 176u8, 70u8, 75u8, 173u8, 23u8, 30u8, - 57u8, 99u8, 30u8, 217u8, 104u8, 226u8, 202u8, 93u8, 149u8, 27u8, 22u8, - 35u8, 88u8, 119u8, 251u8, 32u8, 185u8, 158u8, 222u8, 79u8, 242u8, + 142u8, 248u8, 178u8, 68u8, 67u8, 114u8, 211u8, 90u8, 106u8, 188u8, + 23u8, 230u8, 72u8, 190u8, 46u8, 12u8, 223u8, 19u8, 242u8, 35u8, 177u8, + 191u8, 117u8, 194u8, 48u8, 233u8, 80u8, 102u8, 34u8, 147u8, 125u8, + 68u8, ], ) } @@ -40906,9 +40344,10 @@ pub mod api { _0.borrow(), ), [ - 118u8, 148u8, 197u8, 187u8, 30u8, 176u8, 70u8, 75u8, 173u8, 23u8, 30u8, - 57u8, 99u8, 30u8, 217u8, 104u8, 226u8, 202u8, 93u8, 149u8, 27u8, 22u8, - 35u8, 88u8, 119u8, 251u8, 32u8, 185u8, 158u8, 222u8, 79u8, 242u8, + 142u8, 248u8, 178u8, 68u8, 67u8, 114u8, 211u8, 90u8, 106u8, 188u8, + 23u8, 230u8, 72u8, 190u8, 46u8, 12u8, 223u8, 19u8, 242u8, 35u8, 177u8, + 191u8, 117u8, 194u8, 48u8, 233u8, 80u8, 102u8, 34u8, 147u8, 125u8, + 68u8, ], ) } @@ -40934,27 +40373,6 @@ pub mod api { ], ) } - #[doc = " Whitelisted assets that are allowed to be deposited"] - pub fn whitelisted_assets( - &self, - ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< - (), - types::whitelisted_assets::WhitelistedAssets, - ::subxt::ext::subxt_core::utils::Yes, - ::subxt::ext::subxt_core::utils::Yes, - (), - > { - ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( - "MultiAssetDelegation", - "WhitelistedAssets", - (), - [ - 81u8, 117u8, 12u8, 62u8, 120u8, 16u8, 11u8, 75u8, 89u8, 78u8, 165u8, - 191u8, 63u8, 170u8, 239u8, 164u8, 159u8, 88u8, 67u8, 138u8, 232u8, - 26u8, 69u8, 66u8, 115u8, 216u8, 22u8, 49u8, 70u8, 237u8, 231u8, 11u8, - ], - ) - } #[doc = " Snapshot of collator delegation stake at the start of the round."] pub fn at_stake_iter( &self, @@ -40970,9 +40388,9 @@ pub mod api { "AtStake", (), [ - 57u8, 195u8, 11u8, 189u8, 76u8, 62u8, 182u8, 27u8, 1u8, 2u8, 114u8, - 133u8, 209u8, 146u8, 6u8, 148u8, 71u8, 209u8, 142u8, 41u8, 106u8, - 221u8, 14u8, 228u8, 126u8, 254u8, 82u8, 139u8, 35u8, 168u8, 4u8, 81u8, + 103u8, 69u8, 78u8, 81u8, 1u8, 242u8, 233u8, 40u8, 135u8, 38u8, 63u8, + 65u8, 146u8, 83u8, 53u8, 208u8, 85u8, 157u8, 223u8, 47u8, 202u8, 190u8, + 203u8, 231u8, 129u8, 125u8, 152u8, 27u8, 181u8, 53u8, 195u8, 153u8, ], ) } @@ -40996,9 +40414,9 @@ pub mod api { _0.borrow(), ), [ - 57u8, 195u8, 11u8, 189u8, 76u8, 62u8, 182u8, 27u8, 1u8, 2u8, 114u8, - 133u8, 209u8, 146u8, 6u8, 148u8, 71u8, 209u8, 142u8, 41u8, 106u8, - 221u8, 14u8, 228u8, 126u8, 254u8, 82u8, 139u8, 35u8, 168u8, 4u8, 81u8, + 103u8, 69u8, 78u8, 81u8, 1u8, 242u8, 233u8, 40u8, 135u8, 38u8, 63u8, + 65u8, 146u8, 83u8, 53u8, 208u8, 85u8, 157u8, 223u8, 47u8, 202u8, 190u8, + 203u8, 231u8, 129u8, 125u8, 152u8, 27u8, 181u8, 53u8, 195u8, 153u8, ], ) } @@ -41033,9 +40451,9 @@ pub mod api { ), ), [ - 57u8, 195u8, 11u8, 189u8, 76u8, 62u8, 182u8, 27u8, 1u8, 2u8, 114u8, - 133u8, 209u8, 146u8, 6u8, 148u8, 71u8, 209u8, 142u8, 41u8, 106u8, - 221u8, 14u8, 228u8, 126u8, 254u8, 82u8, 139u8, 35u8, 168u8, 4u8, 81u8, + 103u8, 69u8, 78u8, 81u8, 1u8, 242u8, 233u8, 40u8, 135u8, 38u8, 63u8, + 65u8, 146u8, 83u8, 53u8, 208u8, 85u8, 157u8, 223u8, 47u8, 202u8, 190u8, + 203u8, 231u8, 129u8, 125u8, 152u8, 27u8, 181u8, 53u8, 195u8, 153u8, ], ) } @@ -41054,9 +40472,10 @@ pub mod api { "Delegators", (), [ - 157u8, 244u8, 22u8, 217u8, 147u8, 134u8, 79u8, 165u8, 145u8, 56u8, - 173u8, 180u8, 72u8, 207u8, 47u8, 239u8, 143u8, 57u8, 227u8, 44u8, 92u8, - 58u8, 208u8, 81u8, 178u8, 37u8, 41u8, 213u8, 98u8, 220u8, 54u8, 135u8, + 188u8, 252u8, 192u8, 65u8, 173u8, 39u8, 31u8, 73u8, 153u8, 225u8, + 224u8, 38u8, 87u8, 15u8, 139u8, 12u8, 211u8, 11u8, 132u8, 3u8, 176u8, + 156u8, 116u8, 243u8, 181u8, 134u8, 30u8, 157u8, 92u8, 1u8, 110u8, + 235u8, ], ) } @@ -41080,9 +40499,104 @@ pub mod api { _0.borrow(), ), [ - 157u8, 244u8, 22u8, 217u8, 147u8, 134u8, 79u8, 165u8, 145u8, 56u8, - 173u8, 180u8, 72u8, 207u8, 47u8, 239u8, 143u8, 57u8, 227u8, 44u8, 92u8, - 58u8, 208u8, 81u8, 178u8, 37u8, 41u8, 213u8, 98u8, 220u8, 54u8, 135u8, + 188u8, 252u8, 192u8, 65u8, 173u8, 39u8, 31u8, 73u8, 153u8, 225u8, + 224u8, 38u8, 87u8, 15u8, 139u8, 12u8, 211u8, 11u8, 132u8, 3u8, 176u8, + 156u8, 116u8, 243u8, 181u8, 134u8, 30u8, 157u8, 92u8, 1u8, 110u8, + 235u8, + ], + ) + } + #[doc = " Storage for the reward pools"] + pub fn reward_pools_iter( + &self, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + (), + types::reward_pools::RewardPools, + (), + (), + ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "MultiAssetDelegation", + "RewardPools", + (), + [ + 144u8, 56u8, 52u8, 17u8, 82u8, 26u8, 196u8, 227u8, 117u8, 83u8, 117u8, + 67u8, 76u8, 9u8, 130u8, 255u8, 238u8, 252u8, 64u8, 130u8, 82u8, 30u8, + 169u8, 33u8, 246u8, 206u8, 249u8, 141u8, 220u8, 28u8, 51u8, 40u8, + ], + ) + } + #[doc = " Storage for the reward pools"] + pub fn reward_pools( + &self, + _0: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::reward_pools::Param0, + >, + types::reward_pools::RewardPools, + ::subxt::ext::subxt_core::utils::Yes, + (), + (), + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "MultiAssetDelegation", + "RewardPools", + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), + [ + 144u8, 56u8, 52u8, 17u8, 82u8, 26u8, 196u8, 227u8, 117u8, 83u8, 117u8, + 67u8, 76u8, 9u8, 130u8, 255u8, 238u8, 252u8, 64u8, 130u8, 82u8, 30u8, + 169u8, 33u8, 246u8, 206u8, 249u8, 141u8, 220u8, 28u8, 51u8, 40u8, + ], + ) + } + #[doc = " Storage for the reward pools"] + pub fn asset_lookup_reward_pools_iter( + &self, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + (), + types::asset_lookup_reward_pools::AssetLookupRewardPools, + (), + (), + ::subxt::ext::subxt_core::utils::Yes, + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "MultiAssetDelegation", + "AssetLookupRewardPools", + (), + [ + 9u8, 54u8, 14u8, 131u8, 23u8, 116u8, 24u8, 89u8, 217u8, 68u8, 226u8, + 247u8, 101u8, 208u8, 45u8, 22u8, 94u8, 240u8, 85u8, 31u8, 220u8, 28u8, + 126u8, 67u8, 143u8, 135u8, 123u8, 214u8, 10u8, 208u8, 114u8, 138u8, + ], + ) + } + #[doc = " Storage for the reward pools"] + pub fn asset_lookup_reward_pools( + &self, + _0: impl ::core::borrow::Borrow, + ) -> ::subxt::ext::subxt_core::storage::address::StaticAddress< + ::subxt::ext::subxt_core::storage::address::StaticStorageKey< + types::asset_lookup_reward_pools::Param0, + >, + types::asset_lookup_reward_pools::AssetLookupRewardPools, + ::subxt::ext::subxt_core::utils::Yes, + (), + (), + > { + ::subxt::ext::subxt_core::storage::address::StaticAddress::new_static( + "MultiAssetDelegation", + "AssetLookupRewardPools", + ::subxt::ext::subxt_core::storage::address::StaticStorageKey::new( + _0.borrow(), + ), + [ + 9u8, 54u8, 14u8, 131u8, 23u8, 116u8, 24u8, 89u8, 217u8, 68u8, 226u8, + 247u8, 101u8, 208u8, 45u8, 22u8, 94u8, 240u8, 85u8, 31u8, 220u8, 28u8, + 126u8, 67u8, 143u8, 135u8, 123u8, 214u8, 10u8, 208u8, 114u8, 138u8, ], ) } @@ -41101,10 +40615,9 @@ pub mod api { "RewardConfigStorage", (), [ - 166u8, 35u8, 196u8, 90u8, 23u8, 23u8, 174u8, 197u8, 152u8, 161u8, - 244u8, 68u8, 83u8, 114u8, 18u8, 212u8, 22u8, 71u8, 158u8, 94u8, 9u8, - 224u8, 202u8, 186u8, 73u8, 95u8, 26u8, 184u8, 249u8, 203u8, 203u8, - 200u8, + 84u8, 15u8, 156u8, 11u8, 42u8, 78u8, 242u8, 92u8, 45u8, 18u8, 105u8, + 60u8, 16u8, 109u8, 236u8, 33u8, 98u8, 177u8, 156u8, 43u8, 57u8, 209u8, + 178u8, 168u8, 230u8, 248u8, 155u8, 87u8, 135u8, 180u8, 29u8, 192u8, ], ) } @@ -41114,7 +40627,7 @@ pub mod api { use super::runtime_types; pub struct ConstantsApi; impl ConstantsApi { - #[doc = " The minimum amount of bond required for an operator."] + #[doc = " The minimum amount of stake required for an operator."] pub fn min_operator_bond_amount( &self, ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< @@ -41130,7 +40643,7 @@ pub mod api { ], ) } - #[doc = " The minimum amount of bond required for a delegate."] + #[doc = " The minimum amount of stake required for a delegate."] pub fn min_delegate_amount( &self, ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< @@ -41146,7 +40659,7 @@ pub mod api { ], ) } - #[doc = " The duration for which the bond is locked."] + #[doc = " The duration for which the stake is locked."] pub fn bond_duration( &self, ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< @@ -41180,7 +40693,7 @@ pub mod api { ], ) } - #[doc = " Number of rounds operator requests to decrease self-bond must wait to be executable."] + #[doc = " Number of rounds operator requests to decrease self-stake must wait to be executable."] pub fn operator_bond_less_delay( &self, ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< @@ -41214,7 +40727,7 @@ pub mod api { ], ) } - #[doc = " Number of rounds that delegation bond less requests must wait before being executable."] + #[doc = " Number of rounds that delegation unstake requests must wait before being executable."] pub fn delegation_bond_less_delay( &self, ) -> ::subxt::ext::subxt_core::constants::address::StaticAddress< @@ -43363,6 +42876,27 @@ pub mod api { pub ::subxt::ext::subxt_core::utils::KeyedVec<_0, _1>, ); } + pub mod bounded_btree_set { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct BoundedBTreeSet<_0>(pub ::subxt::ext::subxt_core::alloc::vec::Vec<_0>); + } pub mod bounded_vec { use super::runtime_types; #[derive( @@ -48114,282 +47648,6 @@ pub mod api { } } } - pub mod pallet_dkg { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_fee`]."] - set_fee { - fee_info: - runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Cannot retreive signers from the signature"] - CannotRetreiveSigner, - #[codec(index = 1)] - #[doc = "Not enough signers for threshold"] - NotEnoughSigners, - #[codec(index = 2)] - #[doc = "The signers have signed different data"] - InvalidSignatureData, - #[codec(index = 3)] - #[doc = "No participants found"] - NoParticipantsFound, - #[codec(index = 4)] - #[doc = "No signatures found"] - NoSignaturesFound, - #[codec(index = 5)] - #[doc = "Unexpected job type"] - InvalidJobType, - #[codec(index = 6)] - #[doc = "Duplicate signature found in submission"] - DuplicateSignature, - #[codec(index = 7)] - #[doc = "Invalid signature submitted"] - InvalidSignature, - #[codec(index = 8)] - #[doc = "Invalid signature scheme"] - InvalidSignatureScheme, - #[codec(index = 9)] - #[doc = "Invalid signature deserialization"] - InvalidSignatureDeserialization, - #[codec(index = 10)] - #[doc = "Invalid verifying key submitted"] - InvalidVerifyingKey, - #[codec(index = 11)] - #[doc = "Invalid verifying key deserialization"] - InvalidVerifyingKeyDeserialization, - #[codec(index = 12)] - #[doc = "Signed with a different key"] - SigningKeyMismatch, - #[codec(index = 13)] - #[doc = "Invalid participant public key"] - InvalidParticipantPublicKey, - #[codec(index = 14)] - #[doc = "Invalid BLS public key"] - InvalidBlsPublicKey, - #[codec(index = 15)] - #[doc = "Invalid Misbehavior Role type."] - InvalidRoleType, - #[codec(index = 16)] - #[doc = "Invalid Justification type."] - InvalidJustification, - #[codec(index = 17)] - #[doc = "Could not deserialize the round message."] - MalformedRoundMessage, - #[codec(index = 18)] - #[doc = "Signed Round Message not signed by the offender."] - NotSignedByOffender, - #[codec(index = 19)] - #[doc = "The submitted decommitment is valid."] - #[doc = ""] - #[doc = "This error is returned when the decommitment is valid"] - #[doc = "but the caller claims it is invalid!"] - ValidDecommitment, - #[codec(index = 20)] - #[doc = "The submitted decommitment data size is valid."] - #[doc = ""] - #[doc = "This error is returned when the decommitment data size is valid"] - #[doc = "but the caller claims it is invalid!"] - ValidDataSize, - #[codec(index = 21)] - #[doc = "The submitted messages passed Feldman verification."] - #[doc = ""] - #[doc = "This error is returned when the messages passed Feldman verification"] - #[doc = "but the caller claims it is invalid!"] - ValidFeldmanVerification, - #[codec(index = 22)] - #[doc = "The submitted Schnorr Proof is valid."] - #[doc = ""] - #[doc = "This error is returned when the decommitment and its"] - #[doc = "Schnorr are valid. but the caller"] - #[doc = "claims it is invalid."] - ValidSchnorrProof, - #[codec(index = 23)] - #[doc = "The submitted ring pedersen parameters are valid."] - #[doc = ""] - #[doc = "This error is returned when the ring pedersen parameters are valid"] - #[doc = "but the caller claims it is invalid."] - ValidRingPedersenParameters, - #[codec(index = 24)] - #[doc = "The submitted Mod Proof is valid."] - #[doc = ""] - #[doc = "This error is returned when the Mod Proof is valid"] - #[doc = "but the caller claims it is invalid."] - ValidModProof, - #[codec(index = 25)] - #[doc = "------------------------------------------------------------ ///"] - #[doc = " FROST ERRORS ///"] - #[doc = "------------------------------------------------------------ ///"] - #[doc = "Valid FROST signature share"] - ValidFrostSignatureShare, - #[codec(index = 26)] - #[doc = "Invalid FROST message serialization"] - InvalidFrostMessageSerialization, - #[codec(index = 27)] - #[doc = "Invalid FROST message deserialization"] - InvalidFrostMessageDeserialization, - #[codec(index = 28)] - #[doc = "Invalid identifier deserialization"] - InvalidIdentifierDeserialization, - #[codec(index = 29)] - #[doc = "Valid FROST signature error for a misbehavior report"] - ValidFrostSignature, - #[codec(index = 30)] - #[doc = "Unknown identifier"] - UnknownIdentifier, - #[codec(index = 31)] - #[doc = "Duplicate identifier"] - DuplicateIdentifier, - #[codec(index = 32)] - #[doc = "Incorrect number of identifiers"] - IncorrectNumberOfIdentifiers, - #[codec(index = 33)] - #[doc = "Identifier derivation not supported"] - IdentifierDerivationNotSupported, - #[codec(index = 34)] - #[doc = "Malformed signature"] - MalformedFrostSignature, - #[codec(index = 35)] - #[doc = "Invalid FROST signature"] - InvalidFrostSignature, - #[codec(index = 36)] - #[doc = "Invalid FROST signature share"] - InvalidFrostSignatureShare, - #[codec(index = 37)] - #[doc = "Invalid FROST signature scheme"] - InvalidFrostSignatureScheme, - #[codec(index = 38)] - #[doc = "Malformed FROST verifying key"] - MalformedFrostVerifyingKey, - #[codec(index = 39)] - #[doc = "Malformed FROST signing key"] - MalformedFrostSigningKey, - #[codec(index = 40)] - #[doc = "Missing FROST commitment"] - MissingFrostCommitment, - #[codec(index = 41)] - #[doc = "Invalid FROST commitment"] - IdentityCommitment, - #[codec(index = 42)] - #[doc = "FROST Field scalar error"] - FrostFieldError, - #[codec(index = 43)] - #[doc = "FROST Group element error"] - FrostGroupError, - #[codec(index = 44)] - #[doc = "Field element error"] - FieldElementError, - #[codec(index = 45)] - #[doc = "Invalid public key error"] - InvalidPublicKey, - #[codec(index = 46)] - #[doc = "Invalid message"] - InvalidMessage, - #[codec(index = 47)] - #[doc = "Malformed Stark signature"] - MalformedStarkSignature, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Fee has been updated to the new value"] - FeeUpdated(runtime_types::pallet_dkg::types::FeeInfo<::core::primitive::u128>), - #[codec(index = 1)] - #[doc = "A DKG has been rotated."] - KeyRotated { - from_job_id: ::core::primitive::u64, - to_job_id: ::core::primitive::u64, - signature: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - }, - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct FeeInfo<_0> { - pub base_fee: _0, - pub dkg_validator_fee: _0, - pub sig_validator_fee: _0, - pub refresh_validator_fee: _0, - pub storage_fee_per_byte: _0, - pub storage_fee_per_block: _0, - } - } - } pub mod pallet_dynamic_fee { use super::runtime_types; pub mod pallet { @@ -50451,255 +49709,6 @@ pub mod api { } } } - pub mod pallet_jobs { - use super::runtime_types; - pub mod module { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::submit_job`]."] - submit_job { - job: runtime_types::tangle_primitives::jobs::JobSubmission< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::submit_job_result`]."] - submit_job_result { - role_type: runtime_types::tangle_primitives::roles::RoleType, - job_id: ::core::primitive::u64, - result: runtime_types::tangle_primitives::jobs::JobResult< - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxKeyLen, - runtime_types::tangle_testnet_runtime::MaxSignatureLen, - runtime_types::tangle_testnet_runtime::MaxDataLen, - runtime_types::tangle_testnet_runtime::MaxProofLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::withdraw_rewards`]."] - withdraw_rewards, - #[codec(index = 3)] - #[doc = "See [`Pallet::report_inactive_validator`]."] - report_inactive_validator { - role_type: runtime_types::tangle_primitives::roles::RoleType, - job_id: ::core::primitive::u64, - validator: ::subxt::ext::subxt_core::utils::AccountId32, - offence: runtime_types::tangle_primitives::jobs::ValidatorOffenceType, - signatures: ::subxt::ext::subxt_core::alloc::vec::Vec< - ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - >, - }, - #[codec(index = 4)] - #[doc = "See [`Pallet::set_permitted_caller`]."] - set_permitted_caller { - role_type: runtime_types::tangle_primitives::roles::RoleType, - job_id: ::core::primitive::u64, - new_permitted_caller: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::set_time_fee`]."] - set_time_fee { new_fee: ::core::primitive::u128 }, - #[codec(index = 6)] - #[doc = "See [`Pallet::submit_misbehavior`]."] - submit_misbehavior { - misbehavior: - runtime_types::tangle_primitives::misbehavior::MisbehaviorSubmission, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::extend_job_result_ttl`]."] - extend_job_result_ttl { - role_type: runtime_types::tangle_primitives::roles::RoleType, - job_id: ::core::primitive::u64, - extend_by: ::core::primitive::u64, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "invalid phase provided"] - InvalidJobPhase, - #[codec(index = 1)] - #[doc = "Given validator not valid for job type"] - InvalidValidator, - #[codec(index = 2)] - #[doc = "invalid params, cannot execute jobs"] - InvalidJobParams, - #[codec(index = 3)] - #[doc = "cannot find phase 1 result"] - PreviousResultNotFound, - #[codec(index = 4)] - #[doc = "The previous result expired"] - ResultExpired, - #[codec(index = 5)] - #[doc = "Invalid job expiry input"] - JobAlreadyExpired, - #[codec(index = 6)] - #[doc = "The requested job was not found"] - JobNotFound, - #[codec(index = 7)] - #[doc = "P1 result not found"] - PhaseOneResultNotFound, - #[codec(index = 8)] - #[doc = "no rewards found for validator"] - NoRewards, - #[codec(index = 9)] - #[doc = "Not enough validators to exit"] - NotEnoughValidators, - #[codec(index = 10)] - #[doc = "empty result"] - EmptyResult, - #[codec(index = 11)] - #[doc = "empty job"] - EmptyJob, - #[codec(index = 12)] - #[doc = "Validator role key not found."] - ValidatorRoleKeyNotFound, - #[codec(index = 13)] - #[doc = "Unexpected result provided"] - ResultNotExpectedType, - #[codec(index = 14)] - #[doc = "No permission to change permitted caller"] - NoPermission, - #[codec(index = 15)] - #[doc = "Exceeds max participant limits"] - TooManyParticipants, - #[codec(index = 16)] - #[doc = "Invalid Key size"] - ExceedsMaxKeySize, - #[codec(index = 17)] - #[doc = "Validator exceeds limit of max active jobs"] - TooManyJobsForValidator, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "A new job has been submitted"] - JobSubmitted { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - details: runtime_types::tangle_primitives::jobs::JobSubmission< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 1)] - #[doc = "A new job result has been submitted"] - JobResultSubmitted { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - }, - #[codec(index = 2)] - #[doc = "validator has earned reward"] - ValidatorRewarded { - id: ::subxt::ext::subxt_core::utils::AccountId32, - reward: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "An existing job was removed and refunded"] - JobRefunded { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - }, - #[codec(index = 4)] - #[doc = "The participants of a job has been updated"] - JobParticipantsUpdated { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - details: runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 5)] - #[doc = "A job has been resubmitted, this is when a phase1 result has been discarded"] - #[doc = "and a new phase1 job is requested"] - JobReSubmitted { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - details: runtime_types::tangle_primitives::jobs::JobInfo< - ::subxt::ext::subxt_core::utils::AccountId32, - ::core::primitive::u64, - ::core::primitive::u128, - runtime_types::tangle_testnet_runtime::MaxParticipants, - runtime_types::tangle_testnet_runtime::MaxSubmissionLen, - runtime_types::tangle_testnet_runtime::MaxAdditionalParamsLen, - >, - }, - #[codec(index = 6)] - #[doc = "A job result expiry time has been extended"] - JobResultExtended { - job_id: ::core::primitive::u64, - role_type: runtime_types::tangle_primitives::roles::RoleType, - new_expiry: ::core::primitive::u64, - }, - } - } - } pub mod pallet_multi_asset_delegation { use super::runtime_types; pub mod pallet { @@ -50723,90 +49732,7 @@ pub mod api { )] #[doc = "The callable functions (extrinsics) of the pallet."] pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::join_operators`]."] - join_operators { bond_amount: ::core::primitive::u128 }, - #[codec(index = 1)] - #[doc = "See [`Pallet::schedule_leave_operators`]."] - schedule_leave_operators, - #[codec(index = 2)] - #[doc = "See [`Pallet::cancel_leave_operators`]."] - cancel_leave_operators, - #[codec(index = 3)] - #[doc = "See [`Pallet::execute_leave_operators`]."] - execute_leave_operators, - #[codec(index = 4)] - #[doc = "See [`Pallet::operator_bond_more`]."] - operator_bond_more { additional_bond: ::core::primitive::u128 }, - #[codec(index = 5)] - #[doc = "See [`Pallet::schedule_operator_bond_less`]."] - schedule_operator_bond_less { bond_less_amount: ::core::primitive::u128 }, - #[codec(index = 6)] - #[doc = "See [`Pallet::execute_operator_bond_less`]."] - execute_operator_bond_less, - #[codec(index = 7)] - #[doc = "See [`Pallet::cancel_operator_bond_less`]."] - cancel_operator_bond_less, - #[codec(index = 8)] - #[doc = "See [`Pallet::go_offline`]."] - go_offline, - #[codec(index = 9)] - #[doc = "See [`Pallet::go_online`]."] - go_online, - #[codec(index = 10)] - #[doc = "See [`Pallet::deposit`]."] - deposit { - asset_id: ::core::option::Option<::core::primitive::u128>, - amount: ::core::primitive::u128, - }, - #[codec(index = 11)] - #[doc = "See [`Pallet::schedule_unstake`]."] - schedule_unstake { - asset_id: ::core::option::Option<::core::primitive::u128>, - amount: ::core::primitive::u128, - }, - #[codec(index = 12)] - #[doc = "See [`Pallet::execute_unstake`]."] - execute_unstake, - #[codec(index = 13)] - #[doc = "See [`Pallet::cancel_unstake`]."] - cancel_unstake, - #[codec(index = 14)] - #[doc = "See [`Pallet::delegate`]."] - delegate { - operator: ::subxt::ext::subxt_core::utils::AccountId32, - asset_id: ::core::primitive::u128, - amount: ::core::primitive::u128, - }, - #[codec(index = 15)] - #[doc = "See [`Pallet::schedule_delegator_bond_less`]."] - schedule_delegator_bond_less { - operator: ::subxt::ext::subxt_core::utils::AccountId32, - asset_id: ::core::primitive::u128, - amount: ::core::primitive::u128, - }, - #[codec(index = 16)] - #[doc = "See [`Pallet::execute_delegator_bond_less`]."] - execute_delegator_bond_less, - #[codec(index = 17)] - #[doc = "See [`Pallet::cancel_delegator_bond_less`]."] - cancel_delegator_bond_less, - #[codec(index = 18)] - #[doc = "See [`Pallet::set_whitelisted_assets`]."] - set_whitelisted_assets { - assets: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>, - }, - #[codec(index = 19)] - #[doc = "See [`Pallet::set_incentive_apy_and_cap`]."] - set_incentive_apy_and_cap { - asset_id: ::core::primitive::u128, - apy: ::core::primitive::u128, - cap: ::core::primitive::u128, - }, - #[codec(index = 20)] - #[doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] - whitelist_blueprint_for_rewards { blueprint_id: ::core::primitive::u32 }, - } + # [codec (index = 0)] # [doc = "See [`Pallet::join_operators`]."] join_operators { bond_amount : :: core :: primitive :: u128 , } , # [codec (index = 1)] # [doc = "See [`Pallet::schedule_leave_operators`]."] schedule_leave_operators , # [codec (index = 2)] # [doc = "See [`Pallet::cancel_leave_operators`]."] cancel_leave_operators , # [codec (index = 3)] # [doc = "See [`Pallet::execute_leave_operators`]."] execute_leave_operators , # [codec (index = 4)] # [doc = "See [`Pallet::operator_bond_more`]."] operator_bond_more { additional_bond : :: core :: primitive :: u128 , } , # [codec (index = 5)] # [doc = "See [`Pallet::schedule_operator_unstake`]."] schedule_operator_unstake { unstake_amount : :: core :: primitive :: u128 , } , # [codec (index = 6)] # [doc = "See [`Pallet::execute_operator_unstake`]."] execute_operator_unstake , # [codec (index = 7)] # [doc = "See [`Pallet::cancel_operator_unstake`]."] cancel_operator_unstake , # [codec (index = 8)] # [doc = "See [`Pallet::go_offline`]."] go_offline , # [codec (index = 9)] # [doc = "See [`Pallet::go_online`]."] go_online , # [codec (index = 10)] # [doc = "See [`Pallet::deposit`]."] deposit { asset_id : :: core :: primitive :: u128 , amount : :: core :: primitive :: u128 , } , # [codec (index = 11)] # [doc = "See [`Pallet::schedule_withdraw`]."] schedule_withdraw { asset_id : :: core :: primitive :: u128 , amount : :: core :: primitive :: u128 , } , # [codec (index = 12)] # [doc = "See [`Pallet::execute_withdraw`]."] execute_withdraw , # [codec (index = 13)] # [doc = "See [`Pallet::cancel_withdraw`]."] cancel_withdraw { asset_id : :: core :: primitive :: u128 , amount : :: core :: primitive :: u128 , } , # [codec (index = 14)] # [doc = "See [`Pallet::delegate`]."] delegate { operator : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , asset_id : :: core :: primitive :: u128 , amount : :: core :: primitive :: u128 , } , # [codec (index = 15)] # [doc = "See [`Pallet::schedule_delegator_unstake`]."] schedule_delegator_unstake { operator : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , asset_id : :: core :: primitive :: u128 , amount : :: core :: primitive :: u128 , } , # [codec (index = 16)] # [doc = "See [`Pallet::execute_delegator_unstake`]."] execute_delegator_unstake , # [codec (index = 17)] # [doc = "See [`Pallet::cancel_delegator_unstake`]."] cancel_delegator_unstake { asset_id : :: core :: primitive :: u128 , amount : :: core :: primitive :: u128 , } , # [codec (index = 19)] # [doc = "See [`Pallet::set_incentive_apy_and_cap`]."] set_incentive_apy_and_cap { pool_id : :: core :: primitive :: u128 , apy : runtime_types :: sp_arithmetic :: per_things :: Percent , cap : :: core :: primitive :: u128 , } , # [codec (index = 20)] # [doc = "See [`Pallet::whitelist_blueprint_for_rewards`]."] whitelist_blueprint_for_rewards { blueprint_id : :: core :: primitive :: u32 , } , # [codec (index = 21)] # [doc = "See [`Pallet::manage_asset_in_pool`]."] manage_asset_in_pool { pool_id : :: core :: primitive :: u128 , asset_id : :: core :: primitive :: u128 , action : runtime_types :: pallet_multi_asset_delegation :: types :: rewards :: AssetAction , } , } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -50830,7 +49756,7 @@ pub mod api { #[doc = "The account is already an operator."] AlreadyOperator, #[codec(index = 1)] - #[doc = "The bond amount is too low."] + #[doc = "The stake amount is too low."] BondTooLow, #[codec(index = 2)] #[doc = "The account is not an operator."] @@ -50848,10 +49774,10 @@ pub mod api { #[doc = "The round does not match the scheduled leave round."] NotLeavingRound, #[codec(index = 7)] - #[doc = "There is no scheduled bond less request."] + #[doc = "There is no scheduled unstake request."] NoScheduledBondLess, #[codec(index = 8)] - #[doc = "The bond less request is not satisfied."] + #[doc = "The unstake request is not satisfied."] BondLessRequestNotSatisfied, #[codec(index = 9)] #[doc = "The operator is not active."] @@ -50875,35 +49801,47 @@ pub mod api { #[doc = "There is no withdraw request."] NoWithdrawRequest, #[codec(index = 16)] - #[doc = "The unstake is not ready."] - UnstakeNotReady, - #[codec(index = 17)] - #[doc = "There is no bond less request."] + #[doc = "There is no unstake request."] NoBondLessRequest, - #[codec(index = 18)] - #[doc = "The bond less request is not ready."] + #[codec(index = 17)] + #[doc = "The unstake request is not ready."] BondLessNotReady, - #[codec(index = 19)] - #[doc = "A bond less request already exists."] + #[codec(index = 18)] + #[doc = "A unstake request already exists."] BondLessRequestAlreadyExists, - #[codec(index = 20)] + #[codec(index = 19)] #[doc = "There are active services using the asset."] ActiveServicesUsingAsset, - #[codec(index = 21)] + #[codec(index = 20)] #[doc = "There is not active delegation"] NoActiveDelegation, - #[codec(index = 22)] + #[codec(index = 21)] #[doc = "The asset is not whitelisted"] AssetNotWhitelisted, - #[codec(index = 23)] + #[codec(index = 22)] #[doc = "The origin is not authorized to perform this action"] NotAuthorized, - #[codec(index = 24)] + #[codec(index = 23)] #[doc = "The asset ID is not found"] AssetNotFound, - #[codec(index = 25)] + #[codec(index = 24)] #[doc = "The blueprint ID is already whitelisted"] BlueprintAlreadyWhitelisted, + #[codec(index = 25)] + #[doc = "No withdraw requests found"] + NowithdrawRequests, + #[codec(index = 26)] + #[doc = "No matching withdraw reqests found"] + NoMatchingwithdrawRequest, + #[codec(index = 27)] + #[doc = "Asset already exists in a reward pool"] + AssetAlreadyInPool, + #[codec(index = 28)] + #[doc = "Asset not found in reward pool"] + AssetNotInPool, + #[codec(index = 29)] + #[doc = "The reward pool does not exist"] + PoolNotFound, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -50924,100 +49862,7 @@ pub mod api { )] #[doc = "Events emitted by the pallet."] pub enum Event { - #[codec(index = 0)] - #[doc = "An operator has joined."] - OperatorJoined { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 1)] - #[doc = "An operator has scheduled to leave."] - OperatorLeavingScheduled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 2)] - #[doc = "An operator has cancelled their leave request."] - OperatorLeaveCancelled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 3)] - #[doc = "An operator has executed their leave request."] - OperatorLeaveExecuted { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 4)] - #[doc = "An operator has increased their bond."] - OperatorBondMore { - who: ::subxt::ext::subxt_core::utils::AccountId32, - additional_bond: ::core::primitive::u128, - }, - #[codec(index = 5)] - #[doc = "An operator has scheduled to decrease their bond."] - OperatorBondLessScheduled { - who: ::subxt::ext::subxt_core::utils::AccountId32, - bond_less_amount: ::core::primitive::u128, - }, - #[codec(index = 6)] - #[doc = "An operator has executed their bond decrease."] - OperatorBondLessExecuted { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 7)] - #[doc = "An operator has cancelled their bond decrease request."] - OperatorBondLessCancelled { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 8)] - #[doc = "An operator has gone offline."] - OperatorWentOffline { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 9)] - #[doc = "An operator has gone online."] - OperatorWentOnline { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 10)] - #[doc = "A deposit has been made."] - Deposited { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - asset_id: ::core::option::Option<::core::primitive::u128>, - }, - #[codec(index = 11)] - #[doc = "An unstake has been scheduled."] - ScheduledUnstake { - who: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - asset_id: ::core::option::Option<::core::primitive::u128>, - }, - #[codec(index = 12)] - #[doc = "An unstake has been executed."] - ExecutedUnstake { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 13)] - #[doc = "An unstake has been cancelled."] - CancelledUnstake { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 14)] - #[doc = "A delegation has been made."] - Delegated { - who: ::subxt::ext::subxt_core::utils::AccountId32, - operator: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - asset_id: ::core::primitive::u128, - }, - #[codec(index = 15)] - #[doc = "A delegator bond less request has been scheduled."] - ScheduledDelegatorBondLess { - who: ::subxt::ext::subxt_core::utils::AccountId32, - operator: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - asset_id: ::core::primitive::u128, - }, - #[codec(index = 16)] - #[doc = "A delegator bond less request has been executed."] - ExecutedDelegatorBondLess { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 17)] - #[doc = "A delegator bond less request has been cancelled."] - CancelledDelegatorBondLess { who: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 18)] - #[doc = "New whitelisted assets set"] - WhitelistedAssetsSet { - assets: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u128>, - }, - #[codec(index = 19)] - #[doc = "Event emitted when an incentive APY and cap are set for an asset"] - IncentiveAPYAndCapSet { - asset_id: ::core::primitive::u128, - apy: ::core::primitive::u128, - cap: ::core::primitive::u128, - }, - #[codec(index = 20)] - #[doc = "Event emitted when a blueprint is whitelisted for rewards"] - BlueprintWhitelisted { blueprint_id: ::core::primitive::u32 }, - } + # [codec (index = 0)] # [doc = "An operator has joined."] OperatorJoined { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 1)] # [doc = "An operator has scheduled to leave."] OperatorLeavingScheduled { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 2)] # [doc = "An operator has cancelled their leave request."] OperatorLeaveCancelled { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 3)] # [doc = "An operator has executed their leave request."] OperatorLeaveExecuted { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 4)] # [doc = "An operator has increased their stake."] OperatorBondMore { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , additional_bond : :: core :: primitive :: u128 , } , # [codec (index = 5)] # [doc = "An operator has scheduled to decrease their stake."] OperatorBondLessScheduled { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , unstake_amount : :: core :: primitive :: u128 , } , # [codec (index = 6)] # [doc = "An operator has executed their stake decrease."] OperatorBondLessExecuted { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 7)] # [doc = "An operator has cancelled their stake decrease request."] OperatorBondLessCancelled { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 8)] # [doc = "An operator has gone offline."] OperatorWentOffline { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 9)] # [doc = "An operator has gone online."] OperatorWentOnline { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 10)] # [doc = "A deposit has been made."] Deposited { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , amount : :: core :: primitive :: u128 , asset_id : :: core :: primitive :: u128 , } , # [codec (index = 11)] # [doc = "An withdraw has been scheduled."] Scheduledwithdraw { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , amount : :: core :: primitive :: u128 , asset_id : :: core :: primitive :: u128 , } , # [codec (index = 12)] # [doc = "An withdraw has been executed."] Executedwithdraw { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 13)] # [doc = "An withdraw has been cancelled."] Cancelledwithdraw { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 14)] # [doc = "A delegation has been made."] Delegated { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , operator : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , amount : :: core :: primitive :: u128 , asset_id : :: core :: primitive :: u128 , } , # [codec (index = 15)] # [doc = "A delegator unstake request has been scheduled."] ScheduledDelegatorBondLess { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , operator : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , amount : :: core :: primitive :: u128 , asset_id : :: core :: primitive :: u128 , } , # [codec (index = 16)] # [doc = "A delegator unstake request has been executed."] ExecutedDelegatorBondLess { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 17)] # [doc = "A delegator unstake request has been cancelled."] CancelledDelegatorBondLess { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , } , # [codec (index = 18)] # [doc = "Event emitted when an incentive APY and cap are set for a reward pool"] IncentiveAPYAndCapSet { pool_id : :: core :: primitive :: u128 , apy : runtime_types :: sp_arithmetic :: per_things :: Percent , cap : :: core :: primitive :: u128 , } , # [codec (index = 19)] # [doc = "Event emitted when a blueprint is whitelisted for rewards"] BlueprintWhitelisted { blueprint_id : :: core :: primitive :: u32 , } , # [codec (index = 20)] # [doc = "Asset has been updated to reward pool"] AssetUpdatedInPool { who : :: subxt :: ext :: subxt_core :: utils :: AccountId32 , pool_id : :: core :: primitive :: u128 , asset_id : :: core :: primitive :: u128 , action : runtime_types :: pallet_multi_asset_delegation :: types :: rewards :: AssetAction , } , } } pub mod types { use super::runtime_types; @@ -51062,9 +49907,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct BondLessRequest<_0, _1> { - pub asset_id: _0, - pub amount: _1, + pub struct BondLessRequest<_0, _1, _2> { + pub operator: _0, + pub asset_id: _1, + pub amount: _2, pub requested_round: ::core::primitive::u32, } #[derive( @@ -51084,7 +49930,7 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct DelegatorMetadata < _0 , _1 , _2 > { pub deposits : :: subxt :: ext :: subxt_core :: utils :: KeyedVec < _1 , _1 > , pub unstake_request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: UnstakeRequest < _1 , _1 > > , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: BondInfoDelegator < _0 , _1 , _1 > > , pub delegator_bond_less_request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: BondLessRequest < _1 , _1 > > , pub status : runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: DelegatorStatus , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } + pub struct DelegatorMetadata < _0 , _1 , _2 > { pub deposits : :: subxt :: ext :: subxt_core :: utils :: KeyedVec < _1 , _1 > , pub withdraw_requests : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: WithdrawRequest < _1 , _1 > > , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: BondInfoDelegator < _0 , _1 , _1 > > , pub delegator_unstake_requests : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: BondLessRequest < _0 , _1 , _1 > > , pub status : runtime_types :: pallet_multi_asset_delegation :: types :: delegator :: DelegatorStatus , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -51125,7 +49971,7 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct UnstakeRequest<_0, _1> { + pub struct WithdrawRequest<_0, _1> { pub asset_id: _0, pub amount: _1, pub requested_round: ::core::primitive::u32, @@ -51193,7 +50039,7 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct OperatorMetadata < _0 , _1 , _2 > { pub bond : _1 , pub delegation_count : :: core :: primitive :: u32 , pub request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorBondLessRequest < _1 > > , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: DelegatorBond < _0 , _1 , _1 > > , pub status : runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorStatus , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } + pub struct OperatorMetadata < _0 , _1 , _2 > { pub stake : _1 , pub delegation_count : :: core :: primitive :: u32 , pub request : :: core :: option :: Option < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorBondLessRequest < _1 > > , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: DelegatorBond < _0 , _1 , _1 > > , pub status : runtime_types :: pallet_multi_asset_delegation :: types :: operator :: OperatorStatus , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -51211,7 +50057,7 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct OperatorSnapshot < _0 , _1 , _2 > { pub bond : _1 , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: DelegatorBond < _0 , _1 , _1 > > , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } + pub struct OperatorSnapshot < _0 , _1 , _2 > { pub stake : _1 , pub delegations : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: pallet_multi_asset_delegation :: types :: operator :: DelegatorBond < _0 , _1 , _1 > > , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _2 > } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -51257,7 +50103,30 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct RewardConfig < _0 , _1 > { pub configs : :: subxt :: ext :: subxt_core :: utils :: KeyedVec < _0 , runtime_types :: pallet_multi_asset_delegation :: types :: rewards :: RewardConfigForAsset < _0 > > , pub whitelisted_blueprint_ids : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < :: core :: primitive :: u32 > , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _1 > } + pub enum AssetAction { + #[codec(index = 0)] + Add, + #[codec(index = 1)] + Remove, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct RewardConfig < _0 , _1 > { pub configs : :: subxt :: ext :: subxt_core :: utils :: KeyedVec < _0 , runtime_types :: pallet_multi_asset_delegation :: types :: rewards :: RewardConfigForAssetPool < _0 > > , pub whitelisted_blueprint_ids : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < :: core :: primitive :: u32 > , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _1 > } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -51275,8 +50144,8 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct RewardConfigForAsset<_0> { - pub apy: ::core::primitive::u128, + pub struct RewardConfigForAssetPool<_0> { + pub apy: runtime_types::sp_arithmetic::per_things::Percent, pub cap: _0, } } @@ -52834,387 +51703,6 @@ pub mod api { pub delay: _2, } } - pub mod pallet_roles { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::create_profile`]."] - create_profile { - profile: runtime_types::pallet_roles::profile::Profile, - max_active_services: ::core::option::Option<::core::primitive::u32>, - }, - #[codec(index = 1)] - #[doc = "See [`Pallet::update_profile`]."] - update_profile { - updated_profile: runtime_types::pallet_roles::profile::Profile, - }, - #[codec(index = 2)] - #[doc = "See [`Pallet::delete_profile`]."] - delete_profile, - #[codec(index = 3)] - #[doc = "See [`Pallet::chill`]."] - chill, - #[codec(index = 4)] - #[doc = "See [`Pallet::unbond_funds`]."] - unbond_funds { - #[codec(compact)] - amount: ::core::primitive::u128, - }, - #[codec(index = 5)] - #[doc = "See [`Pallet::withdraw_unbonded`]."] - withdraw_unbonded, - #[codec(index = 6)] - #[doc = "See [`Pallet::payout_stakers`]."] - payout_stakers { - validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, - era: ::core::primitive::u32, - }, - #[codec(index = 7)] - #[doc = "See [`Pallet::set_min_restaking_bond`]."] - set_min_restaking_bond { min_restaking_bond: ::core::primitive::u128 }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Not a validator."] - NotValidator, - #[codec(index = 1)] - #[doc = "Validator has active role assigned."] - HasRoleAssigned, - #[codec(index = 2)] - #[doc = "Given role is not assigned to the validator."] - RoleNotAssigned, - #[codec(index = 3)] - #[doc = "Max role limit reached for the account."] - MaxRoles, - #[codec(index = 4)] - #[doc = "Role cannot due to pending jobs, which can't be opted out at the moment."] - RoleCannotBeRemoved, - #[codec(index = 5)] - #[doc = "Restaking amount cannot be lowered if there are any pending jobs. You can only add more"] - RestakingAmountCannotBeUpdated, - #[codec(index = 6)] - #[doc = "Invalid Restaking amount, should not exceed total staked amount."] - ExceedsMaxRestakeValue, - #[codec(index = 7)] - #[doc = "Re staking amount should be greater than minimum Restaking bond requirement."] - InsufficientRestakingBond, - #[codec(index = 8)] - #[doc = "Profile Update failed."] - ProfileUpdateFailed, - #[codec(index = 9)] - #[doc = "Profile already exists for given validator account."] - ProfileAlreadyExists, - #[codec(index = 10)] - #[doc = "Stash controller account not found in Roles Ledger."] - NoProfileFound, - #[codec(index = 11)] - #[doc = "Profile delete request failed due to pending jobs, which can't be opted out at the"] - #[doc = "moment."] - ProfileDeleteRequestFailed, - #[codec(index = 12)] - #[doc = "SessionKeys not provided"] - SessionKeysNotProvided, - #[codec(index = 13)] - #[doc = "Key size exceeded"] - KeySizeExceeded, - #[codec(index = 14)] - #[doc = "Cannot find Current era"] - CannotGetCurrentEra, - #[codec(index = 15)] - #[doc = "Invalid era info"] - InvalidEraToReward, - #[codec(index = 16)] - #[doc = "Out of bounds input"] - BoundNotMet, - #[codec(index = 17)] - #[doc = "Rewards already claimed"] - AlreadyClaimed, - #[codec(index = 18)] - #[doc = "Unlock chunks already filled"] - NoMoreChunks, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Role assigned to the validator."] - RoleAssigned { - account: ::subxt::ext::subxt_core::utils::AccountId32, - role: runtime_types::tangle_primitives::roles::RoleType, - }, - #[codec(index = 1)] - #[doc = "Removed validator from role."] - RoleRemoved { - account: ::subxt::ext::subxt_core::utils::AccountId32, - role: runtime_types::tangle_primitives::roles::RoleType, - }, - #[codec(index = 2)] - #[doc = "Slashed validator."] - Slashed { - account: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 3)] - #[doc = "New profile created."] - ProfileCreated { - account: ::subxt::ext::subxt_core::utils::AccountId32, - total_profile_restake: ::core::primitive::u128, - roles: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::roles::RoleType, - >, - }, - #[codec(index = 4)] - #[doc = "Profile updated."] - ProfileUpdated { - account: ::subxt::ext::subxt_core::utils::AccountId32, - total_profile_restake: ::core::primitive::u128, - roles: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::roles::RoleType, - >, - }, - #[codec(index = 5)] - #[doc = "Profile deleted."] - ProfileDeleted { account: ::subxt::ext::subxt_core::utils::AccountId32 }, - #[codec(index = 6)] - #[doc = "Pending jobs,that cannot be opted out at the moment."] - PendingJobs { - pending_jobs: ::subxt::ext::subxt_core::alloc::vec::Vec<( - runtime_types::tangle_primitives::roles::RoleType, - ::core::primitive::u64, - )>, - }, - #[codec(index = 7)] - #[doc = "Roles inflation reward paid for era"] - RolesRewardSet { total_rewards: ::core::primitive::u128 }, - #[codec(index = 8)] - #[doc = "The re-stakers' rewards are getting paid."] - PayoutStarted { - era_index: ::core::primitive::u32, - validator_stash: ::subxt::ext::subxt_core::utils::AccountId32, - }, - #[codec(index = 9)] - #[doc = "The re-staker has been rewarded by this amount."] - Rewarded { - stash: ::subxt::ext::subxt_core::utils::AccountId32, - amount: ::core::primitive::u128, - }, - #[codec(index = 10)] - #[doc = "The min restaking bond amount has been updated"] - MinRestakingBondUpdated { value: ::core::primitive::u128 }, - } - } - pub mod profile { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct IndependentRestakeProfile { - pub records: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_roles::profile::Record, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum Profile { - #[codec(index = 0)] - Independent(runtime_types::pallet_roles::profile::IndependentRestakeProfile), - #[codec(index = 1)] - Shared(runtime_types::pallet_roles::profile::SharedRestakeProfile), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Record { - pub role: runtime_types::tangle_primitives::roles::RoleType, - pub amount: ::core::option::Option<::core::primitive::u128>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct SharedRestakeProfile { - pub records: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_roles::profile::Record, - >, - pub amount: ::core::primitive::u128, - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct RestakingLedger { - pub stash: ::subxt::ext::subxt_core::utils::AccountId32, - #[codec(compact)] - pub total: ::core::primitive::u128, - pub profile: runtime_types::pallet_roles::profile::Profile, - pub roles: - runtime_types::bounded_collections::bounded_btree_map::BoundedBTreeMap< - runtime_types::tangle_primitives::roles::RoleType, - runtime_types::pallet_roles::profile::Record, - >, - pub role_key: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub unlocking: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::pallet_roles::types::UnlockChunk<::core::primitive::u128>, - >, - pub claimed_rewards: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u32, - >, - pub max_active_services: ::core::primitive::u32, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct UnlockChunk<_0> { - #[codec(compact)] - pub value: _0, - #[codec(compact)] - pub era: ::core::primitive::u32, - } - } - } pub mod pallet_scheduler { use super::runtime_types; pub mod pallet { @@ -53410,6 +51898,368 @@ pub mod api { pub __ignore: ::core::marker::PhantomData<_4>, } } + pub mod pallet_services { + use super::runtime_types; + pub mod module { + use super::runtime_types; + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] + pub enum Call { + #[codec(index = 0)] + #[doc = "See `Pallet::create_blueprint`."] + create_blueprint { + blueprint: runtime_types::tangle_primitives::services::ServiceBlueprint, + }, + #[codec(index = 1)] + #[doc = "See `Pallet::register`."] + register { + #[codec(compact)] + blueprint_id: ::core::primitive::u64, + preferences: + runtime_types::tangle_primitives::services::OperatorPreferences, + registration_args: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, + }, + #[codec(index = 2)] + #[doc = "See `Pallet::unregister`."] + unregister { + #[codec(compact)] + blueprint_id: ::core::primitive::u64, + }, + #[codec(index = 3)] + #[doc = "See `Pallet::update_approval_preference`."] + update_approval_preference { + #[codec(compact)] + blueprint_id: ::core::primitive::u64, + approval_preference: + runtime_types::tangle_primitives::services::ApprovalPrefrence, + }, + #[codec(index = 4)] + #[doc = "See `Pallet::request`."] + request { + #[codec(compact)] + blueprint_id: ::core::primitive::u64, + permitted_callers: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + service_providers: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + #[codec(compact)] + ttl: ::core::primitive::u64, + request_args: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, + }, + #[codec(index = 5)] + #[doc = "See `Pallet::approve`."] + approve { + #[codec(compact)] + request_id: ::core::primitive::u64, + }, + #[codec(index = 6)] + #[doc = "See `Pallet::reject`."] + reject { + #[codec(compact)] + request_id: ::core::primitive::u64, + }, + #[codec(index = 7)] + #[doc = "See `Pallet::terminate`."] + terminate { + #[codec(compact)] + service_id: ::core::primitive::u64, + }, + #[codec(index = 8)] + #[doc = "See `Pallet::call`."] + call { + #[codec(compact)] + service_id: ::core::primitive::u64, + #[codec(compact)] + job: ::core::primitive::u8, + args: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, + }, + #[codec(index = 9)] + #[doc = "See `Pallet::submit_result`."] + submit_result { + #[codec(compact)] + service_id: ::core::primitive::u64, + #[codec(compact)] + call_id: ::core::primitive::u64, + result: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, + }, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Error` enum of this pallet."] + pub enum Error { + #[codec(index = 0)] + #[doc = "The service blueprint was not found."] + BlueprintNotFound, + #[codec(index = 1)] + #[doc = "The caller is already registered as a operator."] + AlreadyRegistered, + #[codec(index = 2)] + #[doc = "The caller does not have the requirements to be a operator."] + InvalidRegistrationInput, + #[codec(index = 3)] + #[doc = "The caller does not have the requirements to request a service."] + InvalidRequestInput, + #[codec(index = 4)] + #[doc = "The caller does not have the requirements to call a job."] + InvalidJobCallInput, + #[codec(index = 5)] + #[doc = "The caller provided an invalid job result."] + InvalidJobResult, + #[codec(index = 6)] + #[doc = "The caller is not registered as a operator."] + NotRegistered, + #[codec(index = 7)] + #[doc = "The service request was not found."] + ServiceRequestNotFound, + #[codec(index = 8)] + #[doc = "The service was not found."] + ServiceNotFound, + #[codec(index = 9)] + #[doc = "An error occurred while type checking the provided input input."] + TypeCheck(runtime_types::tangle_primitives::services::TypeCheckError), + #[codec(index = 10)] + #[doc = "The maximum number of permitted callers per service has been exceeded."] + MaxPermittedCallersExceeded, + #[codec(index = 11)] + #[doc = "The maximum number of operators per service has been exceeded."] + MaxServiceProvidersExceeded, + #[codec(index = 12)] + #[doc = "The maximum number of services per user has been exceeded."] + MaxServicesPerUserExceeded, + #[codec(index = 13)] + #[doc = "The maximum number of fields per request has been exceeded."] + MaxFieldsExceeded, + #[codec(index = 14)] + #[doc = "The approval is not requested for the operator (the caller)."] + ApprovalNotRequested, + #[codec(index = 15)] + #[doc = "The requested job definition does not exist."] + #[doc = "This error is returned when the requested job definition does not exist in the service blueprint."] + JobDefinitionNotFound, + #[codec(index = 16)] + #[doc = "Either the service or the job call was not found."] + ServiceOrJobCallNotFound, + #[codec(index = 17)] + #[doc = "The result of the job call was not found."] + JobCallResultNotFound, + #[codec(index = 18)] + #[doc = "An error occurred while encoding the EVM ABI."] + EVMAbiEncode, + #[codec(index = 19)] + #[doc = "Operator profile not found."] + OperatorProfileNotFound, + #[codec(index = 20)] + #[doc = "Maximum number of services per Provider reached."] + MaxServicesPerProviderExceeded, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + #[doc = "The `Event` enum of this pallet"] + pub enum Event { + #[codec(index = 0)] + #[doc = "A new service blueprint has been created."] + BlueprintCreated { + owner: ::subxt::ext::subxt_core::utils::AccountId32, + blueprint_id: ::core::primitive::u64, + }, + #[codec(index = 1)] + #[doc = "An new operator has been registered."] + Registered { + provider: ::subxt::ext::subxt_core::utils::AccountId32, + blueprint_id: ::core::primitive::u64, + preferences: + runtime_types::tangle_primitives::services::OperatorPreferences, + registration_args: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, + }, + #[codec(index = 2)] + #[doc = "An operator has been unregistered."] + Unregistered { + operator: ::subxt::ext::subxt_core::utils::AccountId32, + blueprint_id: ::core::primitive::u64, + }, + #[codec(index = 3)] + #[doc = "The approval preference for an operator has been updated."] + ApprovalPreferenceUpdated { + operator: ::subxt::ext::subxt_core::utils::AccountId32, + blueprint_id: ::core::primitive::u64, + approval_preference: + runtime_types::tangle_primitives::services::ApprovalPrefrence, + }, + #[codec(index = 4)] + #[doc = "A new service has been requested."] + ServiceRequested { + owner: ::subxt::ext::subxt_core::utils::AccountId32, + request_id: ::core::primitive::u64, + blueprint_id: ::core::primitive::u64, + pending_approvals: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + approved: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + }, + #[codec(index = 5)] + #[doc = "A service request has been approved."] + ServiceRequestApproved { + operator: ::subxt::ext::subxt_core::utils::AccountId32, + request_id: ::core::primitive::u64, + blueprint_id: ::core::primitive::u64, + pending_approvals: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + approved: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + }, + #[codec(index = 6)] + #[doc = "A service request has been rejected."] + ServiceRequestRejected { + operator: ::subxt::ext::subxt_core::utils::AccountId32, + request_id: ::core::primitive::u64, + blueprint_id: ::core::primitive::u64, + }, + #[codec(index = 7)] + #[doc = "A service request has been updated or modified."] + ServiceRequestUpdated { + owner: ::subxt::ext::subxt_core::utils::AccountId32, + request_id: ::core::primitive::u64, + blueprint_id: ::core::primitive::u64, + pending_approvals: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + approved: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + }, + #[codec(index = 8)] + #[doc = "A service has been initiated."] + ServiceInitiated { + owner: ::subxt::ext::subxt_core::utils::AccountId32, + request_id: ::core::option::Option<::core::primitive::u64>, + service_id: ::core::primitive::u64, + blueprint_id: ::core::primitive::u64, + }, + #[codec(index = 9)] + #[doc = "A service has been terminated."] + ServiceTerminated { + owner: ::subxt::ext::subxt_core::utils::AccountId32, + service_id: ::core::primitive::u64, + blueprint_id: ::core::primitive::u64, + }, + #[codec(index = 10)] + #[doc = "A job has been called."] + JobCalled { + caller: ::subxt::ext::subxt_core::utils::AccountId32, + service_id: ::core::primitive::u64, + call_id: ::core::primitive::u64, + job: ::core::primitive::u8, + args: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, + }, + #[codec(index = 11)] + #[doc = "A job result has been submitted."] + JobResultSubmitted { + operator: ::subxt::ext::subxt_core::utils::AccountId32, + service_id: ::core::primitive::u64, + call_id: ::core::primitive::u64, + job: ::core::primitive::u8, + result: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::field::Field< + ::subxt::ext::subxt_core::utils::AccountId32, + >, + >, + }, + #[codec(index = 12)] + #[doc = "An EVM log has been emitted during an execution."] + EvmLog { + address: ::subxt::ext::subxt_core::utils::H160, + topics: ::subxt::ext::subxt_core::alloc::vec::Vec< + ::subxt::ext::subxt_core::utils::H256, + >, + data: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + #[codec(index = 13)] + #[doc = "EVM execution reverted with a reason."] + EvmReverted { + from: ::subxt::ext::subxt_core::utils::H160, + to: ::subxt::ext::subxt_core::utils::H160, + data: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + reason: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + }, + } + } + } pub mod pallet_session { use super::runtime_types; pub mod pallet { @@ -55235,119 +54085,6 @@ pub mod api { V1, } } - pub mod pallet_zksaas { - use super::runtime_types; - pub mod pallet { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "Contains a variant per dispatchable extrinsic that this pallet has."] - pub enum Call { - #[codec(index = 0)] - #[doc = "See [`Pallet::set_fee`]."] - set_fee { - fee_info: - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Error` enum of this pallet."] - pub enum Error { - #[codec(index = 0)] - #[doc = "Unexpected job type"] - InvalidJobType, - #[codec(index = 1)] - #[doc = "Invalid proof"] - InvalidProof, - #[codec(index = 2)] - #[doc = "Malformed Proof"] - #[doc = "if the proof bytes is not correct."] - MalformedProof, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - #[doc = "The `Event` enum of this pallet"] - pub enum Event { - #[codec(index = 0)] - #[doc = "Fee has been updated to the new value"] - FeeUpdated( - runtime_types::pallet_zksaas::types::FeeInfo<::core::primitive::u128>, - ), - } - } - pub mod types { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct FeeInfo<_0> { - pub base_fee: _0, - pub circuit_fee: _0, - pub prove_fee: _0, - pub storage_fee_per_byte: _0, - } - } - } pub mod primitive_types { use super::runtime_types; #[derive( @@ -58306,244 +57043,48 @@ pub mod api { } pub mod sygma_traits { use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MpcAddress(pub [::core::primitive::u8; 20usize]); - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub enum TransferType { - #[codec(index = 0)] - FungibleTransfer, - #[codec(index = 1)] - NonFungibleTransfer, - #[codec(index = 2)] - GenericTransfer, - } - } - pub mod tangle_crypto_primitives { - use super::runtime_types; - pub mod crypto { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Public(pub runtime_types::sp_core::ecdsa::Public); - } - } - pub mod tangle_primitives { - use super::runtime_types; - pub mod jobs { - use super::runtime_types; - pub mod tss { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSKeyRefreshResult { - pub signature_scheme: - runtime_types::tangle_primitives::jobs::tss::DigitalSignatureScheme, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSKeyRotationResult<_0, _1, _2> { - pub phase_one_id: ::core::primitive::u64, - pub new_phase_one_id: ::core::primitive::u64, - pub new_key: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub key: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub signature: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub signature_scheme: - runtime_types::tangle_primitives::jobs::tss::DigitalSignatureScheme, - pub derivation_path: ::core::option::Option< - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - >, - pub chain_code: ::core::option::Option<[::core::primitive::u8; 32usize]>, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<(_2, _0, _1)>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSKeySubmissionResult<_0, _1, _2> { - pub signature_scheme: - runtime_types::tangle_primitives::jobs::tss::DigitalSignatureScheme, - pub key: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub chain_code: ::core::option::Option<[::core::primitive::u8; 32usize]>, - pub participants: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - >, - pub signatures: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - >, - pub threshold: ::core::primitive::u8, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<(_1, _0, _2)>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSPhaseFourJobType { pub phase_one_id : :: core :: primitive :: u64 , pub new_phase_one_id : :: core :: primitive :: u64 , pub role_type : runtime_types :: tangle_primitives :: roles :: tss :: ThresholdSignatureRoleType , } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSPhaseOneJobType < _0 , _1 > { pub participants : runtime_types :: bounded_collections :: bounded_vec :: BoundedVec < _0 > , pub threshold : :: core :: primitive :: u8 , pub permitted_caller : :: core :: option :: Option < _0 > , pub role_type : runtime_types :: tangle_primitives :: roles :: tss :: ThresholdSignatureRoleType , pub hd_wallet : :: core :: primitive :: bool , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < _1 > } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSPhaseThreeJobType { pub phase_one_id : :: core :: primitive :: u64 , pub role_type : runtime_types :: tangle_primitives :: roles :: tss :: ThresholdSignatureRoleType , } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct DKGTSSPhaseTwoJobType < _0 , _1 > { pub phase_one_id : :: core :: primitive :: u64 , pub submission : runtime_types :: bounded_collections :: bounded_vec :: BoundedVec < :: core :: primitive :: u8 > , pub derivation_path : :: core :: option :: Option < runtime_types :: bounded_collections :: bounded_vec :: BoundedVec < :: core :: primitive :: u8 > > , pub role_type : runtime_types :: tangle_primitives :: roles :: tss :: ThresholdSignatureRoleType , # [codec (skip)] pub __ignore : :: core :: marker :: PhantomData < (_0 , _1) > } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub struct MpcAddress(pub [::core::primitive::u8; 20usize]); + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] + #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] + pub enum TransferType { + #[codec(index = 0)] + FungibleTransfer, + #[codec(index = 1)] + NonFungibleTransfer, + #[codec(index = 2)] + GenericTransfer, + } + } + pub mod tangle_primitives { + use super::runtime_types; + pub mod services { + use super::runtime_types; + pub mod field { + use super::runtime_types; #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -58561,28 +57102,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct DKGTSSSignatureResult<_0, _1, _2, _3> { - pub signature_scheme: - runtime_types::tangle_primitives::jobs::tss::DigitalSignatureScheme, - pub data: runtime_types::bounded_collections::bounded_vec::BoundedVec< + pub struct BoundedString( + pub runtime_types::bounded_collections::bounded_vec::BoundedVec< ::core::primitive::u8, >, - pub signature: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub verifying_key: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub derivation_path: ::core::option::Option< - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - >, - pub chain_code: ::core::option::Option<[::core::primitive::u8; 32usize]>, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<(_3, _1, _2, _0)>, - } + ); #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -58600,283 +57124,50 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum DigitalSignatureScheme { + #[codec(dumb_trait_bound)] + pub enum Field<_1> { #[codec(index = 0)] - EcdsaSecp256k1, + None, #[codec(index = 1)] - EcdsaSecp256r1, + Bool(::core::primitive::bool), #[codec(index = 2)] - EcdsaStark, + Uint8(::core::primitive::u8), #[codec(index = 3)] - SchnorrP256, + Int8(::core::primitive::i8), #[codec(index = 4)] - SchnorrP384, + Uint16(::core::primitive::u16), #[codec(index = 5)] - SchnorrSecp256k1, + Int16(::core::primitive::i16), #[codec(index = 6)] - SchnorrSr25519, + Uint32(::core::primitive::u32), #[codec(index = 7)] - SchnorrRistretto255, + Int32(::core::primitive::i32), #[codec(index = 8)] - SchnorrEd25519, + Uint64(::core::primitive::u64), #[codec(index = 9)] - SchnorrEd448, + Int64(::core::primitive::i64), #[codec(index = 10)] - SchnorrTaproot, + String(runtime_types::tangle_primitives::services::field::BoundedString), #[codec(index = 11)] - Bls381, - } - } - pub mod zksaas { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ArkworksProofResult<_0> { - pub proof: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct CircomProofResult<_0> { - pub proof: runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Groth16ProveRequest<_0> { - pub public_input: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub a_shares: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - >, - pub ax_shares: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - >, - pub qap_shares: runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::tangle_primitives::jobs::zksaas::QAPShare<_0>, - >, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct Groth16System<_0> { - pub circuit: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - pub num_inputs: ::core::primitive::u64, - pub num_constraints: ::core::primitive::u64, - pub proving_key: - runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - pub verifying_key: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, - >, - pub wasm: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum HyperData<_0> { - #[codec(index = 0)] - Raw( + Bytes( runtime_types::bounded_collections::bounded_vec::BoundedVec< ::core::primitive::u8, >, ), - #[codec(index = 1)] - IPFS( + #[codec(index = 12)] + Array( runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, + runtime_types::tangle_primitives::services::field::Field<_1>, >, ), - #[codec(index = 2)] - HTTP( + #[codec(index = 13)] + List( runtime_types::bounded_collections::bounded_vec::BoundedVec< - ::core::primitive::u8, + runtime_types::tangle_primitives::services::field::Field<_1>, >, ), - __Ignore(::core::marker::PhantomData<_0>), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct QAPShare<_0> { - pub a: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - pub b: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - pub c: runtime_types::tangle_primitives::jobs::zksaas::HyperData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ZkSaaSCircuitResult<_0> { - pub job_id: ::core::primitive::u64, - pub participants: - runtime_types::bounded_collections::bounded_vec::BoundedVec< - runtime_types::sp_core::ecdsa::Public, - >, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_0>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ZkSaaSPhaseOneJobType<_0, _1, _2> { - pub participants: - runtime_types::bounded_collections::bounded_vec::BoundedVec<_0>, - pub permitted_caller: ::core::option::Option<_0>, - pub system: - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSSystem<_2>, - pub role_type: - runtime_types::tangle_primitives::roles::zksaas::ZeroKnowledgeRoleType, - #[codec(skip)] - pub __ignore: ::core::marker::PhantomData<_1>, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub struct ZkSaaSPhaseTwoJobType<_0> { - pub phase_one_id: ::core::primitive::u64, - pub request: - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSPhaseTwoRequest< - _0, - >, - pub role_type: - runtime_types::tangle_primitives::roles::zksaas::ZeroKnowledgeRoleType, + #[codec(index = 100)] + AccountId(_1), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -58895,60 +57186,53 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ZkSaaSPhaseTwoRequest<_0> { + pub enum FieldType { #[codec(index = 0)] - Groth16( - runtime_types::tangle_primitives::jobs::zksaas::Groth16ProveRequest<_0>, + Void, + #[codec(index = 1)] + Bool, + #[codec(index = 2)] + Uint8, + #[codec(index = 3)] + Int8, + #[codec(index = 4)] + Uint16, + #[codec(index = 5)] + Int16, + #[codec(index = 6)] + Uint32, + #[codec(index = 7)] + Int32, + #[codec(index = 8)] + Uint64, + #[codec(index = 9)] + Int64, + #[codec(index = 10)] + String, + #[codec(index = 11)] + Bytes, + #[codec(index = 12)] + Optional( + ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_primitives::services::field::FieldType, + >, ), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZkSaaSProofResult<_0> { - #[codec(index = 0)] - Arkworks( - runtime_types::tangle_primitives::jobs::zksaas::ArkworksProofResult<_0>, + #[codec(index = 13)] + Array( + ::core::primitive::u64, + ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_primitives::services::field::FieldType, + >, ), - #[codec(index = 1)] - Circom( - runtime_types::tangle_primitives::jobs::zksaas::CircomProofResult<_0>, + #[codec(index = 14)] + List( + ::subxt::ext::subxt_core::alloc::boxed::Box< + runtime_types::tangle_primitives::services::field::FieldType, + >, ), + #[codec(index = 100)] + AccountId, } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZkSaaSSystem<_0> { - #[codec(index = 0)] - Groth16(runtime_types::tangle_primitives::jobs::zksaas::Groth16System<_0>), - } } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -58967,11 +57251,318 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum FallbackOptions { - #[codec(index = 0)] - Destroy, - #[codec(index = 1)] - RegenerateWithThreshold(::core::primitive::u8), + pub enum ApprovalPrefrence { + #[codec(index = 0)] + None, + #[codec(index = 1)] + Required, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum ApprovalState { + #[codec(index = 0)] + Pending, + #[codec(index = 1)] + Approved, + #[codec(index = 2)] + Rejected, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum Architecture { + #[codec(index = 0)] + Wasm, + #[codec(index = 1)] + Wasm64, + #[codec(index = 2)] + Wasi, + #[codec(index = 3)] + Wasi64, + #[codec(index = 4)] + Amd, + #[codec(index = 5)] + Amd64, + #[codec(index = 6)] + Arm, + #[codec(index = 7)] + Arm64, + #[codec(index = 8)] + RiscV, + #[codec(index = 9)] + RiscV64, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct ContainerGadget { + pub soruces: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::GadgetSource, + >, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum Gadget { + #[codec(index = 0)] + Wasm(runtime_types::tangle_primitives::services::WasmGadget), + #[codec(index = 1)] + Native(runtime_types::tangle_primitives::services::NativeGadget), + #[codec(index = 2)] + Container(runtime_types::tangle_primitives::services::ContainerGadget), + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct GadgetBinary { + pub arch: runtime_types::tangle_primitives::services::Architecture, + pub os: runtime_types::tangle_primitives::services::OperatingSystem, + pub name: runtime_types::tangle_primitives::services::field::BoundedString, + pub sha256: [::core::primitive::u8; 32usize], + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct GadgetSource { + pub fetcher: runtime_types::tangle_primitives::services::GadgetSourceFetcher, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub enum GadgetSourceFetcher { + #[codec(index = 0)] + IPFS( + runtime_types::bounded_collections::bounded_vec::BoundedVec< + ::core::primitive::u8, + >, + ), + #[codec(index = 1)] + Github(runtime_types::tangle_primitives::services::GithubFetcher), + #[codec(index = 2)] + ContainerImage( + runtime_types::tangle_primitives::services::ImageRegistryFetcher, + ), + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct GithubFetcher { + pub owner: runtime_types::tangle_primitives::services::field::BoundedString, + pub repo: runtime_types::tangle_primitives::services::field::BoundedString, + pub tag: runtime_types::tangle_primitives::services::field::BoundedString, + pub binaries: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::GadgetBinary, + >, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct ImageRegistryFetcher { + pub registry: runtime_types::tangle_primitives::services::field::BoundedString, + pub image: runtime_types::tangle_primitives::services::field::BoundedString, + pub tag: runtime_types::tangle_primitives::services::field::BoundedString, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct JobCall<_1> { + pub service_id: ::core::primitive::u64, + pub job: ::core::primitive::u8, + pub args: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::field::Field<_1>, + >, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct JobCallResult<_1> { + pub service_id: ::core::primitive::u64, + pub call_id: ::core::primitive::u64, + pub result: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::field::Field<_1>, + >, + } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct JobDefinition { + pub metadata: runtime_types::tangle_primitives::services::JobMetadata, + pub params: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::field::FieldType, + >, + pub result: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::field::FieldType, + >, + pub verifier: runtime_types::tangle_primitives::services::JobResultVerifier, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -58990,13 +57581,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct JobInfo<_0, _1, _2, _3, _4, _5> { - pub owner: _0, - pub expiry: _1, - pub ttl: _1, - pub job_type: runtime_types::tangle_primitives::jobs::JobType<_0, _3, _4, _5>, - pub fee: _2, - pub fallback: runtime_types::tangle_primitives::jobs::FallbackOptions, + pub struct JobMetadata { + pub name: runtime_types::tangle_primitives::services::field::BoundedString, + pub description: ::core::option::Option< + runtime_types::tangle_primitives::services::field::BoundedString, + >, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59015,44 +57604,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum JobResult<_0, _1, _2, _3, _4, _5> { + pub enum JobResultVerifier { #[codec(index = 0)] - DKGPhaseOne( - runtime_types::tangle_primitives::jobs::tss::DKGTSSKeySubmissionResult< - _1, - _0, - _2, - >, - ), + None, #[codec(index = 1)] - DKGPhaseTwo( - runtime_types::tangle_primitives::jobs::tss::DKGTSSSignatureResult< - _3, - _1, - _2, - _5, - >, - ), - #[codec(index = 2)] - DKGPhaseThree( - runtime_types::tangle_primitives::jobs::tss::DKGTSSKeyRefreshResult, - ), - #[codec(index = 3)] - DKGPhaseFour( - runtime_types::tangle_primitives::jobs::tss::DKGTSSKeyRotationResult< - _1, - _2, - _5, - >, - ), - #[codec(index = 4)] - ZkSaaSPhaseOne( - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSCircuitResult<_0>, - ), - #[codec(index = 5)] - ZkSaaSPhaseTwo( - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSProofResult<_4>, - ), + Evm(::subxt::ext::subxt_core::utils::H160), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59071,11 +57627,10 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct JobSubmission<_0, _1, _2, _3, _4> { - pub expiry: _1, - pub ttl: _1, - pub job_type: runtime_types::tangle_primitives::jobs::JobType<_0, _2, _3, _4>, - pub fallback: runtime_types::tangle_primitives::jobs::FallbackOptions, + pub struct NativeGadget { + pub soruces: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::GadgetSource, + >, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59094,35 +57649,17 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum JobType<_0, _1, _2, _3> { + pub enum OperatingSystem { #[codec(index = 0)] - DKGTSSPhaseOne( - runtime_types::tangle_primitives::jobs::tss::DKGTSSPhaseOneJobType<_0, _1>, - ), + Unknown, #[codec(index = 1)] - DKGTSSPhaseTwo( - runtime_types::tangle_primitives::jobs::tss::DKGTSSPhaseTwoJobType<_2, _3>, - ), + Linux, #[codec(index = 2)] - DKGTSSPhaseThree( - runtime_types::tangle_primitives::jobs::tss::DKGTSSPhaseThreeJobType, - ), + Windows, #[codec(index = 3)] - DKGTSSPhaseFour( - runtime_types::tangle_primitives::jobs::tss::DKGTSSPhaseFourJobType, - ), + MacOS, #[codec(index = 4)] - ZkSaaSPhaseOne( - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSPhaseOneJobType< - _0, - _1, - _2, - >, - ), - #[codec(index = 5)] - ZkSaaSPhaseTwo( - runtime_types::tangle_primitives::jobs::zksaas::ZkSaaSPhaseTwoJobType<_2>, - ), + BSD, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59141,13 +57678,9 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct PhaseResult<_0, _1, _2, _3, _4, _5, _6, _7, _8> { - pub owner: _0, - pub result: - runtime_types::tangle_primitives::jobs::JobResult<_2, _3, _5, _4, _7, _8>, - pub ttl: _1, - pub permitted_caller: ::core::option::Option<_0>, - pub job_type: runtime_types::tangle_primitives::jobs::JobType<_0, _2, _6, _8>, + pub struct OperatorPreferences { + pub key: runtime_types::sp_core::ecdsa::Public, + pub approval: runtime_types::tangle_primitives::services::ApprovalPrefrence, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59166,11 +57699,15 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct RpcResponseJobsData<_0, _1, _2, _3, _4> { - pub job_id: ::core::primitive::u64, - pub job_type: runtime_types::tangle_primitives::jobs::JobType<_0, _2, _3, _4>, - pub expiry: _1, - pub ttl: _1, + pub struct OperatorProfile { + pub services: + runtime_types::bounded_collections::bounded_btree_set::BoundedBTreeSet< + ::core::primitive::u64, + >, + pub blueprints: + runtime_types::bounded_collections::bounded_btree_set::BoundedBTreeSet< + ::core::primitive::u64, + >, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59189,252 +57726,73 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ValidatorOffenceType { - #[codec(index = 0)] - Inactivity, - #[codec(index = 1)] - InvalidSignatureSubmitted, - #[codec(index = 2)] - RejectedValidAction, - #[codec(index = 3)] - ApprovedInvalidAction, + pub struct RpcServicesWithBlueprint<_1, _2> { + pub blueprint_id: ::core::primitive::u64, + pub blueprint: runtime_types::tangle_primitives::services::ServiceBlueprint, + pub services: ::subxt::ext::subxt_core::alloc::vec::Vec< + runtime_types::tangle_primitives::services::Service<_1, _2>, + >, } - } - pub mod misbehavior { - use super::runtime_types; - pub mod dfns_cggmp21 { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum DfnsCGGMP21Justification { - # [codec (index = 0)] Keygen { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: KeygenAborted , } , # [codec (index = 1)] KeyRefresh { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: KeyRefreshAborted , } , # [codec (index = 2)] Signing { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: SigningAborted , } , } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum InvalidProofReason { - #[codec(index = 0)] - EqualityCheck(::core::primitive::u8), - #[codec(index = 1)] - RangeCheck(::core::primitive::u8), - #[codec(index = 2)] - Encryption, - #[codec(index = 3)] - PaillierEnc, - #[codec(index = 4)] - PaillierOp, - #[codec(index = 5)] - ModPow, - #[codec(index = 6)] - ModulusIsPrime, - #[codec(index = 7)] - ModulusIsEven, - #[codec(index = 8)] - IncorrectNthRoot(::core::primitive::u8), - #[codec(index = 9)] - IncorrectFourthRoot(::core::primitive::u8), - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum KeyRefreshAborted { - # [codec (index = 0)] InvalidDecommitment { round1 : runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage , round2 : runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage , } , # [codec (index = 1)] InvalidSchnorrProof , # [codec (index = 2)] InvalidModProof { reason : runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: InvalidProofReason , round2 : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage > , round3 : runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage , } , # [codec (index = 3)] InvalidFacProof , # [codec (index = 4)] InvalidRingPedersenParameters { round2 : runtime_types :: tangle_primitives :: misbehavior :: SignedRoundMessage , } , # [codec (index = 5)] InvalidX , # [codec (index = 6)] InvalidXShare , # [codec (index = 7)] InvalidDataSize , # [codec (index = 8)] PaillierDec , } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum KeygenAborted { - #[codec(index = 0)] - InvalidDecommitment { - round1: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - round2a: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - #[codec(index = 1)] - InvalidSchnorrProof { - round2a: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - >, - round3: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - #[codec(index = 2)] - FeldmanVerificationFailed { - round2a: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - round2b: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - #[codec(index = 3)] - InvalidDataSize { - round2a: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum SigningAborted { - #[codec(index = 0)] - EncProofOfK, - #[codec(index = 1)] - InvalidPsi, - #[codec(index = 2)] - InvalidPsiPrimePrime, - #[codec(index = 3)] - MismatchedDelta, - } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct Service<_1, _2> { + pub id: ::core::primitive::u64, + pub blueprint: ::core::primitive::u64, + pub owner: _1, + pub permitted_callers: + runtime_types::bounded_collections::bounded_vec::BoundedVec<_1>, + pub operators: runtime_types::bounded_collections::bounded_vec::BoundedVec<_1>, + pub ttl: _2, } - pub mod zcash_frost { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum KeygenAborted { - #[codec(index = 0)] - InvalidProofOfKnowledge { - round1: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - #[codec(index = 1)] - InvalidSecretShare { - round1: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - round2: - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum SigningAborted { - #[codec(index = 0)] - InvalidSignatureShare { - round1: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - >, - round2: ::subxt::ext::subxt_core::alloc::vec::Vec< - runtime_types::tangle_primitives::misbehavior::SignedRoundMessage, - >, - }, - } - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZCashFrostJustification { - # [codec (index = 0)] Keygen { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: zcash_frost :: KeygenAborted , } , # [codec (index = 1)] Signing { participants : :: subxt :: ext :: subxt_core :: alloc :: vec :: Vec < [:: core :: primitive :: u8 ; 33usize] > , t : :: core :: primitive :: u16 , reason : runtime_types :: tangle_primitives :: misbehavior :: zcash_frost :: SigningAborted , } , } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct ServiceBlueprint { + pub metadata: runtime_types::tangle_primitives::services::ServiceMetadata, + pub jobs: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::JobDefinition, + >, + pub registration_hook: + runtime_types::tangle_primitives::services::ServiceRegistrationHook, + pub registration_params: + runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::field::FieldType, + >, + pub request_hook: + runtime_types::tangle_primitives::services::ServiceRequestHook, + pub request_params: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::field::FieldType, + >, + pub gadget: runtime_types::tangle_primitives::services::Gadget, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59453,8 +57811,30 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum DKGTSSJustification { - # [codec (index = 0)] DfnsCGGMP21 (runtime_types :: tangle_primitives :: misbehavior :: dfns_cggmp21 :: DfnsCGGMP21Justification ,) , # [codec (index = 1)] ZCashFrost (runtime_types :: tangle_primitives :: misbehavior :: zcash_frost :: ZCashFrostJustification ,) , } + pub struct ServiceMetadata { + pub name: runtime_types::tangle_primitives::services::field::BoundedString, + pub description: ::core::option::Option< + runtime_types::tangle_primitives::services::field::BoundedString, + >, + pub author: ::core::option::Option< + runtime_types::tangle_primitives::services::field::BoundedString, + >, + pub category: ::core::option::Option< + runtime_types::tangle_primitives::services::field::BoundedString, + >, + pub code_repository: ::core::option::Option< + runtime_types::tangle_primitives::services::field::BoundedString, + >, + pub logo: ::core::option::Option< + runtime_types::tangle_primitives::services::field::BoundedString, + >, + pub website: ::core::option::Option< + runtime_types::tangle_primitives::services::field::BoundedString, + >, + pub license: ::core::option::Option< + runtime_types::tangle_primitives::services::field::BoundedString, + >, + } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, @@ -59472,11 +57852,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum MisbehaviorJustification { + pub enum ServiceRegistrationHook { #[codec(index = 0)] - DKGTSS(runtime_types::tangle_primitives::misbehavior::DKGTSSJustification), + None, #[codec(index = 1)] - ZkSaaS(runtime_types::tangle_primitives::misbehavior::ZkSaaSJustification), + Evm(::subxt::ext::subxt_core::utils::H160), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59495,12 +57875,20 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct MisbehaviorSubmission { - pub role_type: runtime_types::tangle_primitives::roles::RoleType, - pub offender: [::core::primitive::u8; 33usize], - pub job_id: ::core::primitive::u64, - pub justification: - runtime_types::tangle_primitives::misbehavior::MisbehaviorJustification, + pub struct ServiceRequest<_1, _2> { + pub blueprint: ::core::primitive::u64, + pub owner: _1, + pub permitted_callers: + runtime_types::bounded_collections::bounded_vec::BoundedVec<_1>, + pub ttl: _2, + pub args: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::field::Field<_1>, + >, + pub operators_with_approval_state: + runtime_types::bounded_collections::bounded_vec::BoundedVec<( + _1, + runtime_types::tangle_primitives::services::ApprovalState, + )>, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59519,10 +57907,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub struct SignedRoundMessage { - pub sender: ::core::primitive::u16, - pub message: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, - pub signature: ::subxt::ext::subxt_core::alloc::vec::Vec<::core::primitive::u8>, + pub enum ServiceRequestHook { + #[codec(index = 0)] + None, + #[codec(index = 1)] + Evm(::subxt::ext::subxt_core::utils::H160), } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59541,81 +57930,47 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum ZkSaaSJustification {} - } - pub mod roles { - use super::runtime_types; - pub mod tss { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ThresholdSignatureRoleType { - #[codec(index = 0)] - DfnsCGGMP21Secp256k1, - #[codec(index = 1)] - DfnsCGGMP21Secp256r1, - #[codec(index = 2)] - DfnsCGGMP21Stark, - #[codec(index = 3)] - SilentShardDKLS23Secp256k1, - #[codec(index = 4)] - ZcashFrostP256, - #[codec(index = 5)] - ZcashFrostP384, - #[codec(index = 6)] - ZcashFrostSecp256k1, - #[codec(index = 7)] - ZcashFrostRistretto255, - #[codec(index = 8)] - ZcashFrostEd25519, - #[codec(index = 9)] - ZcashFrostEd448, - #[codec(index = 10)] - GennaroDKGBls381, - #[codec(index = 11)] - WstsV2, - } + pub enum TypeCheckError { + #[codec(index = 0)] + ArgumentTypeMismatch { + index: ::core::primitive::u8, + expected: runtime_types::tangle_primitives::services::field::FieldType, + actual: runtime_types::tangle_primitives::services::field::FieldType, + }, + #[codec(index = 1)] + NotEnoughArguments { + expected: ::core::primitive::u8, + actual: ::core::primitive::u8, + }, + #[codec(index = 2)] + ResultTypeMismatch { + index: ::core::primitive::u8, + expected: runtime_types::tangle_primitives::services::field::FieldType, + actual: runtime_types::tangle_primitives::services::field::FieldType, + }, } - pub mod zksaas { - use super::runtime_types; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" - )] - #[encode_as_type( - crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" - )] - pub enum ZeroKnowledgeRoleType { - #[codec(index = 0)] - ZkSaaSGroth16, - #[codec(index = 1)] - ZkSaaSMarlin, - } + #[derive( + :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, + :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, + :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, + :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, + Clone, + Debug, + Eq, + PartialEq, + )] + # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] + #[decode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode" + )] + #[encode_as_type( + crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" + )] + pub struct WasmGadget { + pub runtime: runtime_types::tangle_primitives::services::WasmRuntime, + pub soruces: runtime_types::bounded_collections::bounded_vec::BoundedVec< + runtime_types::tangle_primitives::services::GadgetSource, + >, } #[derive( :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, @@ -59634,13 +57989,11 @@ pub mod api { #[encode_as_type( crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode" )] - pub enum RoleType { + pub enum WasmRuntime { #[codec(index = 0)] - Tss(runtime_types::tangle_primitives::roles::tss::ThresholdSignatureRoleType), + Wasmtime, #[codec(index = 1)] - ZkSaaS(runtime_types::tangle_primitives::roles::zksaas::ZeroKnowledgeRoleType), - #[codec(index = 2)] - LightClientRelaying, + Wasmer, } } } @@ -59669,7 +58022,6 @@ pub mod api { pub babe: runtime_types::sp_consensus_babe::app::Public, pub grandpa: runtime_types::sp_consensus_grandpa::app::Public, pub im_online: runtime_types::pallet_im_online::sr25519::app_sr25519::Public, - pub role: runtime_types::tangle_crypto_primitives::crypto::Public, } } #[derive( @@ -59685,104 +58037,6 @@ pub mod api { # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxAdditionalParamsLen; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxDataLen; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxKeyLen; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxParticipants; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxProofLen; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxSignatureLen; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] - pub struct MaxSubmissionLen; - #[derive( - :: subxt :: ext :: subxt_core :: ext :: codec :: Decode, - :: subxt :: ext :: subxt_core :: ext :: codec :: Encode, - :: subxt :: ext :: subxt_core :: ext :: scale_decode :: DecodeAsType, - :: subxt :: ext :: subxt_core :: ext :: scale_encode :: EncodeAsType, - Clone, - Debug, - Eq, - PartialEq, - )] - # [codec (crate = :: subxt :: ext :: subxt_core :: ext :: codec)] - #[decode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_decode")] - #[encode_as_type(crate_path = ":: subxt :: ext :: subxt_core :: ext :: scale_encode")] pub struct NposSolution16 { pub votes1: ::subxt::ext::subxt_core::alloc::vec::Vec<( ::subxt::ext::subxt_core::ext::codec::Compact<::core::primitive::u32>, @@ -60090,26 +58344,20 @@ pub mod api { #[codec(index = 38)] Claims(runtime_types::pallet_airdrop_claims::pallet::Call), #[codec(index = 39)] - Roles(runtime_types::pallet_roles::pallet::Call), + Services(runtime_types::pallet_services::module::Call), #[codec(index = 40)] - Jobs(runtime_types::pallet_jobs::module::Call), - #[codec(index = 41)] - Dkg(runtime_types::pallet_dkg::pallet::Call), - #[codec(index = 42)] - ZkSaaS(runtime_types::pallet_zksaas::pallet::Call), - #[codec(index = 43)] Proxy(runtime_types::pallet_proxy::pallet::Call), - #[codec(index = 44)] + #[codec(index = 41)] MultiAssetDelegation(runtime_types::pallet_multi_asset_delegation::pallet::Call), - #[codec(index = 45)] + #[codec(index = 42)] SygmaAccessSegregator(runtime_types::sygma_access_segregator::pallet::Call), - #[codec(index = 46)] + #[codec(index = 43)] SygmaBasicFeeHandler(runtime_types::sygma_basic_feehandler::pallet::Call), - #[codec(index = 47)] + #[codec(index = 44)] SygmaFeeHandlerRouter(runtime_types::sygma_fee_handler_router::pallet::Call), - #[codec(index = 48)] + #[codec(index = 45)] SygmaPercentageFeeHandler(runtime_types::sygma_percentage_feehandler::pallet::Call), - #[codec(index = 49)] + #[codec(index = 46)] SygmaBridge(runtime_types::sygma_bridge::pallet::Call), } #[derive( @@ -60189,28 +58437,22 @@ pub mod api { #[codec(index = 38)] Claims(runtime_types::pallet_airdrop_claims::pallet::Error), #[codec(index = 39)] - Roles(runtime_types::pallet_roles::pallet::Error), + Services(runtime_types::pallet_services::module::Error), #[codec(index = 40)] - Jobs(runtime_types::pallet_jobs::module::Error), - #[codec(index = 41)] - Dkg(runtime_types::pallet_dkg::pallet::Error), - #[codec(index = 42)] - ZkSaaS(runtime_types::pallet_zksaas::pallet::Error), - #[codec(index = 43)] Proxy(runtime_types::pallet_proxy::pallet::Error), - #[codec(index = 44)] + #[codec(index = 41)] MultiAssetDelegation(runtime_types::pallet_multi_asset_delegation::pallet::Error), - #[codec(index = 45)] + #[codec(index = 42)] SygmaAccessSegregator(runtime_types::sygma_access_segregator::pallet::Error), - #[codec(index = 46)] + #[codec(index = 43)] SygmaBasicFeeHandler(runtime_types::sygma_basic_feehandler::pallet::Error), - #[codec(index = 47)] + #[codec(index = 44)] SygmaFeeHandlerRouter(runtime_types::sygma_fee_handler_router::pallet::Error), - #[codec(index = 48)] + #[codec(index = 45)] SygmaPercentageFeeHandler( runtime_types::sygma_percentage_feehandler::pallet::Error, ), - #[codec(index = 49)] + #[codec(index = 46)] SygmaBridge(runtime_types::sygma_bridge::pallet::Error), } #[derive( @@ -60292,28 +58534,22 @@ pub mod api { #[codec(index = 38)] Claims(runtime_types::pallet_airdrop_claims::pallet::Event), #[codec(index = 39)] - Roles(runtime_types::pallet_roles::pallet::Event), + Services(runtime_types::pallet_services::module::Event), #[codec(index = 40)] - Jobs(runtime_types::pallet_jobs::module::Event), - #[codec(index = 41)] - Dkg(runtime_types::pallet_dkg::pallet::Event), - #[codec(index = 42)] - ZkSaaS(runtime_types::pallet_zksaas::pallet::Event), - #[codec(index = 43)] Proxy(runtime_types::pallet_proxy::pallet::Event), - #[codec(index = 44)] + #[codec(index = 41)] MultiAssetDelegation(runtime_types::pallet_multi_asset_delegation::pallet::Event), - #[codec(index = 45)] + #[codec(index = 42)] SygmaAccessSegregator(runtime_types::sygma_access_segregator::pallet::Event), - #[codec(index = 46)] + #[codec(index = 43)] SygmaBasicFeeHandler(runtime_types::sygma_basic_feehandler::pallet::Event), - #[codec(index = 47)] + #[codec(index = 44)] SygmaFeeHandlerRouter(runtime_types::sygma_fee_handler_router::pallet::Event), - #[codec(index = 48)] + #[codec(index = 45)] SygmaPercentageFeeHandler( runtime_types::sygma_percentage_feehandler::pallet::Event, ), - #[codec(index = 49)] + #[codec(index = 46)] SygmaBridge(runtime_types::sygma_bridge::pallet::Event), } #[derive( diff --git a/tangle-subxt/src/test.rs b/tangle-subxt/src/test.rs deleted file mode 100644 index e0eddbb47..000000000 --- a/tangle-subxt/src/test.rs +++ /dev/null @@ -1,182 +0,0 @@ -use crate::tangle_testnet_runtime::api::runtime_types::pallet_roles::profile::Record; -use sp_core::Pair; -use subxt::OnlineClient; -use subxt::{self, tx::Signer, utils::AccountId32, PolkadotConfig}; - -use crate::tangle_testnet_runtime; -use crate::tangle_testnet_runtime::api::{ - self, - runtime_types::{ - bounded_collections::bounded_vec::BoundedVec, - tangle_primitives::{jobs, roles}, - }, -}; - -#[tokio::test] -#[ignore = "need to be run manually"] -async fn test_job_submission_event() { - let subxt_client = OnlineClient::::new().await.unwrap(); - let alice = subxt_signer::sr25519::dev::alice(); - let bob = subxt_signer::sr25519::dev::bob(); - let alice_account_id = - >::account_id(&alice); - let bob_account_id = - >::account_id(&bob); - - let alice_role_key = sp_core::ecdsa::Pair::from_string("//Alice", None).unwrap(); - let bob_role_key = sp_core::ecdsa::Pair::from_string("//Bob", None).unwrap(); - - let profile = api::runtime_types::pallet_roles::profile::Profile::Shared( - api::runtime_types::pallet_roles::profile::SharedRestakeProfile { - records: BoundedVec(vec![Record { - amount: None, - role: roles::RoleType::Tss( - roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - ), - }]), - amount: 100 * 1_000_000_000, - }, - ); - let create_profile_tx = tangle_testnet_runtime::api::tx().roles().create_profile(profile, None); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&create_profile_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&create_profile_tx, &bob) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - let dkg_phase_one = jobs::JobSubmission { - expiry: 1000u64, - ttl: 1000u64, - job_type: jobs::JobType::DKGTSSPhaseOne(jobs::tss::DKGTSSPhaseOneJobType { - participants: BoundedVec::(vec![ - alice_account_id.clone(), - bob_account_id.clone(), - ]), - threshold: 1u8, - permitted_caller: None, - role_type: roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - hd_wallet: false, - __ignore: Default::default(), - }), - fallback: jobs::FallbackOptions::Destroy, - }; - - let jobs_tx = tangle_testnet_runtime::api::tx().jobs().submit_job(dkg_phase_one); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&jobs_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - let dkg_key = sp_core::ecdsa::Pair::from_seed(&[3u8; 32]); - let dkg_pubkey = dkg_key.public(); - let dkg_pubkey_hash = sp_core::hashing::keccak_256(dkg_pubkey.as_ref()); - - let alice_signature = alice_role_key.sign_prehashed(&dkg_pubkey_hash); - let bob_signature = bob_role_key.sign_prehashed(&dkg_pubkey_hash); - - let dkg_phase_one_result = jobs::JobResult::DKGPhaseOne(jobs::tss::DKGTSSKeySubmissionResult { - key: BoundedVec(dkg_pubkey.0.to_vec()), - participants: BoundedVec(vec![ - BoundedVec(alice_account_id.0.to_vec()), - BoundedVec(bob_account_id.0.to_vec()), - ]), - signature_scheme: jobs::tss::DigitalSignatureScheme::EcdsaSecp256k1, - signatures: BoundedVec(vec![ - BoundedVec(alice_signature.0.to_vec()), - BoundedVec(bob_signature.0.to_vec()), - ]), - threshold: 1, - chain_code: None, - __ignore: Default::default(), - }); - - let job_result_tx = tangle_testnet_runtime::api::tx().jobs().submit_job_result( - roles::RoleType::Tss(roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - 0, - dkg_phase_one_result, - ); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&job_result_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - for i in 1..10 { - // Submit Phase 2 Job Request. - let phase_one_id = 0u64; - let proposal_data = b"proposalBytes"; - let dkg_phase_two = jobs::JobSubmission { - expiry: 1000u64, - ttl: 1000u64, - job_type: jobs::JobType::DKGTSSPhaseTwo(jobs::tss::DKGTSSPhaseTwoJobType { - role_type: roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1, - phase_one_id, - submission: BoundedVec(proposal_data.to_vec()), - derivation_path: None, - __ignore: Default::default(), - }), - fallback: jobs::FallbackOptions::Destroy, - }; - - let jobs_tx = tangle_testnet_runtime::api::tx().jobs().submit_job(dkg_phase_two); - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&jobs_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - - // Submit Phase 2 Job Result. - let proposal_data_hash = sp_core::hashing::keccak_256(proposal_data); - let dkg_signature = dkg_key.sign_prehashed(&proposal_data_hash); - let dkg_phase_two_result = jobs::JobResult::DKGPhaseTwo(jobs::tss::DKGTSSSignatureResult { - signature_scheme: jobs::tss::DigitalSignatureScheme::EcdsaSecp256k1, - signature: BoundedVec(dkg_signature.0[..64].to_vec()), - derivation_path: None, - data: BoundedVec(proposal_data_hash.to_vec()), - verifying_key: BoundedVec(dkg_pubkey.0.to_vec()), - chain_code: None, - __ignore: Default::default(), - }); - - // Phase 2 Job Id - let new_job_id = i as u64; - let job_result_tx = tangle_testnet_runtime::api::tx().jobs().submit_job_result( - roles::RoleType::Tss(roles::tss::ThresholdSignatureRoleType::DfnsCGGMP21Secp256k1), - new_job_id, - dkg_phase_two_result, - ); - - let _hash = subxt_client - .tx() - .sign_and_submit_then_watch_default(&job_result_tx, &alice) - .await - .unwrap() - .wait_for_finalized_success() - .await - .unwrap(); - } -} diff --git a/types/package.json b/types/package.json index 55a4583c2..669c3962a 100644 --- a/types/package.json +++ b/types/package.json @@ -54,6 +54,7 @@ }, "devDependencies": { "@types/websocket": "^1.0.10", + "prettier": "3.2.5", "rimraf": "5.0.5", "ts-node": "10.9.2", "tsconfig-paths": "^4.2.0", diff --git a/types/service-demo.ts b/types/service-demo.ts new file mode 100644 index 000000000..3e907f091 --- /dev/null +++ b/types/service-demo.ts @@ -0,0 +1,279 @@ +import { ApiPromise, WsProvider } from "@polkadot/api"; +import { SubmittableExtrinsic, AddressOrPair } from "@polkadot/api-base/types"; +import { Keyring } from "@polkadot/keyring"; +import { u8aToHex, hexToU8a } from "@polkadot/util"; +import * as readline from "node:readline/promises"; +import { stdin as input, stdout as output, exit } from "node:process"; + +/** + * This script demonstrates how to work with pallet-services, it will demonstrate how to: + * - Create a service blueprint + * - Register on a service as a service provider (operator) + * - Other users can request the service (consumer) + * - Invoke functions on the service + * - Service Lifecycle. + */ +(async () => { + const provider = new WsProvider("ws://127.0.0.1:9944"); + const api = await ApiPromise.create({ provider, noInitWarn: true }); + + const rl = readline.createInterface({ + input, + output, + prompt: "> ", + removeHistoryDuplicates: true, + }); + + await api.isReady; + + rl.on("close", async () => { + await api.disconnect(); + }); + + rl.on("SIGINT", async () => { + console.log("Received SIGINT, closing the connection"); + await api.disconnect(); + exit(0); + }); + + console.log(`Connected to local node`); + + const sr25519Keyring = new Keyring({ type: "sr25519" }); + const ecdsaKeyring = new Keyring({ type: "ecdsa" }); + const [ALICE, BOB, CHARLIE, DAVE, EVE] = [ + "Alice", + "Bob", + "Charlie", + "Dave", + "Eve", + ].map((name) => sr25519Keyring.addFromUri(`//${name}`)); + + const [BOBEcdsa, CHARLIEEcdsa, DAVEEcdsa, DKG] = [ + "Bob", + "Charlie", + "Dave", + "DKG", + ].map((name) => ecdsaKeyring.addFromUri(`//${name}`)); + // Alice is a devloper and she wants to create a service blueprint + // Bob, Charlie, Dave are service providers + // Eve is a consumer + + // Alice will create the service blueprint, in our demo, it is a Simple TSS service + // Similar to CGGMP21. + + const blueprintId = await api.query.services.nextBlueprintId(); + + console.log("=> Creating a new service blueprint"); + await rl.question("|- Press Enter to continue"); + console.log("|-- Creating a new service blueprint"); + const createBlueprintTx = api.tx.services.createBlueprint({ + metadata: { + name: "CGGMP21", + description: "A simple Threshold Signature Scheme as a service", + author: "Alice", + }, + jobs: [ + { + metadata: { + name: "keygen", + description: "run a new t-of-n DKG", + }, + params: ["Uint8"], + result: ["Bytes"], + verifier: "None", + }, + { + metadata: { + name: "sign", + description: "sign a message using a t-of-n DKG", + }, + params: ["Bytes"], + result: ["Bytes"], + verifier: "None", + }, + ], + registrationHook: "None", + requestHook: "None", + requestParams: [], + registrationParams: [], + gadget: { + Wasm: { + Ipfs: [], + }, + }, + }); + + await signAndSend(ALICE, createBlueprintTx); + console.log(`|-- Alice created a service blueprint with id: ${blueprintId}`); + + // Bob, Charlie, Dave are service providers, they will register on the service. + const bobRegisterTx = api.tx.services.register( + blueprintId, + { + key: BOBEcdsa.publicKey, + approval: "None", + }, + [], + ); + + console.log("=> Bob is registering on the service"); + await rl.question("|- Press Enter to continue"); + console.log("|-- Bob is registering on the service"); + await signAndSend(BOB, bobRegisterTx); + console.log("|-- Bob registered on the service"); + + const charlieRegisterTx = api.tx.services.register( + blueprintId, + { + key: CHARLIEEcdsa.publicKey, + approval: "None", + }, + [], + ); + + console.log("=> Charlie is registering on the service"); + await rl.question("|- Press Enter to continue"); + console.log("|-- Charlie is registering on the service"); + await signAndSend(CHARLIE, charlieRegisterTx); + console.log("|-- Charlie registered on the service"); + + const daveRegisterTx = api.tx.services.register( + blueprintId, + { + key: DAVEEcdsa.publicKey, + approval: "None", + }, + [], + ); + + console.log("=> Dave is registering on the service"); + await rl.question("|- Press Enter to continue"); + console.log("|-- Dave is registering on the service"); + await signAndSend(DAVE, daveRegisterTx); + console.log("|-- Dave registered on the service"); + + // Eve is a consumer, she will request the service. + const serviceInstanceId = await api.query.services.nextInstanceId(); + console.log("=> Eve is requesting the service"); + await rl.question("|- Press Enter to continue"); + console.log("|-- Eve is requesting the service"); + const requestServiceTx = api.tx.services.request( + blueprintId, + [], + [BOB.address, CHARLIE.address, DAVE.address], + 10_000, + [], + ); + await signAndSend(EVE, requestServiceTx); + console.log(`|-- Eve requested the service: ${serviceInstanceId}`); + + // Eve will invoke the keygen job on the service + console.log("=> Eve is invoking the keygen job on the service"); + await rl.question("|- Press Enter to continue"); + console.log("|-- Eve is invoking the keygen job on the service"); + const jobCallId = await api.query.services.nextJobCallId(); + const keygenJobTx = api.tx.services.call(serviceInstanceId, 0, [ + { Uint8: 2 }, + ]); + await signAndSend(EVE, keygenJobTx); + console.log(`|-- Eve invoked the keygen job with id: ${jobCallId}`); + + // Bob, Charlie, Dave will accept the job and submit the result + console.log( + "=> Bob, Charlie, Dave are accepting the job and submitting the result", + ); + await rl.question("|- Press Enter to continue"); + console.log( + "|-- Bob, Charlie, Dave are accepting the job and submitting the result", + ); + const jobResultTx = api.tx.services.submitResult(serviceInstanceId, jobCallId, [ + { + Bytes: u8aToHex(DKG.publicKey), + }, + ]); + await signAndSend(BOB, jobResultTx); + console.log( + "|-- Bob, charlie, Dave accepted the job and submitted the result", + ); + + // Eve will invoke the sign job on the service + console.log("=> Eve is invoking the sign job on the service"); + await rl.question("|- Press Enter to continue"); + console.log("|-- Eve is invoking the sign job on the service"); + const signJobCallId = await api.query.services.nextJobCallId(); + const signJobTx = api.tx.services.call(serviceInstanceId, 1, [ + { Bytes: "0xf00dc00ed" }, + ]); + + await signAndSend(EVE, signJobTx); + console.log(`|-- Eve invoked the sign job with id: ${signJobCallId}`); + + // Bob, Charlie, Dave will accept the job and submit the result + console.log( + "=> Bob, Charlie, Dave are accepting the job and submitting the result", + ); + await rl.question("|- Press Enter to continue"); + console.log( + "|-- Bob, Charlie, Dave are accepting the job and submitting the result", + ); + const signature = DKG.sign(hexToU8a("0xf00dc00ed")); + // Bob, Charlie, Dave will accept the job and submit the result + const signJobResultTx = api.tx.services.submitResult( + serviceInstanceId, + signJobCallId, + [ + { + Bytes: u8aToHex(signature), + }, + ], + ); + await signAndSend(BOB, signJobResultTx); + console.log( + "|-- Bob, charlie, Dave accepted the job and submitted the result", + ); + + // *** --- Helper Functions --- *** + + async function signAndSend( + signer: AddressOrPair, + tx: SubmittableExtrinsic<"promise">, + waitTillFinallized: boolean = false, + ): Promise { + // Sign and send the transaction and wait for it to be included. + await new Promise(async (resolve, reject) => { + const unsub = await tx.signAndSend( + signer, + async ({ events = [], status, dispatchError }) => { + if (dispatchError) { + if (dispatchError.isModule) { + // for module errors, we have the section indexed, lookup + const decoded = api.registry.findMetaError( + dispatchError.asModule, + ); + const { docs, name, section } = decoded; + + console.log(`|--- ${section}.${name}: ${docs.join(" ")}`); + reject(`${section}.${name}`); + } + } + if (status.isInBlock && !waitTillFinallized) { + console.log("|--- Events:"); + events.forEach(({ event: { data, method, section } }) => { + console.log(`|---- ${section}.${method}:: ${data}`); + }); + unsub(); + resolve(void 0); + } + if (status.isFinalized && waitTillFinallized) { + console.log("|--- Events:"); + events.forEach(({ event: { data, method, section } }) => { + console.log(`|---- ${section}.${method}:: ${data}`); + }); + unsub(); + resolve(void 0); + } + }, + ); + }); + } +})(); diff --git a/types/src/interfaces/augment-api-consts.ts b/types/src/interfaces/augment-api-consts.ts index 0e2d59c31..1ed5a066d 100644 --- a/types/src/interfaces/augment-api-consts.ts +++ b/types/src/interfaces/augment-api-consts.ts @@ -3,17 +3,44 @@ // import type lookup before we augment - in some environments // this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/consts'; +import "@polkadot/api-base/types/consts"; -import type { ApiTypes, AugmentedConst } from '@polkadot/api-base/types'; -import type { BTreeMap, Bytes, Option, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; -import type { Codec, ITuple } from '@polkadot/types-codec/types'; -import type { AccountId32, H160, Perbill, Permill } from '@polkadot/types/interfaces/runtime'; -import { SpWeightsWeightV2Weight, FrameSupportPalletId, StagingXcmV4AssetAssetId, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, SpWeightsRuntimeDbWeight, SpVersionRuntimeVersion } from '@polkadot/types/lookup'; +import type { ApiTypes, AugmentedConst } from "@polkadot/api-base/types"; +import type { + BTreeMap, + Bytes, + Option, + U256, + U8aFixed, + Vec, + bool, + u128, + u16, + u32, + u64, + u8, +} from "@polkadot/types-codec"; +import type { Codec, ITuple } from "@polkadot/types-codec/types"; +import type { + AccountId32, + H160, + Perbill, + Permill, +} from "@polkadot/types/interfaces/runtime"; +import { + FrameSupportPalletId, + FrameSystemLimitsBlockLength, + FrameSystemLimitsBlockWeights, + SpVersionRuntimeVersion, + SpWeightsRuntimeDbWeight, + SpWeightsWeightV2Weight, + StagingXcmV4AssetAssetId, +} from "@polkadot/types/lookup"; -export type __AugmentedConst = AugmentedConst; +export type __AugmentedConst = + AugmentedConst; -declare module '@polkadot/api-base/types/consts' { +declare module "@polkadot/api-base/types/consts" { interface AugmentedConsts { assets: { /** @@ -40,7 +67,7 @@ declare module '@polkadot/api-base/types/consts' { metadataDepositPerByte: u128 & AugmentedConst; /** * Max number of items to destroy per `destroy_accounts` and `destroy_approvals` call. - * + * * Must be configured to result in a weight that makes each call fit in a block. **/ removeItemsLimit: u32 & AugmentedConst; @@ -84,35 +111,35 @@ declare module '@polkadot/api-base/types/consts' { bagsList: { /** * The list of thresholds separating the various bags. - * + * * Ids are separated into unsorted bags according to their score. This specifies the * thresholds separating the bags. An id's bag is the largest bag for which the id's score * is less than or equal to its upper threshold. - * + * * When ids are iterated, higher bags are iterated completely before lower bags. This means * that iteration is _semi-sorted_: ids of higher score tend to come before ids of lower * score, but peer ids within a particular bag are sorted in insertion order. - * + * * # Expressing the constant - * + * * This constant must be sorted in strictly increasing order. Duplicate items are not * permitted. - * + * * There is an implied upper limit of `Score::MAX`; that value does not need to be * specified within the bag. For any two threshold lists, if one ends with * `Score::MAX`, the other one does not, and they are otherwise equal, the two * lists will behave identically. - * + * * # Calculation - * + * * It is recommended to generate the set of thresholds in a geometric series, such that * there exists some constant ratio such that `threshold[k + 1] == (threshold[k] * * constant_ratio).max(threshold[k] + 1)` for all `k`. - * + * * The helpers in the `/utils/frame/generate-bags` module can simplify this calculation. - * + * * # Examples - * + * * - If `BagThresholds::get().is_empty()`, then all ids are put into the same bag, and * iteration is strictly in insertion order. * - If `BagThresholds::get().len() == 64`, and the thresholds are determined according to @@ -121,9 +148,9 @@ declare module '@polkadot/api-base/types/consts' { * the procedure given above, then the constant ratio is approximately equal to 1.248. * - If the threshold list begins `[1, 2, 3, ...]`, then an id with score 0 or 1 will fall * into bag 0, an id with score 2 will fall into bag 1, etc. - * + * * # Migration - * + * * In the event that this list ever changes, a copy of the old bags list must be retained. * With that `List::migrate` can be called, which will perform the appropriate migration. **/ @@ -136,12 +163,12 @@ declare module '@polkadot/api-base/types/consts' { balances: { /** * The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO! - * + * * If you *really* need it to be zero, you can enable the feature `insecure_zero_ed` for * this pallet. However, you do so at your own risk: this will open up a major DoS vector. * In case you have multiple sources of provider references, you may also get unexpected * behaviour if you set this to zero. - * + * * Bottom line: Do yourself a favour and make it at least one! **/ existentialDeposit: u128 & AugmentedConst; @@ -190,7 +217,7 @@ declare module '@polkadot/api-base/types/consts' { curatorDepositMin: Option & AugmentedConst; /** * The curator deposit is calculated as a percentage of the curator fee. - * + * * This deposit has optional upper and lower bounds with `CuratorDepositMax` and * `CuratorDepositMin`. **/ @@ -201,7 +228,7 @@ declare module '@polkadot/api-base/types/consts' { dataDepositPerByte: u128 & AugmentedConst; /** * Maximum acceptable reason length. - * + * * Benchmarks depend on this value, be sure to update weights file when changing this value **/ maximumReasonLength: u32 & AugmentedConst; @@ -248,7 +275,7 @@ declare module '@polkadot/api-base/types/consts' { cooloffPeriod: u64 & AugmentedConst; /** * The period between a proposal being approved and enacted. - * + * * It should generally be a little more than the unstake period to ensure that * voting stakers have an opportunity to remove themselves from the system in the case * where they are on the losing side of a vote. @@ -282,7 +309,7 @@ declare module '@polkadot/api-base/types/consts' { maxProposals: u32 & AugmentedConst; /** * The maximum number of votes for an account. - * + * * Also used to compute weight, an overly big value can * lead to extrinsic with very big weight: see `delegate` for instance. **/ @@ -293,7 +320,7 @@ declare module '@polkadot/api-base/types/consts' { minimumDeposit: u128 & AugmentedConst; /** * The minimum period of vote locking. - * + * * It should be no shorter than enactment period to ensure that in the case of an approval, * those successful voters are locked into the consequences that their votes entail. **/ @@ -316,7 +343,7 @@ declare module '@polkadot/api-base/types/consts' { /** * The maximum number of winners that can be elected by this `ElectionProvider` * implementation. - * + * * Note: This must always be greater or equal to `T::DataProvider::desired_targets()`. **/ maxWinners: u32 & AugmentedConst; @@ -330,7 +357,7 @@ declare module '@polkadot/api-base/types/consts' { minerTxPriority: u64 & AugmentedConst; /** * The repeat threshold of the offchain worker. - * + * * For example, if it is 5, that means that at least 5 blocks will elapse between attempts * to submit the worker's solution. **/ @@ -349,7 +376,7 @@ declare module '@polkadot/api-base/types/consts' { signedMaxRefunds: u32 & AugmentedConst; /** * Maximum number of signed submissions that can be queued. - * + * * It is best to avoid adjusting this during an election, as it impacts downstream data * structures. In particular, `SignedSubmissionIndices` is bounded on this value. If you * update this value during an election, you _must_ ensure that @@ -359,7 +386,7 @@ declare module '@polkadot/api-base/types/consts' { signedMaxSubmissions: u32 & AugmentedConst; /** * Maximum weight of a signed solution. - * + * * If [`Config::MinerConfig`] is being implemented to submit signed solutions (outside of * this pallet), then [`MinerConfig::solution_weight`] is used to compare against * this value. @@ -397,25 +424,25 @@ declare module '@polkadot/api-base/types/consts' { desiredRunnersUp: u32 & AugmentedConst; /** * The maximum number of candidates in a phragmen election. - * + * * Warning: This impacts the size of the election which is run onchain. Chose wisely, and * consider how it will impact `T::WeightInfo::election_phragmen`. - * + * * When this limit is reached no more candidates are accepted in the election. **/ maxCandidates: u32 & AugmentedConst; /** * The maximum number of voters to allow in a phragmen election. - * + * * Warning: This impacts the size of the election which is run onchain. Chose wisely, and * consider how it will impact `T::WeightInfo::election_phragmen`. - * + * * When the limit is reached the new voters are ignored. **/ maxVoters: u32 & AugmentedConst; /** * Maximum numbers of votes per voter. - * + * * Warning: This impacts the size of the election which is run onchain. Chose wisely, and * consider how it will impact `T::WeightInfo::election_phragmen`. **/ @@ -432,7 +459,7 @@ declare module '@polkadot/api-base/types/consts' { termDuration: u64 & AugmentedConst; /** * Base deposit associated with voting. - * + * * This should be sensibly high to economically ensure the pallet cannot be attacked by * creating a gigantic number of votes. **/ @@ -457,7 +484,7 @@ declare module '@polkadot/api-base/types/consts' { maxNominators: u32 & AugmentedConst; /** * The maximum number of entries to keep in the set id to session index mapping. - * + * * Since the `SetIdSession` map is only used for validating equivocations this * value should relate to the bonding duration of whatever staking system is * being used (if any). If equivocation handling is not enabled then this value @@ -513,7 +540,7 @@ declare module '@polkadot/api-base/types/consts' { imOnline: { /** * A configuration for base priority of unsigned transactions. - * + * * This is exposed so that it can be tuned for particular runtime, when * multiple pallets send unsigned transactions. **/ @@ -581,7 +608,7 @@ declare module '@polkadot/api-base/types/consts' { /** * The base amount of currency needed to reserve for creating a multisig execution or to * store a dispatch call for later. - * + * * This is held for an additional storage item whose value size is * `4 + sizeof((BlockNumber, Balance, AccountId))` bytes and whose key size is * `32 + sizeof(AccountId)` bytes. @@ -589,7 +616,7 @@ declare module '@polkadot/api-base/types/consts' { depositBase: u128 & AugmentedConst; /** * The amount of currency needed per unit threshold when creating a multisig execution. - * + * * This is held for adding 32 bytes more into a pre-existing storage value. **/ depositFactor: u128 & AugmentedConst; @@ -605,15 +632,15 @@ declare module '@polkadot/api-base/types/consts' { nominationPools: { /** * The maximum pool points-to-balance ratio that an `open` pool can have. - * + * * This is important in the event slashing takes place and the pool's points-to-balance * ratio becomes disproportional. - * + * * Moreover, this relates to the `RewardCounter` type as well, as the arithmetic operations * are a function of number of points, and by setting this value to e.g. 10, you ensure * that the total number of points in the system are at most 10 times the total_issuance of * the chain, in the absolute worse case. - * + * * For a value of 10, the threshold would be a pool points-to-balance ratio of 10:1. * Such a scenario would also be the equivalent of the pool being 90% slashed. **/ @@ -634,14 +661,14 @@ declare module '@polkadot/api-base/types/consts' { proxy: { /** * The base amount of currency needed to reserve for creating an announcement. - * + * * This is held when a new storage item holding a `Balance` is created (typically 16 * bytes). **/ announcementDepositBase: u128 & AugmentedConst; /** * The amount of currency needed per announcement made. - * + * * This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes) * into a pre-existing storage value. **/ @@ -656,14 +683,14 @@ declare module '@polkadot/api-base/types/consts' { maxProxies: u32 & AugmentedConst; /** * The base amount of currency needed to reserve for creating a proxy. - * + * * This is held for an additional storage item whose value size is * `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes. **/ proxyDepositBase: u128 & AugmentedConst; /** * The amount of currency needed per proxy added. - * + * * This is held for adding 32 bytes plus an instance of `ProxyType` more into a * pre-existing storage value. Thus, when configuring `ProxyDepositFactor` one should take * into account `32 + proxy_type.encode().len()` bytes of data. @@ -691,7 +718,7 @@ declare module '@polkadot/api-base/types/consts' { maximumWeight: SpWeightsWeightV2Weight & AugmentedConst; /** * The maximum number of scheduled calls in the queue for a single block. - * + * * NOTE: * + Dependent pallets' benchmarks might require a higher limit for the setting. Set a * higher limit under `runtime-benchmarks` feature. @@ -702,6 +729,92 @@ declare module '@polkadot/api-base/types/consts' { **/ [key: string]: Codec; }; + services: { + /** + * Maximum number of binaries per gadget. + **/ + maxBinariesPerGadget: u32 & AugmentedConst; + /** + * binary name maximum length. + **/ + maxBinaryNameLength: u32 & AugmentedConst; + /** + * Maximum number of blueprints per operator. + **/ + maxBlueprintsPerOperator: u32 & AugmentedConst; + /** + * Container image name maximum length. + **/ + maxContainerImageNameLength: u32 & AugmentedConst; + /** + * Container image tag maximum length. + **/ + maxContainerImageTagLength: u32 & AugmentedConst; + /** + * Container registry maximum length. + **/ + maxContainerRegistryLength: u32 & AugmentedConst; + /** + * Maximum number of fields in a job call. + **/ + maxFields: u32 & AugmentedConst; + /** + * Maximum size of a field in a job call. + **/ + maxFieldsSize: u32 & AugmentedConst; + /** + * Git owner maximum length. + **/ + maxGitOwnerLength: u32 & AugmentedConst; + /** + * Git repository maximum length. + **/ + maxGitRepoLength: u32 & AugmentedConst; + /** + * Git tag maximum length. + **/ + maxGitTagLength: u32 & AugmentedConst; + /** + * IPFS hash maximum length. + **/ + maxIpfsHashLength: u32 & AugmentedConst; + /** + * Maximum number of jobs per service. + **/ + maxJobsPerService: u32 & AugmentedConst; + /** + * Maximum length of metadata string length. + **/ + maxMetadataLength: u32 & AugmentedConst; + /** + * Maximum number of Operators per service. + **/ + maxOperatorsPerService: u32 & AugmentedConst; + /** + * Maximum number of permitted callers per service. + **/ + maxPermittedCallers: u32 & AugmentedConst; + /** + * Maximum number of services per operator. + **/ + maxServicesPerOperator: u32 & AugmentedConst; + /** + * Maximum number of services per user. + **/ + maxServicesPerUser: u32 & AugmentedConst; + /** + * Maximum number of sources per gadget. + **/ + maxSourcesPerGadget: u32 & AugmentedConst; + /** + * `PalletId` for the services pallet. + **/ + palletId: FrameSupportPalletId & AugmentedConst; + /** + * Generic const + **/ + [key: string]: Codec; + }; staking: { /** * Number of eras that staked funds must remain bonded for. @@ -709,20 +822,20 @@ declare module '@polkadot/api-base/types/consts' { bondingDuration: u32 & AugmentedConst; /** * Number of eras to keep in history. - * + * * Following information is kept for eras in `[current_era - * HistoryDepth, current_era]`: `ErasStakers`, `ErasStakersClipped`, * `ErasValidatorPrefs`, `ErasValidatorReward`, `ErasRewardPoints`, * `ErasTotalStake`, `ErasStartSessionIndex`, `ClaimedRewards`, `ErasStakersPaged`, * `ErasStakersOverview`. - * + * * Must be more than the number of eras delayed by session. * I.e. active era must always be in history. I.e. `active_era > * current_era - history_depth` must be guaranteed. - * + * * If migrating an existing pallet from storage value to config value, * this should be set to same value or greater as in storage. - * + * * Note: `HistoryDepth` is used as the upper bound for the `BoundedVec` * item `StakingLedger.legacy_claimed_rewards`. Setting this value lower than * the existing value can lead to inconsistencies in the @@ -732,14 +845,14 @@ declare module '@polkadot/api-base/types/consts' { historyDepth: u32 & AugmentedConst; /** * The maximum size of each `T::ExposurePage`. - * + * * An `ExposurePage` is weakly bounded to a maximum of `MaxExposurePageSize` * nominators. - * + * * For older non-paged exposure, a reward payout was restricted to the top * `MaxExposurePageSize` nominators. This is to limit the i/o cost for the * nominator payout. - * + * * Note: `MaxExposurePageSize` is used to bound `ClaimedRewards` and is unsafe to reduce * without handling it in a migration. **/ @@ -748,7 +861,7 @@ declare module '@polkadot/api-base/types/consts' { * The maximum number of `unlocking` chunks a [`StakingLedger`] can * have. Effectively determines how many unique eras a staker may be * unbonding in. - * + * * Note: `MaxUnlockingChunks` is used as the upper bound for the * `BoundedVec` item `StakingLedger.unlocking`. Setting this value * lower than the existing value can lead to inconsistencies in the @@ -763,7 +876,7 @@ declare module '@polkadot/api-base/types/consts' { sessionsPerEra: u32 & AugmentedConst; /** * Number of eras that slashes are deferred by, after computation. - * + * * This should be less than the bonding duration. Set to 0 if slashes * should be applied immediately, without opportunity for intervention. **/ @@ -791,11 +904,13 @@ declare module '@polkadot/api-base/types/consts' { /** * AssetId and ResourceId pairs **/ - resourcePairs: Vec> & AugmentedConst; + resourcePairs: Vec> & + AugmentedConst; /** * Bridge transfer reserve accounts mapping with designated assets **/ - transferReserveAccounts: BTreeMap & AugmentedConst; + transferReserveAccounts: BTreeMap & + AugmentedConst; /** * Generic const **/ @@ -820,7 +935,7 @@ declare module '@polkadot/api-base/types/consts' { dbWeight: SpWeightsRuntimeDbWeight & AugmentedConst; /** * The designated SS58 prefix of this chain. - * + * * This replaces the "ss58Format" property declared in the chain spec. Reason is * that the runtime should know about the prefix in order to make use of it as * an identifier of the chain. @@ -838,7 +953,7 @@ declare module '@polkadot/api-base/types/consts' { timestamp: { /** * The minimum period between blocks. - * + * * Be aware that this is different to the *expected* period that the block production * apparatus provides. Your chosen consensus system will generally work with this to * determine a sensible block time. For example, in the Aura pallet it will be double this @@ -854,21 +969,21 @@ declare module '@polkadot/api-base/types/consts' { /** * A fee multiplier for `Operational` extrinsics to compute "virtual tip" to boost their * `priority` - * + * * This value is multiplied by the `final_fee` to obtain a "virtual tip" that is later * added to a tip component in regular `priority` calculations. * It means that a `Normal` transaction can front-run a similarly-sized `Operational` * extrinsic (with no tip), by including a tip value greater than the virtual tip. - * + * * ```rust,ignore * // For `Normal` * let priority = priority_calc(tip); - * + * * // For `Operational` * let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier; * let priority = priority_calc(tip + virtual_tip); * ``` - * + * * Note that since we use `final_fee` the multiplier applies also to the regular `tip` * sent with the transaction. So, not only does the transaction get a priority bump based * on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational` @@ -887,7 +1002,7 @@ declare module '@polkadot/api-base/types/consts' { burn: Permill & AugmentedConst; /** * The maximum number of approvals that can wait in the spending queue. - * + * * NOTE: This parameter is also used within the Bounties Pallet extension if enabled. **/ maxApprovals: u32 & AugmentedConst; @@ -924,7 +1039,7 @@ declare module '@polkadot/api-base/types/consts' { txPause: { /** * Maximum length for pallet name and call name SCALE encoded string names. - * + * * TOO LONG NAMES WILL BE TREATED AS PAUSED. **/ maxNameLen: u32 & AugmentedConst; diff --git a/types/src/interfaces/augment-api-errors.ts b/types/src/interfaces/augment-api-errors.ts index a01f950e0..b17cb2640 100644 --- a/types/src/interfaces/augment-api-errors.ts +++ b/types/src/interfaces/augment-api-errors.ts @@ -3,13 +3,14 @@ // import type lookup before we augment - in some environments // this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/errors'; +import "@polkadot/api-base/types/errors"; -import type { ApiTypes, AugmentedError } from '@polkadot/api-base/types'; +import type { ApiTypes, AugmentedError } from "@polkadot/api-base/types"; -export type __AugmentedError = AugmentedError; +export type __AugmentedError = + AugmentedError; -declare module '@polkadot/api-base/types/errors' { +declare module "@polkadot/api-base/types/errors" { interface AugmentedErrors { assets: { /** @@ -610,21 +611,21 @@ declare module '@polkadot/api-base/types/errors' { UnknownIdentifier: AugmentedError; /** * The submitted decommitment data size is valid. - * + * * This error is returned when the decommitment data size is valid * but the caller claims it is invalid! **/ ValidDataSize: AugmentedError; /** * The submitted decommitment is valid. - * + * * This error is returned when the decommitment is valid * but the caller claims it is invalid! **/ ValidDecommitment: AugmentedError; /** * The submitted messages passed Feldman verification. - * + * * This error is returned when the messages passed Feldman verification * but the caller claims it is invalid! **/ @@ -642,21 +643,21 @@ declare module '@polkadot/api-base/types/errors' { ValidFrostSignatureShare: AugmentedError; /** * The submitted Mod Proof is valid. - * + * * This error is returned when the Mod Proof is valid * but the caller claims it is invalid. **/ ValidModProof: AugmentedError; /** * The submitted ring pedersen parameters are valid. - * + * * This error is returned when the ring pedersen parameters are valid * but the caller claims it is invalid. **/ ValidRingPedersenParameters: AugmentedError; /** * The submitted Schnorr Proof is valid. - * + * * This error is returned when the decommitment and its * Schnorr are valid. but the caller * claims it is invalid. @@ -1415,7 +1416,7 @@ declare module '@polkadot/api-base/types/errors' { MetadataExceedsMaxLen: AugmentedError; /** * The amount does not meet the minimum bond to either join or create a pool. - * + * * The depositor can never unbond to a value less than `Pallet::depositor_min_bond`. The * caller does not have nominating permissions for the pool. Members can never unbond to a * value below `MinJoinBond`. @@ -1668,6 +1669,97 @@ declare module '@polkadot/api-base/types/errors' { **/ [key: string]: AugmentedError; }; + services: { + /** + * The caller is already registered as a operator. + **/ + AlreadyRegistered: AugmentedError; + /** + * The approval is not requested for the operator (the caller). + **/ + ApprovalNotRequested: AugmentedError; + /** + * The service blueprint was not found. + **/ + BlueprintNotFound: AugmentedError; + /** + * An error occurred while encoding the EVM ABI. + **/ + EVMAbiEncode: AugmentedError; + /** + * The caller does not have the requirements to call a job. + **/ + InvalidJobCallInput: AugmentedError; + /** + * The caller provided an invalid job result. + **/ + InvalidJobResult: AugmentedError; + /** + * The caller does not have the requirements to be a operator. + **/ + InvalidRegistrationInput: AugmentedError; + /** + * The caller does not have the requirements to request a service. + **/ + InvalidRequestInput: AugmentedError; + /** + * The result of the job call was not found. + **/ + JobCallResultNotFound: AugmentedError; + /** + * The requested job definition does not exist. + * This error is returned when the requested job definition does not exist in the service blueprint. + **/ + JobDefinitionNotFound: AugmentedError; + /** + * The maximum number of fields per request has been exceeded. + **/ + MaxFieldsExceeded: AugmentedError; + /** + * The maximum number of permitted callers per service has been exceeded. + **/ + MaxPermittedCallersExceeded: AugmentedError; + /** + * The maximum number of operators per service has been exceeded. + **/ + MaxServiceProvidersExceeded: AugmentedError; + /** + * Maximum number of services per Provider reached. + **/ + MaxServicesPerProviderExceeded: AugmentedError; + /** + * The maximum number of services per user has been exceeded. + **/ + MaxServicesPerUserExceeded: AugmentedError; + /** + * The caller is not registered as a operator. + **/ + NotRegistered: AugmentedError; + /** + * Operator profile not found. + **/ + OperatorProfileNotFound: AugmentedError; + /** + * The service was not found. + **/ + ServiceNotFound: AugmentedError; + /** + * Either the service or the job call was not found. + **/ + ServiceOrJobCallNotFound: AugmentedError; + /** + * The service request was not found. + **/ + ServiceRequestNotFound: AugmentedError; + /** + * An error occurred while type checking the provided input input. + **/ + TypeCheck: AugmentedError; + /** + * Generic error + **/ + [key: string]: AugmentedError; + }; session: { /** * Registered duplicate key. @@ -1907,14 +1999,10 @@ declare module '@polkadot/api-base/types/errors' { * Insufficient balance on sender account **/ InsufficientBalance: AugmentedError; - InvalidDepositDataInvalidAmount: AugmentedError; /** * Deposit data not correct **/ - InvalidDepositDataInvalidLength: AugmentedError; - InvalidDepositDataInvalidRecipient: AugmentedError; - InvalidDepositDataInvalidRecipientLength: AugmentedError; - InvalidDepositDataRecipientLengthNotMatch: AugmentedError; + InvalidDepositData: AugmentedError; /** * Fee config option missing **/ @@ -1938,11 +2026,7 @@ declare module '@polkadot/api-base/types/errors' { /** * Asset transactor execution failed **/ - TransactFailedDeposit: AugmentedError; - TransactFailedFeeDeposit: AugmentedError; - TransactFailedHoldInReserved: AugmentedError; - TransactFailedReleaseFromReserved: AugmentedError; - TransactFailedWithdraw: AugmentedError; + TransactFailed: AugmentedError; /** * Transactor operation failed **/ @@ -1999,7 +2083,7 @@ declare module '@polkadot/api-base/types/errors' { CallFiltered: AugmentedError; /** * Failed to extract the runtime version from the new runtime. - * + * * Either calling `Core_version` or decoding `RuntimeVersion` failed. **/ FailedToExtractRuntimeVersion: AugmentedError; diff --git a/types/src/interfaces/augment-api-events.ts b/types/src/interfaces/augment-api-events.ts index 10cec2683..2527cb9d4 100644 --- a/types/src/interfaces/augment-api-events.ts +++ b/types/src/interfaces/augment-api-events.ts @@ -3,7 +3,7 @@ // import type lookup before we augment - in some environments // this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/events'; +import "@polkadot/api-base/types/events"; import type { ApiTypes, AugmentedEvent } from '@polkadot/api-base/types'; import type { Bytes, Null, Option, Result, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; @@ -11,108 +11,237 @@ import type { ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, H160, H256, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; import { FrameSupportTokensMiscBalanceStatus, PalletAirdropClaimsUtilsMultiAddress, SpRuntimeDispatchError, PalletDemocracyMetadataOwner, PalletDemocracyVoteThreshold, PalletDemocracyVoteAccountVote, PalletDkgFeeInfo, PalletElectionProviderMultiPhaseElectionCompute, SpNposElectionsElectionScore, PalletElectionProviderMultiPhasePhase, EvmCoreErrorExitReason, EthereumLog, SpConsensusGrandpaAppPublic, PalletImOnlineSr25519AppSr25519Public, SpStakingExposure, TanglePrimitivesRolesRoleType, TanglePrimitivesJobsJobInfo, TanglePrimitivesJobsJobSubmission, PalletMultiAssetDelegationRewardsAssetAction, PalletMultisigTimepoint, PalletNominationPoolsCommissionChangeRate, PalletNominationPoolsCommissionClaimPermission, PalletNominationPoolsPoolState, TangleTestnetRuntimeProxyType, PalletStakingForcing, PalletStakingRewardDestination, PalletStakingValidatorPrefs, StagingXcmV4AssetAssetId, SygmaTraitsTransferType, SygmaFeeHandlerRouterFeeHandlerType, FrameSupportDispatchDispatchInfo, PalletZksaasFeeInfo } from '@polkadot/types/lookup'; -export type __AugmentedEvent = AugmentedEvent; +export type __AugmentedEvent = + AugmentedEvent; -declare module '@polkadot/api-base/types/events' { +declare module "@polkadot/api-base/types/events" { interface AugmentedEvents { assets: { /** * Accounts were destroyed for given asset. **/ - AccountsDestroyed: AugmentedEvent; + AccountsDestroyed: AugmentedEvent< + ApiType, + [assetId: u32, accountsDestroyed: u32, accountsRemaining: u32], + { assetId: u32; accountsDestroyed: u32; accountsRemaining: u32 } + >; /** * An approval for account `delegate` was cancelled by `owner`. **/ - ApprovalCancelled: AugmentedEvent; + ApprovalCancelled: AugmentedEvent< + ApiType, + [assetId: u32, owner: AccountId32, delegate: AccountId32], + { assetId: u32; owner: AccountId32; delegate: AccountId32 } + >; /** * Approvals were destroyed for given asset. **/ - ApprovalsDestroyed: AugmentedEvent; + ApprovalsDestroyed: AugmentedEvent< + ApiType, + [assetId: u32, approvalsDestroyed: u32, approvalsRemaining: u32], + { assetId: u32; approvalsDestroyed: u32; approvalsRemaining: u32 } + >; /** * (Additional) funds have been approved for transfer to a destination account. **/ - ApprovedTransfer: AugmentedEvent; + ApprovedTransfer: AugmentedEvent< + ApiType, + [ + assetId: u32, + source: AccountId32, + delegate: AccountId32, + amount: u128, + ], + { + assetId: u32; + source: AccountId32; + delegate: AccountId32; + amount: u128; + } + >; /** * Some asset `asset_id` was frozen. **/ - AssetFrozen: AugmentedEvent; + AssetFrozen: AugmentedEvent; /** * The min_balance of an asset has been updated by the asset owner. **/ - AssetMinBalanceChanged: AugmentedEvent; + AssetMinBalanceChanged: AugmentedEvent< + ApiType, + [assetId: u32, newMinBalance: u128], + { assetId: u32; newMinBalance: u128 } + >; /** * An asset has had its attributes changed by the `Force` origin. **/ - AssetStatusChanged: AugmentedEvent; + AssetStatusChanged: AugmentedEvent< + ApiType, + [assetId: u32], + { assetId: u32 } + >; /** * Some asset `asset_id` was thawed. **/ - AssetThawed: AugmentedEvent; + AssetThawed: AugmentedEvent; /** * Some account `who` was blocked. **/ - Blocked: AugmentedEvent; + Blocked: AugmentedEvent< + ApiType, + [assetId: u32, who: AccountId32], + { assetId: u32; who: AccountId32 } + >; /** * Some assets were destroyed. **/ - Burned: AugmentedEvent; + Burned: AugmentedEvent< + ApiType, + [assetId: u32, owner: AccountId32, balance: u128], + { assetId: u32; owner: AccountId32; balance: u128 } + >; /** * Some asset class was created. **/ - Created: AugmentedEvent; + Created: AugmentedEvent< + ApiType, + [assetId: u32, creator: AccountId32, owner: AccountId32], + { assetId: u32; creator: AccountId32; owner: AccountId32 } + >; /** * An asset class was destroyed. **/ - Destroyed: AugmentedEvent; + Destroyed: AugmentedEvent; /** * An asset class is in the process of being destroyed. **/ - DestructionStarted: AugmentedEvent; + DestructionStarted: AugmentedEvent< + ApiType, + [assetId: u32], + { assetId: u32 } + >; /** * Some asset class was force-created. **/ - ForceCreated: AugmentedEvent; + ForceCreated: AugmentedEvent< + ApiType, + [assetId: u32, owner: AccountId32], + { assetId: u32; owner: AccountId32 } + >; /** * Some account `who` was frozen. **/ - Frozen: AugmentedEvent; + Frozen: AugmentedEvent< + ApiType, + [assetId: u32, who: AccountId32], + { assetId: u32; who: AccountId32 } + >; /** * Some assets were issued. **/ - Issued: AugmentedEvent; + Issued: AugmentedEvent< + ApiType, + [assetId: u32, owner: AccountId32, amount: u128], + { assetId: u32; owner: AccountId32; amount: u128 } + >; /** * Metadata has been cleared for an asset. **/ - MetadataCleared: AugmentedEvent; + MetadataCleared: AugmentedEvent< + ApiType, + [assetId: u32], + { assetId: u32 } + >; /** * New metadata has been set for an asset. **/ - MetadataSet: AugmentedEvent; + MetadataSet: AugmentedEvent< + ApiType, + [ + assetId: u32, + name: Bytes, + symbol_: Bytes, + decimals: u8, + isFrozen: bool, + ], + { + assetId: u32; + name: Bytes; + symbol: Bytes; + decimals: u8; + isFrozen: bool; + } + >; /** * The owner changed. **/ - OwnerChanged: AugmentedEvent; + OwnerChanged: AugmentedEvent< + ApiType, + [assetId: u32, owner: AccountId32], + { assetId: u32; owner: AccountId32 } + >; /** * The management team changed. **/ - TeamChanged: AugmentedEvent; + TeamChanged: AugmentedEvent< + ApiType, + [ + assetId: u32, + issuer: AccountId32, + admin: AccountId32, + freezer: AccountId32, + ], + { + assetId: u32; + issuer: AccountId32; + admin: AccountId32; + freezer: AccountId32; + } + >; /** * Some account `who` was thawed. **/ - Thawed: AugmentedEvent; + Thawed: AugmentedEvent< + ApiType, + [assetId: u32, who: AccountId32], + { assetId: u32; who: AccountId32 } + >; /** * Some account `who` was created with a deposit from `depositor`. **/ - Touched: AugmentedEvent; + Touched: AugmentedEvent< + ApiType, + [assetId: u32, who: AccountId32, depositor: AccountId32], + { assetId: u32; who: AccountId32; depositor: AccountId32 } + >; /** * Some assets were transferred. **/ - Transferred: AugmentedEvent; + Transferred: AugmentedEvent< + ApiType, + [assetId: u32, from: AccountId32, to: AccountId32, amount: u128], + { assetId: u32; from: AccountId32; to: AccountId32; amount: u128 } + >; /** * An `amount` was transferred in its entirety from `owner` to `destination` by * the approved `delegate`. **/ - TransferredApproved: AugmentedEvent; + TransferredApproved: AugmentedEvent< + ApiType, + [ + assetId: u32, + owner: AccountId32, + delegate: AccountId32, + destination: AccountId32, + amount: u128, + ], + { + assetId: u32; + owner: AccountId32; + delegate: AccountId32; + destination: AccountId32; + amount: u128; + } + >; /** * Generic event **/ @@ -122,11 +251,19 @@ declare module '@polkadot/api-base/types/events' { /** * Moved an account from one bag to another. **/ - Rebagged: AugmentedEvent; + Rebagged: AugmentedEvent< + ApiType, + [who: AccountId32, from: u64, to: u64], + { who: AccountId32; from: u64; to: u64 } + >; /** * Updated the score of some account to the given amount. **/ - ScoreUpdated: AugmentedEvent; + ScoreUpdated: AugmentedEvent< + ApiType, + [who: AccountId32, newScore: u64], + { who: AccountId32; newScore: u64 } + >; /** * Generic event **/ @@ -136,28 +273,52 @@ declare module '@polkadot/api-base/types/events' { /** * A balance was set by root. **/ - BalanceSet: AugmentedEvent; + BalanceSet: AugmentedEvent< + ApiType, + [who: AccountId32, free: u128], + { who: AccountId32; free: u128 } + >; /** * Some amount was burned from an account. **/ - Burned: AugmentedEvent; + Burned: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Some amount was deposited (e.g. for transaction fees). **/ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * An account was removed whose balance was non-zero but below ExistentialDeposit, * resulting in an outright loss. **/ - DustLost: AugmentedEvent; + DustLost: AugmentedEvent< + ApiType, + [account: AccountId32, amount: u128], + { account: AccountId32; amount: u128 } + >; /** * An account was created with some free balance. **/ - Endowed: AugmentedEvent; + Endowed: AugmentedEvent< + ApiType, + [account: AccountId32, freeBalance: u128], + { account: AccountId32; freeBalance: u128 } + >; /** * Some balance was frozen. **/ - Frozen: AugmentedEvent; + Frozen: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Total issuance was increased by `amount`, creating a credit to be balanced. **/ @@ -165,11 +326,19 @@ declare module '@polkadot/api-base/types/events' { /** * Some balance was locked. **/ - Locked: AugmentedEvent; + Locked: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Some amount was minted into an account. **/ - Minted: AugmentedEvent; + Minted: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Total issuance was decreased by `amount`, creating a debt to be balanced. **/ @@ -177,52 +346,110 @@ declare module '@polkadot/api-base/types/events' { /** * Some balance was reserved (moved from free to reserved). **/ - Reserved: AugmentedEvent; + Reserved: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Some balance was moved from the reserve of the first account to the second account. * Final argument indicates the destination balance type. **/ - ReserveRepatriated: AugmentedEvent; + ReserveRepatriated: AugmentedEvent< + ApiType, + [ + from: AccountId32, + to: AccountId32, + amount: u128, + destinationStatus: FrameSupportTokensMiscBalanceStatus, + ], + { + from: AccountId32; + to: AccountId32; + amount: u128; + destinationStatus: FrameSupportTokensMiscBalanceStatus; + } + >; /** * Some amount was restored into an account. **/ - Restored: AugmentedEvent; + Restored: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Some amount was removed from the account (e.g. for misbehavior). **/ - Slashed: AugmentedEvent; + Slashed: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Some amount was suspended from an account (it can be restored later). **/ - Suspended: AugmentedEvent; + Suspended: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Some balance was thawed. **/ - Thawed: AugmentedEvent; + Thawed: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * The `TotalIssuance` was forcefully changed. **/ - TotalIssuanceForced: AugmentedEvent; + TotalIssuanceForced: AugmentedEvent< + ApiType, + [old: u128, new_: u128], + { old: u128; new_: u128 } + >; /** * Transfer succeeded. **/ - Transfer: AugmentedEvent; + Transfer: AugmentedEvent< + ApiType, + [from: AccountId32, to: AccountId32, amount: u128], + { from: AccountId32; to: AccountId32; amount: u128 } + >; /** * Some balance was unlocked. **/ - Unlocked: AugmentedEvent; + Unlocked: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Some balance was unreserved (moved from reserved to free). **/ - Unreserved: AugmentedEvent; + Unreserved: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * An account was upgraded. **/ - Upgraded: AugmentedEvent; + Upgraded: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * Some amount was withdrawn from the account (e.g. for transaction fees). **/ - Withdraw: AugmentedEvent; + Withdraw: AugmentedEvent< + ApiType, + [who: AccountId32, amount: u128], + { who: AccountId32; amount: u128 } + >; /** * Generic event **/ @@ -231,7 +458,11 @@ declare module '@polkadot/api-base/types/events' { baseFee: { BaseFeeOverflow: AugmentedEvent; NewBaseFeePerGas: AugmentedEvent; - NewElasticity: AugmentedEvent; + NewElasticity: AugmentedEvent< + ApiType, + [elasticity: Permill], + { elasticity: Permill } + >; /** * Generic event **/ @@ -245,7 +476,11 @@ declare module '@polkadot/api-base/types/events' { /** * A bounty is awarded to a beneficiary. **/ - BountyAwarded: AugmentedEvent; + BountyAwarded: AugmentedEvent< + ApiType, + [index: u32, beneficiary: AccountId32], + { index: u32; beneficiary: AccountId32 } + >; /** * A bounty proposal is funded and became active. **/ @@ -257,7 +492,11 @@ declare module '@polkadot/api-base/types/events' { /** * A bounty is claimed by beneficiary. **/ - BountyClaimed: AugmentedEvent; + BountyClaimed: AugmentedEvent< + ApiType, + [index: u32, payout: u128, beneficiary: AccountId32], + { index: u32; payout: u128; beneficiary: AccountId32 } + >; /** * A bounty expiry is extended. **/ @@ -269,19 +508,35 @@ declare module '@polkadot/api-base/types/events' { /** * A bounty proposal was rejected; funds were slashed. **/ - BountyRejected: AugmentedEvent; + BountyRejected: AugmentedEvent< + ApiType, + [index: u32, bond: u128], + { index: u32; bond: u128 } + >; /** * A bounty curator is accepted. **/ - CuratorAccepted: AugmentedEvent; + CuratorAccepted: AugmentedEvent< + ApiType, + [bountyId: u32, curator: AccountId32], + { bountyId: u32; curator: AccountId32 } + >; /** * A bounty curator is proposed. **/ - CuratorProposed: AugmentedEvent; + CuratorProposed: AugmentedEvent< + ApiType, + [bountyId: u32, curator: AccountId32], + { bountyId: u32; curator: AccountId32 } + >; /** * A bounty curator is unassigned. **/ - CuratorUnassigned: AugmentedEvent; + CuratorUnassigned: AugmentedEvent< + ApiType, + [bountyId: u32], + { bountyId: u32 } + >; /** * Generic event **/ @@ -291,19 +546,35 @@ declare module '@polkadot/api-base/types/events' { /** * A child-bounty is added. **/ - Added: AugmentedEvent; + Added: AugmentedEvent< + ApiType, + [index: u32, childIndex: u32], + { index: u32; childIndex: u32 } + >; /** * A child-bounty is awarded to a beneficiary. **/ - Awarded: AugmentedEvent; + Awarded: AugmentedEvent< + ApiType, + [index: u32, childIndex: u32, beneficiary: AccountId32], + { index: u32; childIndex: u32; beneficiary: AccountId32 } + >; /** * A child-bounty is cancelled. **/ - Canceled: AugmentedEvent; + Canceled: AugmentedEvent< + ApiType, + [index: u32, childIndex: u32], + { index: u32; childIndex: u32 } + >; /** * A child-bounty is claimed by beneficiary. **/ - Claimed: AugmentedEvent; + Claimed: AugmentedEvent< + ApiType, + [index: u32, childIndex: u32, payout: u128, beneficiary: AccountId32], + { index: u32; childIndex: u32; payout: u128; beneficiary: AccountId32 } + >; /** * Generic event **/ @@ -313,7 +584,19 @@ declare module '@polkadot/api-base/types/events' { /** * Someone claimed some native tokens. **/ - Claimed: AugmentedEvent; + Claimed: AugmentedEvent< + ApiType, + [ + recipient: AccountId32, + source: PalletAirdropClaimsUtilsMultiAddress, + amount: u128, + ], + { + recipient: AccountId32; + source: PalletAirdropClaimsUtilsMultiAddress; + amount: u128; + } + >; /** * Generic event **/ @@ -323,33 +606,83 @@ declare module '@polkadot/api-base/types/events' { /** * A motion was approved by the required threshold. **/ - Approved: AugmentedEvent; + Approved: AugmentedEvent< + ApiType, + [proposalHash: H256], + { proposalHash: H256 } + >; /** * A proposal was closed because its threshold was reached or after its duration was up. **/ - Closed: AugmentedEvent; + Closed: AugmentedEvent< + ApiType, + [proposalHash: H256, yes: u32, no: u32], + { proposalHash: H256; yes: u32; no: u32 } + >; /** * A motion was not approved by the required threshold. **/ - Disapproved: AugmentedEvent; + Disapproved: AugmentedEvent< + ApiType, + [proposalHash: H256], + { proposalHash: H256 } + >; /** * A motion was executed; result will be `Ok` if it returned without error. **/ - Executed: AugmentedEvent], { proposalHash: H256, result: Result }>; + Executed: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A single member did some action; result will be `Ok` if it returned without error. **/ - MemberExecuted: AugmentedEvent], { proposalHash: H256, result: Result }>; + MemberExecuted: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A motion (given hash) has been proposed (by given account) with a threshold (given * `MemberCount`). **/ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [ + account: AccountId32, + proposalIndex: u32, + proposalHash: H256, + threshold: u32, + ], + { + account: AccountId32; + proposalIndex: u32; + proposalHash: H256; + threshold: u32; + } + >; /** * A motion (given hash) has been voted on by given account, leaving * a tally (yes votes and no votes given respectively as `MemberCount`). **/ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [ + account: AccountId32, + proposalHash: H256, + voted: bool, + yes: u32, + no: u32, + ], + { + account: AccountId32; + proposalHash: H256; + voted: bool; + yes: u32; + no: u32; + } + >; /** * Generic event **/ @@ -359,7 +692,11 @@ declare module '@polkadot/api-base/types/events' { /** * A proposal_hash has been blacklisted permanently. **/ - Blacklisted: AugmentedEvent; + Blacklisted: AugmentedEvent< + ApiType, + [proposalHash: H256], + { proposalHash: H256 } + >; /** * A referendum has been cancelled. **/ @@ -367,7 +704,11 @@ declare module '@polkadot/api-base/types/events' { /** * An account has delegated their vote to another account. **/ - Delegated: AugmentedEvent; + Delegated: AugmentedEvent< + ApiType, + [who: AccountId32, target: AccountId32], + { who: AccountId32; target: AccountId32 } + >; /** * An external proposal has been tabled. **/ @@ -375,15 +716,35 @@ declare module '@polkadot/api-base/types/events' { /** * Metadata for a proposal or a referendum has been cleared. **/ - MetadataCleared: AugmentedEvent; + MetadataCleared: AugmentedEvent< + ApiType, + [owner: PalletDemocracyMetadataOwner, hash_: H256], + { owner: PalletDemocracyMetadataOwner; hash_: H256 } + >; /** * Metadata for a proposal or a referendum has been set. **/ - MetadataSet: AugmentedEvent; + MetadataSet: AugmentedEvent< + ApiType, + [owner: PalletDemocracyMetadataOwner, hash_: H256], + { owner: PalletDemocracyMetadataOwner; hash_: H256 } + >; /** * Metadata has been transferred to new owner. **/ - MetadataTransferred: AugmentedEvent; + MetadataTransferred: AugmentedEvent< + ApiType, + [ + prevOwner: PalletDemocracyMetadataOwner, + owner: PalletDemocracyMetadataOwner, + hash_: H256, + ], + { + prevOwner: PalletDemocracyMetadataOwner; + owner: PalletDemocracyMetadataOwner; + hash_: H256; + } + >; /** * A proposal has been rejected by referendum. **/ @@ -395,35 +756,75 @@ declare module '@polkadot/api-base/types/events' { /** * A proposal got canceled. **/ - ProposalCanceled: AugmentedEvent; + ProposalCanceled: AugmentedEvent< + ApiType, + [propIndex: u32], + { propIndex: u32 } + >; /** * A motion has been proposed by a public account. **/ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [proposalIndex: u32, deposit: u128], + { proposalIndex: u32; deposit: u128 } + >; /** * An account has secconded a proposal **/ - Seconded: AugmentedEvent; + Seconded: AugmentedEvent< + ApiType, + [seconder: AccountId32, propIndex: u32], + { seconder: AccountId32; propIndex: u32 } + >; /** * A referendum has begun. **/ - Started: AugmentedEvent; + Started: AugmentedEvent< + ApiType, + [refIndex: u32, threshold: PalletDemocracyVoteThreshold], + { refIndex: u32; threshold: PalletDemocracyVoteThreshold } + >; /** * A public proposal has been tabled for referendum vote. **/ - Tabled: AugmentedEvent; + Tabled: AugmentedEvent< + ApiType, + [proposalIndex: u32, deposit: u128], + { proposalIndex: u32; deposit: u128 } + >; /** * An account has cancelled a previous delegation operation. **/ - Undelegated: AugmentedEvent; + Undelegated: AugmentedEvent< + ApiType, + [account: AccountId32], + { account: AccountId32 } + >; /** * An external proposal has been vetoed. **/ - Vetoed: AugmentedEvent; + Vetoed: AugmentedEvent< + ApiType, + [who: AccountId32, proposalHash: H256, until: u64], + { who: AccountId32; proposalHash: H256; until: u64 } + >; /** * An account has voted in a referendum **/ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [ + voter: AccountId32, + refIndex: u32, + vote: PalletDemocracyVoteAccountVote, + ], + { + voter: AccountId32; + refIndex: u32; + vote: PalletDemocracyVoteAccountVote; + } + >; /** * Generic event **/ @@ -437,7 +838,11 @@ declare module '@polkadot/api-base/types/events' { /** * A DKG has been rotated. **/ - KeyRotated: AugmentedEvent; + KeyRotated: AugmentedEvent< + ApiType, + [fromJobId: u64, toJobId: u64, signature: Bytes], + { fromJobId: u64; toJobId: u64; signature: Bytes } + >; /** * Generic event **/ @@ -446,36 +851,78 @@ declare module '@polkadot/api-base/types/events' { electionProviderMultiPhase: { /** * An election failed. - * + * * Not much can be said about which computes failed in the process. **/ ElectionFailed: AugmentedEvent; /** * The election has been finalized, with the given computation and score. **/ - ElectionFinalized: AugmentedEvent; + ElectionFinalized: AugmentedEvent< + ApiType, + [ + compute: PalletElectionProviderMultiPhaseElectionCompute, + score: SpNposElectionsElectionScore, + ], + { + compute: PalletElectionProviderMultiPhaseElectionCompute; + score: SpNposElectionsElectionScore; + } + >; /** * There was a phase transition in a given round. **/ - PhaseTransitioned: AugmentedEvent; + PhaseTransitioned: AugmentedEvent< + ApiType, + [ + from: PalletElectionProviderMultiPhasePhase, + to: PalletElectionProviderMultiPhasePhase, + round: u32, + ], + { + from: PalletElectionProviderMultiPhasePhase; + to: PalletElectionProviderMultiPhasePhase; + round: u32; + } + >; /** * An account has been rewarded for their signed submission being finalized. **/ - Rewarded: AugmentedEvent; + Rewarded: AugmentedEvent< + ApiType, + [account: AccountId32, value: u128], + { account: AccountId32; value: u128 } + >; /** * An account has been slashed for submitting an invalid signed submission. **/ - Slashed: AugmentedEvent; + Slashed: AugmentedEvent< + ApiType, + [account: AccountId32, value: u128], + { account: AccountId32; value: u128 } + >; /** * A solution was stored with the given compute. - * + * * The `origin` indicates the origin of the solution. If `origin` is `Some(AccountId)`, * the stored solution was submited in the signed phase by a miner with the `AccountId`. * Otherwise, the solution was stored either during the unsigned phase or by * `T::ForceOrigin`. The `bool` is `true` when a previous solution was ejected to make * room for this one. **/ - SolutionStored: AugmentedEvent, prevEjected: bool], { compute: PalletElectionProviderMultiPhaseElectionCompute, origin: Option, prevEjected: bool }>; + SolutionStored: AugmentedEvent< + ApiType, + [ + compute: PalletElectionProviderMultiPhaseElectionCompute, + origin: Option, + prevEjected: bool, + ], + { + compute: PalletElectionProviderMultiPhaseElectionCompute; + origin: Option; + prevEjected: bool; + } + >; /** * Generic event **/ @@ -485,10 +932,14 @@ declare module '@polkadot/api-base/types/events' { /** * A candidate was slashed by amount due to failing to obtain a seat as member or * runner-up. - * + * * Note that old members and runners-up are also candidates. **/ - CandidateSlashed: AugmentedEvent; + CandidateSlashed: AugmentedEvent< + ApiType, + [candidate: AccountId32, amount: u128], + { candidate: AccountId32; amount: u128 } + >; /** * Internal error happened while trying to perform election. **/ @@ -502,7 +953,11 @@ declare module '@polkadot/api-base/types/events' { * A member has been removed. This should always be followed by either `NewTerm` or * `EmptyTerm`. **/ - MemberKicked: AugmentedEvent; + MemberKicked: AugmentedEvent< + ApiType, + [member: AccountId32], + { member: AccountId32 } + >; /** * A new term with new_members. This indicates that enough candidates existed to run * the election, not that enough have has been elected. The inner value must be examined @@ -510,15 +965,27 @@ declare module '@polkadot/api-base/types/events' { * slashed and none were elected, whilst `EmptyTerm` means that no candidates existed to * begin with. **/ - NewTerm: AugmentedEvent>], { newMembers: Vec> }>; + NewTerm: AugmentedEvent< + ApiType, + [newMembers: Vec>], + { newMembers: Vec> } + >; /** * Someone has renounced their candidacy. **/ - Renounced: AugmentedEvent; + Renounced: AugmentedEvent< + ApiType, + [candidate: AccountId32], + { candidate: AccountId32 } + >; /** * A seat holder was slashed by amount by being forcefully removed from the set. **/ - SeatHolderSlashed: AugmentedEvent; + SeatHolderSlashed: AugmentedEvent< + ApiType, + [seatHolder: AccountId32, amount: u128], + { seatHolder: AccountId32; amount: u128 } + >; /** * Generic event **/ @@ -528,7 +995,23 @@ declare module '@polkadot/api-base/types/events' { /** * An ethereum transaction was successfully executed. **/ - Executed: AugmentedEvent; + Executed: AugmentedEvent< + ApiType, + [ + from: H160, + to: H160, + transactionHash: H256, + exitReason: EvmCoreErrorExitReason, + extraData: Bytes, + ], + { + from: H160; + to: H160; + transactionHash: H256; + exitReason: EvmCoreErrorExitReason; + extraData: Bytes; + } + >; /** * Generic event **/ @@ -542,7 +1025,11 @@ declare module '@polkadot/api-base/types/events' { /** * A contract was attempted to be created, but the execution failed. **/ - CreatedFailed: AugmentedEvent; + CreatedFailed: AugmentedEvent< + ApiType, + [address: H160], + { address: H160 } + >; /** * A contract has been executed successfully with states applied. **/ @@ -550,7 +1037,11 @@ declare module '@polkadot/api-base/types/events' { /** * A contract has been executed with errors. States are reverted with only gas fees applied. **/ - ExecutedFailed: AugmentedEvent; + ExecutedFailed: AugmentedEvent< + ApiType, + [address: H160], + { address: H160 } + >; /** * Ethereum events from contracts. **/ @@ -564,7 +1055,11 @@ declare module '@polkadot/api-base/types/events' { /** * New authority set has been applied. **/ - NewAuthorities: AugmentedEvent>], { authoritySet: Vec> }>; + NewAuthorities: AugmentedEvent< + ApiType, + [authoritySet: Vec>], + { authoritySet: Vec> } + >; /** * Current authority set has been paused. **/ @@ -582,73 +1077,141 @@ declare module '@polkadot/api-base/types/events' { /** * A username authority was added. **/ - AuthorityAdded: AugmentedEvent; + AuthorityAdded: AugmentedEvent< + ApiType, + [authority: AccountId32], + { authority: AccountId32 } + >; /** * A username authority was removed. **/ - AuthorityRemoved: AugmentedEvent; + AuthorityRemoved: AugmentedEvent< + ApiType, + [authority: AccountId32], + { authority: AccountId32 } + >; /** * A dangling username (as in, a username corresponding to an account that has removed its * identity) has been removed. **/ - DanglingUsernameRemoved: AugmentedEvent; + DanglingUsernameRemoved: AugmentedEvent< + ApiType, + [who: AccountId32, username: Bytes], + { who: AccountId32; username: Bytes } + >; /** * A name was cleared, and the given balance returned. **/ - IdentityCleared: AugmentedEvent; + IdentityCleared: AugmentedEvent< + ApiType, + [who: AccountId32, deposit: u128], + { who: AccountId32; deposit: u128 } + >; /** * A name was removed and the given balance slashed. **/ - IdentityKilled: AugmentedEvent; + IdentityKilled: AugmentedEvent< + ApiType, + [who: AccountId32, deposit: u128], + { who: AccountId32; deposit: u128 } + >; /** * A name was set or reset (which will remove all judgements). **/ - IdentitySet: AugmentedEvent; + IdentitySet: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * A judgement was given by a registrar. **/ - JudgementGiven: AugmentedEvent; + JudgementGiven: AugmentedEvent< + ApiType, + [target: AccountId32, registrarIndex: u32], + { target: AccountId32; registrarIndex: u32 } + >; /** * A judgement was asked from a registrar. **/ - JudgementRequested: AugmentedEvent; + JudgementRequested: AugmentedEvent< + ApiType, + [who: AccountId32, registrarIndex: u32], + { who: AccountId32; registrarIndex: u32 } + >; /** * A judgement request was retracted. **/ - JudgementUnrequested: AugmentedEvent; + JudgementUnrequested: AugmentedEvent< + ApiType, + [who: AccountId32, registrarIndex: u32], + { who: AccountId32; registrarIndex: u32 } + >; /** * A queued username passed its expiration without being claimed and was removed. **/ - PreapprovalExpired: AugmentedEvent; + PreapprovalExpired: AugmentedEvent< + ApiType, + [whose: AccountId32], + { whose: AccountId32 } + >; /** * A username was set as a primary and can be looked up from `who`. **/ - PrimaryUsernameSet: AugmentedEvent; + PrimaryUsernameSet: AugmentedEvent< + ApiType, + [who: AccountId32, username: Bytes], + { who: AccountId32; username: Bytes } + >; /** * A registrar was added. **/ - RegistrarAdded: AugmentedEvent; + RegistrarAdded: AugmentedEvent< + ApiType, + [registrarIndex: u32], + { registrarIndex: u32 } + >; /** * A sub-identity was added to an identity and the deposit paid. **/ - SubIdentityAdded: AugmentedEvent; + SubIdentityAdded: AugmentedEvent< + ApiType, + [sub: AccountId32, main: AccountId32, deposit: u128], + { sub: AccountId32; main: AccountId32; deposit: u128 } + >; /** * A sub-identity was removed from an identity and the deposit freed. **/ - SubIdentityRemoved: AugmentedEvent; + SubIdentityRemoved: AugmentedEvent< + ApiType, + [sub: AccountId32, main: AccountId32, deposit: u128], + { sub: AccountId32; main: AccountId32; deposit: u128 } + >; /** * A sub-identity was cleared, and the given deposit repatriated from the * main identity account to the sub-identity account. **/ - SubIdentityRevoked: AugmentedEvent; + SubIdentityRevoked: AugmentedEvent< + ApiType, + [sub: AccountId32, main: AccountId32, deposit: u128], + { sub: AccountId32; main: AccountId32; deposit: u128 } + >; /** * A username was queued, but `who` must accept it prior to `expiration`. **/ - UsernameQueued: AugmentedEvent; + UsernameQueued: AugmentedEvent< + ApiType, + [who: AccountId32, username: Bytes, expiration: u64], + { who: AccountId32; username: Bytes; expiration: u64 } + >; /** * A username was set for `who`. **/ - UsernameSet: AugmentedEvent; + UsernameSet: AugmentedEvent< + ApiType, + [who: AccountId32, username: Bytes], + { who: AccountId32; username: Bytes } + >; /** * Generic event **/ @@ -662,11 +1225,19 @@ declare module '@polkadot/api-base/types/events' { /** * A new heartbeat was received from `AuthorityId`. **/ - HeartbeatReceived: AugmentedEvent; + HeartbeatReceived: AugmentedEvent< + ApiType, + [authorityId: PalletImOnlineSr25519AppSr25519Public], + { authorityId: PalletImOnlineSr25519AppSr25519Public } + >; /** * At the end of the session, at least one validator was found to be offline. **/ - SomeOffline: AugmentedEvent>], { offline: Vec> }>; + SomeOffline: AugmentedEvent< + ApiType, + [offline: Vec>], + { offline: Vec> } + >; /** * Generic event **/ @@ -676,7 +1247,11 @@ declare module '@polkadot/api-base/types/events' { /** * A account index was assigned. **/ - IndexAssigned: AugmentedEvent; + IndexAssigned: AugmentedEvent< + ApiType, + [who: AccountId32, index: u32], + { who: AccountId32; index: u32 } + >; /** * A account index has been freed up (unassigned). **/ @@ -684,7 +1259,11 @@ declare module '@polkadot/api-base/types/events' { /** * A account index has been frozen to its current account ID. **/ - IndexFrozen: AugmentedEvent; + IndexFrozen: AugmentedEvent< + ApiType, + [index: u32, who: AccountId32], + { index: u32; who: AccountId32 } + >; /** * Generic event **/ @@ -694,32 +1273,84 @@ declare module '@polkadot/api-base/types/events' { /** * The participants of a job has been updated **/ - JobParticipantsUpdated: AugmentedEvent; + JobParticipantsUpdated: AugmentedEvent< + ApiType, + [ + jobId: u64, + roleType: TanglePrimitivesRolesRoleType, + details: TanglePrimitivesJobsJobInfo, + ], + { + jobId: u64; + roleType: TanglePrimitivesRolesRoleType; + details: TanglePrimitivesJobsJobInfo; + } + >; /** * An existing job was removed and refunded **/ - JobRefunded: AugmentedEvent; + JobRefunded: AugmentedEvent< + ApiType, + [jobId: u64, roleType: TanglePrimitivesRolesRoleType], + { jobId: u64; roleType: TanglePrimitivesRolesRoleType } + >; /** * A job has been resubmitted, this is when a phase1 result has been discarded * and a new phase1 job is requested **/ - JobReSubmitted: AugmentedEvent; + JobReSubmitted: AugmentedEvent< + ApiType, + [ + jobId: u64, + roleType: TanglePrimitivesRolesRoleType, + details: TanglePrimitivesJobsJobInfo, + ], + { + jobId: u64; + roleType: TanglePrimitivesRolesRoleType; + details: TanglePrimitivesJobsJobInfo; + } + >; /** * A job result expiry time has been extended **/ - JobResultExtended: AugmentedEvent; + JobResultExtended: AugmentedEvent< + ApiType, + [jobId: u64, roleType: TanglePrimitivesRolesRoleType, newExpiry: u64], + { jobId: u64; roleType: TanglePrimitivesRolesRoleType; newExpiry: u64 } + >; /** * A new job result has been submitted **/ - JobResultSubmitted: AugmentedEvent; + JobResultSubmitted: AugmentedEvent< + ApiType, + [jobId: u64, roleType: TanglePrimitivesRolesRoleType], + { jobId: u64; roleType: TanglePrimitivesRolesRoleType } + >; /** * A new job has been submitted **/ - JobSubmitted: AugmentedEvent; + JobSubmitted: AugmentedEvent< + ApiType, + [ + jobId: u64, + roleType: TanglePrimitivesRolesRoleType, + details: TanglePrimitivesJobsJobSubmission, + ], + { + jobId: u64; + roleType: TanglePrimitivesRolesRoleType; + details: TanglePrimitivesJobsJobSubmission; + } + >; /** * validator has earned reward **/ - ValidatorRewarded: AugmentedEvent; + ValidatorRewarded: AugmentedEvent< + ApiType, + [id: AccountId32, reward: u128], + { id: AccountId32; reward: u128 } + >; /** * Generic event **/ @@ -733,11 +1364,19 @@ declare module '@polkadot/api-base/types/events' { /** * Event emitted when a blueprint is whitelisted for rewards **/ - BlueprintWhitelisted: AugmentedEvent; + BlueprintWhitelisted: AugmentedEvent< + ApiType, + [blueprintId: u32], + { blueprintId: u32 } + >; /** * A delegator unstake request has been cancelled. **/ - CancelledDelegatorBondLess: AugmentedEvent; + CancelledDelegatorBondLess: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An withdraw has been cancelled. **/ @@ -745,7 +1384,11 @@ declare module '@polkadot/api-base/types/events' { /** * A delegation has been made. **/ - Delegated: AugmentedEvent; + Delegated: AugmentedEvent< + ApiType, + [who: AccountId32, operator: AccountId32, amount: u128, assetId: u128], + { who: AccountId32; operator: AccountId32; amount: u128; assetId: u128 } + >; /** * A deposit has been made. **/ @@ -753,7 +1396,11 @@ declare module '@polkadot/api-base/types/events' { /** * A delegator unstake request has been executed. **/ - ExecutedDelegatorBondLess: AugmentedEvent; + ExecutedDelegatorBondLess: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An withdraw has been executed. **/ @@ -765,11 +1412,19 @@ declare module '@polkadot/api-base/types/events' { /** * An operator has cancelled their stake decrease request. **/ - OperatorBondLessCancelled: AugmentedEvent; + OperatorBondLessCancelled: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An operator has executed their stake decrease. **/ - OperatorBondLessExecuted: AugmentedEvent; + OperatorBondLessExecuted: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An operator has scheduled to decrease their stake. **/ @@ -777,35 +1432,67 @@ declare module '@polkadot/api-base/types/events' { /** * An operator has increased their stake. **/ - OperatorBondMore: AugmentedEvent; + OperatorBondMore: AugmentedEvent< + ApiType, + [who: AccountId32, additionalBond: u128], + { who: AccountId32; additionalBond: u128 } + >; /** * An operator has joined. **/ - OperatorJoined: AugmentedEvent; + OperatorJoined: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An operator has cancelled their leave request. **/ - OperatorLeaveCancelled: AugmentedEvent; + OperatorLeaveCancelled: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An operator has executed their leave request. **/ - OperatorLeaveExecuted: AugmentedEvent; + OperatorLeaveExecuted: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An operator has scheduled to leave. **/ - OperatorLeavingScheduled: AugmentedEvent; + OperatorLeavingScheduled: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An operator has gone offline. **/ - OperatorWentOffline: AugmentedEvent; + OperatorWentOffline: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * An operator has gone online. **/ - OperatorWentOnline: AugmentedEvent; + OperatorWentOnline: AugmentedEvent< + ApiType, + [who: AccountId32], + { who: AccountId32 } + >; /** * A delegator unstake request has been scheduled. **/ - ScheduledDelegatorBondLess: AugmentedEvent; + ScheduledDelegatorBondLess: AugmentedEvent< + ApiType, + [who: AccountId32, operator: AccountId32, amount: u128, assetId: u128], + { who: AccountId32; operator: AccountId32; amount: u128; assetId: u128 } + >; /** * An withdraw has been scheduled. **/ @@ -819,19 +1506,67 @@ declare module '@polkadot/api-base/types/events' { /** * A multisig operation has been approved by someone. **/ - MultisigApproval: AugmentedEvent; + MultisigApproval: AugmentedEvent< + ApiType, + [ + approving: AccountId32, + timepoint: PalletMultisigTimepoint, + multisig: AccountId32, + callHash: U8aFixed, + ], + { + approving: AccountId32; + timepoint: PalletMultisigTimepoint; + multisig: AccountId32; + callHash: U8aFixed; + } + >; /** * A multisig operation has been cancelled. **/ - MultisigCancelled: AugmentedEvent; + MultisigCancelled: AugmentedEvent< + ApiType, + [ + cancelling: AccountId32, + timepoint: PalletMultisigTimepoint, + multisig: AccountId32, + callHash: U8aFixed, + ], + { + cancelling: AccountId32; + timepoint: PalletMultisigTimepoint; + multisig: AccountId32; + callHash: U8aFixed; + } + >; /** * A multisig operation has been executed. **/ - MultisigExecuted: AugmentedEvent], { approving: AccountId32, timepoint: PalletMultisigTimepoint, multisig: AccountId32, callHash: U8aFixed, result: Result }>; + MultisigExecuted: AugmentedEvent< + ApiType, + [ + approving: AccountId32, + timepoint: PalletMultisigTimepoint, + multisig: AccountId32, + callHash: U8aFixed, + result: Result, + ], + { + approving: AccountId32; + timepoint: PalletMultisigTimepoint; + multisig: AccountId32; + callHash: U8aFixed; + result: Result; + } + >; /** * A new multisig operation has begun. **/ - NewMultisig: AugmentedEvent; + NewMultisig: AugmentedEvent< + ApiType, + [approving: AccountId32, multisig: AccountId32, callHash: U8aFixed], + { approving: AccountId32; multisig: AccountId32; callHash: U8aFixed } + >; /** * Generic event **/ @@ -841,69 +1576,139 @@ declare module '@polkadot/api-base/types/events' { /** * A member has became bonded in a pool. **/ - Bonded: AugmentedEvent; + Bonded: AugmentedEvent< + ApiType, + [member: AccountId32, poolId: u32, bonded: u128, joined: bool], + { member: AccountId32; poolId: u32; bonded: u128; joined: bool } + >; /** * A pool has been created. **/ - Created: AugmentedEvent; + Created: AugmentedEvent< + ApiType, + [depositor: AccountId32, poolId: u32], + { depositor: AccountId32; poolId: u32 } + >; /** * A pool has been destroyed. **/ Destroyed: AugmentedEvent; /** * A member has been removed from a pool. - * + * * The removal can be voluntary (withdrawn all unbonded funds) or involuntary (kicked). **/ - MemberRemoved: AugmentedEvent; + MemberRemoved: AugmentedEvent< + ApiType, + [poolId: u32, member: AccountId32], + { poolId: u32; member: AccountId32 } + >; /** * Topped up deficit in frozen ED of the reward pool. **/ - MinBalanceDeficitAdjusted: AugmentedEvent; + MinBalanceDeficitAdjusted: AugmentedEvent< + ApiType, + [poolId: u32, amount: u128], + { poolId: u32; amount: u128 } + >; /** * Claimed excess frozen ED of af the reward pool. **/ - MinBalanceExcessAdjusted: AugmentedEvent; + MinBalanceExcessAdjusted: AugmentedEvent< + ApiType, + [poolId: u32, amount: u128], + { poolId: u32; amount: u128 } + >; /** * A payout has been made to a member. **/ - PaidOut: AugmentedEvent; + PaidOut: AugmentedEvent< + ApiType, + [member: AccountId32, poolId: u32, payout: u128], + { member: AccountId32; poolId: u32; payout: u128 } + >; /** * A pool's commission `change_rate` has been changed. **/ - PoolCommissionChangeRateUpdated: AugmentedEvent; + PoolCommissionChangeRateUpdated: AugmentedEvent< + ApiType, + [poolId: u32, changeRate: PalletNominationPoolsCommissionChangeRate], + { poolId: u32; changeRate: PalletNominationPoolsCommissionChangeRate } + >; /** * Pool commission has been claimed. **/ - PoolCommissionClaimed: AugmentedEvent; + PoolCommissionClaimed: AugmentedEvent< + ApiType, + [poolId: u32, commission: u128], + { poolId: u32; commission: u128 } + >; /** * Pool commission claim permission has been updated. **/ - PoolCommissionClaimPermissionUpdated: AugmentedEvent], { poolId: u32, permission: Option }>; + PoolCommissionClaimPermissionUpdated: AugmentedEvent< + ApiType, + [ + poolId: u32, + permission: Option, + ], + { + poolId: u32; + permission: Option; + } + >; /** * A pool's commission setting has been changed. **/ - PoolCommissionUpdated: AugmentedEvent>], { poolId: u32, current: Option> }>; + PoolCommissionUpdated: AugmentedEvent< + ApiType, + [poolId: u32, current: Option>], + { poolId: u32; current: Option> } + >; /** * A pool's maximum commission setting has been changed. **/ - PoolMaxCommissionUpdated: AugmentedEvent; + PoolMaxCommissionUpdated: AugmentedEvent< + ApiType, + [poolId: u32, maxCommission: Perbill], + { poolId: u32; maxCommission: Perbill } + >; /** * The active balance of pool `pool_id` has been slashed to `balance`. **/ - PoolSlashed: AugmentedEvent; + PoolSlashed: AugmentedEvent< + ApiType, + [poolId: u32, balance: u128], + { poolId: u32; balance: u128 } + >; /** * The roles of a pool have been updated to the given new roles. Note that the depositor * can never change. **/ - RolesUpdated: AugmentedEvent, bouncer: Option, nominator: Option], { root: Option, bouncer: Option, nominator: Option }>; + RolesUpdated: AugmentedEvent< + ApiType, + [ + root: Option, + bouncer: Option, + nominator: Option, + ], + { + root: Option; + bouncer: Option; + nominator: Option; + } + >; /** * The state of a pool has changed **/ - StateChanged: AugmentedEvent; + StateChanged: AugmentedEvent< + ApiType, + [poolId: u32, newState: PalletNominationPoolsPoolState], + { poolId: u32; newState: PalletNominationPoolsPoolState } + >; /** * A member has unbonded from their pool. - * + * * - `balance` is the corresponding balance of the number of points that has been * requested to be unbonded (the argument of the `unbond` transaction) from the bonded * pool. @@ -914,20 +1719,44 @@ declare module '@polkadot/api-base/types/events' { * number of points that are issued in the unbonding pool will be less than the amount * requested to be unbonded. **/ - Unbonded: AugmentedEvent; + Unbonded: AugmentedEvent< + ApiType, + [ + member: AccountId32, + poolId: u32, + balance: u128, + points: u128, + era: u32, + ], + { + member: AccountId32; + poolId: u32; + balance: u128; + points: u128; + era: u32; + } + >; /** * The unbond pool at `era` of pool `pool_id` has been slashed to `balance`. **/ - UnbondingPoolSlashed: AugmentedEvent; + UnbondingPoolSlashed: AugmentedEvent< + ApiType, + [poolId: u32, era: u32, balance: u128], + { poolId: u32; era: u32; balance: u128 } + >; /** * A member has withdrawn from their pool. - * + * * The given number of `points` have been dissolved in return of `balance`. - * + * * Similar to `Unbonded` event, in the absence of slashing, the ratio of point to balance * will be 1. **/ - Withdrawn: AugmentedEvent; + Withdrawn: AugmentedEvent< + ApiType, + [member: AccountId32, poolId: u32, balance: u128, points: u128], + { member: AccountId32; poolId: u32; balance: u128; points: u128 } + >; /** * Generic event **/ @@ -939,7 +1768,11 @@ declare module '@polkadot/api-base/types/events' { * (kind-specific) time slot. This event is not deposited for duplicate slashes. * \[kind, timeslot\]. **/ - Offence: AugmentedEvent; + Offence: AugmentedEvent< + ApiType, + [kind: U8aFixed, timeslot: Bytes], + { kind: U8aFixed; timeslot: Bytes } + >; /** * Generic event **/ @@ -967,24 +1800,74 @@ declare module '@polkadot/api-base/types/events' { /** * An announcement was placed to make a call in the future. **/ - Announced: AugmentedEvent; + Announced: AugmentedEvent< + ApiType, + [real: AccountId32, proxy: AccountId32, callHash: H256], + { real: AccountId32; proxy: AccountId32; callHash: H256 } + >; /** * A proxy was added. **/ - ProxyAdded: AugmentedEvent; + ProxyAdded: AugmentedEvent< + ApiType, + [ + delegator: AccountId32, + delegatee: AccountId32, + proxyType: TangleTestnetRuntimeProxyType, + delay: u64, + ], + { + delegator: AccountId32; + delegatee: AccountId32; + proxyType: TangleTestnetRuntimeProxyType; + delay: u64; + } + >; /** * A proxy was executed correctly, with the given. **/ - ProxyExecuted: AugmentedEvent], { result: Result }>; + ProxyExecuted: AugmentedEvent< + ApiType, + [result: Result], + { result: Result } + >; /** * A proxy was removed. **/ - ProxyRemoved: AugmentedEvent; + ProxyRemoved: AugmentedEvent< + ApiType, + [ + delegator: AccountId32, + delegatee: AccountId32, + proxyType: TangleTestnetRuntimeProxyType, + delay: u64, + ], + { + delegator: AccountId32; + delegatee: AccountId32; + proxyType: TangleTestnetRuntimeProxyType; + delay: u64; + } + >; /** * A pure account has been created by new proxy with given * disambiguation index and proxy type. **/ - PureCreated: AugmentedEvent; + PureCreated: AugmentedEvent< + ApiType, + [ + pure: AccountId32, + who: AccountId32, + proxyType: TangleTestnetRuntimeProxyType, + disambiguationIndex: u16, + ], + { + pure: AccountId32; + who: AccountId32; + proxyType: TangleTestnetRuntimeProxyType; + disambiguationIndex: u16; + } + >; /** * Generic event **/ @@ -994,47 +1877,107 @@ declare module '@polkadot/api-base/types/events' { /** * The min restaking bond amount has been updated **/ - MinRestakingBondUpdated: AugmentedEvent; + MinRestakingBondUpdated: AugmentedEvent< + ApiType, + [value: u128], + { value: u128 } + >; /** * The re-stakers' rewards are getting paid. **/ - PayoutStarted: AugmentedEvent; + PayoutStarted: AugmentedEvent< + ApiType, + [eraIndex: u32, validatorStash: AccountId32], + { eraIndex: u32; validatorStash: AccountId32 } + >; /** * Pending jobs,that cannot be opted out at the moment. **/ - PendingJobs: AugmentedEvent>], { pendingJobs: Vec> }>; + PendingJobs: AugmentedEvent< + ApiType, + [pendingJobs: Vec>], + { pendingJobs: Vec> } + >; /** * New profile created. **/ - ProfileCreated: AugmentedEvent], { account: AccountId32, totalProfileRestake: u128, roles: Vec }>; + ProfileCreated: AugmentedEvent< + ApiType, + [ + account: AccountId32, + totalProfileRestake: u128, + roles: Vec, + ], + { + account: AccountId32; + totalProfileRestake: u128; + roles: Vec; + } + >; /** * Profile deleted. **/ - ProfileDeleted: AugmentedEvent; + ProfileDeleted: AugmentedEvent< + ApiType, + [account: AccountId32], + { account: AccountId32 } + >; /** * Profile updated. **/ - ProfileUpdated: AugmentedEvent], { account: AccountId32, totalProfileRestake: u128, roles: Vec }>; + ProfileUpdated: AugmentedEvent< + ApiType, + [ + account: AccountId32, + totalProfileRestake: u128, + roles: Vec, + ], + { + account: AccountId32; + totalProfileRestake: u128; + roles: Vec; + } + >; /** * The re-staker has been rewarded by this amount. **/ - Rewarded: AugmentedEvent; + Rewarded: AugmentedEvent< + ApiType, + [stash: AccountId32, amount: u128], + { stash: AccountId32; amount: u128 } + >; /** * Role assigned to the validator. **/ - RoleAssigned: AugmentedEvent; + RoleAssigned: AugmentedEvent< + ApiType, + [account: AccountId32, role: TanglePrimitivesRolesRoleType], + { account: AccountId32; role: TanglePrimitivesRolesRoleType } + >; /** * Removed validator from role. **/ - RoleRemoved: AugmentedEvent; + RoleRemoved: AugmentedEvent< + ApiType, + [account: AccountId32, role: TanglePrimitivesRolesRoleType], + { account: AccountId32; role: TanglePrimitivesRolesRoleType } + >; /** * Roles inflation reward paid for era **/ - RolesRewardSet: AugmentedEvent; + RolesRewardSet: AugmentedEvent< + ApiType, + [totalRewards: u128], + { totalRewards: u128 } + >; /** * Slashed validator. **/ - Slashed: AugmentedEvent; + Slashed: AugmentedEvent< + ApiType, + [account: AccountId32, amount: u128], + { account: AccountId32; amount: u128 } + >; /** * Generic event **/ @@ -1044,27 +1987,249 @@ declare module '@polkadot/api-base/types/events' { /** * The call for the provided hash was not found so the task has been aborted. **/ - CallUnavailable: AugmentedEvent, id: Option], { task: ITuple<[u64, u32]>, id: Option }>; + CallUnavailable: AugmentedEvent< + ApiType, + [task: ITuple<[u64, u32]>, id: Option], + { task: ITuple<[u64, u32]>; id: Option } + >; /** * Canceled some task. **/ - Canceled: AugmentedEvent; + Canceled: AugmentedEvent< + ApiType, + [when: u64, index: u32], + { when: u64; index: u32 } + >; /** * Dispatched some task. **/ - Dispatched: AugmentedEvent, id: Option, result: Result], { task: ITuple<[u64, u32]>, id: Option, result: Result }>; + Dispatched: AugmentedEvent< + ApiType, + [ + task: ITuple<[u64, u32]>, + id: Option, + result: Result, + ], + { + task: ITuple<[u64, u32]>; + id: Option; + result: Result; + } + >; /** * The given task was unable to be renewed since the agenda is full at that block. **/ - PeriodicFailed: AugmentedEvent, id: Option], { task: ITuple<[u64, u32]>, id: Option }>; + PeriodicFailed: AugmentedEvent< + ApiType, + [task: ITuple<[u64, u32]>, id: Option], + { task: ITuple<[u64, u32]>; id: Option } + >; /** * The given task can never be executed since it is overweight. **/ - PermanentlyOverweight: AugmentedEvent, id: Option], { task: ITuple<[u64, u32]>, id: Option }>; + PermanentlyOverweight: AugmentedEvent< + ApiType, + [task: ITuple<[u64, u32]>, id: Option], + { task: ITuple<[u64, u32]>; id: Option } + >; /** * Scheduled some task. **/ - Scheduled: AugmentedEvent; + Scheduled: AugmentedEvent< + ApiType, + [when: u64, index: u32], + { when: u64; index: u32 } + >; + /** + * Generic event + **/ + [key: string]: AugmentedEvent; + }; + services: { + /** + * The approval preference for an operator has been updated. + **/ + ApprovalPreferenceUpdated: AugmentedEvent< + ApiType, + [ + operator: AccountId32, + blueprintId: u64, + approvalPreference: TanglePrimitivesJobsV2ApprovalPrefrence, + ], + { + operator: AccountId32; + blueprintId: u64; + approvalPreference: TanglePrimitivesJobsV2ApprovalPrefrence; + } + >; + /** + * A new service blueprint has been created. + **/ + BlueprintCreated: AugmentedEvent< + ApiType, + [owner: AccountId32, blueprintId: u64], + { owner: AccountId32; blueprintId: u64 } + >; + /** + * A job has been called. + **/ + JobCalled: AugmentedEvent< + ApiType, + [ + caller: AccountId32, + serviceId: u64, + callId: u64, + job: u8, + args: Vec, + ], + { + caller: AccountId32; + serviceId: u64; + callId: u64; + job: u8; + args: Vec; + } + >; + /** + * A job result has been submitted. + **/ + JobResultSubmitted: AugmentedEvent< + ApiType, + [ + operator: AccountId32, + serviceId: u64, + callId: u64, + job: u8, + result: Vec, + ], + { + operator: AccountId32; + serviceId: u64; + callId: u64; + job: u8; + result: Vec; + } + >; + /** + * An new operator has been registered. + **/ + Registered: AugmentedEvent< + ApiType, + [ + provider: AccountId32, + blueprintId: u64, + preferences: TanglePrimitivesJobsV2OperatorPreferences, + registrationArgs: Vec, + ], + { + provider: AccountId32; + blueprintId: u64; + preferences: TanglePrimitivesJobsV2OperatorPreferences; + registrationArgs: Vec; + } + >; + /** + * A service has been initiated. + **/ + ServiceInitiated: AugmentedEvent< + ApiType, + [ + owner: AccountId32, + requestId: Option, + serviceId: u64, + blueprintId: u64, + ], + { + owner: AccountId32; + requestId: Option; + serviceId: u64; + blueprintId: u64; + } + >; + /** + * A service request has been approved. + **/ + ServiceRequestApproved: AugmentedEvent< + ApiType, + [ + operator: AccountId32, + requestId: u64, + blueprintId: u64, + pendingApprovals: Vec, + approved: Vec, + ], + { + operator: AccountId32; + requestId: u64; + blueprintId: u64; + pendingApprovals: Vec; + approved: Vec; + } + >; + /** + * A new service has been requested. + **/ + ServiceRequested: AugmentedEvent< + ApiType, + [ + owner: AccountId32, + requestId: u64, + blueprintId: u64, + pendingApprovals: Vec, + approved: Vec, + ], + { + owner: AccountId32; + requestId: u64; + blueprintId: u64; + pendingApprovals: Vec; + approved: Vec; + } + >; + /** + * A service request has been rejected. + **/ + ServiceRequestRejected: AugmentedEvent< + ApiType, + [operator: AccountId32, requestId: u64, blueprintId: u64], + { operator: AccountId32; requestId: u64; blueprintId: u64 } + >; + /** + * A service request has been updated or modified. + **/ + ServiceRequestUpdated: AugmentedEvent< + ApiType, + [ + owner: AccountId32, + requestId: u64, + blueprintId: u64, + pendingApprovals: Vec, + approved: Vec, + ], + { + owner: AccountId32; + requestId: u64; + blueprintId: u64; + pendingApprovals: Vec; + approved: Vec; + } + >; + /** + * A service has been terminated. + **/ + ServiceTerminated: AugmentedEvent< + ApiType, + [owner: AccountId32, serviceId: u64, blueprintId: u64], + { owner: AccountId32; serviceId: u64; blueprintId: u64 } + >; + /** + * An operator has been unregistered. + **/ + Unregistered: AugmentedEvent< + ApiType, + [operator: AccountId32, blueprintId: u64], + { operator: AccountId32; blueprintId: u64 } + >; /** * Generic event **/ @@ -1075,7 +2240,11 @@ declare module '@polkadot/api-base/types/events' { * New session has happened. Note that the argument is the session index, not the * block number as the type might suggest. **/ - NewSession: AugmentedEvent; + NewSession: AugmentedEvent< + ApiType, + [sessionIndex: u32], + { sessionIndex: u32 } + >; /** * Generic event **/ @@ -1084,58 +2253,114 @@ declare module '@polkadot/api-base/types/events' { staking: { /** * An account has bonded this amount. \[stash, amount\] - * + * * NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably, * it will not be emitted for staking rewards when they are added to stake. **/ - Bonded: AugmentedEvent; + Bonded: AugmentedEvent< + ApiType, + [stash: AccountId32, amount: u128], + { stash: AccountId32; amount: u128 } + >; /** * An account has stopped participating as either a validator or nominator. **/ - Chilled: AugmentedEvent; + Chilled: AugmentedEvent< + ApiType, + [stash: AccountId32], + { stash: AccountId32 } + >; /** * The era payout has been set; the first balance is the validator-payout; the second is * the remainder from the maximum amount of reward. **/ - EraPaid: AugmentedEvent; + EraPaid: AugmentedEvent< + ApiType, + [eraIndex: u32, validatorPayout: u128, remainder: u128], + { eraIndex: u32; validatorPayout: u128; remainder: u128 } + >; /** * A new force era mode was set. **/ - ForceEra: AugmentedEvent; + ForceEra: AugmentedEvent< + ApiType, + [mode: PalletStakingForcing], + { mode: PalletStakingForcing } + >; /** * A nominator has been kicked from a validator. **/ - Kicked: AugmentedEvent; + Kicked: AugmentedEvent< + ApiType, + [nominator: AccountId32, stash: AccountId32], + { nominator: AccountId32; stash: AccountId32 } + >; /** * An old slashing report from a prior era was discarded because it could * not be processed. **/ - OldSlashingReportDiscarded: AugmentedEvent; + OldSlashingReportDiscarded: AugmentedEvent< + ApiType, + [sessionIndex: u32], + { sessionIndex: u32 } + >; /** * The stakers' rewards are getting paid. **/ - PayoutStarted: AugmentedEvent; + PayoutStarted: AugmentedEvent< + ApiType, + [eraIndex: u32, validatorStash: AccountId32], + { eraIndex: u32; validatorStash: AccountId32 } + >; /** * The nominator has been rewarded by this amount to this destination. **/ - Rewarded: AugmentedEvent; + Rewarded: AugmentedEvent< + ApiType, + [ + stash: AccountId32, + dest: PalletStakingRewardDestination, + amount: u128, + ], + { + stash: AccountId32; + dest: PalletStakingRewardDestination; + amount: u128; + } + >; /** * A staker (validator or nominator) has been slashed by the given amount. **/ - Slashed: AugmentedEvent; + Slashed: AugmentedEvent< + ApiType, + [staker: AccountId32, amount: u128], + { staker: AccountId32; amount: u128 } + >; /** * A slash for the given validator, for the given percentage of their stake, at the given * era as been reported. **/ - SlashReported: AugmentedEvent; + SlashReported: AugmentedEvent< + ApiType, + [validator: AccountId32, fraction: Perbill, slashEra: u32], + { validator: AccountId32; fraction: Perbill; slashEra: u32 } + >; /** * Targets size limit reached. **/ - SnapshotTargetsSizeExceeded: AugmentedEvent; + SnapshotTargetsSizeExceeded: AugmentedEvent< + ApiType, + [size_: u32], + { size_: u32 } + >; /** * Voters size limit reached. **/ - SnapshotVotersSizeExceeded: AugmentedEvent; + SnapshotVotersSizeExceeded: AugmentedEvent< + ApiType, + [size_: u32], + { size_: u32 } + >; /** * A new set of stakers was elected. **/ @@ -1147,16 +2372,28 @@ declare module '@polkadot/api-base/types/events' { /** * An account has unbonded this amount. **/ - Unbonded: AugmentedEvent; + Unbonded: AugmentedEvent< + ApiType, + [stash: AccountId32, amount: u128], + { stash: AccountId32; amount: u128 } + >; /** * A validator has set their preferences. **/ - ValidatorPrefsSet: AugmentedEvent; + ValidatorPrefsSet: AugmentedEvent< + ApiType, + [stash: AccountId32, prefs: PalletStakingValidatorPrefs], + { stash: AccountId32; prefs: PalletStakingValidatorPrefs } + >; /** * An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance` * from the unlocking queue. **/ - Withdrawn: AugmentedEvent; + Withdrawn: AugmentedEvent< + ApiType, + [stash: AccountId32, amount: u128], + { stash: AccountId32; amount: u128 } + >; /** * Generic event **/ @@ -1166,7 +2403,11 @@ declare module '@polkadot/api-base/types/events' { /** * The sudo key has been updated. **/ - KeyChanged: AugmentedEvent, new_: AccountId32], { old: Option, new_: AccountId32 }>; + KeyChanged: AugmentedEvent< + ApiType, + [old: Option, new_: AccountId32], + { old: Option; new_: AccountId32 } + >; /** * The key was permanently removed. **/ @@ -1174,11 +2415,226 @@ declare module '@polkadot/api-base/types/events' { /** * A sudo call just took place. **/ - Sudid: AugmentedEvent], { sudoResult: Result }>; + Sudid: AugmentedEvent< + ApiType, + [sudoResult: Result], + { sudoResult: Result } + >; /** * A [sudo_as](Pallet::sudo_as) call just took place. **/ - SudoAsDone: AugmentedEvent], { sudoResult: Result }>; + SudoAsDone: AugmentedEvent< + ApiType, + [sudoResult: Result], + { sudoResult: Result } + >; + /** + * Generic event + **/ + [key: string]: AugmentedEvent; + }; + sygmaAccessSegregator: { + /** + * Extrinsic access grant to someone + * args: [pallet_index, extrinsic_name, who] + **/ + AccessGranted: AugmentedEvent< + ApiType, + [palletIndex: u8, extrinsicName: Bytes, who: AccountId32], + { palletIndex: u8; extrinsicName: Bytes; who: AccountId32 } + >; + /** + * Generic event + **/ + [key: string]: AugmentedEvent; + }; + sygmaBasicFeeHandler: { + /** + * Fee set for a specific asset + * args: [domain, asset, amount] + **/ + FeeSet: AugmentedEvent< + ApiType, + [domain: u8, asset: StagingXcmV4AssetAssetId, amount: u128], + { domain: u8; asset: StagingXcmV4AssetAssetId; amount: u128 } + >; + /** + * Generic event + **/ + [key: string]: AugmentedEvent; + }; + sygmaBridge: { + /** + * When all bridges are paused + **/ + AllBridgePaused: AugmentedEvent< + ApiType, + [sender: AccountId32], + { sender: AccountId32 } + >; + /** + * When all bridges are unpaused + **/ + AllBridgeUnpaused: AugmentedEvent< + ApiType, + [sender: AccountId32], + { sender: AccountId32 } + >; + /** + * When bridge is paused + * args: [dest_domain_id] + **/ + BridgePaused: AugmentedEvent< + ApiType, + [destDomainId: u8], + { destDomainId: u8 } + >; + /** + * When bridge is unpaused + * args: [dest_domain_id] + **/ + BridgeUnpaused: AugmentedEvent< + ApiType, + [destDomainId: u8], + { destDomainId: u8 } + >; + /** + * When initial bridge transfer send to dest domain + * args: [dest_domain_id, resource_id, deposit_nonce, sender, transfer_type, + * deposit_data, handler_response, ] + **/ + Deposit: AugmentedEvent< + ApiType, + [ + destDomainId: u8, + resourceId: U8aFixed, + depositNonce: u64, + sender: AccountId32, + transferType: SygmaTraitsTransferType, + depositData: Bytes, + handlerResponse: Bytes, + ], + { + destDomainId: u8; + resourceId: U8aFixed; + depositNonce: u64; + sender: AccountId32; + transferType: SygmaTraitsTransferType; + depositData: Bytes; + handlerResponse: Bytes; + } + >; + /** + * When proposal was faild to execute + **/ + FailedHandlerExecution: AugmentedEvent< + ApiType, + [error: Bytes, originDomainId: u8, depositNonce: u64], + { error: Bytes; originDomainId: u8; depositNonce: u64 } + >; + /** + * When bridge fee is collected + **/ + FeeCollected: AugmentedEvent< + ApiType, + [ + feePayer: AccountId32, + destDomainId: u8, + resourceId: U8aFixed, + feeAmount: u128, + feeAssetId: StagingXcmV4AssetAssetId, + ], + { + feePayer: AccountId32; + destDomainId: u8; + resourceId: U8aFixed; + feeAmount: u128; + feeAssetId: StagingXcmV4AssetAssetId; + } + >; + /** + * When proposal was executed successfully + **/ + ProposalExecution: AugmentedEvent< + ApiType, + [originDomainId: u8, depositNonce: u64, dataHash: U8aFixed], + { originDomainId: u8; depositNonce: u64; dataHash: U8aFixed } + >; + /** + * When registering a new dest domainID with its corresponding chainID + **/ + RegisterDestDomain: AugmentedEvent< + ApiType, + [sender: AccountId32, domainId: u8, chainId: U256], + { sender: AccountId32; domainId: u8; chainId: U256 } + >; + /** + * When user is going to retry a bridge transfer + * args: [deposit_on_block_height, dest_domain_id, sender] + **/ + Retry: AugmentedEvent< + ApiType, + [depositOnBlockHeight: u128, destDomainId: u8, sender: AccountId32], + { depositOnBlockHeight: u128; destDomainId: u8; sender: AccountId32 } + >; + /** + * When unregistering a dest domainID with its corresponding chainID + **/ + UnregisterDestDomain: AugmentedEvent< + ApiType, + [sender: AccountId32, domainId: u8, chainId: U256], + { sender: AccountId32; domainId: u8; chainId: U256 } + >; + /** + * Generic event + **/ + [key: string]: AugmentedEvent; + }; + sygmaFeeHandlerRouter: { + /** + * When fee handler was set for a specific (domain, asset) pair + * args: [dest_domain_id, asset_id, handler_type] + **/ + FeeHandlerSet: AugmentedEvent< + ApiType, + [ + domain: u8, + asset: StagingXcmV4AssetAssetId, + handlerType: SygmaFeeHandlerRouterFeeHandlerType, + ], + { + domain: u8; + asset: StagingXcmV4AssetAssetId; + handlerType: SygmaFeeHandlerRouterFeeHandlerType; + } + >; + /** + * Generic event + **/ + [key: string]: AugmentedEvent; + }; + sygmaPercentageFeeHandler: { + /** + * Fee set rate for a specific asset and domain + * args: [domain, asset, rate_basis_point, fee_lower_bound, fee_upper_bound] + **/ + FeeRateSet: AugmentedEvent< + ApiType, + [ + domain: u8, + asset: StagingXcmV4AssetAssetId, + rateBasisPoint: u32, + feeLowerBound: u128, + feeUpperBound: u128, + ], + { + domain: u8; + asset: StagingXcmV4AssetAssetId; + rateBasisPoint: u32; + feeLowerBound: u128; + feeUpperBound: u128; + } + >; /** * Generic event **/ @@ -1189,7 +2645,11 @@ declare module '@polkadot/api-base/types/events' { * Extrinsic access grant to someone * args: [pallet_index, extrinsic_name, who] **/ - AccessGranted: AugmentedEvent; + AccessGranted: AugmentedEvent< + ApiType, + [palletIndex: u8, extrinsicName: Bytes, who: AccountId32], + { palletIndex: u8; extrinsicName: Bytes; who: AccountId32 } + >; /** * Generic event **/ @@ -1200,7 +2660,11 @@ declare module '@polkadot/api-base/types/events' { * Fee set for a specific asset * args: [domain, asset, amount] **/ - FeeSet: AugmentedEvent; + FeeSet: AugmentedEvent< + ApiType, + [domain: u8, asset: StagingXcmV4AssetAssetId, amount: u128], + { domain: u8; asset: StagingXcmV4AssetAssetId; amount: u128 } + >; /** * Generic event **/ @@ -1210,52 +2674,124 @@ declare module '@polkadot/api-base/types/events' { /** * When all bridges are paused **/ - AllBridgePaused: AugmentedEvent; + AllBridgePaused: AugmentedEvent< + ApiType, + [sender: AccountId32], + { sender: AccountId32 } + >; /** * When all bridges are unpaused **/ - AllBridgeUnpaused: AugmentedEvent; + AllBridgeUnpaused: AugmentedEvent< + ApiType, + [sender: AccountId32], + { sender: AccountId32 } + >; /** * When bridge is paused * args: [dest_domain_id] **/ - BridgePaused: AugmentedEvent; + BridgePaused: AugmentedEvent< + ApiType, + [destDomainId: u8], + { destDomainId: u8 } + >; /** * When bridge is unpaused * args: [dest_domain_id] **/ - BridgeUnpaused: AugmentedEvent; + BridgeUnpaused: AugmentedEvent< + ApiType, + [destDomainId: u8], + { destDomainId: u8 } + >; /** * When initial bridge transfer send to dest domain * args: [dest_domain_id, resource_id, deposit_nonce, sender, transfer_type, * deposit_data, handler_response, ] **/ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent< + ApiType, + [ + destDomainId: u8, + resourceId: U8aFixed, + depositNonce: u64, + sender: AccountId32, + transferType: SygmaTraitsTransferType, + depositData: Bytes, + handlerResponse: Bytes, + ], + { + destDomainId: u8; + resourceId: U8aFixed; + depositNonce: u64; + sender: AccountId32; + transferType: SygmaTraitsTransferType; + depositData: Bytes; + handlerResponse: Bytes; + } + >; /** * When proposal was faild to execute **/ - FailedHandlerExecution: AugmentedEvent; + FailedHandlerExecution: AugmentedEvent< + ApiType, + [error: Bytes, originDomainId: u8, depositNonce: u64], + { error: Bytes; originDomainId: u8; depositNonce: u64 } + >; /** * When bridge fee is collected **/ - FeeCollected: AugmentedEvent; + FeeCollected: AugmentedEvent< + ApiType, + [ + feePayer: AccountId32, + destDomainId: u8, + resourceId: U8aFixed, + feeAmount: u128, + feeAssetId: StagingXcmV4AssetAssetId, + ], + { + feePayer: AccountId32; + destDomainId: u8; + resourceId: U8aFixed; + feeAmount: u128; + feeAssetId: StagingXcmV4AssetAssetId; + } + >; /** * When proposal was executed successfully **/ - ProposalExecution: AugmentedEvent; + ProposalExecution: AugmentedEvent< + ApiType, + [originDomainId: u8, depositNonce: u64, dataHash: U8aFixed], + { originDomainId: u8; depositNonce: u64; dataHash: U8aFixed } + >; /** * When registering a new dest domainID with its corresponding chainID **/ - RegisterDestDomain: AugmentedEvent; + RegisterDestDomain: AugmentedEvent< + ApiType, + [sender: AccountId32, domainId: u8, chainId: U256], + { sender: AccountId32; domainId: u8; chainId: U256 } + >; /** * When user is going to retry a bridge transfer * args: [deposit_on_block_height, dest_domain_id, sender] **/ - Retry: AugmentedEvent; + Retry: AugmentedEvent< + ApiType, + [depositOnBlockHeight: u128, destDomainId: u8, sender: AccountId32], + { depositOnBlockHeight: u128; destDomainId: u8; sender: AccountId32 } + >; /** * When unregistering a dest domainID with its corresponding chainID **/ - UnregisterDestDomain: AugmentedEvent; + UnregisterDestDomain: AugmentedEvent< + ApiType, + [sender: AccountId32, domainId: u8, chainId: U256], + { sender: AccountId32; domainId: u8; chainId: U256 } + >; /** * Generic event **/ @@ -1266,7 +2802,19 @@ declare module '@polkadot/api-base/types/events' { * When fee handler was set for a specific (domain, asset) pair * args: [dest_domain_id, asset_id, handler_type] **/ - FeeHandlerSet: AugmentedEvent; + FeeHandlerSet: AugmentedEvent< + ApiType, + [ + domain: u8, + asset: StagingXcmV4AssetAssetId, + handlerType: SygmaFeeHandlerRouterFeeHandlerType, + ], + { + domain: u8; + asset: StagingXcmV4AssetAssetId; + handlerType: SygmaFeeHandlerRouterFeeHandlerType; + } + >; /** * Generic event **/ @@ -1277,7 +2825,23 @@ declare module '@polkadot/api-base/types/events' { * Fee set rate for a specific asset and domain * args: [domain, asset, rate_basis_point, fee_lower_bound, fee_upper_bound] **/ - FeeRateSet: AugmentedEvent; + FeeRateSet: AugmentedEvent< + ApiType, + [ + domain: u8, + asset: StagingXcmV4AssetAssetId, + rateBasisPoint: u32, + feeLowerBound: u128, + feeUpperBound: u128, + ], + { + domain: u8; + asset: StagingXcmV4AssetAssetId; + rateBasisPoint: u32; + feeLowerBound: u128; + feeUpperBound: u128; + } + >; /** * Generic event **/ @@ -1291,27 +2855,57 @@ declare module '@polkadot/api-base/types/events' { /** * An extrinsic failed. **/ - ExtrinsicFailed: AugmentedEvent; + ExtrinsicFailed: AugmentedEvent< + ApiType, + [ + dispatchError: SpRuntimeDispatchError, + dispatchInfo: FrameSupportDispatchDispatchInfo, + ], + { + dispatchError: SpRuntimeDispatchError; + dispatchInfo: FrameSupportDispatchDispatchInfo; + } + >; /** * An extrinsic completed successfully. **/ - ExtrinsicSuccess: AugmentedEvent; + ExtrinsicSuccess: AugmentedEvent< + ApiType, + [dispatchInfo: FrameSupportDispatchDispatchInfo], + { dispatchInfo: FrameSupportDispatchDispatchInfo } + >; /** * An account was reaped. **/ - KilledAccount: AugmentedEvent; + KilledAccount: AugmentedEvent< + ApiType, + [account: AccountId32], + { account: AccountId32 } + >; /** * A new account was created. **/ - NewAccount: AugmentedEvent; + NewAccount: AugmentedEvent< + ApiType, + [account: AccountId32], + { account: AccountId32 } + >; /** * On on-chain remark happened. **/ - Remarked: AugmentedEvent; + Remarked: AugmentedEvent< + ApiType, + [sender: AccountId32, hash_: H256], + { sender: AccountId32; hash_: H256 } + >; /** * An upgrade was authorized. **/ - UpgradeAuthorized: AugmentedEvent; + UpgradeAuthorized: AugmentedEvent< + ApiType, + [codeHash: H256, checkVersion: bool], + { codeHash: H256; checkVersion: bool } + >; /** * Generic event **/ @@ -1322,7 +2916,11 @@ declare module '@polkadot/api-base/types/events' { * A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, * has been paid by `who`. **/ - TransactionFeePaid: AugmentedEvent; + TransactionFeePaid: AugmentedEvent< + ApiType, + [who: AccountId32, actualFee: u128, tip: u128], + { who: AccountId32; actualFee: u128; tip: u128 } + >; /** * Generic event **/ @@ -1332,7 +2930,25 @@ declare module '@polkadot/api-base/types/events' { /** * A new asset spend proposal has been approved. **/ - AssetSpendApproved: AugmentedEvent; + AssetSpendApproved: AugmentedEvent< + ApiType, + [ + index: u32, + assetKind: Null, + amount: u128, + beneficiary: AccountId32, + validFrom: u64, + expireAt: u64, + ], + { + index: u32; + assetKind: Null; + amount: u128; + beneficiary: AccountId32; + validFrom: u64; + expireAt: u64; + } + >; /** * An approved spend was voided. **/ @@ -1340,7 +2956,11 @@ declare module '@polkadot/api-base/types/events' { /** * Some funds have been allocated. **/ - Awarded: AugmentedEvent; + Awarded: AugmentedEvent< + ApiType, + [proposalIndex: u32, award: u128, account: AccountId32], + { proposalIndex: u32; award: u128; account: AccountId32 } + >; /** * Some of our funds have been burnt. **/ @@ -1352,31 +2972,59 @@ declare module '@polkadot/api-base/types/events' { /** * A payment happened. **/ - Paid: AugmentedEvent; + Paid: AugmentedEvent< + ApiType, + [index: u32, paymentId: Null], + { index: u32; paymentId: Null } + >; /** * A payment failed and can be retried. **/ - PaymentFailed: AugmentedEvent; + PaymentFailed: AugmentedEvent< + ApiType, + [index: u32, paymentId: Null], + { index: u32; paymentId: Null } + >; /** * New proposal. **/ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [proposalIndex: u32], + { proposalIndex: u32 } + >; /** * A proposal was rejected; funds were slashed. **/ - Rejected: AugmentedEvent; + Rejected: AugmentedEvent< + ApiType, + [proposalIndex: u32, slashed: u128], + { proposalIndex: u32; slashed: u128 } + >; /** * Spending has finished; this is the amount that rolls over until next spend. **/ - Rollover: AugmentedEvent; + Rollover: AugmentedEvent< + ApiType, + [rolloverBalance: u128], + { rolloverBalance: u128 } + >; /** * A new spend proposal has been approved. **/ - SpendApproved: AugmentedEvent; + SpendApproved: AugmentedEvent< + ApiType, + [proposalIndex: u32, amount: u128, beneficiary: AccountId32], + { proposalIndex: u32; amount: u128; beneficiary: AccountId32 } + >; /** * We have ended a spend period and will now allocate funds. **/ - Spending: AugmentedEvent; + Spending: AugmentedEvent< + ApiType, + [budgetRemaining: u128], + { budgetRemaining: u128 } + >; /** * A spend was processed and removed from the storage. It might have been successfully * paid or it may have expired. @@ -1385,7 +3033,11 @@ declare module '@polkadot/api-base/types/events' { /** * The inactive funds of the pallet have been updated. **/ - UpdatedInactive: AugmentedEvent; + UpdatedInactive: AugmentedEvent< + ApiType, + [reactivated: u128, deactivated: u128], + { reactivated: u128; deactivated: u128 } + >; /** * Generic event **/ @@ -1395,11 +3047,19 @@ declare module '@polkadot/api-base/types/events' { /** * This pallet, or a specific call is now paused. **/ - CallPaused: AugmentedEvent], { fullName: ITuple<[Bytes, Bytes]> }>; + CallPaused: AugmentedEvent< + ApiType, + [fullName: ITuple<[Bytes, Bytes]>], + { fullName: ITuple<[Bytes, Bytes]> } + >; /** * This pallet, or a specific call is now unpaused. **/ - CallUnpaused: AugmentedEvent], { fullName: ITuple<[Bytes, Bytes]> }>; + CallUnpaused: AugmentedEvent< + ApiType, + [fullName: ITuple<[Bytes, Bytes]>], + { fullName: ITuple<[Bytes, Bytes]> } + >; /** * Generic event **/ @@ -1418,11 +3078,19 @@ declare module '@polkadot/api-base/types/events' { * Batch of dispatches did not complete fully. Index of first failing dispatch given, as * well as the error. **/ - BatchInterrupted: AugmentedEvent; + BatchInterrupted: AugmentedEvent< + ApiType, + [index: u32, error: SpRuntimeDispatchError], + { index: u32; error: SpRuntimeDispatchError } + >; /** * A call was dispatched. **/ - DispatchedAs: AugmentedEvent], { result: Result }>; + DispatchedAs: AugmentedEvent< + ApiType, + [result: Result], + { result: Result } + >; /** * A single item within a Batch of dispatches has completed with no error. **/ @@ -1430,7 +3098,11 @@ declare module '@polkadot/api-base/types/events' { /** * A single item within a Batch of dispatches has completed with error. **/ - ItemFailed: AugmentedEvent; + ItemFailed: AugmentedEvent< + ApiType, + [error: SpRuntimeDispatchError], + { error: SpRuntimeDispatchError } + >; /** * Generic event **/ @@ -1440,12 +3112,20 @@ declare module '@polkadot/api-base/types/events' { /** * An \[account\] has become fully vested. **/ - VestingCompleted: AugmentedEvent; + VestingCompleted: AugmentedEvent< + ApiType, + [account: AccountId32], + { account: AccountId32 } + >; /** * The amount vested has been updated. This could indicate a change in funds available. * The balance given is the amount which is left unvested (and thus locked). **/ - VestingUpdated: AugmentedEvent; + VestingUpdated: AugmentedEvent< + ApiType, + [account: AccountId32, unvested: u128], + { account: AccountId32; unvested: u128 } + >; /** * Generic event **/ diff --git a/types/src/interfaces/augment-api-query.ts b/types/src/interfaces/augment-api-query.ts index f466d9928..22517de0b 100644 --- a/types/src/interfaces/augment-api-query.ts +++ b/types/src/interfaces/augment-api-query.ts @@ -3,40 +3,201 @@ // import type lookup before we augment - in some environments // this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/storage'; +import "@polkadot/api-base/types/storage"; -import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/api-base/types'; -import type { Data } from '@polkadot/types'; -import type { BTreeMap, Bytes, Null, Option, U256, U8aFixed, Vec, bool, u128, u32, u64, u8 } from '@polkadot/types-codec'; -import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; -import type { AccountId32, Call, H160, H256, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; -import type { Observable } from '@polkadot/types/types'; -import { PalletAssetsAssetAccount, PalletAssetsApproval, PalletAssetsAssetDetails, PalletAssetsAssetMetadata, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsPreDigest, SpConsensusBabeDigestsNextConfigDescriptor, PalletBagsListListBag, PalletBagsListListNode, PalletBalancesAccountData, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletBountiesBounty, PalletChildBountiesChildBounty, PalletAirdropClaimsUtilsMultiAddress, PalletAirdropClaimsStatementKind, PalletCollectiveVotes, PalletDemocracyMetadataOwner, FrameSupportPreimagesBounded, PalletDemocracyVoteThreshold, PalletDemocracyReferendumInfo, PalletDemocracyVoteVoting, PalletDkgFeeInfo, PalletElectionProviderMultiPhasePhase, SpNposElectionsElectionScore, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletElectionsPhragmenSeatHolder, PalletElectionsPhragmenVoter, EthereumBlock, EthereumReceiptReceiptV3, FpRpcTransactionStatus, EthereumTransactionTransactionV2, PalletEvmCodeMetadata, SpConsensusGrandpaAppPublic, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletIdentityRegistration, PalletIdentityRegistrarInfo, PalletIdentityAuthorityProperties, PalletImOnlineSr25519AppSr25519Public, TanglePrimitivesRolesRoleType, TanglePrimitivesJobsPhaseResult, TanglePrimitivesJobsJobInfo, PalletMultiAssetDelegationOperatorOperatorSnapshot, PalletMultiAssetDelegationDelegatorDelegatorMetadata, PalletMultiAssetDelegationOperatorOperatorMetadata, PalletMultiAssetDelegationRewardsRewardConfig, PalletMultisigMultisig, PalletNominationPoolsBondedPoolInner, PalletNominationPoolsClaimPermission, PalletNominationPoolsPoolMember, PalletNominationPoolsRewardPool, PalletNominationPoolsSubPools, SpStakingOffenceOffenceDetails, PalletPreimageRequestStatus, PalletPreimageOldRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletRolesRestakingLedger, PalletSchedulerScheduled, SpCoreCryptoKeyTypeId, TangleTestnetRuntimeOpaqueSessionKeys, SpStakingExposure, SpStakingPagedExposureMetadata, SpStakingExposurePage, PalletStakingValidatorPrefs, PalletStakingForcing, PalletStakingStakingLedger, PalletStakingNominations, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingUnappliedSlash, StagingXcmV4AssetAssetId, SygmaFeeHandlerRouterFeeHandlerType, FrameSystemAccountInfo, FrameSystemCodeUpgradeAuthorization, FrameSupportDispatchPerDispatchClassWeight, SpRuntimeDigest, FrameSystemEventRecord, FrameSystemPhase, FrameSystemLastRuntimeUpgradeInfo, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletTreasurySpendStatus, PalletVestingReleases, PalletVestingVestingInfo, PalletZksaasFeeInfo } from '@polkadot/types/lookup'; +import type { + ApiTypes, + AugmentedQuery, + QueryableStorageEntry, +} from "@polkadot/api-base/types"; +import type { Data } from "@polkadot/types"; +import type { + BTreeMap, + BTreeSet, + Bytes, + Null, + Option, + U256, + U8aFixed, + Vec, + bool, + u128, + u32, + u64, + u8, +} from "@polkadot/types-codec"; +import type { AnyNumber, ITuple } from "@polkadot/types-codec/types"; +import type { + AccountId32, + Call, + H160, + H256, + Perbill, + Percent, + Permill, +} from "@polkadot/types/interfaces/runtime"; +import type { Observable } from "@polkadot/types/types"; +import { + PalletAssetsAssetAccount, + PalletAssetsApproval, + PalletAssetsAssetDetails, + PalletAssetsAssetMetadata, + SpConsensusBabeAppPublic, + SpConsensusBabeBabeEpochConfiguration, + SpConsensusBabeDigestsPreDigest, + SpConsensusBabeDigestsNextConfigDescriptor, + PalletBagsListListBag, + PalletBagsListListNode, + PalletBalancesAccountData, + PalletBalancesIdAmountRuntimeFreezeReason, + PalletBalancesIdAmountRuntimeHoldReason, + PalletBalancesBalanceLock, + PalletBalancesReserveData, + PalletBountiesBounty, + PalletChildBountiesChildBounty, + PalletAirdropClaimsUtilsMultiAddress, + PalletAirdropClaimsStatementKind, + PalletCollectiveVotes, + PalletDemocracyMetadataOwner, + FrameSupportPreimagesBounded, + PalletDemocracyVoteThreshold, + PalletDemocracyReferendumInfo, + PalletDemocracyVoteVoting, + PalletDkgFeeInfo, + PalletElectionProviderMultiPhasePhase, + SpNposElectionsElectionScore, + PalletElectionProviderMultiPhaseReadySolution, + PalletElectionProviderMultiPhaseSignedSignedSubmission, + PalletElectionProviderMultiPhaseRoundSnapshot, + PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, + PalletElectionsPhragmenSeatHolder, + PalletElectionsPhragmenVoter, + EthereumBlock, + EthereumReceiptReceiptV3, + FpRpcTransactionStatus, + EthereumTransactionTransactionV2, + PalletEvmCodeMetadata, + SpConsensusGrandpaAppPublic, + PalletGrandpaStoredPendingChange, + PalletGrandpaStoredState, + PalletIdentityRegistration, + PalletIdentityRegistrarInfo, + PalletIdentityAuthorityProperties, + PalletImOnlineSr25519AppSr25519Public, + TanglePrimitivesRolesRoleType, + TanglePrimitivesJobsPhaseResult, + TanglePrimitivesJobsJobInfo, + PalletMultisigMultisig, + PalletNominationPoolsBondedPoolInner, + PalletNominationPoolsClaimPermission, + PalletNominationPoolsPoolMember, + PalletNominationPoolsRewardPool, + PalletNominationPoolsSubPools, + SpStakingOffenceOffenceDetails, + PalletPreimageRequestStatus, + PalletPreimageOldRequestStatus, + PalletProxyAnnouncement, + PalletProxyProxyDefinition, + PalletStakingActiveEraInfo, + PalletStakingEraRewardPoints, + PalletRolesRestakingLedger, + PalletSchedulerScheduled, + TanglePrimitivesJobsV2ServiceBlueprint, + TanglePrimitivesJobsV2Service, + TanglePrimitivesJobsV2JobCall, + TanglePrimitivesJobsV2JobCallResult, + TanglePrimitivesJobsV2OperatorPreferences, + TanglePrimitivesJobsV2OperatorProfile, + TanglePrimitivesJobsV2ServiceRequest, + SpCoreCryptoKeyTypeId, + TangleTestnetRuntimeOpaqueSessionKeys, + SpStakingExposure, + SpStakingPagedExposureMetadata, + SpStakingExposurePage, + PalletStakingValidatorPrefs, + PalletStakingForcing, + PalletStakingStakingLedger, + PalletStakingNominations, + PalletStakingRewardDestination, + PalletStakingSlashingSlashingSpans, + PalletStakingSlashingSpanRecord, + PalletStakingUnappliedSlash, + StagingXcmV4AssetAssetId, + SygmaFeeHandlerRouterFeeHandlerType, + FrameSystemAccountInfo, + FrameSystemCodeUpgradeAuthorization, + FrameSupportDispatchPerDispatchClassWeight, + SpRuntimeDigest, + FrameSystemEventRecord, + FrameSystemPhase, + FrameSystemLastRuntimeUpgradeInfo, + PalletTransactionPaymentReleases, + PalletTreasuryProposal, + PalletTreasurySpendStatus, + PalletVestingReleases, + PalletVestingVestingInfo, + PalletZksaasFeeInfo, +} from "@polkadot/types/lookup"; -export type __AugmentedQuery = AugmentedQuery unknown>; -export type __QueryableStorageEntry = QueryableStorageEntry; +export type __AugmentedQuery = AugmentedQuery< + ApiType, + () => unknown +>; +export type __QueryableStorageEntry = + QueryableStorageEntry; -declare module '@polkadot/api-base/types/storage' { +declare module "@polkadot/api-base/types/storage" { interface AugmentedQueries { assets: { /** * The holdings of a specific account for a specific asset. **/ - account: AugmentedQuery Observable>, [u128, AccountId32]> & QueryableStorageEntry; + account: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable>, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * Approved balance transfers. First balance is the amount approved for transfer. Second * is the amount of `T::Currency` reserved for storing this. * First key is the asset ID, second key is the owner and third key is the delegate. **/ - approvals: AugmentedQuery Observable>, [u128, AccountId32, AccountId32]> & QueryableStorageEntry; + approvals: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array, + arg3: AccountId32 | string | Uint8Array + ) => Observable>, + [u32, AccountId32, AccountId32] + > & + QueryableStorageEntry; /** * Details of an asset. **/ - asset: AugmentedQuery Observable>, [u128]> & QueryableStorageEntry; + asset: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * Metadata of an asset. **/ - metadata: AugmentedQuery Observable, [u128]> & QueryableStorageEntry; + metadata: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable, + [u32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -46,7 +207,12 @@ declare module '@polkadot/api-base/types/storage' { /** * Author of current block. **/ - author: AugmentedQuery Observable>, []> & QueryableStorageEntry; + author: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -56,27 +222,44 @@ declare module '@polkadot/api-base/types/storage' { /** * Current epoch authorities. **/ - authorities: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + authorities: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * This field should always be populated during block processing unless * secondary plain slots are enabled (which don't contain a VRF output). - * + * * It is set in `on_finalize`, before it will contain the value from the last block. **/ - authorVrfRandomness: AugmentedQuery Observable>, []> & QueryableStorageEntry; + authorVrfRandomness: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Current slot number. **/ - currentSlot: AugmentedQuery Observable, []> & QueryableStorageEntry; + currentSlot: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The configuration for the current epoch. Should never be `None` as it is initialized in * genesis. **/ - epochConfig: AugmentedQuery Observable>, []> & QueryableStorageEntry; + epochConfig: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Current epoch index. **/ - epochIndex: AugmentedQuery Observable, []> & QueryableStorageEntry; + epochIndex: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The block numbers when the last and current epoch have started, respectively `N-1` and * `N`. @@ -84,47 +267,75 @@ declare module '@polkadot/api-base/types/storage' { * entropy was fixed (i.e. it was known to chain observers). Since epochs are defined in * slots, which may be skipped, the block numbers may not line up with the slot numbers. **/ - epochStart: AugmentedQuery Observable>, []> & QueryableStorageEntry; + epochStart: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The slot at which the first epoch actually started. This is 0 * until the first block of the chain. **/ - genesisSlot: AugmentedQuery Observable, []> & QueryableStorageEntry; + genesisSlot: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Temporary value (cleared at block finalization) which is `Some` * if per-block initialization has already been called for current block. **/ - initialized: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + initialized: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * How late the current block is compared to its parent. - * + * * This entry is populated as part of block execution and is cleaned up * on block finalization. Querying this storage entry outside of block * execution context should always yield zero. **/ - lateness: AugmentedQuery Observable, []> & QueryableStorageEntry; + lateness: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Next epoch authorities. **/ - nextAuthorities: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + nextAuthorities: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * The configuration for the next epoch, `None` if the config will not change * (you can fallback to `EpochConfig` instead in that case). **/ - nextEpochConfig: AugmentedQuery Observable>, []> & QueryableStorageEntry; + nextEpochConfig: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Next epoch randomness. **/ - nextRandomness: AugmentedQuery Observable, []> & QueryableStorageEntry; + nextRandomness: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Pending epoch configuration change that will be applied when the next epoch is enacted. **/ - pendingEpochConfigChange: AugmentedQuery Observable>, []> & QueryableStorageEntry; + pendingEpochConfigChange: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The epoch randomness for the *current* epoch. - * + * * # Security - * + * * This MUST NOT be used for gambling, as it can be influenced by a * malicious validator in the short term. It MAY be used in many * cryptographic protocols, however, so long as one remembers that this @@ -132,34 +343,46 @@ declare module '@polkadot/api-base/types/storage' { * used where a number is needed that cannot have been chosen by an * adversary, for purposes such as public-coin zero-knowledge proofs. **/ - randomness: AugmentedQuery Observable, []> & QueryableStorageEntry; + randomness: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Randomness under construction. - * + * * We make a trade-off between storage accesses and list length. * We store the under-construction randomness in segments of up to * `UNDER_CONSTRUCTION_SEGMENT_LENGTH`. - * + * * Once a segment reaches this length, we begin the next one. * We reset all segments and return to `0` at the beginning of every * epoch. **/ - segmentIndex: AugmentedQuery Observable, []> & QueryableStorageEntry; + segmentIndex: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * A list of the last 100 skipped epochs and the corresponding session index * when the epoch was skipped. - * + * * This is only used for validating equivocation proofs. An equivocation proof * must contains a key-ownership proof for a given session, therefore we need a * way to tie together sessions and epoch indices, i.e. we need to validate that * a validator was the owner of a given key on a given session, and what the * active epoch index was during that session. **/ - skippedEpochs: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + skippedEpochs: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * TWOX-NOTE: `SegmentIndex` is an increasing integer, so this is okay. **/ - underConstruction: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + underConstruction: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -169,19 +392,34 @@ declare module '@polkadot/api-base/types/storage' { /** * Counter for the related counted storage map **/ - counterForListNodes: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForListNodes: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * A bag stored in storage. - * + * * Stores a `Bag` struct, which stores head and tail pointers to itself. **/ - listBags: AugmentedQuery Observable>, [u64]> & QueryableStorageEntry; + listBags: AugmentedQuery< + ApiType, + ( + arg: u64 | AnyNumber | Uint8Array + ) => Observable>, + [u64] + > & + QueryableStorageEntry; /** * A single node, within some bag. - * + * * Nodes store links forward and back within their respective bags. **/ - listNodes: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + listNodes: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -190,64 +428,103 @@ declare module '@polkadot/api-base/types/storage' { balances: { /** * The Balances pallet example of storing the balance of an account. - * + * * # Example - * + * * ```nocompile * impl pallet_balances::Config for Runtime { * type AccountStore = StorageMapShim, frame_system::Provider, AccountId, Self::AccountData> * } * ``` - * + * * You can also store the balance of an account in the `System` pallet. - * + * * # Example - * + * * ```nocompile * impl pallet_balances::Config for Runtime { * type AccountStore = System * } * ``` - * + * * But this comes with tradeoffs, storing account balances in the system pallet stores * `frame_system` data alongside the account data contrary to storing account balances in the * `Balances` pallet, which uses a `StorageMap` to store balances data only. * NOTE: This is only used in the case that this pallet is used to store balances. **/ - account: AugmentedQuery Observable, [AccountId32]> & QueryableStorageEntry; + account: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable, + [AccountId32] + > & + QueryableStorageEntry; /** * Freeze locks on account balances. **/ - freezes: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + freezes: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * Holds on account balances. **/ - holds: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + holds: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * The total units of outstanding deactivated balance in the system. **/ - inactiveIssuance: AugmentedQuery Observable, []> & QueryableStorageEntry; + inactiveIssuance: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Any liquidity locks on some account balances. * NOTE: Should only be accessed when setting, changing and freeing a lock. **/ - locks: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + locks: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * Named reserves on some account balances. **/ - reserves: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + reserves: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * The total units issued in the system. **/ - totalIssuance: AugmentedQuery Observable, []> & QueryableStorageEntry; + totalIssuance: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; baseFee: { - baseFeePerGas: AugmentedQuery Observable, []> & QueryableStorageEntry; - elasticity: AugmentedQuery Observable, []> & QueryableStorageEntry; + baseFeePerGas: AugmentedQuery Observable, []> & + QueryableStorageEntry; + elasticity: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query **/ @@ -257,19 +534,33 @@ declare module '@polkadot/api-base/types/storage' { /** * Bounties that have been made. **/ - bounties: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + bounties: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * Bounty indices that have been approved but not yet funded. **/ - bountyApprovals: AugmentedQuery Observable>, []> & QueryableStorageEntry; + bountyApprovals: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * Number of bounty proposals that have been made. **/ - bountyCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + bountyCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The description of each bounty. **/ - bountyDescriptions: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + bountyDescriptions: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -279,47 +570,115 @@ declare module '@polkadot/api-base/types/storage' { /** * Child bounties that have been added. **/ - childBounties: AugmentedQuery Observable>, [u32, u32]> & QueryableStorageEntry; + childBounties: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32, u32] + > & + QueryableStorageEntry; /** * Number of total child bounties. **/ - childBountyCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + childBountyCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The description of each child-bounty. **/ - childBountyDescriptions: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + childBountyDescriptions: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * The cumulative child-bounty curator fee for each parent bounty. **/ - childrenCuratorFees: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; + childrenCuratorFees: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable, + [u32] + > & + QueryableStorageEntry; /** * Number of child bounties per parent bounty. * Map of parent bounty index to number of child bounties. **/ - parentChildBounties: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; + parentChildBounties: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable, + [u32] + > & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; claims: { - claims: AugmentedQuery Observable>, [PalletAirdropClaimsUtilsMultiAddress]> & QueryableStorageEntry; + claims: AugmentedQuery< + ApiType, + ( + arg: + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string + | Uint8Array + ) => Observable>, + [PalletAirdropClaimsUtilsMultiAddress] + > & + QueryableStorageEntry; /** * Expiry block and account to deposit expired funds **/ - expiryConfig: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + expiryConfig: AugmentedQuery< + ApiType, + () => Observable< + Option> + >, + [] + > & + QueryableStorageEntry; /** * The statement kind that must be signed, if any. **/ - signing: AugmentedQuery Observable>, [PalletAirdropClaimsUtilsMultiAddress]> & QueryableStorageEntry; - total: AugmentedQuery Observable, []> & QueryableStorageEntry; + signing: AugmentedQuery< + ApiType, + ( + arg: + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string + | Uint8Array + ) => Observable>, + [PalletAirdropClaimsUtilsMultiAddress] + > & + QueryableStorageEntry; + total: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Vesting schedule for a claim. * First balance is the total amount that should be held for vesting. * Second balance is how much should be unlocked per block. * The block number is when the vesting should start. **/ - vesting: AugmentedQuery Observable>>>, [PalletAirdropClaimsUtilsMultiAddress]> & QueryableStorageEntry; + vesting: AugmentedQuery< + ApiType, + ( + arg: + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string + | Uint8Array + ) => Observable>>>, + [PalletAirdropClaimsUtilsMultiAddress] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -329,27 +688,47 @@ declare module '@polkadot/api-base/types/storage' { /** * The current members of the collective. This is stored sorted (just by value). **/ - members: AugmentedQuery Observable>, []> & QueryableStorageEntry; + members: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * The prime member that helps determine the default vote behavior in case of absentations. **/ - prime: AugmentedQuery Observable>, []> & QueryableStorageEntry; + prime: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Proposals so far. **/ - proposalCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + proposalCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Actual proposal for a given hash, if it's current. **/ - proposalOf: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; + proposalOf: AugmentedQuery< + ApiType, + (arg: H256 | string | Uint8Array) => Observable>, + [H256] + > & + QueryableStorageEntry; /** * The hashes of the active proposals. **/ - proposals: AugmentedQuery Observable>, []> & QueryableStorageEntry; + proposals: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * Votes on a given proposal, if it is ongoing. **/ - voting: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; + voting: AugmentedQuery< + ApiType, + ( + arg: H256 | string | Uint8Array + ) => Observable>, + [H256] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -360,83 +739,160 @@ declare module '@polkadot/api-base/types/storage' { * A record of who vetoed what. Maps proposal hash to a possible existent block number * (until when it may not be resubmitted) and who vetoed it. **/ - blacklist: AugmentedQuery Observable]>>>, [H256]> & QueryableStorageEntry; + blacklist: AugmentedQuery< + ApiType, + ( + arg: H256 | string | Uint8Array + ) => Observable]>>>, + [H256] + > & + QueryableStorageEntry; /** * Record of all proposals that have been subject to emergency cancellation. **/ - cancellations: AugmentedQuery Observable, [H256]> & QueryableStorageEntry; + cancellations: AugmentedQuery< + ApiType, + (arg: H256 | string | Uint8Array) => Observable, + [H256] + > & + QueryableStorageEntry; /** * Those who have locked a deposit. - * + * * TWOX-NOTE: Safe, as increasing integer keys are safe. **/ - depositOf: AugmentedQuery Observable, u128]>>>, [u32]> & QueryableStorageEntry; + depositOf: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable, u128]>>>, + [u32] + > & + QueryableStorageEntry; /** * True if the last referendum tabled was submitted externally. False if it was a public * proposal. **/ - lastTabledWasExternal: AugmentedQuery Observable, []> & QueryableStorageEntry; + lastTabledWasExternal: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * The lowest referendum index representing an unbaked referendum. Equal to * `ReferendumCount` if there isn't a unbaked referendum. **/ - lowestUnbaked: AugmentedQuery Observable, []> & QueryableStorageEntry; + lowestUnbaked: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * General information concerning any proposal or referendum. * The `Hash` refers to the preimage of the `Preimages` provider which can be a JSON * dump or IPFS hash of a JSON file. - * + * * Consider a garbage collection for a metadata of finished referendums to `unrequest` (remove) * large preimages. **/ - metadataOf: AugmentedQuery Observable>, [PalletDemocracyMetadataOwner]> & QueryableStorageEntry; + metadataOf: AugmentedQuery< + ApiType, + ( + arg: + | PalletDemocracyMetadataOwner + | { External: any } + | { Proposal: any } + | { Referendum: any } + | string + | Uint8Array + ) => Observable>, + [PalletDemocracyMetadataOwner] + > & + QueryableStorageEntry; /** * The referendum to be tabled whenever it would be valid to table an external proposal. * This happens when a referendum needs to be tabled and one of two conditions are met: * - `LastTabledWasExternal` is `false`; or * - `PublicProps` is empty. **/ - nextExternal: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + nextExternal: AugmentedQuery< + ApiType, + () => Observable< + Option< + ITuple<[FrameSupportPreimagesBounded, PalletDemocracyVoteThreshold]> + > + >, + [] + > & + QueryableStorageEntry; /** * The number of (public) proposals that have been made so far. **/ - publicPropCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + publicPropCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The public proposals. Unsorted. The second item is the proposal. **/ - publicProps: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + publicProps: AugmentedQuery< + ApiType, + () => Observable< + Vec> + >, + [] + > & + QueryableStorageEntry; /** * The next free referendum index, aka the number of referenda started so far. **/ - referendumCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + referendumCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Information concerning any given referendum. - * + * * TWOX-NOTE: SAFE as indexes are not under an attacker’s control. **/ - referendumInfoOf: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + referendumInfoOf: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * All votes for a particular voter. We store the balance for the number of votes that we * have recorded. The second item is the total amount of delegations, that will be added. - * + * * TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway. **/ - votingOf: AugmentedQuery Observable, [AccountId32]> & QueryableStorageEntry; + votingOf: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable, + [AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; dkg: { - feeInfo: AugmentedQuery Observable, []> & QueryableStorageEntry; + feeInfo: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; dynamicFee: { - minGasPrice: AugmentedQuery Observable, []> & QueryableStorageEntry; - targetMinGasPrice: AugmentedQuery Observable>, []> & QueryableStorageEntry; + minGasPrice: AugmentedQuery Observable, []> & + QueryableStorageEntry; + targetMinGasPrice: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -446,81 +902,133 @@ declare module '@polkadot/api-base/types/storage' { /** * Current phase. **/ - currentPhase: AugmentedQuery Observable, []> & QueryableStorageEntry; + currentPhase: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Desired number of targets to elect for this round. - * + * * Only exists when [`Snapshot`] is present. * Note: This storage type must only be mutated through [`SnapshotWrapper`]. **/ - desiredTargets: AugmentedQuery Observable>, []> & QueryableStorageEntry; + desiredTargets: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The minimum score that each 'untrusted' solution must attain in order to be considered * feasible. - * + * * Can be set via `set_minimum_untrusted_score`. **/ - minimumUntrustedScore: AugmentedQuery Observable>, []> & QueryableStorageEntry; + minimumUntrustedScore: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Current best solution, signed or unsigned, queued to be returned upon `elect`. - * + * * Always sorted by score. **/ - queuedSolution: AugmentedQuery Observable>, []> & QueryableStorageEntry; + queuedSolution: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Internal counter for the number of rounds. - * + * * This is useful for de-duplication of transactions submitted to the pool, and general * diagnostics of the pallet. - * + * * This is merely incremented once per every time that an upstream `elect` is called. **/ - round: AugmentedQuery Observable, []> & QueryableStorageEntry; + round: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * A sorted, bounded vector of `(score, block_number, index)`, where each `index` points to a * value in `SignedSubmissions`. - * + * * We never need to process more than a single signed submission at a time. Signed submissions * can be quite large, so we're willing to pay the cost of multiple database accesses to access * them one at a time instead of reading and decoding all of them at once. **/ - signedSubmissionIndices: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + signedSubmissionIndices: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * The next index to be assigned to an incoming signed submission. - * + * * Every accepted submission is assigned a unique index; that index is bound to that particular * submission for the duration of the election. On election finalization, the next index is * reset to 0. - * + * * We can't just use `SignedSubmissionIndices.len()`, because that's a bounded set; past its * capacity, it will simply saturate. We can't just iterate over `SignedSubmissionsMap`, * because iteration is slow. Instead, we store the value here. **/ - signedSubmissionNextIndex: AugmentedQuery Observable, []> & QueryableStorageEntry; + signedSubmissionNextIndex: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Unchecked, signed solutions. - * + * * Together with `SubmissionIndices`, this stores a bounded set of `SignedSubmissions` while * allowing us to keep only a single one in memory at a time. - * + * * Twox note: the key of the map is an auto-incrementing index which users cannot inspect or * affect; we shouldn't need a cryptographically secure hasher. **/ - signedSubmissionsMap: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + signedSubmissionsMap: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable< + Option + >, + [u32] + > & + QueryableStorageEntry; /** * Snapshot data of the round. - * + * * This is created at the beginning of the signed phase and cleared upon calling `elect`. * Note: This storage type must only be mutated through [`SnapshotWrapper`]. **/ - snapshot: AugmentedQuery Observable>, []> & QueryableStorageEntry; + snapshot: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The metadata of the [`RoundSnapshot`] - * + * * Only exists when [`Snapshot`] is present. * Note: This storage type must only be mutated through [`SnapshotWrapper`]. **/ - snapshotMetadata: AugmentedQuery Observable>, []> & QueryableStorageEntry; + snapshotMetadata: AugmentedQuery< + ApiType, + () => Observable< + Option + >, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -530,68 +1038,151 @@ declare module '@polkadot/api-base/types/storage' { /** * The present candidate list. A current member or runner-up can never enter this vector * and is always implicitly assumed to be a candidate. - * + * * Second element is the deposit. - * + * * Invariant: Always sorted based on account id. **/ - candidates: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + candidates: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * The total number of vote rounds that have happened, excluding the upcoming one. **/ - electionRounds: AugmentedQuery Observable, []> & QueryableStorageEntry; + electionRounds: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The current elected members. - * + * * Invariant: Always sorted based on account id. **/ - members: AugmentedQuery Observable>, []> & QueryableStorageEntry; + members: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The current reserved runners-up. - * + * * Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the * last (i.e. _best_) runner-up will be replaced. **/ - runnersUp: AugmentedQuery Observable>, []> & QueryableStorageEntry; + runnersUp: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Votes and locked stake of a particular voter. - * + * * TWOX-NOTE: SAFE as `AccountId` is a crypto hash. **/ - voting: AugmentedQuery Observable, [AccountId32]> & QueryableStorageEntry; + voting: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable, + [AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; ethereum: { - blockHash: AugmentedQuery Observable, [U256]> & QueryableStorageEntry; + blockHash: AugmentedQuery< + ApiType, + (arg: U256 | AnyNumber | Uint8Array) => Observable, + [U256] + > & + QueryableStorageEntry; /** * The current Ethereum block. **/ - currentBlock: AugmentedQuery Observable>, []> & QueryableStorageEntry; + currentBlock: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The current Ethereum receipts. **/ - currentReceipts: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + currentReceipts: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * The current transaction statuses. **/ - currentTransactionStatuses: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + currentTransactionStatuses: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * Current building block's transactions and receipts. **/ - pending: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + pending: AugmentedQuery< + ApiType, + () => Observable< + Vec< + ITuple< + [ + EthereumTransactionTransactionV2, + FpRpcTransactionStatus, + EthereumReceiptReceiptV3, + ] + > + > + >, + [] + > & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; evm: { - accountCodes: AugmentedQuery Observable, [H160]> & QueryableStorageEntry; - accountCodesMetadata: AugmentedQuery Observable>, [H160]> & QueryableStorageEntry; - accountStorages: AugmentedQuery Observable, [H160, H256]> & QueryableStorageEntry; - suicided: AugmentedQuery Observable>, [H160]> & QueryableStorageEntry; + accountCodes: AugmentedQuery< + ApiType, + (arg: H160 | string | Uint8Array) => Observable, + [H160] + > & + QueryableStorageEntry; + accountCodesMetadata: AugmentedQuery< + ApiType, + ( + arg: H160 | string | Uint8Array + ) => Observable>, + [H160] + > & + QueryableStorageEntry; + accountStorages: AugmentedQuery< + ApiType, + ( + arg1: H160 | string | Uint8Array, + arg2: H256 | string | Uint8Array + ) => Observable, + [H160, H256] + > & + QueryableStorageEntry; + suicided: AugmentedQuery< + ApiType, + (arg: H160 | string | Uint8Array) => Observable>, + [H160] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -601,7 +1192,8 @@ declare module '@polkadot/api-base/types/storage' { /** * The EVM chain ID. **/ - chainId: AugmentedQuery Observable, []> & QueryableStorageEntry; + chainId: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query **/ @@ -611,41 +1203,68 @@ declare module '@polkadot/api-base/types/storage' { /** * The current list of authorities. **/ - authorities: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + authorities: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * The number of changes (both in terms of keys and underlying economic responsibilities) * in the "set" of Grandpa validators from genesis. **/ - currentSetId: AugmentedQuery Observable, []> & QueryableStorageEntry; + currentSetId: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * next block number where we can force a change. **/ - nextForced: AugmentedQuery Observable>, []> & QueryableStorageEntry; + nextForced: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * Pending change: (signaled at, scheduled change). **/ - pendingChange: AugmentedQuery Observable>, []> & QueryableStorageEntry; + pendingChange: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * A mapping from grandpa set ID to the index of the *most recent* session for which its * members were responsible. - * + * * This is only used for validating equivocation proofs. An equivocation proof must * contains a key-ownership proof for a given session, therefore we need a way to tie * together sessions and GRANDPA set ids, i.e. we need to validate that a validator * was the owner of a given key on a given session, and what the active set ID was * during that session. - * + * * TWOX-NOTE: `SetId` is not under user control. **/ - setIdSession: AugmentedQuery Observable>, [u64]> & QueryableStorageEntry; + setIdSession: AugmentedQuery< + ApiType, + (arg: u64 | AnyNumber | Uint8Array) => Observable>, + [u64] + > & + QueryableStorageEntry; /** * `true` if we are currently stalled. **/ - stalled: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + stalled: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * State of the current authority set. **/ - state: AugmentedQuery Observable, []> & QueryableStorageEntry; + state: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -655,11 +1274,23 @@ declare module '@polkadot/api-base/types/storage' { /** * Mapping from historical session indices to session-data root hash and validator count. **/ - historicalSessions: AugmentedQuery Observable>>, [u32]> & QueryableStorageEntry; + historicalSessions: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>>, + [u32] + > & + QueryableStorageEntry; /** * The range of historical sessions we store. [first, last) **/ - storedRange: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + storedRange: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -669,51 +1300,98 @@ declare module '@polkadot/api-base/types/storage' { /** * Reverse lookup from `username` to the `AccountId` that has registered it. The value should * be a key in the `IdentityOf` map, but it may not if the user has cleared their identity. - * + * * Multiple usernames may map to the same `AccountId`, but `IdentityOf` will only map to one * primary username. **/ - accountOfUsername: AugmentedQuery Observable>, [Bytes]> & QueryableStorageEntry; + accountOfUsername: AugmentedQuery< + ApiType, + (arg: Bytes | string | Uint8Array) => Observable>, + [Bytes] + > & + QueryableStorageEntry; /** * Information that is pertinent to identify the entity behind an account. First item is the * registration, second is the account's primary username. - * + * * TWOX-NOTE: OK ― `AccountId` is a secure hash. **/ - identityOf: AugmentedQuery Observable]>>>, [AccountId32]> & QueryableStorageEntry; + identityOf: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable< + Option]>> + >, + [AccountId32] + > & + QueryableStorageEntry; /** * Usernames that an authority has granted, but that the account controller has not confirmed * that they want it. Used primarily in cases where the `AccountId` cannot provide a signature * because they are a pure proxy, multisig, etc. In order to confirm it, they should call * [`Call::accept_username`]. - * + * * First tuple item is the account and second is the acceptance deadline. **/ - pendingUsernames: AugmentedQuery Observable>>, [Bytes]> & QueryableStorageEntry; + pendingUsernames: AugmentedQuery< + ApiType, + ( + arg: Bytes | string | Uint8Array + ) => Observable>>, + [Bytes] + > & + QueryableStorageEntry; /** * The set of registrars. Not expected to get very big as can only be added through a * special origin (likely a council motion). - * + * * The index into this can be cast to `RegistrarIndex` to get a valid value. **/ - registrars: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + registrars: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * Alternative "sub" identities of this account. - * + * * The first item is the deposit, the second is a vector of the accounts. - * + * * TWOX-NOTE: OK ― `AccountId` is a secure hash. **/ - subsOf: AugmentedQuery Observable]>>, [AccountId32]> & QueryableStorageEntry; + subsOf: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable]>>, + [AccountId32] + > & + QueryableStorageEntry; /** * The super-identity of an alternative "sub" identity together with its name, within that * context. If the account is not some other account's sub-identity, then just `None`. **/ - superOf: AugmentedQuery Observable>>, [AccountId32]> & QueryableStorageEntry; + superOf: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>>, + [AccountId32] + > & + QueryableStorageEntry; /** * A map of the accounts who are authorized to grant usernames. **/ - usernameAuthorities: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + usernameAuthorities: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -724,29 +1402,51 @@ declare module '@polkadot/api-base/types/storage' { * For each session index, we keep a mapping of `ValidatorId` to the * number of blocks authored by the given authority. **/ - authoredBlocks: AugmentedQuery Observable, [u32, AccountId32]> & QueryableStorageEntry; + authoredBlocks: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * The block number after which it's ok to send heartbeats in the current * session. - * + * * At the beginning of each session we set this to a value that should fall * roughly in the middle of the session duration. The idea is to first wait for * the validators to produce a block in the current session, so that the * heartbeat later on will not be necessary. - * + * * This value will only be used as a fallback if we fail to get a proper session * progress estimate from `NextSessionRotation`, as those estimates should be * more accurate then the value we calculate for `HeartbeatAfter`. **/ - heartbeatAfter: AugmentedQuery Observable, []> & QueryableStorageEntry; + heartbeatAfter: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The current set of keys that may issue a heartbeat. **/ - keys: AugmentedQuery Observable>, []> & QueryableStorageEntry; + keys: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * For each session index, we keep a mapping of `SessionIndex` and `AuthIndex`. **/ - receivedHeartbeats: AugmentedQuery Observable>, [u32, u32]> & QueryableStorageEntry; + receivedHeartbeats: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32, u32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -756,23 +1456,81 @@ declare module '@polkadot/api-base/types/storage' { /** * The lookup from index to account. **/ - accounts: AugmentedQuery Observable>>, [u32]> & QueryableStorageEntry; + accounts: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>>, + [u32] + > & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; jobs: { - knownResults: AugmentedQuery Observable>, [TanglePrimitivesRolesRoleType, u64]> & QueryableStorageEntry; + knownResults: AugmentedQuery< + ApiType, + ( + arg1: + | TanglePrimitivesRolesRoleType + | { Tss: any } + | { ZkSaaS: any } + | { LightClientRelaying: any } + | string + | Uint8Array, + arg2: u64 | AnyNumber | Uint8Array + ) => Observable>, + [TanglePrimitivesRolesRoleType, u64] + > & + QueryableStorageEntry; /** * The job-id storage **/ - nextJobId: AugmentedQuery Observable, []> & QueryableStorageEntry; - submittedJobs: AugmentedQuery Observable>, [TanglePrimitivesRolesRoleType, u64]> & QueryableStorageEntry; - submittedJobsRole: AugmentedQuery Observable>, [u64]> & QueryableStorageEntry; - timeFeePerBlock: AugmentedQuery Observable, []> & QueryableStorageEntry; - validatorJobIdLookup: AugmentedQuery Observable>>>, [AccountId32]> & QueryableStorageEntry; - validatorRewards: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + nextJobId: AugmentedQuery Observable, []> & + QueryableStorageEntry; + submittedJobs: AugmentedQuery< + ApiType, + ( + arg1: + | TanglePrimitivesRolesRoleType + | { Tss: any } + | { ZkSaaS: any } + | { LightClientRelaying: any } + | string + | Uint8Array, + arg2: u64 | AnyNumber | Uint8Array + ) => Observable>, + [TanglePrimitivesRolesRoleType, u64] + > & + QueryableStorageEntry; + submittedJobsRole: AugmentedQuery< + ApiType, + ( + arg: u64 | AnyNumber | Uint8Array + ) => Observable>, + [u64] + > & + QueryableStorageEntry; + timeFeePerBlock: AugmentedQuery Observable, []> & + QueryableStorageEntry; + validatorJobIdLookup: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable< + Option>> + >, + [AccountId32] + > & + QueryableStorageEntry; + validatorRewards: AugmentedQuery< + ApiType, + (arg: AccountId32 | string | Uint8Array) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -786,23 +1544,57 @@ declare module '@polkadot/api-base/types/storage' { /** * Snapshot of collator delegation stake at the start of the round. **/ - atStake: AugmentedQuery Observable>, [u32, AccountId32]> & QueryableStorageEntry; + atStake: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable< + Option + >, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * Storage for the current round. **/ - currentRound: AugmentedQuery Observable, []> & QueryableStorageEntry; + currentRound: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Storage for delegator information. **/ - delegators: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + delegators: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable< + Option + >, + [AccountId32] + > & + QueryableStorageEntry; /** * Storage for operator information. **/ - operators: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + operators: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable< + Option + >, + [AccountId32] + > & + QueryableStorageEntry; /** * Storage for the reward configuration, which includes APY, cap for assets, and whitelisted blueprints. **/ - rewardConfigStorage: AugmentedQuery Observable>, []> & QueryableStorageEntry; + rewardConfigStorage: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Storage for the reward pools **/ @@ -816,7 +1608,15 @@ declare module '@polkadot/api-base/types/storage' { /** * The set of open multisig operations. **/ - multisigs: AugmentedQuery Observable>, [AccountId32, U8aFixed]> & QueryableStorageEntry; + multisigs: AugmentedQuery< + ApiType, + ( + arg1: AccountId32 | string | Uint8Array, + arg2: U8aFixed | string | Uint8Array + ) => Observable>, + [AccountId32, U8aFixed] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -826,109 +1626,200 @@ declare module '@polkadot/api-base/types/storage' { /** * Storage for bonded pools. **/ - bondedPools: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + bondedPools: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * Map from a pool member account to their opted claim permission. **/ - claimPermissions: AugmentedQuery Observable, [AccountId32]> & QueryableStorageEntry; + claimPermissions: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable, + [AccountId32] + > & + QueryableStorageEntry; /** * Counter for the related counted storage map **/ - counterForBondedPools: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForBondedPools: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Counter for the related counted storage map **/ - counterForMetadata: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForMetadata: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Counter for the related counted storage map **/ - counterForPoolMembers: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForPoolMembers: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Counter for the related counted storage map **/ - counterForReversePoolIdLookup: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForReversePoolIdLookup: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Counter for the related counted storage map **/ - counterForRewardPools: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForRewardPools: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Counter for the related counted storage map **/ - counterForSubPoolsStorage: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForSubPoolsStorage: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * The maximum commission that can be charged by a pool. Used on commission payouts to bound * pool commissions that are > `GlobalMaxCommission`, necessary if a future * `GlobalMaxCommission` is lower than some current pool commissions. **/ - globalMaxCommission: AugmentedQuery Observable>, []> & QueryableStorageEntry; + globalMaxCommission: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Ever increasing number of all pools created so far. **/ - lastPoolId: AugmentedQuery Observable, []> & QueryableStorageEntry; + lastPoolId: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Maximum number of members that can exist in the system. If `None`, then the count * members are not bound on a system wide basis. **/ - maxPoolMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; + maxPoolMembers: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Maximum number of members that may belong to pool. If `None`, then the count of * members is not bound on a per pool basis. **/ - maxPoolMembersPerPool: AugmentedQuery Observable>, []> & QueryableStorageEntry; + maxPoolMembersPerPool: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Maximum number of nomination pools that can exist. If `None`, then an unbounded number of * pools can exist. **/ - maxPools: AugmentedQuery Observable>, []> & QueryableStorageEntry; + maxPools: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * Metadata for the pool. **/ - metadata: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; + metadata: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable, + [u32] + > & + QueryableStorageEntry; /** * Minimum bond required to create a pool. - * + * * This is the amount that the depositor must put as their initial stake in the pool, as an * indication of "skin in the game". - * + * * This is the value that will always exist in the staking ledger of the pool bonded account * while all other accounts leave. **/ - minCreateBond: AugmentedQuery Observable, []> & QueryableStorageEntry; + minCreateBond: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Minimum amount to bond to join a pool. **/ - minJoinBond: AugmentedQuery Observable, []> & QueryableStorageEntry; + minJoinBond: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Active members. - * + * * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ - poolMembers: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + poolMembers: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * A reverse lookup from the pool's account id to its id. - * + * * This is only used for slashing. In all other instances, the pool id is used, and the * accounts are deterministically derived from it. **/ - reversePoolIdLookup: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + reversePoolIdLookup: AugmentedQuery< + ApiType, + (arg: AccountId32 | string | Uint8Array) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * Reward pools. This is where there rewards for each pool accumulate. When a members payout is * claimed, the balance comes out fo the reward pool. Keyed by the bonded pools account. **/ - rewardPools: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + rewardPools: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * Groups of unbonding pools. Each group of unbonding pools belongs to a * bonded pool, hence the name sub-pools. Keyed by the bonded pools account. **/ - subPoolsStorage: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + subPoolsStorage: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * The sum of funds across all pools. - * + * * This might be lower but never higher than the sum of `total_balance` of all [`PoolMembers`] * because calling `pool_withdraw_unbonded` might decrease the total stake of the pool's * `bonded_account` without adjusting the pallet-internal `UnbondingPool`'s. **/ - totalValueLocked: AugmentedQuery Observable, []> & QueryableStorageEntry; + totalValueLocked: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query **/ @@ -938,26 +1829,64 @@ declare module '@polkadot/api-base/types/storage' { /** * A vector of reports of the same kind that happened at the same time slot. **/ - concurrentReportsIndex: AugmentedQuery Observable>, [U8aFixed, Bytes]> & QueryableStorageEntry; + concurrentReportsIndex: AugmentedQuery< + ApiType, + ( + arg1: U8aFixed | string | Uint8Array, + arg2: Bytes | string | Uint8Array + ) => Observable>, + [U8aFixed, Bytes] + > & + QueryableStorageEntry; /** * The primary structure that holds all offence records keyed by report identifiers. **/ - reports: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; + reports: AugmentedQuery< + ApiType, + ( + arg: H256 | string | Uint8Array + ) => Observable>, + [H256] + > & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; preimage: { - preimageFor: AugmentedQuery | [H256 | string | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable>, [ITuple<[H256, u32]>]> & QueryableStorageEntry]>; + preimageFor: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[H256, u32]> + | [H256 | string | Uint8Array, u32 | AnyNumber | Uint8Array] + ) => Observable>, + [ITuple<[H256, u32]>] + > & + QueryableStorageEntry]>; /** * The request status of a given hash. **/ - requestStatusFor: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; + requestStatusFor: AugmentedQuery< + ApiType, + ( + arg: H256 | string | Uint8Array + ) => Observable>, + [H256] + > & + QueryableStorageEntry; /** * The request status of a given hash. **/ - statusFor: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; + statusFor: AugmentedQuery< + ApiType, + ( + arg: H256 | string | Uint8Array + ) => Observable>, + [H256] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -967,12 +1896,26 @@ declare module '@polkadot/api-base/types/storage' { /** * The announcements made by the proxy (key). **/ - announcements: AugmentedQuery Observable, u128]>>, [AccountId32]> & QueryableStorageEntry; + announcements: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable, u128]>>, + [AccountId32] + > & + QueryableStorageEntry; /** * The set of account proxies. Maps the account which has delegated to the accounts * which are being delegated to, together with the amount held on deposit. **/ - proxies: AugmentedQuery Observable, u128]>>, [AccountId32]> & QueryableStorageEntry; + proxies: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable, u128]>>, + [AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -984,7 +1927,8 @@ declare module '@polkadot/api-base/types/storage' { * is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of * the oldest hash. **/ - randomMaterial: AugmentedQuery Observable>, []> & QueryableStorageEntry; + randomMaterial: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * Generic query **/ @@ -994,34 +1938,67 @@ declare module '@polkadot/api-base/types/storage' { /** * Mapping of resource to bridge index **/ - accountRolesMapping: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + accountRolesMapping: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * The active era information, it holds index and start. - * + * * The active era is the era being currently rewarded. **/ - activeRestakerEra: AugmentedQuery Observable>, []> & QueryableStorageEntry; + activeRestakerEra: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Rewards for the last `HISTORY_DEPTH` eras. * If reward hasn't been set or has been removed then 0 reward is returned. **/ - erasRestakeRewardPoints: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; + erasRestakeRewardPoints: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable, + [u32] + > & + QueryableStorageEntry; /** * Map from all "controller" accounts to the info regarding the staking. **/ - ledger: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + ledger: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * The minimum re staking bond to become and maintain the role. **/ - minRestakingBond: AugmentedQuery Observable, []> & QueryableStorageEntry; + minRestakingBond: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The total restake amount in the system **/ - totalRestake: AugmentedQuery Observable, []> & QueryableStorageEntry; + totalRestake: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The number of jobs completed by a validator in era **/ - validatorJobsInEra: AugmentedQuery Observable>, []> & QueryableStorageEntry; + validatorJobsInEra: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -1031,15 +2008,154 @@ declare module '@polkadot/api-base/types/storage' { /** * Items to be executed, indexed by the block number that they should be executed on. **/ - agenda: AugmentedQuery Observable>>, [u64]> & QueryableStorageEntry; - incompleteSince: AugmentedQuery Observable>, []> & QueryableStorageEntry; + agenda: AugmentedQuery< + ApiType, + ( + arg: u64 | AnyNumber | Uint8Array + ) => Observable>>, + [u64] + > & + QueryableStorageEntry; + incompleteSince: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Lookup from a name to the block number and index of the task. - * + * * For v3 -> v4 the previously unbounded identities are Blake2-256 hashed to form the v4 * identities. **/ - lookup: AugmentedQuery Observable>>, [U8aFixed]> & QueryableStorageEntry; + lookup: AugmentedQuery< + ApiType, + ( + arg: U8aFixed | string | Uint8Array + ) => Observable>>, + [U8aFixed] + > & + QueryableStorageEntry; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; + services: { + /** + * The service blueprints along with their owner. + **/ + blueprints: AugmentedQuery< + ApiType, + ( + arg: u64 | AnyNumber | Uint8Array + ) => Observable< + Option> + >, + [u64] + > & + QueryableStorageEntry; + /** + * The Services Instances + * Service ID -> Service + **/ + instances: AugmentedQuery< + ApiType, + ( + arg: u64 | AnyNumber | Uint8Array + ) => Observable>, + [u64] + > & + QueryableStorageEntry; + /** + * The Service Job Calls + * Service ID -> Call ID -> Job Call + **/ + jobCalls: AugmentedQuery< + ApiType, + ( + arg1: u64 | AnyNumber | Uint8Array, + arg2: u64 | AnyNumber | Uint8Array + ) => Observable>, + [u64, u64] + > & + QueryableStorageEntry; + /** + * The Service Job Call Results + * Service ID -> Call ID -> Job Call Result + **/ + jobResults: AugmentedQuery< + ApiType, + ( + arg1: u64 | AnyNumber | Uint8Array, + arg2: u64 | AnyNumber | Uint8Array + ) => Observable>, + [u64, u64] + > & + QueryableStorageEntry; + /** + * The next free ID for a service blueprint. + **/ + nextBlueprintId: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * The next free ID for a service Instance. + **/ + nextInstanceId: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * The next free ID for a service call. + **/ + nextJobCallId: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * The next free ID for a service request. + **/ + nextServiceRequestId: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * The operators for a specific service blueprint. + * Blueprint ID -> Operator -> Operator Preferences + **/ + operators: AugmentedQuery< + ApiType, + ( + arg1: u64 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable>, + [u64, AccountId32] + > & + QueryableStorageEntry; + operatorsProfile: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; + /** + * The service requests along with their owner. + * Request ID -> Service Request + **/ + serviceRequests: AugmentedQuery< + ApiType, + ( + arg: u64 | AnyNumber | Uint8Array + ) => Observable>, + [u64] + > & + QueryableStorageEntry; + /** + * User Service Instances + * User Account ID -> Service ID + **/ + userServices: AugmentedQuery< + ApiType, + (arg: AccountId32 | string | Uint8Array) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -1049,37 +2165,78 @@ declare module '@polkadot/api-base/types/storage' { /** * Current index of the session. **/ - currentIndex: AugmentedQuery Observable, []> & QueryableStorageEntry; + currentIndex: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Indices of disabled validators. - * + * * The vec is always kept sorted so that we can find whether a given validator is * disabled using binary search. It gets cleared when `on_session_ending` returns * a new set of identities. **/ - disabledValidators: AugmentedQuery Observable>, []> & QueryableStorageEntry; + disabledValidators: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The owner of a key. The key is the `KeyTypeId` + the encoded key. **/ - keyOwner: AugmentedQuery | [SpCoreCryptoKeyTypeId | string | Uint8Array, Bytes | string | Uint8Array]) => Observable>, [ITuple<[SpCoreCryptoKeyTypeId, Bytes]>]> & QueryableStorageEntry]>; + keyOwner: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[SpCoreCryptoKeyTypeId, Bytes]> + | [ + SpCoreCryptoKeyTypeId | string | Uint8Array, + Bytes | string | Uint8Array, + ] + ) => Observable>, + [ITuple<[SpCoreCryptoKeyTypeId, Bytes]>] + > & + QueryableStorageEntry< + ApiType, + [ITuple<[SpCoreCryptoKeyTypeId, Bytes]>] + >; /** * The next session keys for a validator. **/ - nextKeys: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + nextKeys: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * True if the underlying economic identities or weighting behind the validators * has changed in the queued validator set. **/ - queuedChanged: AugmentedQuery Observable, []> & QueryableStorageEntry; + queuedChanged: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The queued keys for the next session. When the next session begins, these keys * will be used to determine the validator's session keys. **/ - queuedKeys: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + queuedKeys: AugmentedQuery< + ApiType, + () => Observable< + Vec> + >, + [] + > & + QueryableStorageEntry; /** * The current set of validators. **/ - validators: AugmentedQuery Observable>, []> & QueryableStorageEntry; + validators: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -1088,205 +2245,343 @@ declare module '@polkadot/api-base/types/storage' { staking: { /** * The active era information, it holds index and start. - * + * * The active era is the era being currently rewarded. Validator set of this era must be * equal to [`SessionInterface::validators`]. **/ - activeEra: AugmentedQuery Observable>, []> & QueryableStorageEntry; + activeEra: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Map from all locked "stash" accounts to the controller account. - * + * * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ - bonded: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + bonded: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * A mapping from still-bonded eras to the first session index of that era. - * + * * Must contains information for eras for the range: * `[active_era - bounding_duration; active_era]` **/ - bondedEras: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + bondedEras: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * The amount of currency given to reporters of a slash event which was * canceled by extraordinary circumstances (e.g. governance). **/ - canceledSlashPayout: AugmentedQuery Observable, []> & QueryableStorageEntry; + canceledSlashPayout: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The threshold for when users can start calling `chill_other` for other validators / * nominators. The threshold is compared to the actual number of validators / nominators * (`CountFor*`) in the system compared to the configured max (`Max*Count`). **/ - chillThreshold: AugmentedQuery Observable>, []> & QueryableStorageEntry; + chillThreshold: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * History of claimed paged rewards by era and validator. - * + * * This is keyed by era and validator stash which maps to the set of page indexes which have * been claimed. - * + * * It is removed after [`Config::HistoryDepth`] eras. **/ - claimedRewards: AugmentedQuery Observable>, [u32, AccountId32]> & QueryableStorageEntry; + claimedRewards: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable>, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * Counter for the related counted storage map **/ - counterForNominators: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForNominators: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Counter for the related counted storage map **/ - counterForValidators: AugmentedQuery Observable, []> & QueryableStorageEntry; + counterForValidators: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The current era index. - * + * * This is the latest planned era, depending on how the Session pallet queues the validator * set, it might be active or not. **/ - currentEra: AugmentedQuery Observable>, []> & QueryableStorageEntry; + currentEra: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * The last planned session scheduled by the session pallet. - * + * * This is basically in sync with the call to [`pallet_session::SessionManager::new_session`]. **/ - currentPlannedSession: AugmentedQuery Observable, []> & QueryableStorageEntry; + currentPlannedSession: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Rewards for the last [`Config::HistoryDepth`] eras. * If reward hasn't been set or has been removed then 0 reward is returned. **/ - erasRewardPoints: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; + erasRewardPoints: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable, + [u32] + > & + QueryableStorageEntry; /** * Exposure of validator at era. - * + * * This is keyed first by the era index to allow bulk deletion and then the stash account. - * + * * Is it removed after [`Config::HistoryDepth`] eras. * If stakers hasn't been set or has been removed then empty exposure is returned. - * + * * Note: Deprecated since v14. Use `EraInfo` instead to work with exposures. **/ - erasStakers: AugmentedQuery Observable, [u32, AccountId32]> & QueryableStorageEntry; + erasStakers: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * Clipped Exposure of validator at era. - * + * * Note: This is deprecated, should be used as read-only and will be removed in the future. * New `Exposure`s are stored in a paged manner in `ErasStakersPaged` instead. - * + * * This is similar to [`ErasStakers`] but number of nominators exposed is reduced to the * `T::MaxExposurePageSize` biggest stakers. * (Note: the field `total` and `own` of the exposure remains unchanged). * This is used to limit the i/o cost for the nominator payout. - * + * * This is keyed fist by the era index to allow bulk deletion and then the stash account. - * + * * It is removed after [`Config::HistoryDepth`] eras. * If stakers hasn't been set or has been removed then empty exposure is returned. - * + * * Note: Deprecated since v14. Use `EraInfo` instead to work with exposures. **/ - erasStakersClipped: AugmentedQuery Observable, [u32, AccountId32]> & QueryableStorageEntry; + erasStakersClipped: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * Summary of validator exposure at a given era. - * + * * This contains the total stake in support of the validator and their own stake. In addition, * it can also be used to get the number of nominators backing this validator and the number of * exposure pages they are divided into. The page count is useful to determine the number of * pages of rewards that needs to be claimed. - * + * * This is keyed first by the era index to allow bulk deletion and then the stash account. * Should only be accessed through `EraInfo`. - * + * * Is it removed after [`Config::HistoryDepth`] eras. * If stakers hasn't been set or has been removed then empty overview is returned. **/ - erasStakersOverview: AugmentedQuery Observable>, [u32, AccountId32]> & QueryableStorageEntry; + erasStakersOverview: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable>, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * Paginated exposure of a validator at given era. - * + * * This is keyed first by the era index to allow bulk deletion, then stash account and finally * the page. Should only be accessed through `EraInfo`. - * + * * This is cleared after [`Config::HistoryDepth`] eras. **/ - erasStakersPaged: AugmentedQuery Observable>, [u32, AccountId32, u32]> & QueryableStorageEntry; + erasStakersPaged: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array, + arg3: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32, AccountId32, u32] + > & + QueryableStorageEntry; /** * The session index at which the era start for the last [`Config::HistoryDepth`] eras. - * + * * Note: This tracks the starting session (i.e. session index when era start being active) * for the eras in `[CurrentEra - HISTORY_DEPTH, CurrentEra]`. **/ - erasStartSessionIndex: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + erasStartSessionIndex: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * The total amount staked for the last [`Config::HistoryDepth`] eras. * If total hasn't been set or has been removed then 0 stake is returned. **/ - erasTotalStake: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; + erasTotalStake: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable, + [u32] + > & + QueryableStorageEntry; /** * Similar to `ErasStakers`, this holds the preferences of validators. - * + * * This is keyed first by the era index to allow bulk deletion and then the stash account. - * + * * Is it removed after [`Config::HistoryDepth`] eras. **/ - erasValidatorPrefs: AugmentedQuery Observable, [u32, AccountId32]> & QueryableStorageEntry; + erasValidatorPrefs: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * The total validator era payout for the last [`Config::HistoryDepth`] eras. - * + * * Eras that haven't finished yet or has been removed doesn't have reward. **/ - erasValidatorReward: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + erasValidatorReward: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * Mode of era forcing. **/ - forceEra: AugmentedQuery Observable, []> & QueryableStorageEntry; + forceEra: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Any validators that may never be slashed or forcibly kicked. It's a Vec since they're * easy to initialize and the performance hit is minimal (we expect no more than four * invulnerables) and restricted to testnets. **/ - invulnerables: AugmentedQuery Observable>, []> & QueryableStorageEntry; + invulnerables: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Map from all (unlocked) "controller" accounts to the info regarding the staking. - * + * * Note: All the reads and mutations to this storage *MUST* be done through the methods exposed * by [`StakingLedger`] to ensure data and lock consistency. **/ - ledger: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + ledger: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * The maximum nominator count before we stop allowing new validators to join. - * + * * When this value is not set, no limits are enforced. **/ - maxNominatorsCount: AugmentedQuery Observable>, []> & QueryableStorageEntry; + maxNominatorsCount: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The maximum validator count before we stop allowing new validators to join. - * + * * When this value is not set, no limits are enforced. **/ - maxValidatorsCount: AugmentedQuery Observable>, []> & QueryableStorageEntry; + maxValidatorsCount: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The minimum amount of commission that validators can set. - * + * * If set to `0`, no limit exists. **/ - minCommission: AugmentedQuery Observable, []> & QueryableStorageEntry; + minCommission: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The minimum active nominator stake of the last successful election. **/ - minimumActiveStake: AugmentedQuery Observable, []> & QueryableStorageEntry; + minimumActiveStake: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Minimum number of staking participants before emergency conditions are imposed. **/ - minimumValidatorCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + minimumValidatorCount: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * The minimum active bond to become and maintain the role of a nominator. **/ - minNominatorBond: AugmentedQuery Observable, []> & QueryableStorageEntry; + minNominatorBond: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The minimum active bond to become and maintain the role of a validator. **/ - minValidatorBond: AugmentedQuery Observable, []> & QueryableStorageEntry; + minValidatorBond: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The map from nominator stash key to their nomination preferences, namely the validators that * they wish to support. - * + * * Note that the keys of this storage map might become non-decodable in case the * account's [`NominationsQuota::MaxNominations`] configuration is decreased. * In this rare case, these nominators @@ -1294,25 +2589,40 @@ declare module '@polkadot/api-base/types/storage' { * indicates that they exist), but their value cannot be decoded. Therefore, the non-decodable * nominators will effectively not-exist, until they re-submit their preferences such that it * is within the bounds of the newly set `Config::MaxNominations`. - * + * * This implies that `::iter_keys().count()` and `::iter().count()` might return different * values for this map. Moreover, the main `::count()` is aligned with the former, namely the * number of keys that exist. - * + * * Lastly, if any of the nominators become non-decodable, they can be chilled immediately via * [`Call::chill_other`] dispatchable by anyone. - * + * * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ - nominators: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + nominators: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * All slashing events on nominators, mapped by era to the highest slash value of the era. **/ - nominatorSlashInEra: AugmentedQuery Observable>, [u32, AccountId32]> & QueryableStorageEntry; + nominatorSlashInEra: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable>, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * Indices of validators that have offended in the active era and whether they are currently * disabled. - * + * * This value should be a superset of disabled validators since not all offences lead to the * validator being disabled (if there was no slash). This is needed to track the percentage of * validators that have offended in the current era, ensuring a new era is forced if @@ -1320,47 +2630,103 @@ declare module '@polkadot/api-base/types/storage' { * whether a given validator has previously offended using binary search. It gets cleared when * the era ends. **/ - offendingValidators: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + offendingValidators: AugmentedQuery< + ApiType, + () => Observable>>, + [] + > & + QueryableStorageEntry; /** * Where the reward payment should be made. Keyed by stash. - * + * * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ - payee: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + payee: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * Slashing spans for stash accounts. **/ - slashingSpans: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; + slashingSpans: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>, + [AccountId32] + > & + QueryableStorageEntry; /** * The percentage of the slash that is distributed to reporters. - * + * * The rest of the slashed value is handled by the `Slash`. **/ - slashRewardFraction: AugmentedQuery Observable, []> & QueryableStorageEntry; + slashRewardFraction: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Records information about the maximum slash of a stash within a slashing span, * as well as how much reward has been paid out. **/ - spanSlash: AugmentedQuery | [AccountId32 | string | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable, [ITuple<[AccountId32, u32]>]> & QueryableStorageEntry]>; + spanSlash: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[AccountId32, u32]> + | [AccountId32 | string | Uint8Array, u32 | AnyNumber | Uint8Array] + ) => Observable, + [ITuple<[AccountId32, u32]>] + > & + QueryableStorageEntry]>; /** * All unapplied slashes that are queued for later. **/ - unappliedSlashes: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + unappliedSlashes: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * The ideal number of active validators. **/ - validatorCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + validatorCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The map from (wannabe) validator stash key to the preferences of that validator. - * + * * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ - validators: AugmentedQuery Observable, [AccountId32]> & QueryableStorageEntry; + validators: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable, + [AccountId32] + > & + QueryableStorageEntry; /** * All slashing events on validators, mapped by era to the highest slash proportion * and slash value of the era. **/ - validatorSlashInEra: AugmentedQuery Observable>>, [u32, AccountId32]> & QueryableStorageEntry; + validatorSlashInEra: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId32 | string | Uint8Array + ) => Observable>>, + [u32, AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -1370,7 +2736,181 @@ declare module '@polkadot/api-base/types/storage' { /** * The `AccountId` of the sudo key. **/ - key: AugmentedQuery Observable>, []> & QueryableStorageEntry; + key: AugmentedQuery Observable>, []> & + QueryableStorageEntry; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; + sygmaAccessSegregator: { + /** + * Mapping signature of extrinsic to account has access + * (pallet_index, extrinsic_name) => account + **/ + extrinsicAccess: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[u8, Bytes]> + | [u8 | AnyNumber | Uint8Array, Bytes | string | Uint8Array] + ) => Observable>, + [ITuple<[u8, Bytes]>] + > & + QueryableStorageEntry]>; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; + sygmaBasicFeeHandler: { + /** + * Mapping fungible asset id to corresponding fee amount + **/ + assetFees: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[u8, StagingXcmV4AssetAssetId]> + | [ + u8 | AnyNumber | Uint8Array, + ( + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array + ), + ] + ) => Observable>, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + > & + QueryableStorageEntry< + ApiType, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + >; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; + sygmaBridge: { + /** + * Deposit counter of dest domain + **/ + depositCounts: AugmentedQuery< + ApiType, + (arg: u8 | AnyNumber | Uint8Array) => Observable, + [u8] + > & + QueryableStorageEntry; + /** + * Mark the pairs for supported dest domainID with its corresponding chainID + * The chainID is not directly used in pallet, this map is designed more about rechecking the + * domainID + **/ + destChainIds: AugmentedQuery< + ApiType, + (arg: u8 | AnyNumber | Uint8Array) => Observable>, + [u8] + > & + QueryableStorageEntry; + /** + * Mark supported dest domainID + **/ + destDomainIds: AugmentedQuery< + ApiType, + (arg: u8 | AnyNumber | Uint8Array) => Observable, + [u8] + > & + QueryableStorageEntry; + /** + * Bridge Pause indicator + * Bridge is unpaused initially, until pause + * After mpc address setup, bridge should be paused until ready to unpause + **/ + isPaused: AugmentedQuery< + ApiType, + (arg: u8 | AnyNumber | Uint8Array) => Observable, + [u8] + > & + QueryableStorageEntry; + /** + * Pre-set MPC address + **/ + mpcAddr: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Mark whether a deposit nonce was used. Used to mark execution status of a proposal. + **/ + usedNonces: AugmentedQuery< + ApiType, + ( + arg1: u8 | AnyNumber | Uint8Array, + arg2: u64 | AnyNumber | Uint8Array + ) => Observable, + [u8, u64] + > & + QueryableStorageEntry; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; + sygmaFeeHandlerRouter: { + /** + * Return the Fee handler type based on domainID and assetID + **/ + handlerType: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[u8, StagingXcmV4AssetAssetId]> + | [ + u8 | AnyNumber | Uint8Array, + ( + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array + ), + ] + ) => Observable>, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + > & + QueryableStorageEntry< + ApiType, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + >; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; + sygmaPercentageFeeHandler: { + /** + * Mapping fungible asset id with domain id to fee rate and its lower bound, upperbound + **/ + assetFeeRate: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[u8, StagingXcmV4AssetAssetId]> + | [ + u8 | AnyNumber | Uint8Array, + ( + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array + ), + ] + ) => Observable>>, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + > & + QueryableStorageEntry< + ApiType, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + >; /** * Generic query **/ @@ -1381,7 +2921,16 @@ declare module '@polkadot/api-base/types/storage' { * Mapping signature of extrinsic to account has access * (pallet_index, extrinsic_name) => account **/ - extrinsicAccess: AugmentedQuery | [u8 | AnyNumber | Uint8Array, Bytes | string | Uint8Array]) => Observable>, [ITuple<[u8, Bytes]>]> & QueryableStorageEntry]>; + extrinsicAccess: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[u8, Bytes]> + | [u8 | AnyNumber | Uint8Array, Bytes | string | Uint8Array] + ) => Observable>, + [ITuple<[u8, Bytes]>] + > & + QueryableStorageEntry]>; /** * Generic query **/ @@ -1391,7 +2940,27 @@ declare module '@polkadot/api-base/types/storage' { /** * Mapping fungible asset id to corresponding fee amount **/ - assetFees: AugmentedQuery | [u8 | AnyNumber | Uint8Array, StagingXcmV4AssetAssetId | { parents?: any; interior?: any } | string | Uint8Array]) => Observable>, [ITuple<[u8, StagingXcmV4AssetAssetId]>]> & QueryableStorageEntry]>; + assetFees: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[u8, StagingXcmV4AssetAssetId]> + | [ + u8 | AnyNumber | Uint8Array, + ( + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array + ), + ] + ) => Observable>, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + > & + QueryableStorageEntry< + ApiType, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + >; /** * Generic query **/ @@ -1401,31 +2970,60 @@ declare module '@polkadot/api-base/types/storage' { /** * Deposit counter of dest domain **/ - depositCounts: AugmentedQuery Observable, [u8]> & QueryableStorageEntry; + depositCounts: AugmentedQuery< + ApiType, + (arg: u8 | AnyNumber | Uint8Array) => Observable, + [u8] + > & + QueryableStorageEntry; /** * Mark the pairs for supported dest domainID with its corresponding chainID * The chainID is not directly used in pallet, this map is designed more about rechecking the * domainID **/ - destChainIds: AugmentedQuery Observable>, [u8]> & QueryableStorageEntry; + destChainIds: AugmentedQuery< + ApiType, + (arg: u8 | AnyNumber | Uint8Array) => Observable>, + [u8] + > & + QueryableStorageEntry; /** * Mark supported dest domainID **/ - destDomainIds: AugmentedQuery Observable, [u8]> & QueryableStorageEntry; + destDomainIds: AugmentedQuery< + ApiType, + (arg: u8 | AnyNumber | Uint8Array) => Observable, + [u8] + > & + QueryableStorageEntry; /** * Bridge Pause indicator * Bridge is unpaused initially, until pause * After mpc address setup, bridge should be paused until ready to unpause **/ - isPaused: AugmentedQuery Observable, [u8]> & QueryableStorageEntry; + isPaused: AugmentedQuery< + ApiType, + (arg: u8 | AnyNumber | Uint8Array) => Observable, + [u8] + > & + QueryableStorageEntry; /** * Pre-set MPC address **/ - mpcAddr: AugmentedQuery Observable, []> & QueryableStorageEntry; + mpcAddr: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Mark whether a deposit nonce was used. Used to mark execution status of a proposal. **/ - usedNonces: AugmentedQuery Observable, [u8, u64]> & QueryableStorageEntry; + usedNonces: AugmentedQuery< + ApiType, + ( + arg1: u8 | AnyNumber | Uint8Array, + arg2: u64 | AnyNumber | Uint8Array + ) => Observable, + [u8, u64] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -1435,7 +3033,27 @@ declare module '@polkadot/api-base/types/storage' { /** * Return the Fee handler type based on domainID and assetID **/ - handlerType: AugmentedQuery | [u8 | AnyNumber | Uint8Array, StagingXcmV4AssetAssetId | { parents?: any; interior?: any } | string | Uint8Array]) => Observable>, [ITuple<[u8, StagingXcmV4AssetAssetId]>]> & QueryableStorageEntry]>; + handlerType: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[u8, StagingXcmV4AssetAssetId]> + | [ + u8 | AnyNumber | Uint8Array, + ( + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array + ), + ] + ) => Observable>, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + > & + QueryableStorageEntry< + ApiType, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + >; /** * Generic query **/ @@ -1445,7 +3063,27 @@ declare module '@polkadot/api-base/types/storage' { /** * Mapping fungible asset id with domain id to fee rate and its lower bound, upperbound **/ - assetFeeRate: AugmentedQuery | [u8 | AnyNumber | Uint8Array, StagingXcmV4AssetAssetId | { parents?: any; interior?: any } | string | Uint8Array]) => Observable>>, [ITuple<[u8, StagingXcmV4AssetAssetId]>]> & QueryableStorageEntry]>; + assetFeeRate: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[u8, StagingXcmV4AssetAssetId]> + | [ + u8 | AnyNumber | Uint8Array, + ( + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array + ), + ] + ) => Observable>>, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + > & + QueryableStorageEntry< + ApiType, + [ITuple<[u8, StagingXcmV4AssetAssetId]>] + >; /** * Generic query **/ @@ -1455,87 +3093,160 @@ declare module '@polkadot/api-base/types/storage' { /** * The full account information for a particular account ID. **/ - account: AugmentedQuery Observable, [AccountId32]> & QueryableStorageEntry; + account: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable, + [AccountId32] + > & + QueryableStorageEntry; /** * Total length (in bytes) for all extrinsics put together, for the current block. **/ - allExtrinsicsLen: AugmentedQuery Observable>, []> & QueryableStorageEntry; + allExtrinsicsLen: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * `Some` if a code upgrade has been authorized. **/ - authorizedUpgrade: AugmentedQuery Observable>, []> & QueryableStorageEntry; + authorizedUpgrade: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Map of block numbers to block hashes. **/ - blockHash: AugmentedQuery Observable, [u64]> & QueryableStorageEntry; + blockHash: AugmentedQuery< + ApiType, + (arg: u64 | AnyNumber | Uint8Array) => Observable, + [u64] + > & + QueryableStorageEntry; /** * The current weight for the block. **/ - blockWeight: AugmentedQuery Observable, []> & QueryableStorageEntry; + blockWeight: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Digest of the current block, also part of the block header. **/ - digest: AugmentedQuery Observable, []> & QueryableStorageEntry; + digest: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The number of events in the `Events` list. **/ - eventCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + eventCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Events deposited for the current block. - * + * * NOTE: The item is unbound and should therefore never be read on chain. * It could otherwise inflate the PoV size of a block. - * + * * Events have a large in-memory size. Box the events to not go out-of-memory * just in case someone still reads them from within the runtime. **/ - events: AugmentedQuery Observable>, []> & QueryableStorageEntry; + events: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Mapping between a topic (represented by T::Hash) and a vector of indexes * of events in the `>` list. - * + * * All topic vectors have deterministic storage locations depending on the topic. This * allows light-clients to leverage the changes trie storage tracking mechanism and * in case of changes fetch the list of events of interest. - * + * * The value has the type `(BlockNumberFor, EventIndex)` because if we used only just * the `EventIndex` then in case if the topic has the same contents on the next block * no notification will be triggered thus the event might be lost. **/ - eventTopics: AugmentedQuery Observable>>, [H256]> & QueryableStorageEntry; + eventTopics: AugmentedQuery< + ApiType, + ( + arg: H256 | string | Uint8Array + ) => Observable>>, + [H256] + > & + QueryableStorageEntry; /** * The execution phase of the block. **/ - executionPhase: AugmentedQuery Observable>, []> & QueryableStorageEntry; + executionPhase: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Total extrinsics count for the current block. **/ - extrinsicCount: AugmentedQuery Observable>, []> & QueryableStorageEntry; + extrinsicCount: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * Extrinsics data for the current block (maps an extrinsic's index to its data). **/ - extrinsicData: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; + extrinsicData: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable, + [u32] + > & + QueryableStorageEntry; /** * Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened. **/ - lastRuntimeUpgrade: AugmentedQuery Observable>, []> & QueryableStorageEntry; + lastRuntimeUpgrade: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & + QueryableStorageEntry; /** * The current block number being processed. Set by `execute_block`. **/ - number: AugmentedQuery Observable, []> & QueryableStorageEntry; + number: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Hash of the previous block. **/ - parentHash: AugmentedQuery Observable, []> & QueryableStorageEntry; + parentHash: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * True if we have upgraded so that AccountInfo contains three types of `RefCount`. False * (default) if not. **/ - upgradedToTripleRefCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + upgradedToTripleRefCount: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * True if we have upgraded so that `type RefCount` is `u32`. False (default) if not. **/ - upgradedToU32RefCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + upgradedToU32RefCount: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -1544,23 +3255,31 @@ declare module '@polkadot/api-base/types/storage' { timestamp: { /** * Whether the timestamp has been updated in this block. - * + * * This value is updated to `true` upon successful submission of a timestamp by a node. * It is then checked at the end of each block execution in the `on_finalize` hook. **/ - didUpdate: AugmentedQuery Observable, []> & QueryableStorageEntry; + didUpdate: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * The current time for the current block. **/ - now: AugmentedQuery Observable, []> & QueryableStorageEntry; + now: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; transactionPayment: { - nextFeeMultiplier: AugmentedQuery Observable, []> & QueryableStorageEntry; - storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; + nextFeeMultiplier: AugmentedQuery Observable, []> & + QueryableStorageEntry; + storageVersion: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -1570,27 +3289,45 @@ declare module '@polkadot/api-base/types/storage' { /** * Proposal indices that have been approved but not yet awarded. **/ - approvals: AugmentedQuery Observable>, []> & QueryableStorageEntry; + approvals: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * The amount which has been reported as inactive to Currency. **/ - deactivated: AugmentedQuery Observable, []> & QueryableStorageEntry; + deactivated: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Number of proposals that have been made. **/ - proposalCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + proposalCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Proposals that have been made. **/ - proposals: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + proposals: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * The count of spends that have been made. **/ - spendCount: AugmentedQuery Observable, []> & QueryableStorageEntry; + spendCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Spends that have been approved and being processed. **/ - spends: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + spends: AugmentedQuery< + ApiType, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * Generic query **/ @@ -1600,7 +3337,16 @@ declare module '@polkadot/api-base/types/storage' { /** * The set of calls that are explicitly paused. **/ - pausedCalls: AugmentedQuery | [Bytes | string | Uint8Array, Bytes | string | Uint8Array]) => Observable>, [ITuple<[Bytes, Bytes]>]> & QueryableStorageEntry]>; + pausedCalls: AugmentedQuery< + ApiType, + ( + arg: + | ITuple<[Bytes, Bytes]> + | [Bytes | string | Uint8Array, Bytes | string | Uint8Array] + ) => Observable>, + [ITuple<[Bytes, Bytes]>] + > & + QueryableStorageEntry]>; /** * Generic query **/ @@ -1609,21 +3355,38 @@ declare module '@polkadot/api-base/types/storage' { vesting: { /** * Storage version of the pallet. - * + * * New networks start with latest version, as determined by the genesis build. **/ - storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; + storageVersion: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Information regarding the vesting of a given account. **/ - vesting: AugmentedQuery Observable>>, [AccountId32]> & QueryableStorageEntry; + vesting: AugmentedQuery< + ApiType, + ( + arg: AccountId32 | string | Uint8Array + ) => Observable>>, + [AccountId32] + > & + QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; zkSaaS: { - feeInfo: AugmentedQuery Observable, []> & QueryableStorageEntry; + feeInfo: AugmentedQuery< + ApiType, + () => Observable, + [] + > & + QueryableStorageEntry; /** * Generic query **/ diff --git a/types/src/interfaces/augment-api-tx.ts b/types/src/interfaces/augment-api-tx.ts index e73595f22..05c5a43e7 100644 --- a/types/src/interfaces/augment-api-tx.ts +++ b/types/src/interfaces/augment-api-tx.ts @@ -3,7 +3,7 @@ // import type lookup before we augment - in some environments // this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/submittable'; +import "@polkadot/api-base/types/submittable"; import type { ApiTypes, AugmentedSubmittable, SubmittableExtrinsic, SubmittableExtrinsicFunction } from '@polkadot/api-base/types'; import type { Data } from '@polkadot/types'; @@ -13,140 +13,576 @@ import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Percent, Per import { SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusSlotsEquivocationProof, SpSessionMembershipProof, PalletBalancesAdjustmentDirection, PalletAirdropClaimsUtilsMultiAddress, PalletAirdropClaimsUtilsMultiAddressSignature, PalletAirdropClaimsStatementKind, SpWeightsWeightV2Weight, PalletDemocracyConviction, FrameSupportPreimagesBounded, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDkgFeeInfo, SpNposElectionsSupport, SpNposElectionsElectionScore, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletElectionsPhragmenRenouncing, EthereumTransactionTransactionV2, SpConsensusGrandpaEquivocationProof, SpCoreVoid, PalletIdentityJudgement, PalletIdentityLegacyIdentityInfo, SpRuntimeMultiSignature, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature, TanglePrimitivesRolesRoleType, TanglePrimitivesJobsValidatorOffenceType, TanglePrimitivesJobsJobSubmission, TanglePrimitivesJobsJobResult, TanglePrimitivesMisbehaviorMisbehaviorSubmission, PalletMultiAssetDelegationRewardsAssetAction, PalletMultisigTimepoint, PalletNominationPoolsBondExtra, PalletNominationPoolsClaimPermission, PalletNominationPoolsCommissionChangeRate, PalletNominationPoolsCommissionClaimPermission, PalletNominationPoolsConfigOpU128, PalletNominationPoolsConfigOpU32, PalletNominationPoolsConfigOpPerbill, PalletNominationPoolsPoolState, PalletNominationPoolsConfigOpAccountId32, TangleTestnetRuntimeProxyType, PalletRolesProfile, TangleTestnetRuntimeOpaqueSessionKeys, PalletStakingRewardDestination, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpPerbill, PalletStakingValidatorPrefs, StagingXcmV4AssetAssetId, StagingXcmV4Asset, StagingXcmV4Location, SygmaBridgeProposal, SygmaTraitsMpcAddress, SygmaFeeHandlerRouterFeeHandlerType, TangleTestnetRuntimeOriginCaller, PalletVestingVestingInfo, PalletZksaasFeeInfo } from '@polkadot/types/lookup'; export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; -export type __SubmittableExtrinsic = SubmittableExtrinsic; -export type __SubmittableExtrinsicFunction = SubmittableExtrinsicFunction; +export type __SubmittableExtrinsic = + SubmittableExtrinsic; +export type __SubmittableExtrinsicFunction = + SubmittableExtrinsicFunction; -declare module '@polkadot/api-base/types/submittable' { +declare module "@polkadot/api-base/types/submittable" { interface AugmentedSubmittables { assets: { /** * See [`Pallet::approve_transfer`]. **/ - approveTransfer: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, Compact]>; + approveTransfer: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + delegate: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + amount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, Compact] + >; /** * See [`Pallet::block`]. **/ - block: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + block: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::burn`]. **/ - burn: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, Compact]>; + burn: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + amount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, Compact] + >; /** * See [`Pallet::cancel_approval`]. **/ - cancelApproval: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + cancelApproval: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + delegate: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::clear_metadata`]. **/ - clearMetadata: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + clearMetadata: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::create`]. **/ - create: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, admin: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, minBalance: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, u128]>; + create: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + admin: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + minBalance: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, u128] + >; /** * See [`Pallet::destroy_accounts`]. **/ - destroyAccounts: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + destroyAccounts: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::destroy_approvals`]. **/ - destroyApprovals: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + destroyApprovals: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::finish_destroy`]. **/ - finishDestroy: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + finishDestroy: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::force_asset_status`]. **/ - forceAssetStatus: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, issuer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, admin: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, freezer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, minBalance: Compact | AnyNumber | Uint8Array, isSufficient: bool | boolean | Uint8Array, isFrozen: bool | boolean | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, MultiAddress, MultiAddress, MultiAddress, Compact, bool, bool]>; + forceAssetStatus: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + owner: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + issuer: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + admin: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + freezer: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + minBalance: Compact | AnyNumber | Uint8Array, + isSufficient: bool | boolean | Uint8Array, + isFrozen: bool | boolean | Uint8Array + ) => SubmittableExtrinsic, + [ + Compact, + MultiAddress, + MultiAddress, + MultiAddress, + MultiAddress, + Compact, + bool, + bool, + ] + >; /** * See [`Pallet::force_cancel_approval`]. **/ - forceCancelApproval: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, MultiAddress]>; + forceCancelApproval: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + owner: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + delegate: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, MultiAddress] + >; /** * See [`Pallet::force_clear_metadata`]. **/ - forceClearMetadata: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + forceClearMetadata: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::force_create`]. **/ - forceCreate: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, isSufficient: bool | boolean | Uint8Array, minBalance: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, bool, Compact]>; + forceCreate: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + owner: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + isSufficient: bool | boolean | Uint8Array, + minBalance: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, bool, Compact] + >; /** * See [`Pallet::force_set_metadata`]. **/ - forceSetMetadata: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, name: Bytes | string | Uint8Array, symbol: Bytes | string | Uint8Array, decimals: u8 | AnyNumber | Uint8Array, isFrozen: bool | boolean | Uint8Array) => SubmittableExtrinsic, [Compact, Bytes, Bytes, u8, bool]>; + forceSetMetadata: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + name: Bytes | string | Uint8Array, + symbol: Bytes | string | Uint8Array, + decimals: u8 | AnyNumber | Uint8Array, + isFrozen: bool | boolean | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Bytes, Bytes, u8, bool] + >; /** * See [`Pallet::force_transfer`]. **/ - forceTransfer: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, MultiAddress, Compact]>; + forceTransfer: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + source: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + dest: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + amount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, MultiAddress, Compact] + >; /** * See [`Pallet::freeze`]. **/ - freeze: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + freeze: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::freeze_asset`]. **/ - freezeAsset: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + freezeAsset: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::mint`]. **/ - mint: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, Compact]>; + mint: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + beneficiary: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + amount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, Compact] + >; /** * See [`Pallet::refund`]. **/ - refund: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, allowBurn: bool | boolean | Uint8Array) => SubmittableExtrinsic, [Compact, bool]>; + refund: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + allowBurn: bool | boolean | Uint8Array + ) => SubmittableExtrinsic, + [Compact, bool] + >; /** * See [`Pallet::refund_other`]. **/ - refundOther: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + refundOther: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::set_metadata`]. **/ - setMetadata: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, name: Bytes | string | Uint8Array, symbol: Bytes | string | Uint8Array, decimals: u8 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Bytes, Bytes, u8]>; + setMetadata: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + name: Bytes | string | Uint8Array, + symbol: Bytes | string | Uint8Array, + decimals: u8 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Bytes, Bytes, u8] + >; /** * See [`Pallet::set_min_balance`]. **/ - setMinBalance: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, minBalance: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, u128]>; + setMinBalance: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + minBalance: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, u128] + >; /** * See [`Pallet::set_team`]. **/ - setTeam: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, issuer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, admin: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, freezer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, MultiAddress, MultiAddress]>; + setTeam: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + issuer: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + admin: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + freezer: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, MultiAddress, MultiAddress] + >; /** * See [`Pallet::start_destroy`]. **/ - startDestroy: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + startDestroy: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::thaw`]. **/ - thaw: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + thaw: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::thaw_asset`]. **/ - thawAsset: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + thawAsset: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::touch`]. **/ - touch: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + touch: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::touch_other`]. **/ - touchOther: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + touchOther: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::transfer`]. **/ - transfer: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, Compact]>; + transfer: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + amount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, Compact] + >; /** * See [`Pallet::transfer_approved`]. **/ - transferApproved: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, destination: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, MultiAddress, Compact]>; + transferApproved: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + owner: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + destination: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + amount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, MultiAddress, Compact] + >; /** * See [`Pallet::transfer_keep_alive`]. **/ - transferKeepAlive: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, Compact]>; + transferKeepAlive: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + amount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, Compact] + >; /** * See [`Pallet::transfer_ownership`]. **/ - transferOwnership: AugmentedSubmittable<(id: Compact | AnyNumber | Uint8Array, owner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + transferOwnership: AugmentedSubmittable< + ( + id: Compact | AnyNumber | Uint8Array, + owner: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * Generic tx **/ @@ -156,15 +592,62 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::plan_config_change`]. **/ - planConfigChange: AugmentedSubmittable<(config: SpConsensusBabeDigestsNextConfigDescriptor | { V1: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusBabeDigestsNextConfigDescriptor]>; + planConfigChange: AugmentedSubmittable< + ( + config: + | SpConsensusBabeDigestsNextConfigDescriptor + | { V1: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [SpConsensusBabeDigestsNextConfigDescriptor] + >; /** * See [`Pallet::report_equivocation`]. **/ - reportEquivocation: AugmentedSubmittable<(equivocationProof: SpConsensusSlotsEquivocationProof | { offender?: any; slot?: any; firstHeader?: any; secondHeader?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusSlotsEquivocationProof, SpSessionMembershipProof]>; + reportEquivocation: AugmentedSubmittable< + ( + equivocationProof: + | SpConsensusSlotsEquivocationProof + | { + offender?: any; + slot?: any; + firstHeader?: any; + secondHeader?: any; + } + | string + | Uint8Array, + keyOwnerProof: + | SpSessionMembershipProof + | { session?: any; trieNodes?: any; validatorCount?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [SpConsensusSlotsEquivocationProof, SpSessionMembershipProof] + >; /** * See [`Pallet::report_equivocation_unsigned`]. **/ - reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: SpConsensusSlotsEquivocationProof | { offender?: any; slot?: any; firstHeader?: any; secondHeader?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusSlotsEquivocationProof, SpSessionMembershipProof]>; + reportEquivocationUnsigned: AugmentedSubmittable< + ( + equivocationProof: + | SpConsensusSlotsEquivocationProof + | { + offender?: any; + slot?: any; + firstHeader?: any; + secondHeader?: any; + } + | string + | Uint8Array, + keyOwnerProof: + | SpSessionMembershipProof + | { session?: any; trieNodes?: any; validatorCount?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [SpConsensusSlotsEquivocationProof, SpSessionMembershipProof] + >; /** * Generic tx **/ @@ -174,15 +657,63 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::put_in_front_of`]. **/ - putInFrontOf: AugmentedSubmittable<(lighter: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + putInFrontOf: AugmentedSubmittable< + ( + lighter: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * See [`Pallet::put_in_front_of_other`]. **/ - putInFrontOfOther: AugmentedSubmittable<(heavier: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, lighter: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress]>; + putInFrontOfOther: AugmentedSubmittable< + ( + heavier: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + lighter: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, MultiAddress] + >; /** * See [`Pallet::rebag`]. **/ - rebag: AugmentedSubmittable<(dislocated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + rebag: AugmentedSubmittable< + ( + dislocated: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * Generic tx **/ @@ -192,35 +723,144 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::force_adjust_total_issuance`]. **/ - forceAdjustTotalIssuance: AugmentedSubmittable<(direction: PalletBalancesAdjustmentDirection | 'Increase' | 'Decrease' | number | Uint8Array, delta: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletBalancesAdjustmentDirection, Compact]>; + forceAdjustTotalIssuance: AugmentedSubmittable< + ( + direction: + | PalletBalancesAdjustmentDirection + | "Increase" + | "Decrease" + | number + | Uint8Array, + delta: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [PalletBalancesAdjustmentDirection, Compact] + >; /** * See [`Pallet::force_set_balance`]. **/ - forceSetBalance: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; + forceSetBalance: AugmentedSubmittable< + ( + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + newFree: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Compact] + >; /** * See [`Pallet::force_transfer`]. **/ - forceTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Compact]>; + forceTransfer: AugmentedSubmittable< + ( + source: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + dest: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + value: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, MultiAddress, Compact] + >; /** * See [`Pallet::force_unreserve`]. **/ - forceUnreserve: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u128]>; + forceUnreserve: AugmentedSubmittable< + ( + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + amount: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, u128] + >; /** * See [`Pallet::transfer_all`]. **/ - transferAll: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, keepAlive: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, bool]>; + transferAll: AugmentedSubmittable< + ( + dest: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + keepAlive: bool | boolean | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, bool] + >; /** * See [`Pallet::transfer_allow_death`]. **/ - transferAllowDeath: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; + transferAllowDeath: AugmentedSubmittable< + ( + dest: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + value: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Compact] + >; /** * See [`Pallet::transfer_keep_alive`]. **/ - transferKeepAlive: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; + transferKeepAlive: AugmentedSubmittable< + ( + dest: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + value: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Compact] + >; /** * See [`Pallet::upgrade_accounts`]. **/ - upgradeAccounts: AugmentedSubmittable<(who: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + upgradeAccounts: AugmentedSubmittable< + ( + who: Vec | (AccountId32 | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * Generic tx **/ @@ -230,11 +870,19 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set_base_fee_per_gas`]. **/ - setBaseFeePerGas: AugmentedSubmittable<(fee: U256 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [U256]>; + setBaseFeePerGas: AugmentedSubmittable< + (fee: U256 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [U256] + >; /** * See [`Pallet::set_elasticity`]. **/ - setElasticity: AugmentedSubmittable<(elasticity: Permill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Permill]>; + setElasticity: AugmentedSubmittable< + ( + elasticity: Permill | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Permill] + >; /** * Generic tx **/ @@ -244,39 +892,105 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::accept_curator`]. **/ - acceptCurator: AugmentedSubmittable<(bountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + acceptCurator: AugmentedSubmittable< + ( + bountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::approve_bounty`]. **/ - approveBounty: AugmentedSubmittable<(bountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + approveBounty: AugmentedSubmittable< + ( + bountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::award_bounty`]. **/ - awardBounty: AugmentedSubmittable<(bountyId: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + awardBounty: AugmentedSubmittable< + ( + bountyId: Compact | AnyNumber | Uint8Array, + beneficiary: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::claim_bounty`]. **/ - claimBounty: AugmentedSubmittable<(bountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + claimBounty: AugmentedSubmittable< + ( + bountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::close_bounty`]. **/ - closeBounty: AugmentedSubmittable<(bountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + closeBounty: AugmentedSubmittable< + ( + bountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::extend_bounty_expiry`]. **/ - extendBountyExpiry: AugmentedSubmittable<(bountyId: Compact | AnyNumber | Uint8Array, remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Compact, Bytes]>; + extendBountyExpiry: AugmentedSubmittable< + ( + bountyId: Compact | AnyNumber | Uint8Array, + remark: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Bytes] + >; /** * See [`Pallet::propose_bounty`]. **/ - proposeBounty: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, description: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Compact, Bytes]>; + proposeBounty: AugmentedSubmittable< + ( + value: Compact | AnyNumber | Uint8Array, + description: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Bytes] + >; /** * See [`Pallet::propose_curator`]. **/ - proposeCurator: AugmentedSubmittable<(bountyId: Compact | AnyNumber | Uint8Array, curator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, fee: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, Compact]>; + proposeCurator: AugmentedSubmittable< + ( + bountyId: Compact | AnyNumber | Uint8Array, + curator: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + fee: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, Compact] + >; /** * See [`Pallet::unassign_curator`]. **/ - unassignCurator: AugmentedSubmittable<(bountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + unassignCurator: AugmentedSubmittable< + ( + bountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * Generic tx **/ @@ -286,31 +1000,93 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::accept_curator`]. **/ - acceptCurator: AugmentedSubmittable<(parentBountyId: Compact | AnyNumber | Uint8Array, childBountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Compact]>; + acceptCurator: AugmentedSubmittable< + ( + parentBountyId: Compact | AnyNumber | Uint8Array, + childBountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact] + >; /** * See [`Pallet::add_child_bounty`]. **/ - addChildBounty: AugmentedSubmittable<(parentBountyId: Compact | AnyNumber | Uint8Array, value: Compact | AnyNumber | Uint8Array, description: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Compact, Compact, Bytes]>; + addChildBounty: AugmentedSubmittable< + ( + parentBountyId: Compact | AnyNumber | Uint8Array, + value: Compact | AnyNumber | Uint8Array, + description: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact, Bytes] + >; /** * See [`Pallet::award_child_bounty`]. **/ - awardChildBounty: AugmentedSubmittable<(parentBountyId: Compact | AnyNumber | Uint8Array, childBountyId: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, Compact, MultiAddress]>; + awardChildBounty: AugmentedSubmittable< + ( + parentBountyId: Compact | AnyNumber | Uint8Array, + childBountyId: Compact | AnyNumber | Uint8Array, + beneficiary: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact, MultiAddress] + >; /** * See [`Pallet::claim_child_bounty`]. **/ - claimChildBounty: AugmentedSubmittable<(parentBountyId: Compact | AnyNumber | Uint8Array, childBountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Compact]>; + claimChildBounty: AugmentedSubmittable< + ( + parentBountyId: Compact | AnyNumber | Uint8Array, + childBountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact] + >; /** * See [`Pallet::close_child_bounty`]. **/ - closeChildBounty: AugmentedSubmittable<(parentBountyId: Compact | AnyNumber | Uint8Array, childBountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Compact]>; + closeChildBounty: AugmentedSubmittable< + ( + parentBountyId: Compact | AnyNumber | Uint8Array, + childBountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact] + >; /** * See [`Pallet::propose_curator`]. **/ - proposeCurator: AugmentedSubmittable<(parentBountyId: Compact | AnyNumber | Uint8Array, childBountyId: Compact | AnyNumber | Uint8Array, curator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, fee: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Compact, MultiAddress, Compact]>; + proposeCurator: AugmentedSubmittable< + ( + parentBountyId: Compact | AnyNumber | Uint8Array, + childBountyId: Compact | AnyNumber | Uint8Array, + curator: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + fee: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact, MultiAddress, Compact] + >; /** * See [`Pallet::unassign_curator`]. **/ - unassignCurator: AugmentedSubmittable<(parentBountyId: Compact | AnyNumber | Uint8Array, childBountyId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Compact]>; + unassignCurator: AugmentedSubmittable< + ( + parentBountyId: Compact | AnyNumber | Uint8Array, + childBountyId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact] + >; /** * Generic tx **/ @@ -320,27 +1096,165 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::claim`]. **/ - claim: AugmentedSubmittable<(dest: Option | null | Uint8Array | PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string, signer: Option | null | Uint8Array | PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string, signature: PalletAirdropClaimsUtilsMultiAddressSignature | { EVM: any } | { Native: any } | string | Uint8Array) => SubmittableExtrinsic, [Option, Option, PalletAirdropClaimsUtilsMultiAddressSignature]>; + claim: AugmentedSubmittable< + ( + dest: + | Option + | null + | Uint8Array + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string, + signer: + | Option + | null + | Uint8Array + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string, + signature: + | PalletAirdropClaimsUtilsMultiAddressSignature + | { EVM: any } + | { Native: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [ + Option, + Option, + PalletAirdropClaimsUtilsMultiAddressSignature, + ] + >; /** * See [`Pallet::claim_attest`]. **/ - claimAttest: AugmentedSubmittable<(dest: Option | null | Uint8Array | PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string, signer: Option | null | Uint8Array | PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string, signature: PalletAirdropClaimsUtilsMultiAddressSignature | { EVM: any } | { Native: any } | string | Uint8Array, statement: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Option, Option, PalletAirdropClaimsUtilsMultiAddressSignature, Bytes]>; + claimAttest: AugmentedSubmittable< + ( + dest: + | Option + | null + | Uint8Array + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string, + signer: + | Option + | null + | Uint8Array + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string, + signature: + | PalletAirdropClaimsUtilsMultiAddressSignature + | { EVM: any } + | { Native: any } + | string + | Uint8Array, + statement: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [ + Option, + Option, + PalletAirdropClaimsUtilsMultiAddressSignature, + Bytes, + ] + >; /** * See [`Pallet::claim_signed`]. **/ - claimSigned: AugmentedSubmittable<(dest: Option | null | Uint8Array | PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string) => SubmittableExtrinsic, [Option]>; + claimSigned: AugmentedSubmittable< + ( + dest: + | Option + | null + | Uint8Array + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string + ) => SubmittableExtrinsic, + [Option] + >; /** * See [`Pallet::force_set_expiry_config`]. **/ - forceSetExpiryConfig: AugmentedSubmittable<(expiryBlock: u64 | AnyNumber | Uint8Array, dest: PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, PalletAirdropClaimsUtilsMultiAddress]>; + forceSetExpiryConfig: AugmentedSubmittable< + ( + expiryBlock: u64 | AnyNumber | Uint8Array, + dest: + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [u64, PalletAirdropClaimsUtilsMultiAddress] + >; /** * See [`Pallet::mint_claim`]. **/ - mintClaim: AugmentedSubmittable<(who: PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string | Uint8Array, value: u128 | AnyNumber | Uint8Array, vestingSchedule: Option>> | null | Uint8Array | Vec> | ([u128 | AnyNumber | Uint8Array, u128 | AnyNumber | Uint8Array, u64 | AnyNumber | Uint8Array])[], statement: Option | null | Uint8Array | PalletAirdropClaimsStatementKind | 'Regular' | 'Safe' | number) => SubmittableExtrinsic, [PalletAirdropClaimsUtilsMultiAddress, u128, Option>>, Option]>; + mintClaim: AugmentedSubmittable< + ( + who: + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string + | Uint8Array, + value: u128 | AnyNumber | Uint8Array, + vestingSchedule: + | Option>> + | null + | Uint8Array + | Vec> + | [ + u128 | AnyNumber | Uint8Array, + u128 | AnyNumber | Uint8Array, + u64 | AnyNumber | Uint8Array, + ][], + statement: + | Option + | null + | Uint8Array + | PalletAirdropClaimsStatementKind + | "Regular" + | "Safe" + | number + ) => SubmittableExtrinsic, + [ + PalletAirdropClaimsUtilsMultiAddress, + u128, + Option>>, + Option, + ] + >; /** * See [`Pallet::move_claim`]. **/ - moveClaim: AugmentedSubmittable<(old: PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string | Uint8Array, updated: PalletAirdropClaimsUtilsMultiAddress | { EVM: any } | { Native: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletAirdropClaimsUtilsMultiAddress, PalletAirdropClaimsUtilsMultiAddress]>; + moveClaim: AugmentedSubmittable< + ( + old: + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string + | Uint8Array, + updated: + | PalletAirdropClaimsUtilsMultiAddress + | { EVM: any } + | { Native: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [ + PalletAirdropClaimsUtilsMultiAddress, + PalletAirdropClaimsUtilsMultiAddress, + ] + >; /** * Generic tx **/ @@ -350,27 +1264,71 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::close`]. **/ - close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; + close: AugmentedSubmittable< + ( + proposalHash: H256 | string | Uint8Array, + index: Compact | AnyNumber | Uint8Array, + proposalWeightBound: + | SpWeightsWeightV2Weight + | { refTime?: any; proofSize?: any } + | string + | Uint8Array, + lengthBound: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [H256, Compact, SpWeightsWeightV2Weight, Compact] + >; /** * See [`Pallet::disapprove_proposal`]. **/ - disapproveProposal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; + disapproveProposal: AugmentedSubmittable< + ( + proposalHash: H256 | string | Uint8Array + ) => SubmittableExtrinsic, + [H256] + >; /** * See [`Pallet::execute`]. **/ - execute: AugmentedSubmittable<(proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Call, Compact]>; + execute: AugmentedSubmittable< + ( + proposal: Call | IMethod | string | Uint8Array, + lengthBound: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Call, Compact] + >; /** * See [`Pallet::propose`]. **/ - propose: AugmentedSubmittable<(threshold: Compact | AnyNumber | Uint8Array, proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Call, Compact]>; + propose: AugmentedSubmittable< + ( + threshold: Compact | AnyNumber | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, + lengthBound: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Call, Compact] + >; /** * See [`Pallet::set_members`]. **/ - setMembers: AugmentedSubmittable<(newMembers: Vec | (AccountId32 | string | Uint8Array)[], prime: Option | null | Uint8Array | AccountId32 | string, oldCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, Option, u32]>; + setMembers: AugmentedSubmittable< + ( + newMembers: Vec | (AccountId32 | string | Uint8Array)[], + prime: Option | null | Uint8Array | AccountId32 | string, + oldCount: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Vec, Option, u32] + >; /** * See [`Pallet::vote`]. **/ - vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, Compact, bool]>; + vote: AugmentedSubmittable< + ( + proposal: H256 | string | Uint8Array, + index: Compact | AnyNumber | Uint8Array, + approve: bool | boolean | Uint8Array + ) => SubmittableExtrinsic, + [H256, Compact, bool] + >; /** * Generic tx **/ @@ -380,63 +1338,198 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::blacklist`]. **/ - blacklist: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, maybeRefIndex: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [H256, Option]>; + blacklist: AugmentedSubmittable< + ( + proposalHash: H256 | string | Uint8Array, + maybeRefIndex: Option | null | Uint8Array | u32 | AnyNumber + ) => SubmittableExtrinsic, + [H256, Option] + >; /** * See [`Pallet::cancel_proposal`]. **/ - cancelProposal: AugmentedSubmittable<(propIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + cancelProposal: AugmentedSubmittable< + ( + propIndex: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::cancel_referendum`]. **/ - cancelReferendum: AugmentedSubmittable<(refIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + cancelReferendum: AugmentedSubmittable< + ( + refIndex: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::clear_public_proposals`]. **/ - clearPublicProposals: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + clearPublicProposals: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::delegate`]. **/ - delegate: AugmentedSubmittable<(to: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, conviction: PalletDemocracyConviction | 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x' | number | Uint8Array, balance: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, PalletDemocracyConviction, u128]>; + delegate: AugmentedSubmittable< + ( + to: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + conviction: + | PalletDemocracyConviction + | "None" + | "Locked1x" + | "Locked2x" + | "Locked3x" + | "Locked4x" + | "Locked5x" + | "Locked6x" + | number + | Uint8Array, + balance: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, PalletDemocracyConviction, u128] + >; /** * See [`Pallet::emergency_cancel`]. **/ - emergencyCancel: AugmentedSubmittable<(refIndex: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + emergencyCancel: AugmentedSubmittable< + ( + refIndex: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::external_propose`]. **/ - externalPropose: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; + externalPropose: AugmentedSubmittable< + ( + proposal: + | FrameSupportPreimagesBounded + | { Legacy: any } + | { Inline: any } + | { Lookup: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [FrameSupportPreimagesBounded] + >; /** * See [`Pallet::external_propose_default`]. **/ - externalProposeDefault: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; + externalProposeDefault: AugmentedSubmittable< + ( + proposal: + | FrameSupportPreimagesBounded + | { Legacy: any } + | { Inline: any } + | { Lookup: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [FrameSupportPreimagesBounded] + >; /** * See [`Pallet::external_propose_majority`]. **/ - externalProposeMajority: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; + externalProposeMajority: AugmentedSubmittable< + ( + proposal: + | FrameSupportPreimagesBounded + | { Legacy: any } + | { Inline: any } + | { Lookup: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [FrameSupportPreimagesBounded] + >; /** * See [`Pallet::fast_track`]. **/ - fastTrack: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, votingPeriod: u64 | AnyNumber | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u64, u64]>; + fastTrack: AugmentedSubmittable< + ( + proposalHash: H256 | string | Uint8Array, + votingPeriod: u64 | AnyNumber | Uint8Array, + delay: u64 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [H256, u64, u64] + >; /** * See [`Pallet::propose`]. **/ - propose: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded, Compact]>; + propose: AugmentedSubmittable< + ( + proposal: + | FrameSupportPreimagesBounded + | { Legacy: any } + | { Inline: any } + | { Lookup: any } + | string + | Uint8Array, + value: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [FrameSupportPreimagesBounded, Compact] + >; /** * See [`Pallet::remove_other_vote`]. **/ - removeOtherVote: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32]>; + removeOtherVote: AugmentedSubmittable< + ( + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + index: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, u32] + >; /** * See [`Pallet::remove_vote`]. **/ - removeVote: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + removeVote: AugmentedSubmittable< + (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::second`]. **/ - second: AugmentedSubmittable<(proposal: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + second: AugmentedSubmittable< + ( + proposal: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::set_metadata`]. **/ - setMetadata: AugmentedSubmittable<(owner: PalletDemocracyMetadataOwner | { External: any } | { Proposal: any } | { Referendum: any } | string | Uint8Array, maybeHash: Option | null | Uint8Array | H256 | string) => SubmittableExtrinsic, [PalletDemocracyMetadataOwner, Option]>; + setMetadata: AugmentedSubmittable< + ( + owner: + | PalletDemocracyMetadataOwner + | { External: any } + | { Proposal: any } + | { Referendum: any } + | string + | Uint8Array, + maybeHash: Option | null | Uint8Array | H256 | string + ) => SubmittableExtrinsic, + [PalletDemocracyMetadataOwner, Option] + >; /** * See [`Pallet::undelegate`]. **/ @@ -444,15 +1537,44 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::unlock`]. **/ - unlock: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + unlock: AugmentedSubmittable< + ( + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * See [`Pallet::veto_external`]. **/ - vetoExternal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; + vetoExternal: AugmentedSubmittable< + ( + proposalHash: H256 | string | Uint8Array + ) => SubmittableExtrinsic, + [H256] + >; /** * See [`Pallet::vote`]. **/ - vote: AugmentedSubmittable<(refIndex: Compact | AnyNumber | Uint8Array, vote: PalletDemocracyVoteAccountVote | { Standard: any } | { Split: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, PalletDemocracyVoteAccountVote]>; + vote: AugmentedSubmittable< + ( + refIndex: Compact | AnyNumber | Uint8Array, + vote: + | PalletDemocracyVoteAccountVote + | { Standard: any } + | { Split: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, PalletDemocracyVoteAccountVote] + >; /** * Generic tx **/ @@ -462,7 +1584,23 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set_fee`]. **/ - setFee: AugmentedSubmittable<(feeInfo: PalletDkgFeeInfo | { baseFee?: any; dkgValidatorFee?: any; sigValidatorFee?: any; refreshValidatorFee?: any; storageFeePerByte?: any; storageFeePerBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDkgFeeInfo]>; + setFee: AugmentedSubmittable< + ( + feeInfo: + | PalletDkgFeeInfo + | { + baseFee?: any; + dkgValidatorFee?: any; + sigValidatorFee?: any; + refreshValidatorFee?: any; + storageFeePerByte?: any; + storageFeePerBlock?: any; + } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletDkgFeeInfo] + >; /** * Generic tx **/ @@ -472,7 +1610,12 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::note_min_gas_price_target`]. **/ - noteMinGasPriceTarget: AugmentedSubmittable<(target: U256 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [U256]>; + noteMinGasPriceTarget: AugmentedSubmittable< + ( + target: U256 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [U256] + >; /** * Generic tx **/ @@ -482,23 +1625,81 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::governance_fallback`]. **/ - governanceFallback: AugmentedSubmittable<(maybeMaxVoters: Option | null | Uint8Array | u32 | AnyNumber, maybeMaxTargets: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [Option, Option]>; + governanceFallback: AugmentedSubmittable< + ( + maybeMaxVoters: Option | null | Uint8Array | u32 | AnyNumber, + maybeMaxTargets: Option | null | Uint8Array | u32 | AnyNumber + ) => SubmittableExtrinsic, + [Option, Option] + >; /** * See [`Pallet::set_emergency_election_result`]. **/ - setEmergencyElectionResult: AugmentedSubmittable<(supports: Vec> | ([AccountId32 | string | Uint8Array, SpNposElectionsSupport | { total?: any; voters?: any } | string | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; + setEmergencyElectionResult: AugmentedSubmittable< + ( + supports: + | Vec> + | [ + AccountId32 | string | Uint8Array, + ( + | SpNposElectionsSupport + | { total?: any; voters?: any } + | string + | Uint8Array + ), + ][] + ) => SubmittableExtrinsic, + [Vec>] + >; /** * See [`Pallet::set_minimum_untrusted_score`]. **/ - setMinimumUntrustedScore: AugmentedSubmittable<(maybeNextScore: Option | null | Uint8Array | SpNposElectionsElectionScore | { minimalStake?: any; sumStake?: any; sumStakeSquared?: any } | string) => SubmittableExtrinsic, [Option]>; + setMinimumUntrustedScore: AugmentedSubmittable< + ( + maybeNextScore: + | Option + | null + | Uint8Array + | SpNposElectionsElectionScore + | { minimalStake?: any; sumStake?: any; sumStakeSquared?: any } + | string + ) => SubmittableExtrinsic, + [Option] + >; /** * See [`Pallet::submit`]. **/ - submit: AugmentedSubmittable<(rawSolution: PalletElectionProviderMultiPhaseRawSolution | { solution?: any; score?: any; round?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletElectionProviderMultiPhaseRawSolution]>; + submit: AugmentedSubmittable< + ( + rawSolution: + | PalletElectionProviderMultiPhaseRawSolution + | { solution?: any; score?: any; round?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletElectionProviderMultiPhaseRawSolution] + >; /** * See [`Pallet::submit_unsigned`]. **/ - submitUnsigned: AugmentedSubmittable<(rawSolution: PalletElectionProviderMultiPhaseRawSolution | { solution?: any; score?: any; round?: any } | string | Uint8Array, witness: PalletElectionProviderMultiPhaseSolutionOrSnapshotSize | { voters?: any; targets?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize]>; + submitUnsigned: AugmentedSubmittable< + ( + rawSolution: + | PalletElectionProviderMultiPhaseRawSolution + | { solution?: any; score?: any; round?: any } + | string + | Uint8Array, + witness: + | PalletElectionProviderMultiPhaseSolutionOrSnapshotSize + | { voters?: any; targets?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [ + PalletElectionProviderMultiPhaseRawSolution, + PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, + ] + >; /** * Generic tx **/ @@ -508,27 +1709,73 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::clean_defunct_voters`]. **/ - cleanDefunctVoters: AugmentedSubmittable<(numVoters: u32 | AnyNumber | Uint8Array, numDefunct: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; + cleanDefunctVoters: AugmentedSubmittable< + ( + numVoters: u32 | AnyNumber | Uint8Array, + numDefunct: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u32, u32] + >; /** * See [`Pallet::remove_member`]. **/ - removeMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, slashBond: bool | boolean | Uint8Array, rerunElection: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, bool, bool]>; + removeMember: AugmentedSubmittable< + ( + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + slashBond: bool | boolean | Uint8Array, + rerunElection: bool | boolean | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, bool, bool] + >; /** * See [`Pallet::remove_voter`]. **/ - removeVoter: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + removeVoter: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::renounce_candidacy`]. **/ - renounceCandidacy: AugmentedSubmittable<(renouncing: PalletElectionsPhragmenRenouncing | { Member: any } | { RunnerUp: any } | { Candidate: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletElectionsPhragmenRenouncing]>; + renounceCandidacy: AugmentedSubmittable< + ( + renouncing: + | PalletElectionsPhragmenRenouncing + | { Member: any } + | { RunnerUp: any } + | { Candidate: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletElectionsPhragmenRenouncing] + >; /** * See [`Pallet::submit_candidacy`]. **/ - submitCandidacy: AugmentedSubmittable<(candidateCount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + submitCandidacy: AugmentedSubmittable< + ( + candidateCount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::vote`]. **/ - vote: AugmentedSubmittable<(votes: Vec | (AccountId32 | string | Uint8Array)[], value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, Compact]>; + vote: AugmentedSubmittable< + ( + votes: Vec | (AccountId32 | string | Uint8Array)[], + value: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Vec, Compact] + >; /** * Generic tx **/ @@ -538,7 +1785,18 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::transact`]. **/ - transact: AugmentedSubmittable<(transaction: EthereumTransactionTransactionV2 | { Legacy: any } | { EIP2930: any } | { EIP1559: any } | string | Uint8Array) => SubmittableExtrinsic, [EthereumTransactionTransactionV2]>; + transact: AugmentedSubmittable< + ( + transaction: + | EthereumTransactionTransactionV2 + | { Legacy: any } + | { EIP2930: any } + | { EIP1559: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [EthereumTransactionTransactionV2] + >; /** * Generic tx **/ @@ -548,19 +1806,122 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::call`]. **/ - call: AugmentedSubmittable<(source: H160 | string | Uint8Array, target: H160 | string | Uint8Array, input: Bytes | string | Uint8Array, value: U256 | AnyNumber | Uint8Array, gasLimit: u64 | AnyNumber | Uint8Array, maxFeePerGas: U256 | AnyNumber | Uint8Array, maxPriorityFeePerGas: Option | null | Uint8Array | U256 | AnyNumber, nonce: Option | null | Uint8Array | U256 | AnyNumber, accessList: Vec]>> | ([H160 | string | Uint8Array, Vec | (H256 | string | Uint8Array)[]])[]) => SubmittableExtrinsic, [H160, H160, Bytes, U256, u64, U256, Option, Option, Vec]>>]>; + call: AugmentedSubmittable< + ( + source: H160 | string | Uint8Array, + target: H160 | string | Uint8Array, + input: Bytes | string | Uint8Array, + value: U256 | AnyNumber | Uint8Array, + gasLimit: u64 | AnyNumber | Uint8Array, + maxFeePerGas: U256 | AnyNumber | Uint8Array, + maxPriorityFeePerGas: + | Option + | null + | Uint8Array + | U256 + | AnyNumber, + nonce: Option | null | Uint8Array | U256 | AnyNumber, + accessList: + | Vec]>> + | [ + H160 | string | Uint8Array, + Vec | (H256 | string | Uint8Array)[], + ][] + ) => SubmittableExtrinsic, + [ + H160, + H160, + Bytes, + U256, + u64, + U256, + Option, + Option, + Vec]>>, + ] + >; /** * See [`Pallet::create`]. **/ - create: AugmentedSubmittable<(source: H160 | string | Uint8Array, init: Bytes | string | Uint8Array, value: U256 | AnyNumber | Uint8Array, gasLimit: u64 | AnyNumber | Uint8Array, maxFeePerGas: U256 | AnyNumber | Uint8Array, maxPriorityFeePerGas: Option | null | Uint8Array | U256 | AnyNumber, nonce: Option | null | Uint8Array | U256 | AnyNumber, accessList: Vec]>> | ([H160 | string | Uint8Array, Vec | (H256 | string | Uint8Array)[]])[]) => SubmittableExtrinsic, [H160, Bytes, U256, u64, U256, Option, Option, Vec]>>]>; + create: AugmentedSubmittable< + ( + source: H160 | string | Uint8Array, + init: Bytes | string | Uint8Array, + value: U256 | AnyNumber | Uint8Array, + gasLimit: u64 | AnyNumber | Uint8Array, + maxFeePerGas: U256 | AnyNumber | Uint8Array, + maxPriorityFeePerGas: + | Option + | null + | Uint8Array + | U256 + | AnyNumber, + nonce: Option | null | Uint8Array | U256 | AnyNumber, + accessList: + | Vec]>> + | [ + H160 | string | Uint8Array, + Vec | (H256 | string | Uint8Array)[], + ][] + ) => SubmittableExtrinsic, + [ + H160, + Bytes, + U256, + u64, + U256, + Option, + Option, + Vec]>>, + ] + >; /** * See [`Pallet::create2`]. **/ - create2: AugmentedSubmittable<(source: H160 | string | Uint8Array, init: Bytes | string | Uint8Array, salt: H256 | string | Uint8Array, value: U256 | AnyNumber | Uint8Array, gasLimit: u64 | AnyNumber | Uint8Array, maxFeePerGas: U256 | AnyNumber | Uint8Array, maxPriorityFeePerGas: Option | null | Uint8Array | U256 | AnyNumber, nonce: Option | null | Uint8Array | U256 | AnyNumber, accessList: Vec]>> | ([H160 | string | Uint8Array, Vec | (H256 | string | Uint8Array)[]])[]) => SubmittableExtrinsic, [H160, Bytes, H256, U256, u64, U256, Option, Option, Vec]>>]>; + create2: AugmentedSubmittable< + ( + source: H160 | string | Uint8Array, + init: Bytes | string | Uint8Array, + salt: H256 | string | Uint8Array, + value: U256 | AnyNumber | Uint8Array, + gasLimit: u64 | AnyNumber | Uint8Array, + maxFeePerGas: U256 | AnyNumber | Uint8Array, + maxPriorityFeePerGas: + | Option + | null + | Uint8Array + | U256 + | AnyNumber, + nonce: Option | null | Uint8Array | U256 | AnyNumber, + accessList: + | Vec]>> + | [ + H160 | string | Uint8Array, + Vec | (H256 | string | Uint8Array)[], + ][] + ) => SubmittableExtrinsic, + [ + H160, + Bytes, + H256, + U256, + u64, + U256, + Option, + Option, + Vec]>>, + ] + >; /** * See [`Pallet::withdraw`]. **/ - withdraw: AugmentedSubmittable<(address: H160 | string | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H160, u128]>; + withdraw: AugmentedSubmittable< + ( + address: H160 | string | Uint8Array, + value: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [H160, u128] + >; /** * Generic tx **/ @@ -570,15 +1931,41 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::note_stalled`]. **/ - noteStalled: AugmentedSubmittable<(delay: u64 | AnyNumber | Uint8Array, bestFinalizedBlockNumber: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u64]>; + noteStalled: AugmentedSubmittable< + ( + delay: u64 | AnyNumber | Uint8Array, + bestFinalizedBlockNumber: u64 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u64, u64] + >; /** * See [`Pallet::report_equivocation`]. **/ - reportEquivocation: AugmentedSubmittable<(equivocationProof: SpConsensusGrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: SpCoreVoid | null) => SubmittableExtrinsic, [SpConsensusGrandpaEquivocationProof, SpCoreVoid]>; + reportEquivocation: AugmentedSubmittable< + ( + equivocationProof: + | SpConsensusGrandpaEquivocationProof + | { setId?: any; equivocation?: any } + | string + | Uint8Array, + keyOwnerProof: SpCoreVoid | null + ) => SubmittableExtrinsic, + [SpConsensusGrandpaEquivocationProof, SpCoreVoid] + >; /** * See [`Pallet::report_equivocation_unsigned`]. **/ - reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: SpConsensusGrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: SpCoreVoid | null) => SubmittableExtrinsic, [SpConsensusGrandpaEquivocationProof, SpCoreVoid]>; + reportEquivocationUnsigned: AugmentedSubmittable< + ( + equivocationProof: + | SpConsensusGrandpaEquivocationProof + | { setId?: any; equivocation?: any } + | string + | Uint8Array, + keyOwnerProof: SpCoreVoid | null + ) => SubmittableExtrinsic, + [SpConsensusGrandpaEquivocationProof, SpCoreVoid] + >; /** * Generic tx **/ @@ -588,7 +1975,12 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::hotfix_inc_account_sufficients`]. **/ - hotfixIncAccountSufficients: AugmentedSubmittable<(addresses: Vec | (H160 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + hotfixIncAccountSufficients: AugmentedSubmittable< + ( + addresses: Vec | (H160 | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * Generic tx **/ @@ -598,35 +1990,138 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::accept_username`]. **/ - acceptUsername: AugmentedSubmittable<(username: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + acceptUsername: AugmentedSubmittable< + ( + username: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::add_registrar`]. **/ - addRegistrar: AugmentedSubmittable<(account: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + addRegistrar: AugmentedSubmittable< + ( + account: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * See [`Pallet::add_sub`]. **/ - addSub: AugmentedSubmittable<(sub: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, data: Data | { None: any } | { Raw: any } | { BlakeTwo256: any } | { Sha256: any } | { Keccak256: any } | { ShaThree256: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Data]>; + addSub: AugmentedSubmittable< + ( + sub: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + data: + | Data + | { None: any } + | { Raw: any } + | { BlakeTwo256: any } + | { Sha256: any } + | { Keccak256: any } + | { ShaThree256: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Data] + >; /** * See [`Pallet::add_username_authority`]. **/ - addUsernameAuthority: AugmentedSubmittable<(authority: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, suffix: Bytes | string | Uint8Array, allocation: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Bytes, u32]>; + addUsernameAuthority: AugmentedSubmittable< + ( + authority: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + suffix: Bytes | string | Uint8Array, + allocation: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Bytes, u32] + >; /** * See [`Pallet::cancel_request`]. **/ - cancelRequest: AugmentedSubmittable<(regIndex: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + cancelRequest: AugmentedSubmittable< + ( + regIndex: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::clear_identity`]. **/ - clearIdentity: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + clearIdentity: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::kill_identity`]. **/ - killIdentity: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + killIdentity: AugmentedSubmittable< + ( + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * See [`Pallet::provide_judgement`]. **/ - provideJudgement: AugmentedSubmittable<(regIndex: Compact | AnyNumber | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, judgement: PalletIdentityJudgement | { Unknown: any } | { FeePaid: any } | { Reasonable: any } | { KnownGood: any } | { OutOfDate: any } | { LowQuality: any } | { Erroneous: any } | string | Uint8Array, identity: H256 | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, PalletIdentityJudgement, H256]>; + provideJudgement: AugmentedSubmittable< + ( + regIndex: Compact | AnyNumber | Uint8Array, + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + judgement: + | PalletIdentityJudgement + | { Unknown: any } + | { FeePaid: any } + | { Reasonable: any } + | { KnownGood: any } + | { OutOfDate: any } + | { LowQuality: any } + | { Erroneous: any } + | string + | Uint8Array, + identity: H256 | string | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, PalletIdentityJudgement, H256] + >; /** * See [`Pallet::quit_sub`]. **/ @@ -634,55 +2129,213 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::remove_dangling_username`]. **/ - removeDanglingUsername: AugmentedSubmittable<(username: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + removeDanglingUsername: AugmentedSubmittable< + ( + username: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::remove_expired_approval`]. **/ - removeExpiredApproval: AugmentedSubmittable<(username: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + removeExpiredApproval: AugmentedSubmittable< + ( + username: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::remove_sub`]. **/ - removeSub: AugmentedSubmittable<(sub: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + removeSub: AugmentedSubmittable< + ( + sub: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * See [`Pallet::remove_username_authority`]. **/ - removeUsernameAuthority: AugmentedSubmittable<(authority: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + removeUsernameAuthority: AugmentedSubmittable< + ( + authority: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * See [`Pallet::rename_sub`]. **/ - renameSub: AugmentedSubmittable<(sub: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, data: Data | { None: any } | { Raw: any } | { BlakeTwo256: any } | { Sha256: any } | { Keccak256: any } | { ShaThree256: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Data]>; + renameSub: AugmentedSubmittable< + ( + sub: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + data: + | Data + | { None: any } + | { Raw: any } + | { BlakeTwo256: any } + | { Sha256: any } + | { Keccak256: any } + | { ShaThree256: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Data] + >; /** * See [`Pallet::request_judgement`]. **/ - requestJudgement: AugmentedSubmittable<(regIndex: Compact | AnyNumber | Uint8Array, maxFee: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Compact]>; + requestJudgement: AugmentedSubmittable< + ( + regIndex: Compact | AnyNumber | Uint8Array, + maxFee: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact] + >; /** * See [`Pallet::set_account_id`]. **/ - setAccountId: AugmentedSubmittable<(index: Compact | AnyNumber | Uint8Array, updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + setAccountId: AugmentedSubmittable< + ( + index: Compact | AnyNumber | Uint8Array, + updated: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::set_fee`]. **/ - setFee: AugmentedSubmittable<(index: Compact | AnyNumber | Uint8Array, fee: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Compact]>; + setFee: AugmentedSubmittable< + ( + index: Compact | AnyNumber | Uint8Array, + fee: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, Compact] + >; /** * See [`Pallet::set_fields`]. **/ - setFields: AugmentedSubmittable<(index: Compact | AnyNumber | Uint8Array, fields: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, u64]>; + setFields: AugmentedSubmittable< + ( + index: Compact | AnyNumber | Uint8Array, + fields: u64 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, u64] + >; /** * See [`Pallet::set_identity`]. **/ - setIdentity: AugmentedSubmittable<(info: PalletIdentityLegacyIdentityInfo | { additional?: any; display?: any; legal?: any; web?: any; riot?: any; email?: any; pgpFingerprint?: any; image?: any; twitter?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletIdentityLegacyIdentityInfo]>; + setIdentity: AugmentedSubmittable< + ( + info: + | PalletIdentityLegacyIdentityInfo + | { + additional?: any; + display?: any; + legal?: any; + web?: any; + riot?: any; + email?: any; + pgpFingerprint?: any; + image?: any; + twitter?: any; + } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletIdentityLegacyIdentityInfo] + >; /** * See [`Pallet::set_primary_username`]. **/ - setPrimaryUsername: AugmentedSubmittable<(username: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + setPrimaryUsername: AugmentedSubmittable< + ( + username: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::set_subs`]. **/ - setSubs: AugmentedSubmittable<(subs: Vec> | ([AccountId32 | string | Uint8Array, Data | { None: any } | { Raw: any } | { BlakeTwo256: any } | { Sha256: any } | { Keccak256: any } | { ShaThree256: any } | string | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; + setSubs: AugmentedSubmittable< + ( + subs: + | Vec> + | [ + AccountId32 | string | Uint8Array, + ( + | Data + | { None: any } + | { Raw: any } + | { BlakeTwo256: any } + | { Sha256: any } + | { Keccak256: any } + | { ShaThree256: any } + | string + | Uint8Array + ), + ][] + ) => SubmittableExtrinsic, + [Vec>] + >; /** * See [`Pallet::set_username_for`]. **/ - setUsernameFor: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, username: Bytes | string | Uint8Array, signature: Option | null | Uint8Array | SpRuntimeMultiSignature | { Ed25519: any } | { Sr25519: any } | { Ecdsa: any } | string) => SubmittableExtrinsic, [MultiAddress, Bytes, Option]>; + setUsernameFor: AugmentedSubmittable< + ( + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + username: Bytes | string | Uint8Array, + signature: + | Option + | null + | Uint8Array + | SpRuntimeMultiSignature + | { Ed25519: any } + | { Sr25519: any } + | { Ecdsa: any } + | string + ) => SubmittableExtrinsic, + [MultiAddress, Bytes, Option] + >; /** * Generic tx **/ @@ -692,7 +2345,25 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::heartbeat`]. **/ - heartbeat: AugmentedSubmittable<(heartbeat: PalletImOnlineHeartbeat | { blockNumber?: any; sessionIndex?: any; authorityIndex?: any; validatorsLen?: any } | string | Uint8Array, signature: PalletImOnlineSr25519AppSr25519Signature | string | Uint8Array) => SubmittableExtrinsic, [PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature]>; + heartbeat: AugmentedSubmittable< + ( + heartbeat: + | PalletImOnlineHeartbeat + | { + blockNumber?: any; + sessionIndex?: any; + authorityIndex?: any; + validatorsLen?: any; + } + | string + | Uint8Array, + signature: + | PalletImOnlineSr25519AppSr25519Signature + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature] + >; /** * Generic tx **/ @@ -702,23 +2373,61 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::claim`]. **/ - claim: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + claim: AugmentedSubmittable< + (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::force_transfer`]. **/ - forceTransfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u32 | AnyNumber | Uint8Array, freeze: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32, bool]>; + forceTransfer: AugmentedSubmittable< + ( + updated: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + index: u32 | AnyNumber | Uint8Array, + freeze: bool | boolean | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, u32, bool] + >; /** * See [`Pallet::free`]. **/ - free: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + free: AugmentedSubmittable< + (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::freeze`]. **/ - freeze: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + freeze: AugmentedSubmittable< + (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::transfer`]. **/ - transfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32]>; + transfer: AugmentedSubmittable< + ( + updated: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + index: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, u32] + >; /** * Generic tx **/ @@ -728,35 +2437,142 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::extend_job_result_ttl`]. **/ - extendJobResultTtl: AugmentedSubmittable<(roleType: TanglePrimitivesRolesRoleType | { Tss: any } | { ZkSaaS: any } | { LightClientRelaying: any } | string | Uint8Array, jobId: u64 | AnyNumber | Uint8Array, extendBy: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [TanglePrimitivesRolesRoleType, u64, u64]>; + extendJobResultTtl: AugmentedSubmittable< + ( + roleType: + | TanglePrimitivesRolesRoleType + | { Tss: any } + | { ZkSaaS: any } + | { LightClientRelaying: any } + | string + | Uint8Array, + jobId: u64 | AnyNumber | Uint8Array, + extendBy: u64 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [TanglePrimitivesRolesRoleType, u64, u64] + >; /** * See [`Pallet::report_inactive_validator`]. **/ - reportInactiveValidator: AugmentedSubmittable<(roleType: TanglePrimitivesRolesRoleType | { Tss: any } | { ZkSaaS: any } | { LightClientRelaying: any } | string | Uint8Array, jobId: u64 | AnyNumber | Uint8Array, validator: AccountId32 | string | Uint8Array, offence: TanglePrimitivesJobsValidatorOffenceType | 'Inactivity' | 'InvalidSignatureSubmitted' | 'RejectedValidAction' | 'ApprovedInvalidAction' | number | Uint8Array, signatures: Vec | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic, [TanglePrimitivesRolesRoleType, u64, AccountId32, TanglePrimitivesJobsValidatorOffenceType, Vec]>; + reportInactiveValidator: AugmentedSubmittable< + ( + roleType: + | TanglePrimitivesRolesRoleType + | { Tss: any } + | { ZkSaaS: any } + | { LightClientRelaying: any } + | string + | Uint8Array, + jobId: u64 | AnyNumber | Uint8Array, + validator: AccountId32 | string | Uint8Array, + offence: + | TanglePrimitivesJobsValidatorOffenceType + | "Inactivity" + | "InvalidSignatureSubmitted" + | "RejectedValidAction" + | "ApprovedInvalidAction" + | number + | Uint8Array, + signatures: Vec | (Bytes | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [ + TanglePrimitivesRolesRoleType, + u64, + AccountId32, + TanglePrimitivesJobsValidatorOffenceType, + Vec, + ] + >; /** * See [`Pallet::set_permitted_caller`]. **/ - setPermittedCaller: AugmentedSubmittable<(roleType: TanglePrimitivesRolesRoleType | { Tss: any } | { ZkSaaS: any } | { LightClientRelaying: any } | string | Uint8Array, jobId: u64 | AnyNumber | Uint8Array, newPermittedCaller: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [TanglePrimitivesRolesRoleType, u64, AccountId32]>; + setPermittedCaller: AugmentedSubmittable< + ( + roleType: + | TanglePrimitivesRolesRoleType + | { Tss: any } + | { ZkSaaS: any } + | { LightClientRelaying: any } + | string + | Uint8Array, + jobId: u64 | AnyNumber | Uint8Array, + newPermittedCaller: AccountId32 | string | Uint8Array + ) => SubmittableExtrinsic, + [TanglePrimitivesRolesRoleType, u64, AccountId32] + >; /** * See [`Pallet::set_time_fee`]. **/ - setTimeFee: AugmentedSubmittable<(newFee: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; + setTimeFee: AugmentedSubmittable< + ( + newFee: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u128] + >; /** * See [`Pallet::submit_job`]. **/ - submitJob: AugmentedSubmittable<(job: TanglePrimitivesJobsJobSubmission | { expiry?: any; ttl?: any; jobType?: any; fallback?: any } | string | Uint8Array) => SubmittableExtrinsic, [TanglePrimitivesJobsJobSubmission]>; + submitJob: AugmentedSubmittable< + ( + job: + | TanglePrimitivesJobsJobSubmission + | { expiry?: any; ttl?: any; jobType?: any; fallback?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [TanglePrimitivesJobsJobSubmission] + >; /** * See [`Pallet::submit_job_result`]. **/ - submitJobResult: AugmentedSubmittable<(roleType: TanglePrimitivesRolesRoleType | { Tss: any } | { ZkSaaS: any } | { LightClientRelaying: any } | string | Uint8Array, jobId: u64 | AnyNumber | Uint8Array, result: TanglePrimitivesJobsJobResult | { DKGPhaseOne: any } | { DKGPhaseTwo: any } | { DKGPhaseThree: any } | { DKGPhaseFour: any } | { ZkSaaSPhaseOne: any } | { ZkSaaSPhaseTwo: any } | string | Uint8Array) => SubmittableExtrinsic, [TanglePrimitivesRolesRoleType, u64, TanglePrimitivesJobsJobResult]>; + submitJobResult: AugmentedSubmittable< + ( + roleType: + | TanglePrimitivesRolesRoleType + | { Tss: any } + | { ZkSaaS: any } + | { LightClientRelaying: any } + | string + | Uint8Array, + jobId: u64 | AnyNumber | Uint8Array, + result: + | TanglePrimitivesJobsJobResult + | { DKGPhaseOne: any } + | { DKGPhaseTwo: any } + | { DKGPhaseThree: any } + | { DKGPhaseFour: any } + | { ZkSaaSPhaseOne: any } + | { ZkSaaSPhaseTwo: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [TanglePrimitivesRolesRoleType, u64, TanglePrimitivesJobsJobResult] + >; /** * See [`Pallet::submit_misbehavior`]. **/ - submitMisbehavior: AugmentedSubmittable<(misbehavior: TanglePrimitivesMisbehaviorMisbehaviorSubmission | { roleType?: any; offender?: any; jobId?: any; justification?: any } | string | Uint8Array) => SubmittableExtrinsic, [TanglePrimitivesMisbehaviorMisbehaviorSubmission]>; + submitMisbehavior: AugmentedSubmittable< + ( + misbehavior: + | TanglePrimitivesMisbehaviorMisbehaviorSubmission + | { + roleType?: any; + offender?: any; + jobId?: any; + justification?: any; + } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [TanglePrimitivesMisbehaviorMisbehaviorSubmission] + >; /** * See [`Pallet::withdraw_rewards`]. **/ - withdrawRewards: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + withdrawRewards: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * Generic tx **/ @@ -770,7 +2586,10 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::cancel_leave_operators`]. **/ - cancelLeaveOperators: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + cancelLeaveOperators: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::cancel_operator_unstake`]. **/ @@ -782,7 +2601,14 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::delegate`]. **/ - delegate: AugmentedSubmittable<(operator: AccountId32 | string | Uint8Array, assetId: u128 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, u128]>; + delegate: AugmentedSubmittable< + ( + operator: AccountId32 | string | Uint8Array, + assetId: u128 | AnyNumber | Uint8Array, + amount: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32, u128, u128] + >; /** * See [`Pallet::deposit`]. **/ @@ -794,7 +2620,10 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::execute_leave_operators`]. **/ - executeLeaveOperators: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + executeLeaveOperators: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::execute_operator_unstake`]. **/ @@ -814,7 +2643,12 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::join_operators`]. **/ - joinOperators: AugmentedSubmittable<(bondAmount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; + joinOperators: AugmentedSubmittable< + ( + bondAmount: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u128] + >; /** * See [`Pallet::manage_asset_in_pool`]. **/ @@ -822,7 +2656,12 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::operator_bond_more`]. **/ - operatorBondMore: AugmentedSubmittable<(additionalBond: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; + operatorBondMore: AugmentedSubmittable< + ( + additionalBond: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u128] + >; /** * See [`Pallet::schedule_delegator_unstake`]. **/ @@ -830,7 +2669,10 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::schedule_leave_operators`]. **/ - scheduleLeaveOperators: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + scheduleLeaveOperators: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::schedule_operator_unstake`]. **/ @@ -846,7 +2688,12 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::whitelist_blueprint_for_rewards`]. **/ - whitelistBlueprintForRewards: AugmentedSubmittable<(blueprintId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + whitelistBlueprintForRewards: AugmentedSubmittable< + ( + blueprintId: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u32] + >; /** * Generic tx **/ @@ -856,19 +2703,95 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::approve_as_multi`]. **/ - approveAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, callHash: U8aFixed | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, U8aFixed, SpWeightsWeightV2Weight]>; + approveAsMulti: AugmentedSubmittable< + ( + threshold: u16 | AnyNumber | Uint8Array, + otherSignatories: + | Vec + | (AccountId32 | string | Uint8Array)[], + maybeTimepoint: + | Option + | null + | Uint8Array + | PalletMultisigTimepoint + | { height?: any; index?: any } + | string, + callHash: U8aFixed | string | Uint8Array, + maxWeight: + | SpWeightsWeightV2Weight + | { refTime?: any; proofSize?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [ + u16, + Vec, + Option, + U8aFixed, + SpWeightsWeightV2Weight, + ] + >; /** * See [`Pallet::as_multi`]. **/ - asMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, call: Call | IMethod | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, Call, SpWeightsWeightV2Weight]>; + asMulti: AugmentedSubmittable< + ( + threshold: u16 | AnyNumber | Uint8Array, + otherSignatories: + | Vec + | (AccountId32 | string | Uint8Array)[], + maybeTimepoint: + | Option + | null + | Uint8Array + | PalletMultisigTimepoint + | { height?: any; index?: any } + | string, + call: Call | IMethod | string | Uint8Array, + maxWeight: + | SpWeightsWeightV2Weight + | { refTime?: any; proofSize?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [ + u16, + Vec, + Option, + Call, + SpWeightsWeightV2Weight, + ] + >; /** * See [`Pallet::as_multi_threshold_1`]. **/ - asMultiThreshold1: AugmentedSubmittable<(otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Vec, Call]>; + asMultiThreshold1: AugmentedSubmittable< + ( + otherSignatories: + | Vec + | (AccountId32 | string | Uint8Array)[], + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [Vec, Call] + >; /** * See [`Pallet::cancel_as_multi`]. **/ - cancelAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], timepoint: PalletMultisigTimepoint | { height?: any; index?: any } | string | Uint8Array, callHash: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, PalletMultisigTimepoint, U8aFixed]>; + cancelAsMulti: AugmentedSubmittable< + ( + threshold: u16 | AnyNumber | Uint8Array, + otherSignatories: + | Vec + | (AccountId32 | string | Uint8Array)[], + timepoint: + | PalletMultisigTimepoint + | { height?: any; index?: any } + | string + | Uint8Array, + callHash: U8aFixed | string | Uint8Array + ) => SubmittableExtrinsic, + [u16, Vec, PalletMultisigTimepoint, U8aFixed] + >; /** * Generic tx **/ @@ -878,95 +2801,409 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::adjust_pool_deposit`]. **/ - adjustPoolDeposit: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + adjustPoolDeposit: AugmentedSubmittable< + (poolId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::bond_extra`]. **/ - bondExtra: AugmentedSubmittable<(extra: PalletNominationPoolsBondExtra | { FreeBalance: any } | { Rewards: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletNominationPoolsBondExtra]>; + bondExtra: AugmentedSubmittable< + ( + extra: + | PalletNominationPoolsBondExtra + | { FreeBalance: any } + | { Rewards: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletNominationPoolsBondExtra] + >; /** * See [`Pallet::bond_extra_other`]. **/ - bondExtraOther: AugmentedSubmittable<(member: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, extra: PalletNominationPoolsBondExtra | { FreeBalance: any } | { Rewards: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, PalletNominationPoolsBondExtra]>; + bondExtraOther: AugmentedSubmittable< + ( + member: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + extra: + | PalletNominationPoolsBondExtra + | { FreeBalance: any } + | { Rewards: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, PalletNominationPoolsBondExtra] + >; /** * See [`Pallet::chill`]. **/ - chill: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + chill: AugmentedSubmittable< + (poolId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::claim_commission`]. **/ - claimCommission: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + claimCommission: AugmentedSubmittable< + (poolId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::claim_payout`]. **/ - claimPayout: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + claimPayout: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::claim_payout_other`]. **/ - claimPayoutOther: AugmentedSubmittable<(other: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; + claimPayoutOther: AugmentedSubmittable< + ( + other: AccountId32 | string | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32] + >; /** * See [`Pallet::create`]. **/ - create: AugmentedSubmittable<(amount: Compact | AnyNumber | Uint8Array, root: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, nominator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, bouncer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, MultiAddress, MultiAddress]>; + create: AugmentedSubmittable< + ( + amount: Compact | AnyNumber | Uint8Array, + root: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + nominator: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + bouncer: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, MultiAddress, MultiAddress] + >; /** * See [`Pallet::create_with_pool_id`]. **/ - createWithPoolId: AugmentedSubmittable<(amount: Compact | AnyNumber | Uint8Array, root: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, nominator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, bouncer: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, poolId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress, MultiAddress, MultiAddress, u32]>; + createWithPoolId: AugmentedSubmittable< + ( + amount: Compact | AnyNumber | Uint8Array, + root: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + nominator: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + bouncer: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + poolId: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress, MultiAddress, MultiAddress, u32] + >; /** * See [`Pallet::join`]. **/ - join: AugmentedSubmittable<(amount: Compact | AnyNumber | Uint8Array, poolId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, u32]>; + join: AugmentedSubmittable< + ( + amount: Compact | AnyNumber | Uint8Array, + poolId: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact, u32] + >; /** * See [`Pallet::nominate`]. **/ - nominate: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, validators: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [u32, Vec]>; + nominate: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + validators: Vec | (AccountId32 | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [u32, Vec] + >; /** * See [`Pallet::pool_withdraw_unbonded`]. **/ - poolWithdrawUnbonded: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; + poolWithdrawUnbonded: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + numSlashingSpans: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u32, u32] + >; /** * See [`Pallet::set_claim_permission`]. **/ - setClaimPermission: AugmentedSubmittable<(permission: PalletNominationPoolsClaimPermission | 'Permissioned' | 'PermissionlessCompound' | 'PermissionlessWithdraw' | 'PermissionlessAll' | number | Uint8Array) => SubmittableExtrinsic, [PalletNominationPoolsClaimPermission]>; + setClaimPermission: AugmentedSubmittable< + ( + permission: + | PalletNominationPoolsClaimPermission + | "Permissioned" + | "PermissionlessCompound" + | "PermissionlessWithdraw" + | "PermissionlessAll" + | number + | Uint8Array + ) => SubmittableExtrinsic, + [PalletNominationPoolsClaimPermission] + >; /** * See [`Pallet::set_commission`]. **/ - setCommission: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, newCommission: Option> | null | Uint8Array | ITuple<[Perbill, AccountId32]> | [Perbill | AnyNumber | Uint8Array, AccountId32 | string | Uint8Array]) => SubmittableExtrinsic, [u32, Option>]>; + setCommission: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + newCommission: + | Option> + | null + | Uint8Array + | ITuple<[Perbill, AccountId32]> + | [ + Perbill | AnyNumber | Uint8Array, + AccountId32 | string | Uint8Array, + ] + ) => SubmittableExtrinsic, + [u32, Option>] + >; /** * See [`Pallet::set_commission_change_rate`]. **/ - setCommissionChangeRate: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, changeRate: PalletNominationPoolsCommissionChangeRate | { maxIncrease?: any; minDelay?: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletNominationPoolsCommissionChangeRate]>; + setCommissionChangeRate: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + changeRate: + | PalletNominationPoolsCommissionChangeRate + | { maxIncrease?: any; minDelay?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [u32, PalletNominationPoolsCommissionChangeRate] + >; /** * See [`Pallet::set_commission_claim_permission`]. **/ - setCommissionClaimPermission: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, permission: Option | null | Uint8Array | PalletNominationPoolsCommissionClaimPermission | { Permissionless: any } | { Account: any } | string) => SubmittableExtrinsic, [u32, Option]>; + setCommissionClaimPermission: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + permission: + | Option + | null + | Uint8Array + | PalletNominationPoolsCommissionClaimPermission + | { Permissionless: any } + | { Account: any } + | string + ) => SubmittableExtrinsic, + [u32, Option] + >; /** * See [`Pallet::set_commission_max`]. **/ - setCommissionMax: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, maxCommission: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, Perbill]>; + setCommissionMax: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + maxCommission: Perbill | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u32, Perbill] + >; /** * See [`Pallet::set_configs`]. **/ - setConfigs: AugmentedSubmittable<(minJoinBond: PalletNominationPoolsConfigOpU128 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, minCreateBond: PalletNominationPoolsConfigOpU128 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, maxPools: PalletNominationPoolsConfigOpU32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, maxMembers: PalletNominationPoolsConfigOpU32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, maxMembersPerPool: PalletNominationPoolsConfigOpU32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, globalMaxCommission: PalletNominationPoolsConfigOpPerbill | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletNominationPoolsConfigOpU128, PalletNominationPoolsConfigOpU128, PalletNominationPoolsConfigOpU32, PalletNominationPoolsConfigOpU32, PalletNominationPoolsConfigOpU32, PalletNominationPoolsConfigOpPerbill]>; + setConfigs: AugmentedSubmittable< + ( + minJoinBond: + | PalletNominationPoolsConfigOpU128 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + minCreateBond: + | PalletNominationPoolsConfigOpU128 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + maxPools: + | PalletNominationPoolsConfigOpU32 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + maxMembers: + | PalletNominationPoolsConfigOpU32 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + maxMembersPerPool: + | PalletNominationPoolsConfigOpU32 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + globalMaxCommission: + | PalletNominationPoolsConfigOpPerbill + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [ + PalletNominationPoolsConfigOpU128, + PalletNominationPoolsConfigOpU128, + PalletNominationPoolsConfigOpU32, + PalletNominationPoolsConfigOpU32, + PalletNominationPoolsConfigOpU32, + PalletNominationPoolsConfigOpPerbill, + ] + >; /** * See [`Pallet::set_metadata`]. **/ - setMetadata: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, metadata: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u32, Bytes]>; + setMetadata: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + metadata: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [u32, Bytes] + >; /** * See [`Pallet::set_state`]. **/ - setState: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, state: PalletNominationPoolsPoolState | 'Open' | 'Blocked' | 'Destroying' | number | Uint8Array) => SubmittableExtrinsic, [u32, PalletNominationPoolsPoolState]>; + setState: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + state: + | PalletNominationPoolsPoolState + | "Open" + | "Blocked" + | "Destroying" + | number + | Uint8Array + ) => SubmittableExtrinsic, + [u32, PalletNominationPoolsPoolState] + >; /** * See [`Pallet::unbond`]. **/ - unbond: AugmentedSubmittable<(memberAccount: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, unbondingPoints: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; + unbond: AugmentedSubmittable< + ( + memberAccount: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + unbondingPoints: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Compact] + >; /** * See [`Pallet::update_roles`]. **/ - updateRoles: AugmentedSubmittable<(poolId: u32 | AnyNumber | Uint8Array, newRoot: PalletNominationPoolsConfigOpAccountId32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, newNominator: PalletNominationPoolsConfigOpAccountId32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, newBouncer: PalletNominationPoolsConfigOpAccountId32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletNominationPoolsConfigOpAccountId32, PalletNominationPoolsConfigOpAccountId32, PalletNominationPoolsConfigOpAccountId32]>; + updateRoles: AugmentedSubmittable< + ( + poolId: u32 | AnyNumber | Uint8Array, + newRoot: + | PalletNominationPoolsConfigOpAccountId32 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + newNominator: + | PalletNominationPoolsConfigOpAccountId32 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + newBouncer: + | PalletNominationPoolsConfigOpAccountId32 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [ + u32, + PalletNominationPoolsConfigOpAccountId32, + PalletNominationPoolsConfigOpAccountId32, + PalletNominationPoolsConfigOpAccountId32, + ] + >; /** * See [`Pallet::withdraw_unbonded`]. **/ - withdrawUnbonded: AugmentedSubmittable<(memberAccount: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32]>; + withdrawUnbonded: AugmentedSubmittable< + ( + memberAccount: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + numSlashingSpans: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, u32] + >; /** * Generic tx **/ @@ -976,23 +3213,40 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::ensure_updated`]. **/ - ensureUpdated: AugmentedSubmittable<(hashes: Vec | (H256 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + ensureUpdated: AugmentedSubmittable< + ( + hashes: Vec | (H256 | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::note_preimage`]. **/ - notePreimage: AugmentedSubmittable<(bytes: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + notePreimage: AugmentedSubmittable< + (bytes: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::request_preimage`]. **/ - requestPreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; + requestPreimage: AugmentedSubmittable< + (hash: H256 | string | Uint8Array) => SubmittableExtrinsic, + [H256] + >; /** * See [`Pallet::unnote_preimage`]. **/ - unnotePreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; + unnotePreimage: AugmentedSubmittable< + (hash: H256 | string | Uint8Array) => SubmittableExtrinsic, + [H256] + >; /** * See [`Pallet::unrequest_preimage`]. **/ - unrequestPreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; + unrequestPreimage: AugmentedSubmittable< + (hash: H256 | string | Uint8Array) => SubmittableExtrinsic, + [H256] + >; /** * Generic tx **/ @@ -1002,43 +3256,238 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::add_proxy`]. **/ - addProxy: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: TangleTestnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'Staking' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, TangleTestnetRuntimeProxyType, u64]>; + addProxy: AugmentedSubmittable< + ( + delegate: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + proxyType: + | TangleTestnetRuntimeProxyType + | "Any" + | "NonTransfer" + | "Governance" + | "Staking" + | number + | Uint8Array, + delay: u64 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, TangleTestnetRuntimeProxyType, u64] + >; /** * See [`Pallet::announce`]. **/ - announce: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; + announce: AugmentedSubmittable< + ( + real: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + callHash: H256 | string | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, H256] + >; /** * See [`Pallet::create_pure`]. **/ - createPure: AugmentedSubmittable<(proxyType: TangleTestnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'Staking' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array, index: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [TangleTestnetRuntimeProxyType, u64, u16]>; + createPure: AugmentedSubmittable< + ( + proxyType: + | TangleTestnetRuntimeProxyType + | "Any" + | "NonTransfer" + | "Governance" + | "Staking" + | number + | Uint8Array, + delay: u64 | AnyNumber | Uint8Array, + index: u16 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [TangleTestnetRuntimeProxyType, u64, u16] + >; /** * See [`Pallet::kill_pure`]. **/ - killPure: AugmentedSubmittable<(spawner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: TangleTestnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'Staking' | number | Uint8Array, index: u16 | AnyNumber | Uint8Array, height: Compact | AnyNumber | Uint8Array, extIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, TangleTestnetRuntimeProxyType, u16, Compact, Compact]>; + killPure: AugmentedSubmittable< + ( + spawner: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + proxyType: + | TangleTestnetRuntimeProxyType + | "Any" + | "NonTransfer" + | "Governance" + | "Staking" + | number + | Uint8Array, + index: u16 | AnyNumber | Uint8Array, + height: Compact | AnyNumber | Uint8Array, + extIndex: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [ + MultiAddress, + TangleTestnetRuntimeProxyType, + u16, + Compact, + Compact, + ] + >; /** * See [`Pallet::proxy`]. **/ - proxy: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, forceProxyType: Option | null | Uint8Array | TangleTestnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'Staking' | number, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Option, Call]>; + proxy: AugmentedSubmittable< + ( + real: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + forceProxyType: + | Option + | null + | Uint8Array + | TangleTestnetRuntimeProxyType + | "Any" + | "NonTransfer" + | "Governance" + | "Staking" + | number, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Option, Call] + >; /** * See [`Pallet::proxy_announced`]. **/ - proxyAnnounced: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, forceProxyType: Option | null | Uint8Array | TangleTestnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'Staking' | number, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Option, Call]>; + proxyAnnounced: AugmentedSubmittable< + ( + delegate: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + real: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + forceProxyType: + | Option + | null + | Uint8Array + | TangleTestnetRuntimeProxyType + | "Any" + | "NonTransfer" + | "Governance" + | "Staking" + | number, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [ + MultiAddress, + MultiAddress, + Option, + Call, + ] + >; /** * See [`Pallet::reject_announcement`]. **/ - rejectAnnouncement: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; + rejectAnnouncement: AugmentedSubmittable< + ( + delegate: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + callHash: H256 | string | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, H256] + >; /** * See [`Pallet::remove_announcement`]. **/ - removeAnnouncement: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; + removeAnnouncement: AugmentedSubmittable< + ( + real: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + callHash: H256 | string | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, H256] + >; /** * See [`Pallet::remove_proxies`]. **/ - removeProxies: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + removeProxies: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::remove_proxy`]. **/ - removeProxy: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: TangleTestnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'Staking' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, TangleTestnetRuntimeProxyType, u64]>; + removeProxy: AugmentedSubmittable< + ( + delegate: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + proxyType: + | TangleTestnetRuntimeProxyType + | "Any" + | "NonTransfer" + | "Governance" + | "Staking" + | number + | Uint8Array, + delay: u64 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, TangleTestnetRuntimeProxyType, u64] + >; /** * Generic tx **/ @@ -1052,31 +3501,74 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::create_profile`]. **/ - createProfile: AugmentedSubmittable<(profile: PalletRolesProfile | { Independent: any } | { Shared: any } | string | Uint8Array, maxActiveServices: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [PalletRolesProfile, Option]>; + createProfile: AugmentedSubmittable< + ( + profile: + | PalletRolesProfile + | { Independent: any } + | { Shared: any } + | string + | Uint8Array, + maxActiveServices: Option | null | Uint8Array | u32 | AnyNumber + ) => SubmittableExtrinsic, + [PalletRolesProfile, Option] + >; /** * See [`Pallet::delete_profile`]. **/ - deleteProfile: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + deleteProfile: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::payout_stakers`]. **/ - payoutStakers: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; + payoutStakers: AugmentedSubmittable< + ( + validatorStash: AccountId32 | string | Uint8Array, + era: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32, u32] + >; /** * See [`Pallet::set_min_restaking_bond`]. **/ - setMinRestakingBond: AugmentedSubmittable<(minRestakingBond: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; + setMinRestakingBond: AugmentedSubmittable< + ( + minRestakingBond: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u128] + >; /** * See [`Pallet::unbond_funds`]. **/ - unbondFunds: AugmentedSubmittable<(amount: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + unbondFunds: AugmentedSubmittable< + ( + amount: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::update_profile`]. **/ - updateProfile: AugmentedSubmittable<(updatedProfile: PalletRolesProfile | { Independent: any } | { Shared: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletRolesProfile]>; + updateProfile: AugmentedSubmittable< + ( + updatedProfile: + | PalletRolesProfile + | { Independent: any } + | { Shared: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletRolesProfile] + >; /** * See [`Pallet::withdraw_unbonded`]. **/ - withdrawUnbonded: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + withdrawUnbonded: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * Generic tx **/ @@ -1086,27 +3578,316 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::cancel`]. **/ - cancel: AugmentedSubmittable<(when: u64 | AnyNumber | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u32]>; + cancel: AugmentedSubmittable< + ( + when: u64 | AnyNumber | Uint8Array, + index: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u64, u32] + >; /** * See [`Pallet::cancel_named`]. **/ - cancelNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed]>; + cancelNamed: AugmentedSubmittable< + (id: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, + [U8aFixed] + >; /** * See [`Pallet::schedule`]. **/ - schedule: AugmentedSubmittable<(when: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u64, Option>, u8, Call]>; + schedule: AugmentedSubmittable< + ( + when: u64 | AnyNumber | Uint8Array, + maybePeriodic: + | Option> + | null + | Uint8Array + | ITuple<[u64, u32]> + | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], + priority: u8 | AnyNumber | Uint8Array, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [u64, Option>, u8, Call] + >; /** * See [`Pallet::schedule_after`]. **/ - scheduleAfter: AugmentedSubmittable<(after: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u64, Option>, u8, Call]>; + scheduleAfter: AugmentedSubmittable< + ( + after: u64 | AnyNumber | Uint8Array, + maybePeriodic: + | Option> + | null + | Uint8Array + | ITuple<[u64, u32]> + | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], + priority: u8 | AnyNumber | Uint8Array, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [u64, Option>, u8, Call] + >; /** * See [`Pallet::schedule_named`]. **/ - scheduleNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, when: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u64, Option>, u8, Call]>; + scheduleNamed: AugmentedSubmittable< + ( + id: U8aFixed | string | Uint8Array, + when: u64 | AnyNumber | Uint8Array, + maybePeriodic: + | Option> + | null + | Uint8Array + | ITuple<[u64, u32]> + | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], + priority: u8 | AnyNumber | Uint8Array, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [U8aFixed, u64, Option>, u8, Call] + >; /** * See [`Pallet::schedule_named_after`]. **/ - scheduleNamedAfter: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, after: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u64, Option>, u8, Call]>; + scheduleNamedAfter: AugmentedSubmittable< + ( + id: U8aFixed | string | Uint8Array, + after: u64 | AnyNumber | Uint8Array, + maybePeriodic: + | Option> + | null + | Uint8Array + | ITuple<[u64, u32]> + | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], + priority: u8 | AnyNumber | Uint8Array, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [U8aFixed, u64, Option>, u8, Call] + >; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; + services: { + /** + * See `Pallet::approve`. + **/ + approve: AugmentedSubmittable< + ( + requestId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; + /** + * See `Pallet::call`. + **/ + call: AugmentedSubmittable< + ( + serviceId: Compact | AnyNumber | Uint8Array, + job: Compact | AnyNumber | Uint8Array, + args: + | Vec + | ( + | TanglePrimitivesJobsV2Field + | { None: any } + | { Bool: any } + | { Uint8: any } + | { Int8: any } + | { Uint16: any } + | { Int16: any } + | { Uint32: any } + | { Int32: any } + | { Uint64: any } + | { Int64: any } + | { String: any } + | { Bytes: any } + | { Array: any } + | { List: any } + | { AccountId: any } + | string + | Uint8Array + )[] + ) => SubmittableExtrinsic, + [Compact, Compact, Vec] + >; + /** + * See `Pallet::create_blueprint`. + **/ + createBlueprint: AugmentedSubmittable< + ( + blueprint: + | TanglePrimitivesJobsV2ServiceBlueprint + | { + metadata?: any; + jobs?: any; + registrationHook?: any; + registrationParams?: any; + requestHook?: any; + requestParams?: any; + gadget?: any; + } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [TanglePrimitivesJobsV2ServiceBlueprint] + >; + /** + * See `Pallet::register`. + **/ + register: AugmentedSubmittable< + ( + blueprintId: Compact | AnyNumber | Uint8Array, + preferences: + | TanglePrimitivesJobsV2OperatorPreferences + | { key?: any; approval?: any } + | string + | Uint8Array, + registrationArgs: + | Vec + | ( + | TanglePrimitivesJobsV2Field + | { None: any } + | { Bool: any } + | { Uint8: any } + | { Int8: any } + | { Uint16: any } + | { Int16: any } + | { Uint32: any } + | { Int32: any } + | { Uint64: any } + | { Int64: any } + | { String: any } + | { Bytes: any } + | { Array: any } + | { List: any } + | { AccountId: any } + | string + | Uint8Array + )[] + ) => SubmittableExtrinsic, + [ + Compact, + TanglePrimitivesJobsV2OperatorPreferences, + Vec, + ] + >; + /** + * See `Pallet::reject`. + **/ + reject: AugmentedSubmittable< + ( + requestId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; + /** + * See `Pallet::request`. + **/ + request: AugmentedSubmittable< + ( + blueprintId: Compact | AnyNumber | Uint8Array, + permittedCallers: + | Vec + | (AccountId32 | string | Uint8Array)[], + serviceProviders: + | Vec + | (AccountId32 | string | Uint8Array)[], + ttl: Compact | AnyNumber | Uint8Array, + requestArgs: + | Vec + | ( + | TanglePrimitivesJobsV2Field + | { None: any } + | { Bool: any } + | { Uint8: any } + | { Int8: any } + | { Uint16: any } + | { Int16: any } + | { Uint32: any } + | { Int32: any } + | { Uint64: any } + | { Int64: any } + | { String: any } + | { Bytes: any } + | { Array: any } + | { List: any } + | { AccountId: any } + | string + | Uint8Array + )[] + ) => SubmittableExtrinsic, + [ + Compact, + Vec, + Vec, + Compact, + Vec, + ] + >; + /** + * See `Pallet::submit_result`. + **/ + submitResult: AugmentedSubmittable< + ( + serviceId: Compact | AnyNumber | Uint8Array, + callId: Compact | AnyNumber | Uint8Array, + result: + | Vec + | ( + | TanglePrimitivesJobsV2Field + | { None: any } + | { Bool: any } + | { Uint8: any } + | { Int8: any } + | { Uint16: any } + | { Int16: any } + | { Uint32: any } + | { Int32: any } + | { Uint64: any } + | { Int64: any } + | { String: any } + | { Bytes: any } + | { Array: any } + | { List: any } + | { AccountId: any } + | string + | Uint8Array + )[] + ) => SubmittableExtrinsic, + [Compact, Compact, Vec] + >; + /** + * See `Pallet::terminate`. + **/ + terminate: AugmentedSubmittable< + ( + serviceId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; + /** + * See `Pallet::unregister`. + **/ + unregister: AugmentedSubmittable< + ( + blueprintId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; + /** + * See `Pallet::update_approval_preference`. + **/ + updateApprovalPreference: AugmentedSubmittable< + ( + blueprintId: Compact | AnyNumber | Uint8Array, + approvalPreference: + | TanglePrimitivesJobsV2ApprovalPrefrence + | "None" + | "Required" + | number + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, TanglePrimitivesJobsV2ApprovalPrefrence] + >; /** * Generic tx **/ @@ -1120,7 +3901,17 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set_keys`]. **/ - setKeys: AugmentedSubmittable<(keys: TangleTestnetRuntimeOpaqueSessionKeys | { babe?: any; grandpa?: any; imOnline?: any; role?: any } | string | Uint8Array, proof: Bytes | string | Uint8Array) => SubmittableExtrinsic, [TangleTestnetRuntimeOpaqueSessionKeys, Bytes]>; + setKeys: AugmentedSubmittable< + ( + keys: + | TangleTestnetRuntimeOpaqueSessionKeys + | { babe?: any; grandpa?: any; imOnline?: any; role?: any } + | string + | Uint8Array, + proof: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [TangleTestnetRuntimeOpaqueSessionKeys, Bytes] + >; /** * Generic tx **/ @@ -1130,15 +3921,40 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::bond`]. **/ - bond: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, payee: PalletStakingRewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, PalletStakingRewardDestination]>; + bond: AugmentedSubmittable< + ( + value: Compact | AnyNumber | Uint8Array, + payee: + | PalletStakingRewardDestination + | { Staked: any } + | { Stash: any } + | { Controller: any } + | { Account: any } + | { None: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, PalletStakingRewardDestination] + >; /** * See [`Pallet::bond_extra`]. **/ - bondExtra: AugmentedSubmittable<(maxAdditional: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + bondExtra: AugmentedSubmittable< + ( + maxAdditional: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::cancel_deferred_slash`]. **/ - cancelDeferredSlash: AugmentedSubmittable<(era: u32 | AnyNumber | Uint8Array, slashIndices: Vec | (u32 | AnyNumber | Uint8Array)[]) => SubmittableExtrinsic, [u32, Vec]>; + cancelDeferredSlash: AugmentedSubmittable< + ( + era: u32 | AnyNumber | Uint8Array, + slashIndices: Vec | (u32 | AnyNumber | Uint8Array)[] + ) => SubmittableExtrinsic, + [u32, Vec] + >; /** * See [`Pallet::chill`]. **/ @@ -1146,103 +3962,309 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::chill_other`]. **/ - chillOther: AugmentedSubmittable<(stash: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; + chillOther: AugmentedSubmittable< + ( + stash: AccountId32 | string | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32] + >; /** * See [`Pallet::deprecate_controller_batch`]. **/ - deprecateControllerBatch: AugmentedSubmittable<(controllers: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + deprecateControllerBatch: AugmentedSubmittable< + ( + controllers: Vec | (AccountId32 | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::force_apply_min_commission`]. **/ - forceApplyMinCommission: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; + forceApplyMinCommission: AugmentedSubmittable< + ( + validatorStash: AccountId32 | string | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32] + >; /** * See [`Pallet::force_new_era`]. **/ - forceNewEra: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + forceNewEra: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::force_new_era_always`]. **/ - forceNewEraAlways: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + forceNewEraAlways: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::force_no_eras`]. **/ - forceNoEras: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + forceNoEras: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::force_unstake`]. **/ - forceUnstake: AugmentedSubmittable<(stash: AccountId32 | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; + forceUnstake: AugmentedSubmittable< + ( + stash: AccountId32 | string | Uint8Array, + numSlashingSpans: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32, u32] + >; /** * See [`Pallet::increase_validator_count`]. **/ - increaseValidatorCount: AugmentedSubmittable<(additional: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + increaseValidatorCount: AugmentedSubmittable< + ( + additional: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::kick`]. **/ - kick: AugmentedSubmittable<(who: Vec | (MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + kick: AugmentedSubmittable< + ( + who: + | Vec + | ( + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + )[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::nominate`]. **/ - nominate: AugmentedSubmittable<(targets: Vec | (MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + nominate: AugmentedSubmittable< + ( + targets: + | Vec + | ( + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + )[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::payout_stakers`]. **/ - payoutStakers: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; + payoutStakers: AugmentedSubmittable< + ( + validatorStash: AccountId32 | string | Uint8Array, + era: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32, u32] + >; /** * See [`Pallet::payout_stakers_by_page`]. **/ - payoutStakersByPage: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array, page: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32, u32]>; + payoutStakersByPage: AugmentedSubmittable< + ( + validatorStash: AccountId32 | string | Uint8Array, + era: u32 | AnyNumber | Uint8Array, + page: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32, u32, u32] + >; /** * See [`Pallet::reap_stash`]. **/ - reapStash: AugmentedSubmittable<(stash: AccountId32 | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; + reapStash: AugmentedSubmittable< + ( + stash: AccountId32 | string | Uint8Array, + numSlashingSpans: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32, u32] + >; /** * See [`Pallet::rebond`]. **/ - rebond: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + rebond: AugmentedSubmittable< + ( + value: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::scale_validator_count`]. **/ - scaleValidatorCount: AugmentedSubmittable<(factor: Percent | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Percent]>; + scaleValidatorCount: AugmentedSubmittable< + ( + factor: Percent | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Percent] + >; /** * See [`Pallet::set_controller`]. **/ - setController: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + setController: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::set_invulnerables`]. **/ - setInvulnerables: AugmentedSubmittable<(invulnerables: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + setInvulnerables: AugmentedSubmittable< + ( + invulnerables: + | Vec + | (AccountId32 | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::set_min_commission`]. **/ - setMinCommission: AugmentedSubmittable<(updated: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Perbill]>; + setMinCommission: AugmentedSubmittable< + ( + updated: Perbill | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Perbill] + >; /** * See [`Pallet::set_payee`]. **/ - setPayee: AugmentedSubmittable<(payee: PalletStakingRewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletStakingRewardDestination]>; + setPayee: AugmentedSubmittable< + ( + payee: + | PalletStakingRewardDestination + | { Staked: any } + | { Stash: any } + | { Controller: any } + | { Account: any } + | { None: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletStakingRewardDestination] + >; /** * See [`Pallet::set_staking_configs`]. **/ - setStakingConfigs: AugmentedSubmittable<(minNominatorBond: PalletStakingPalletConfigOpU128 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, minValidatorBond: PalletStakingPalletConfigOpU128 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, maxNominatorCount: PalletStakingPalletConfigOpU32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, maxValidatorCount: PalletStakingPalletConfigOpU32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, chillThreshold: PalletStakingPalletConfigOpPercent | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, minCommission: PalletStakingPalletConfigOpPerbill | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingPalletConfigOpU32, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpPerbill]>; + setStakingConfigs: AugmentedSubmittable< + ( + minNominatorBond: + | PalletStakingPalletConfigOpU128 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + minValidatorBond: + | PalletStakingPalletConfigOpU128 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + maxNominatorCount: + | PalletStakingPalletConfigOpU32 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + maxValidatorCount: + | PalletStakingPalletConfigOpU32 + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + chillThreshold: + | PalletStakingPalletConfigOpPercent + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array, + minCommission: + | PalletStakingPalletConfigOpPerbill + | { Noop: any } + | { Set: any } + | { Remove: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [ + PalletStakingPalletConfigOpU128, + PalletStakingPalletConfigOpU128, + PalletStakingPalletConfigOpU32, + PalletStakingPalletConfigOpU32, + PalletStakingPalletConfigOpPercent, + PalletStakingPalletConfigOpPerbill, + ] + >; /** * See [`Pallet::set_validator_count`]. **/ - setValidatorCount: AugmentedSubmittable<(updated: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + setValidatorCount: AugmentedSubmittable< + ( + updated: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::unbond`]. **/ - unbond: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + unbond: AugmentedSubmittable< + ( + value: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::update_payee`]. **/ - updatePayee: AugmentedSubmittable<(controller: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; + updatePayee: AugmentedSubmittable< + ( + controller: AccountId32 | string | Uint8Array + ) => SubmittableExtrinsic, + [AccountId32] + >; /** * See [`Pallet::validate`]. **/ - validate: AugmentedSubmittable<(prefs: PalletStakingValidatorPrefs | { commission?: any; blocked?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletStakingValidatorPrefs]>; + validate: AugmentedSubmittable< + ( + prefs: + | PalletStakingValidatorPrefs + | { commission?: any; blocked?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletStakingValidatorPrefs] + >; /** * See [`Pallet::withdraw_unbonded`]. **/ - withdrawUnbonded: AugmentedSubmittable<(numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + withdrawUnbonded: AugmentedSubmittable< + ( + numSlashingSpans: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u32] + >; /** * Generic tx **/ @@ -1256,19 +4278,266 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set_key`]. **/ - setKey: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + setKey: AugmentedSubmittable< + ( + updated: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * See [`Pallet::sudo`]. **/ - sudo: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Call]>; + sudo: AugmentedSubmittable< + ( + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [Call] + >; /** * See [`Pallet::sudo_as`]. **/ - sudoAs: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Call]>; + sudoAs: AugmentedSubmittable< + ( + who: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, Call] + >; /** * See [`Pallet::sudo_unchecked_weight`]. **/ - sudoUncheckedWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [Call, SpWeightsWeightV2Weight]>; + sudoUncheckedWeight: AugmentedSubmittable< + ( + call: Call | IMethod | string | Uint8Array, + weight: + | SpWeightsWeightV2Weight + | { refTime?: any; proofSize?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Call, SpWeightsWeightV2Weight] + >; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; + sygmaAccessSegregator: { + /** + * See [`Pallet::grant_access`]. + **/ + grantAccess: AugmentedSubmittable< + ( + palletIndex: u8 | AnyNumber | Uint8Array, + extrinsicName: Bytes | string | Uint8Array, + who: AccountId32 | string | Uint8Array + ) => SubmittableExtrinsic, + [u8, Bytes, AccountId32] + >; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; + sygmaBasicFeeHandler: { + /** + * See [`Pallet::set_fee`]. + **/ + setFee: AugmentedSubmittable< + ( + domain: u8 | AnyNumber | Uint8Array, + asset: + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array, + amount: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8, StagingXcmV4AssetAssetId, u128] + >; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; + sygmaBridge: { + /** + * See [`Pallet::deposit`]. + **/ + deposit: AugmentedSubmittable< + ( + asset: + | StagingXcmV4Asset + | { id?: any; fun?: any } + | string + | Uint8Array, + dest: + | StagingXcmV4Location + | { parents?: any; interior?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [StagingXcmV4Asset, StagingXcmV4Location] + >; + /** + * See [`Pallet::execute_proposal`]. + **/ + executeProposal: AugmentedSubmittable< + ( + proposals: + | Vec + | ( + | SygmaBridgeProposal + | { + originDomainId?: any; + depositNonce?: any; + resourceId?: any; + data?: any; + } + | string + | Uint8Array + )[], + signature: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Vec, Bytes] + >; + /** + * See [`Pallet::pause_all_bridges`]. + **/ + pauseAllBridges: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; + /** + * See [`Pallet::pause_bridge`]. + **/ + pauseBridge: AugmentedSubmittable< + ( + destDomainId: u8 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8] + >; + /** + * See [`Pallet::register_domain`]. + **/ + registerDomain: AugmentedSubmittable< + ( + destDomainId: u8 | AnyNumber | Uint8Array, + destChainId: U256 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8, U256] + >; + /** + * See [`Pallet::retry`]. + **/ + retry: AugmentedSubmittable< + ( + depositOnBlockHeight: u128 | AnyNumber | Uint8Array, + destDomainId: u8 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u128, u8] + >; + /** + * See [`Pallet::set_mpc_address`]. + **/ + setMpcAddress: AugmentedSubmittable< + ( + addr: SygmaTraitsMpcAddress | string | Uint8Array + ) => SubmittableExtrinsic, + [SygmaTraitsMpcAddress] + >; + /** + * See [`Pallet::unpause_all_bridges`]. + **/ + unpauseAllBridges: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; + /** + * See [`Pallet::unpause_bridge`]. + **/ + unpauseBridge: AugmentedSubmittable< + ( + destDomainId: u8 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8] + >; + /** + * See [`Pallet::unregister_domain`]. + **/ + unregisterDomain: AugmentedSubmittable< + ( + destDomainId: u8 | AnyNumber | Uint8Array, + destChainId: U256 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8, U256] + >; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; + sygmaFeeHandlerRouter: { + /** + * See [`Pallet::set_fee_handler`]. + **/ + setFeeHandler: AugmentedSubmittable< + ( + domain: u8 | AnyNumber | Uint8Array, + asset: + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array, + handlerType: + | SygmaFeeHandlerRouterFeeHandlerType + | "BasicFeeHandler" + | "PercentageFeeHandler" + | "DynamicFeeHandler" + | number + | Uint8Array + ) => SubmittableExtrinsic, + [u8, StagingXcmV4AssetAssetId, SygmaFeeHandlerRouterFeeHandlerType] + >; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; + sygmaPercentageFeeHandler: { + /** + * See [`Pallet::set_fee_rate`]. + **/ + setFeeRate: AugmentedSubmittable< + ( + domain: u8 | AnyNumber | Uint8Array, + asset: + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array, + feeRateBasisPoint: u32 | AnyNumber | Uint8Array, + feeLowerBound: u128 | AnyNumber | Uint8Array, + feeUpperBound: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8, StagingXcmV4AssetAssetId, u32, u128, u128] + >; /** * Generic tx **/ @@ -1278,7 +4547,14 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::grant_access`]. **/ - grantAccess: AugmentedSubmittable<(palletIndex: u8 | AnyNumber | Uint8Array, extrinsicName: Bytes | string | Uint8Array, who: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [u8, Bytes, AccountId32]>; + grantAccess: AugmentedSubmittable< + ( + palletIndex: u8 | AnyNumber | Uint8Array, + extrinsicName: Bytes | string | Uint8Array, + who: AccountId32 | string | Uint8Array + ) => SubmittableExtrinsic, + [u8, Bytes, AccountId32] + >; /** * Generic tx **/ @@ -1288,7 +4564,18 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set_fee`]. **/ - setFee: AugmentedSubmittable<(domain: u8 | AnyNumber | Uint8Array, asset: StagingXcmV4AssetAssetId | { parents?: any; interior?: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u8, StagingXcmV4AssetAssetId, u128]>; + setFee: AugmentedSubmittable< + ( + domain: u8 | AnyNumber | Uint8Array, + asset: + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array, + amount: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8, StagingXcmV4AssetAssetId, u128] + >; /** * Generic tx **/ @@ -1298,43 +4585,114 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::deposit`]. **/ - deposit: AugmentedSubmittable<(asset: StagingXcmV4Asset | { id?: any; fun?: any } | string | Uint8Array, dest: StagingXcmV4Location | { parents?: any; interior?: any } | string | Uint8Array) => SubmittableExtrinsic, [StagingXcmV4Asset, StagingXcmV4Location]>; + deposit: AugmentedSubmittable< + ( + asset: + | StagingXcmV4Asset + | { id?: any; fun?: any } + | string + | Uint8Array, + dest: + | StagingXcmV4Location + | { parents?: any; interior?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [StagingXcmV4Asset, StagingXcmV4Location] + >; /** * See [`Pallet::execute_proposal`]. **/ - executeProposal: AugmentedSubmittable<(proposals: Vec | (SygmaBridgeProposal | { originDomainId?: any; depositNonce?: any; resourceId?: any; data?: any } | string | Uint8Array)[], signature: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Vec, Bytes]>; + executeProposal: AugmentedSubmittable< + ( + proposals: + | Vec + | ( + | SygmaBridgeProposal + | { + originDomainId?: any; + depositNonce?: any; + resourceId?: any; + data?: any; + } + | string + | Uint8Array + )[], + signature: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [Vec, Bytes] + >; /** * See [`Pallet::pause_all_bridges`]. **/ - pauseAllBridges: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + pauseAllBridges: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::pause_bridge`]. **/ - pauseBridge: AugmentedSubmittable<(destDomainId: u8 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u8]>; + pauseBridge: AugmentedSubmittable< + ( + destDomainId: u8 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8] + >; /** * See [`Pallet::register_domain`]. **/ - registerDomain: AugmentedSubmittable<(destDomainId: u8 | AnyNumber | Uint8Array, destChainId: U256 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u8, U256]>; + registerDomain: AugmentedSubmittable< + ( + destDomainId: u8 | AnyNumber | Uint8Array, + destChainId: U256 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8, U256] + >; /** * See [`Pallet::retry`]. **/ - retry: AugmentedSubmittable<(depositOnBlockHeight: u128 | AnyNumber | Uint8Array, destDomainId: u8 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128, u8]>; + retry: AugmentedSubmittable< + ( + depositOnBlockHeight: u128 | AnyNumber | Uint8Array, + destDomainId: u8 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u128, u8] + >; /** * See [`Pallet::set_mpc_address`]. **/ - setMpcAddress: AugmentedSubmittable<(addr: SygmaTraitsMpcAddress | string | Uint8Array) => SubmittableExtrinsic, [SygmaTraitsMpcAddress]>; + setMpcAddress: AugmentedSubmittable< + ( + addr: SygmaTraitsMpcAddress | string | Uint8Array + ) => SubmittableExtrinsic, + [SygmaTraitsMpcAddress] + >; /** * See [`Pallet::unpause_all_bridges`]. **/ - unpauseAllBridges: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + unpauseAllBridges: AugmentedSubmittable< + () => SubmittableExtrinsic, + [] + >; /** * See [`Pallet::unpause_bridge`]. **/ - unpauseBridge: AugmentedSubmittable<(destDomainId: u8 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u8]>; + unpauseBridge: AugmentedSubmittable< + ( + destDomainId: u8 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8] + >; /** * See [`Pallet::unregister_domain`]. **/ - unregisterDomain: AugmentedSubmittable<(destDomainId: u8 | AnyNumber | Uint8Array, destChainId: U256 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u8, U256]>; + unregisterDomain: AugmentedSubmittable< + ( + destDomainId: u8 | AnyNumber | Uint8Array, + destChainId: U256 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8, U256] + >; /** * Generic tx **/ @@ -1344,7 +4702,24 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set_fee_handler`]. **/ - setFeeHandler: AugmentedSubmittable<(domain: u8 | AnyNumber | Uint8Array, asset: StagingXcmV4AssetAssetId | { parents?: any; interior?: any } | string | Uint8Array, handlerType: SygmaFeeHandlerRouterFeeHandlerType | 'BasicFeeHandler' | 'PercentageFeeHandler' | 'DynamicFeeHandler' | number | Uint8Array) => SubmittableExtrinsic, [u8, StagingXcmV4AssetAssetId, SygmaFeeHandlerRouterFeeHandlerType]>; + setFeeHandler: AugmentedSubmittable< + ( + domain: u8 | AnyNumber | Uint8Array, + asset: + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array, + handlerType: + | SygmaFeeHandlerRouterFeeHandlerType + | "BasicFeeHandler" + | "PercentageFeeHandler" + | "DynamicFeeHandler" + | number + | Uint8Array + ) => SubmittableExtrinsic, + [u8, StagingXcmV4AssetAssetId, SygmaFeeHandlerRouterFeeHandlerType] + >; /** * Generic tx **/ @@ -1354,7 +4729,20 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set_fee_rate`]. **/ - setFeeRate: AugmentedSubmittable<(domain: u8 | AnyNumber | Uint8Array, asset: StagingXcmV4AssetAssetId | { parents?: any; interior?: any } | string | Uint8Array, feeRateBasisPoint: u32 | AnyNumber | Uint8Array, feeLowerBound: u128 | AnyNumber | Uint8Array, feeUpperBound: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u8, StagingXcmV4AssetAssetId, u32, u128, u128]>; + setFeeRate: AugmentedSubmittable< + ( + domain: u8 | AnyNumber | Uint8Array, + asset: + | StagingXcmV4AssetAssetId + | { parents?: any; interior?: any } + | string + | Uint8Array, + feeRateBasisPoint: u32 | AnyNumber | Uint8Array, + feeLowerBound: u128 | AnyNumber | Uint8Array, + feeUpperBound: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u8, StagingXcmV4AssetAssetId, u32, u128, u128] + >; /** * Generic tx **/ @@ -1364,47 +4752,89 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::apply_authorized_upgrade`]. **/ - applyAuthorizedUpgrade: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + applyAuthorizedUpgrade: AugmentedSubmittable< + (code: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::authorize_upgrade`]. **/ - authorizeUpgrade: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; + authorizeUpgrade: AugmentedSubmittable< + (codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, + [H256] + >; /** * See [`Pallet::authorize_upgrade_without_checks`]. **/ - authorizeUpgradeWithoutChecks: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; + authorizeUpgradeWithoutChecks: AugmentedSubmittable< + (codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, + [H256] + >; /** * See [`Pallet::kill_prefix`]. **/ - killPrefix: AugmentedSubmittable<(prefix: Bytes | string | Uint8Array, subkeys: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Bytes, u32]>; + killPrefix: AugmentedSubmittable< + ( + prefix: Bytes | string | Uint8Array, + subkeys: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Bytes, u32] + >; /** * See [`Pallet::kill_storage`]. **/ - killStorage: AugmentedSubmittable<(keys: Vec | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + killStorage: AugmentedSubmittable< + ( + keys: Vec | (Bytes | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::remark`]. **/ - remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + remark: AugmentedSubmittable< + (remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::remark_with_event`]. **/ - remarkWithEvent: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + remarkWithEvent: AugmentedSubmittable< + (remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::set_code`]. **/ - setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + setCode: AugmentedSubmittable< + (code: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::set_code_without_checks`]. **/ - setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; + setCodeWithoutChecks: AugmentedSubmittable< + (code: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * See [`Pallet::set_heap_pages`]. **/ - setHeapPages: AugmentedSubmittable<(pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; + setHeapPages: AugmentedSubmittable< + (pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u64] + >; /** * See [`Pallet::set_storage`]. **/ - setStorage: AugmentedSubmittable<(items: Vec> | ([Bytes | string | Uint8Array, Bytes | string | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; + setStorage: AugmentedSubmittable< + ( + items: + | Vec> + | [Bytes | string | Uint8Array, Bytes | string | Uint8Array][] + ) => SubmittableExtrinsic, + [Vec>] + >; /** * Generic tx **/ @@ -1414,7 +4844,12 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set`]. **/ - set: AugmentedSubmittable<(now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + set: AugmentedSubmittable< + ( + now: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * Generic tx **/ @@ -1424,39 +4859,99 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::approve_proposal`]. **/ - approveProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + approveProposal: AugmentedSubmittable< + ( + proposalId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::check_status`]. **/ - checkStatus: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + checkStatus: AugmentedSubmittable< + (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::payout`]. **/ - payout: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + payout: AugmentedSubmittable< + (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * See [`Pallet::propose_spend`]. **/ - proposeSpend: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + proposeSpend: AugmentedSubmittable< + ( + value: Compact | AnyNumber | Uint8Array, + beneficiary: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::reject_proposal`]. **/ - rejectProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + rejectProposal: AugmentedSubmittable< + ( + proposalId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::remove_approval`]. **/ - removeApproval: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + removeApproval: AugmentedSubmittable< + ( + proposalId: Compact | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [Compact] + >; /** * See [`Pallet::spend`]. **/ - spend: AugmentedSubmittable<(assetKind: Null | null, amount: Compact | AnyNumber | Uint8Array, beneficiary: AccountId32 | string | Uint8Array, validFrom: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [Null, Compact, AccountId32, Option]>; + spend: AugmentedSubmittable< + ( + assetKind: Null | null, + amount: Compact | AnyNumber | Uint8Array, + beneficiary: AccountId32 | string | Uint8Array, + validFrom: Option | null | Uint8Array | u64 | AnyNumber + ) => SubmittableExtrinsic, + [Null, Compact, AccountId32, Option] + >; /** * See [`Pallet::spend_local`]. **/ - spendLocal: AugmentedSubmittable<(amount: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; + spendLocal: AugmentedSubmittable< + ( + amount: Compact | AnyNumber | Uint8Array, + beneficiary: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Compact, MultiAddress] + >; /** * See [`Pallet::void_spend`]. **/ - voidSpend: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; + voidSpend: AugmentedSubmittable< + (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; /** * Generic tx **/ @@ -1466,11 +4961,25 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::pause`]. **/ - pause: AugmentedSubmittable<(fullName: ITuple<[Bytes, Bytes]> | [Bytes | string | Uint8Array, Bytes | string | Uint8Array]) => SubmittableExtrinsic, [ITuple<[Bytes, Bytes]>]>; + pause: AugmentedSubmittable< + ( + fullName: + | ITuple<[Bytes, Bytes]> + | [Bytes | string | Uint8Array, Bytes | string | Uint8Array] + ) => SubmittableExtrinsic, + [ITuple<[Bytes, Bytes]>] + >; /** * See [`Pallet::unpause`]. **/ - unpause: AugmentedSubmittable<(ident: ITuple<[Bytes, Bytes]> | [Bytes | string | Uint8Array, Bytes | string | Uint8Array]) => SubmittableExtrinsic, [ITuple<[Bytes, Bytes]>]>; + unpause: AugmentedSubmittable< + ( + ident: + | ITuple<[Bytes, Bytes]> + | [Bytes | string | Uint8Array, Bytes | string | Uint8Array] + ) => SubmittableExtrinsic, + [ITuple<[Bytes, Bytes]>] + >; /** * Generic tx **/ @@ -1480,27 +4989,71 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::as_derivative`]. **/ - asDerivative: AugmentedSubmittable<(index: u16 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u16, Call]>; + asDerivative: AugmentedSubmittable< + ( + index: u16 | AnyNumber | Uint8Array, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [u16, Call] + >; /** * See [`Pallet::batch`]. **/ - batch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + batch: AugmentedSubmittable< + ( + calls: Vec | (Call | IMethod | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::batch_all`]. **/ - batchAll: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + batchAll: AugmentedSubmittable< + ( + calls: Vec | (Call | IMethod | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::dispatch_as`]. **/ - dispatchAs: AugmentedSubmittable<(asOrigin: TangleTestnetRuntimeOriginCaller | { system: any } | { Void: any } | { Council: any } | { Ethereum: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [TangleTestnetRuntimeOriginCaller, Call]>; + dispatchAs: AugmentedSubmittable< + ( + asOrigin: + | TangleTestnetRuntimeOriginCaller + | { system: any } + | { Void: any } + | { Council: any } + | { Ethereum: any } + | string + | Uint8Array, + call: Call | IMethod | string | Uint8Array + ) => SubmittableExtrinsic, + [TangleTestnetRuntimeOriginCaller, Call] + >; /** * See [`Pallet::force_batch`]. **/ - forceBatch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + forceBatch: AugmentedSubmittable< + ( + calls: Vec | (Call | IMethod | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * See [`Pallet::with_weight`]. **/ - withWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [Call, SpWeightsWeightV2Weight]>; + withWeight: AugmentedSubmittable< + ( + call: Call | IMethod | string | Uint8Array, + weight: + | SpWeightsWeightV2Weight + | { refTime?: any; proofSize?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [Call, SpWeightsWeightV2Weight] + >; /** * Generic tx **/ @@ -1510,15 +5063,62 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::force_remove_vesting_schedule`]. **/ - forceRemoveVestingSchedule: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, scheduleIndex: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32]>; + forceRemoveVestingSchedule: AugmentedSubmittable< + ( + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + scheduleIndex: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, u32] + >; /** * See [`Pallet::force_vested_transfer`]. **/ - forceVestedTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, PalletVestingVestingInfo]>; + forceVestedTransfer: AugmentedSubmittable< + ( + source: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + schedule: + | PalletVestingVestingInfo + | { locked?: any; perBlock?: any; startingBlock?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, MultiAddress, PalletVestingVestingInfo] + >; /** * See [`Pallet::merge_schedules`]. **/ - mergeSchedules: AugmentedSubmittable<(schedule1Index: u32 | AnyNumber | Uint8Array, schedule2Index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; + mergeSchedules: AugmentedSubmittable< + ( + schedule1Index: u32 | AnyNumber | Uint8Array, + schedule2Index: u32 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [u32, u32] + >; /** * See [`Pallet::vest`]. **/ @@ -1526,11 +5126,42 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::vested_transfer`]. **/ - vestedTransfer: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, PalletVestingVestingInfo]>; + vestedTransfer: AugmentedSubmittable< + ( + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array, + schedule: + | PalletVestingVestingInfo + | { locked?: any; perBlock?: any; startingBlock?: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress, PalletVestingVestingInfo] + >; /** * See [`Pallet::vest_other`]. **/ - vestOther: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + vestOther: AugmentedSubmittable< + ( + target: + | MultiAddress + | { Id: any } + | { Index: any } + | { Raw: any } + | { Address32: any } + | { Address20: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [MultiAddress] + >; /** * Generic tx **/ @@ -1540,7 +5171,21 @@ declare module '@polkadot/api-base/types/submittable' { /** * See [`Pallet::set_fee`]. **/ - setFee: AugmentedSubmittable<(feeInfo: PalletZksaasFeeInfo | { baseFee?: any; circuitFee?: any; proveFee?: any; storageFeePerByte?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletZksaasFeeInfo]>; + setFee: AugmentedSubmittable< + ( + feeInfo: + | PalletZksaasFeeInfo + | { + baseFee?: any; + circuitFee?: any; + proveFee?: any; + storageFeePerByte?: any; + } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [PalletZksaasFeeInfo] + >; /** * Generic tx **/ diff --git a/types/src/interfaces/lookup.ts b/types/src/interfaces/lookup.ts index e5f72c58b..5230b5b44 100644 --- a/types/src/interfaces/lookup.ts +++ b/types/src/interfaces/lookup.ts @@ -8,65 +8,65 @@ export default { * Lookup3: frame_system::AccountInfo> **/ FrameSystemAccountInfo: { - nonce: 'u32', - consumers: 'u32', - providers: 'u32', - sufficients: 'u32', - data: 'PalletBalancesAccountData' + nonce: "u32", + consumers: "u32", + providers: "u32", + sufficients: "u32", + data: "PalletBalancesAccountData", }, /** * Lookup5: pallet_balances::types::AccountData **/ PalletBalancesAccountData: { - free: 'u128', - reserved: 'u128', - frozen: 'u128', - flags: 'u128' + free: "u128", + reserved: "u128", + frozen: "u128", + flags: "u128", }, /** * Lookup8: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeight: { - normal: 'SpWeightsWeightV2Weight', - operational: 'SpWeightsWeightV2Weight', - mandatory: 'SpWeightsWeightV2Weight' + normal: "SpWeightsWeightV2Weight", + operational: "SpWeightsWeightV2Weight", + mandatory: "SpWeightsWeightV2Weight", }, /** * Lookup9: sp_weights::weight_v2::Weight **/ SpWeightsWeightV2Weight: { - refTime: 'Compact', - proofSize: 'Compact' + refTime: "Compact", + proofSize: "Compact", }, /** * Lookup14: sp_runtime::generic::digest::Digest **/ SpRuntimeDigest: { - logs: 'Vec' + logs: "Vec", }, /** * Lookup16: sp_runtime::generic::digest::DigestItem **/ SpRuntimeDigestDigestItem: { _enum: { - Other: 'Bytes', - __Unused1: 'Null', - __Unused2: 'Null', - __Unused3: 'Null', - Consensus: '([u8;4],Bytes)', - Seal: '([u8;4],Bytes)', - PreRuntime: '([u8;4],Bytes)', - __Unused7: 'Null', - RuntimeEnvironmentUpdated: 'Null' - } + Other: "Bytes", + __Unused1: "Null", + __Unused2: "Null", + __Unused3: "Null", + Consensus: "([u8;4],Bytes)", + Seal: "([u8;4],Bytes)", + PreRuntime: "([u8;4],Bytes)", + __Unused7: "Null", + RuntimeEnvironmentUpdated: "Null", + }, }, /** * Lookup19: frame_system::EventRecord **/ FrameSystemEventRecord: { - phase: 'FrameSystemPhase', - event: 'Event', - topics: 'Vec' + phase: "FrameSystemPhase", + event: "Event", + topics: "Vec", }, /** * Lookup21: frame_system::pallet::Event @@ -74,97 +74,108 @@ export default { FrameSystemEvent: { _enum: { ExtrinsicSuccess: { - dispatchInfo: 'FrameSupportDispatchDispatchInfo', + dispatchInfo: "FrameSupportDispatchDispatchInfo", }, ExtrinsicFailed: { - dispatchError: 'SpRuntimeDispatchError', - dispatchInfo: 'FrameSupportDispatchDispatchInfo', + dispatchError: "SpRuntimeDispatchError", + dispatchInfo: "FrameSupportDispatchDispatchInfo", }, - CodeUpdated: 'Null', + CodeUpdated: "Null", NewAccount: { - account: 'AccountId32', + account: "AccountId32", }, KilledAccount: { - account: 'AccountId32', + account: "AccountId32", }, Remarked: { _alias: { - hash_: 'hash', + hash_: "hash", }, - sender: 'AccountId32', - hash_: 'H256', + sender: "AccountId32", + hash_: "H256", }, UpgradeAuthorized: { - codeHash: 'H256', - checkVersion: 'bool' - } - } + codeHash: "H256", + checkVersion: "bool", + }, + }, }, /** * Lookup22: frame_support::dispatch::DispatchInfo **/ FrameSupportDispatchDispatchInfo: { - weight: 'SpWeightsWeightV2Weight', - class: 'FrameSupportDispatchDispatchClass', - paysFee: 'FrameSupportDispatchPays' + weight: "SpWeightsWeightV2Weight", + class: "FrameSupportDispatchDispatchClass", + paysFee: "FrameSupportDispatchPays", }, /** * Lookup23: frame_support::dispatch::DispatchClass **/ FrameSupportDispatchDispatchClass: { - _enum: ['Normal', 'Operational', 'Mandatory'] + _enum: ["Normal", "Operational", "Mandatory"], }, /** * Lookup24: frame_support::dispatch::Pays **/ FrameSupportDispatchPays: { - _enum: ['Yes', 'No'] + _enum: ["Yes", "No"], }, /** * Lookup25: sp_runtime::DispatchError **/ SpRuntimeDispatchError: { _enum: { - Other: 'Null', - CannotLookup: 'Null', - BadOrigin: 'Null', - Module: 'SpRuntimeModuleError', - ConsumerRemaining: 'Null', - NoProviders: 'Null', - TooManyConsumers: 'Null', - Token: 'SpRuntimeTokenError', - Arithmetic: 'SpArithmeticArithmeticError', - Transactional: 'SpRuntimeTransactionalError', - Exhausted: 'Null', - Corruption: 'Null', - Unavailable: 'Null', - RootNotAllowed: 'Null' - } + Other: "Null", + CannotLookup: "Null", + BadOrigin: "Null", + Module: "SpRuntimeModuleError", + ConsumerRemaining: "Null", + NoProviders: "Null", + TooManyConsumers: "Null", + Token: "SpRuntimeTokenError", + Arithmetic: "SpArithmeticArithmeticError", + Transactional: "SpRuntimeTransactionalError", + Exhausted: "Null", + Corruption: "Null", + Unavailable: "Null", + RootNotAllowed: "Null", + }, }, /** * Lookup26: sp_runtime::ModuleError **/ SpRuntimeModuleError: { - index: 'u8', - error: '[u8;4]' + index: "u8", + error: "[u8;4]", }, /** * Lookup27: sp_runtime::TokenError **/ SpRuntimeTokenError: { - _enum: ['FundsUnavailable', 'OnlyProvider', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported', 'CannotCreateHold', 'NotExpendable', 'Blocked'] + _enum: [ + "FundsUnavailable", + "OnlyProvider", + "BelowMinimum", + "CannotCreate", + "UnknownAsset", + "Frozen", + "Unsupported", + "CannotCreateHold", + "NotExpendable", + "Blocked", + ], }, /** * Lookup28: sp_arithmetic::ArithmeticError **/ SpArithmeticArithmeticError: { - _enum: ['Underflow', 'Overflow', 'DivisionByZero'] + _enum: ["Underflow", "Overflow", "DivisionByZero"], }, /** * Lookup29: sp_runtime::TransactionalError **/ SpRuntimeTransactionalError: { - _enum: ['LimitReached', 'NoLayer'] + _enum: ["LimitReached", "NoLayer"], }, /** * Lookup31: pallet_sudo::pallet::Event @@ -172,20 +183,20 @@ export default { PalletSudoEvent: { _enum: { Sudid: { - sudoResult: 'Result', + sudoResult: "Result", }, KeyChanged: { _alias: { - new_: 'new', + new_: "new", }, - old: 'Option', - new_: 'AccountId32', + old: "Option", + new_: "AccountId32", }, - KeyRemoved: 'Null', + KeyRemoved: "Null", SudoAsDone: { - sudoResult: 'Result' - } - } + sudoResult: "Result", + }, + }, }, /** * Lookup35: pallet_assets::pallet::Event @@ -193,115 +204,115 @@ export default { PalletAssetsEvent: { _enum: { Created: { - assetId: 'u128', - creator: 'AccountId32', - owner: 'AccountId32', + assetId: "u32", + creator: "AccountId32", + owner: "AccountId32", }, Issued: { - assetId: 'u128', - owner: 'AccountId32', - amount: 'u128', + assetId: "u32", + owner: "AccountId32", + amount: "u128", }, Transferred: { - assetId: 'u128', - from: 'AccountId32', - to: 'AccountId32', - amount: 'u128', + assetId: "u32", + from: "AccountId32", + to: "AccountId32", + amount: "u128", }, Burned: { - assetId: 'u128', - owner: 'AccountId32', - balance: 'u128', + assetId: "u32", + owner: "AccountId32", + balance: "u128", }, TeamChanged: { - assetId: 'u128', - issuer: 'AccountId32', - admin: 'AccountId32', - freezer: 'AccountId32', + assetId: "u32", + issuer: "AccountId32", + admin: "AccountId32", + freezer: "AccountId32", }, OwnerChanged: { - assetId: 'u128', - owner: 'AccountId32', + assetId: "u32", + owner: "AccountId32", }, Frozen: { - assetId: 'u128', - who: 'AccountId32', + assetId: "u32", + who: "AccountId32", }, Thawed: { - assetId: 'u128', - who: 'AccountId32', + assetId: "u32", + who: "AccountId32", }, AssetFrozen: { - assetId: 'u128', + assetId: "u32", }, AssetThawed: { - assetId: 'u128', + assetId: "u32", }, AccountsDestroyed: { - assetId: 'u128', - accountsDestroyed: 'u32', - accountsRemaining: 'u32', + assetId: "u32", + accountsDestroyed: "u32", + accountsRemaining: "u32", }, ApprovalsDestroyed: { - assetId: 'u128', - approvalsDestroyed: 'u32', - approvalsRemaining: 'u32', + assetId: "u32", + approvalsDestroyed: "u32", + approvalsRemaining: "u32", }, DestructionStarted: { - assetId: 'u128', + assetId: "u32", }, Destroyed: { - assetId: 'u128', + assetId: "u32", }, ForceCreated: { - assetId: 'u128', - owner: 'AccountId32', + assetId: "u32", + owner: "AccountId32", }, MetadataSet: { - assetId: 'u128', - name: 'Bytes', - symbol: 'Bytes', - decimals: 'u8', - isFrozen: 'bool', + assetId: "u32", + name: "Bytes", + symbol: "Bytes", + decimals: "u8", + isFrozen: "bool", }, MetadataCleared: { - assetId: 'u128', + assetId: "u32", }, ApprovedTransfer: { - assetId: 'u128', - source: 'AccountId32', - delegate: 'AccountId32', - amount: 'u128', + assetId: "u32", + source: "AccountId32", + delegate: "AccountId32", + amount: "u128", }, ApprovalCancelled: { - assetId: 'u128', - owner: 'AccountId32', - delegate: 'AccountId32', + assetId: "u32", + owner: "AccountId32", + delegate: "AccountId32", }, TransferredApproved: { - assetId: 'u128', - owner: 'AccountId32', - delegate: 'AccountId32', - destination: 'AccountId32', - amount: 'u128', + assetId: "u32", + owner: "AccountId32", + delegate: "AccountId32", + destination: "AccountId32", + amount: "u128", }, AssetStatusChanged: { - assetId: 'u128', + assetId: "u32", }, AssetMinBalanceChanged: { - assetId: 'u128', - newMinBalance: 'u128', + assetId: "u32", + newMinBalance: "u128", }, Touched: { - assetId: 'u128', - who: 'AccountId32', - depositor: 'AccountId32', + assetId: "u32", + who: "AccountId32", + depositor: "AccountId32", }, Blocked: { - assetId: 'u128', - who: 'AccountId32' - } - } + assetId: "u32", + who: "AccountId32", + }, + }, }, /** * Lookup36: pallet_balances::pallet::Event @@ -309,103 +320,103 @@ export default { PalletBalancesEvent: { _enum: { Endowed: { - account: 'AccountId32', - freeBalance: 'u128', + account: "AccountId32", + freeBalance: "u128", }, DustLost: { - account: 'AccountId32', - amount: 'u128', + account: "AccountId32", + amount: "u128", }, Transfer: { - from: 'AccountId32', - to: 'AccountId32', - amount: 'u128', + from: "AccountId32", + to: "AccountId32", + amount: "u128", }, BalanceSet: { - who: 'AccountId32', - free: 'u128', + who: "AccountId32", + free: "u128", }, Reserved: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Unreserved: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, ReserveRepatriated: { - from: 'AccountId32', - to: 'AccountId32', - amount: 'u128', - destinationStatus: 'FrameSupportTokensMiscBalanceStatus', + from: "AccountId32", + to: "AccountId32", + amount: "u128", + destinationStatus: "FrameSupportTokensMiscBalanceStatus", }, Deposit: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Withdraw: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Slashed: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Minted: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Burned: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Suspended: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Restored: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Upgraded: { - who: 'AccountId32', + who: "AccountId32", }, Issued: { - amount: 'u128', + amount: "u128", }, Rescinded: { - amount: 'u128', + amount: "u128", }, Locked: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Unlocked: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Frozen: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, Thawed: { - who: 'AccountId32', - amount: 'u128', + who: "AccountId32", + amount: "u128", }, TotalIssuanceForced: { _alias: { - new_: 'new', + new_: "new", }, - old: 'u128', - new_: 'u128' - } - } + old: "u128", + new_: "u128", + }, + }, }, /** * Lookup37: frame_support::traits::tokens::misc::BalanceStatus **/ FrameSupportTokensMiscBalanceStatus: { - _enum: ['Free', 'Reserved'] + _enum: ["Free", "Reserved"], }, /** * Lookup38: pallet_transaction_payment::pallet::Event @@ -413,11 +424,11 @@ export default { PalletTransactionPaymentEvent: { _enum: { TransactionFeePaid: { - who: 'AccountId32', - actualFee: 'u128', - tip: 'u128' - } - } + who: "AccountId32", + actualFee: "u128", + tip: "u128", + }, + }, }, /** * Lookup39: pallet_grandpa::pallet::Event @@ -425,37 +436,37 @@ export default { PalletGrandpaEvent: { _enum: { NewAuthorities: { - authoritySet: 'Vec<(SpConsensusGrandpaAppPublic,u64)>', + authoritySet: "Vec<(SpConsensusGrandpaAppPublic,u64)>", }, - Paused: 'Null', - Resumed: 'Null' - } + Paused: "Null", + Resumed: "Null", + }, }, /** * Lookup42: sp_consensus_grandpa::app::Public **/ - SpConsensusGrandpaAppPublic: 'SpCoreEd25519Public', + SpConsensusGrandpaAppPublic: "SpCoreEd25519Public", /** * Lookup43: sp_core::ed25519::Public **/ - SpCoreEd25519Public: '[u8;32]', + SpCoreEd25519Public: "[u8;32]", /** * Lookup44: pallet_indices::pallet::Event **/ PalletIndicesEvent: { _enum: { IndexAssigned: { - who: 'AccountId32', - index: 'u32', + who: "AccountId32", + index: "u32", }, IndexFreed: { - index: 'u32', + index: "u32", }, IndexFrozen: { - index: 'u32', - who: 'AccountId32' - } - } + index: "u32", + who: "AccountId32", + }, + }, }, /** * Lookup45: pallet_democracy::pallet::Event @@ -463,83 +474,83 @@ export default { PalletDemocracyEvent: { _enum: { Proposed: { - proposalIndex: 'u32', - deposit: 'u128', + proposalIndex: "u32", + deposit: "u128", }, Tabled: { - proposalIndex: 'u32', - deposit: 'u128', + proposalIndex: "u32", + deposit: "u128", }, - ExternalTabled: 'Null', + ExternalTabled: "Null", Started: { - refIndex: 'u32', - threshold: 'PalletDemocracyVoteThreshold', + refIndex: "u32", + threshold: "PalletDemocracyVoteThreshold", }, Passed: { - refIndex: 'u32', + refIndex: "u32", }, NotPassed: { - refIndex: 'u32', + refIndex: "u32", }, Cancelled: { - refIndex: 'u32', + refIndex: "u32", }, Delegated: { - who: 'AccountId32', - target: 'AccountId32', + who: "AccountId32", + target: "AccountId32", }, Undelegated: { - account: 'AccountId32', + account: "AccountId32", }, Vetoed: { - who: 'AccountId32', - proposalHash: 'H256', - until: 'u64', + who: "AccountId32", + proposalHash: "H256", + until: "u64", }, Blacklisted: { - proposalHash: 'H256', + proposalHash: "H256", }, Voted: { - voter: 'AccountId32', - refIndex: 'u32', - vote: 'PalletDemocracyVoteAccountVote', + voter: "AccountId32", + refIndex: "u32", + vote: "PalletDemocracyVoteAccountVote", }, Seconded: { - seconder: 'AccountId32', - propIndex: 'u32', + seconder: "AccountId32", + propIndex: "u32", }, ProposalCanceled: { - propIndex: 'u32', + propIndex: "u32", }, MetadataSet: { _alias: { - hash_: 'hash', + hash_: "hash", }, - owner: 'PalletDemocracyMetadataOwner', - hash_: 'H256', + owner: "PalletDemocracyMetadataOwner", + hash_: "H256", }, MetadataCleared: { _alias: { - hash_: 'hash', + hash_: "hash", }, - owner: 'PalletDemocracyMetadataOwner', - hash_: 'H256', + owner: "PalletDemocracyMetadataOwner", + hash_: "H256", }, MetadataTransferred: { _alias: { - hash_: 'hash', + hash_: "hash", }, - prevOwner: 'PalletDemocracyMetadataOwner', - owner: 'PalletDemocracyMetadataOwner', - hash_: 'H256' - } - } + prevOwner: "PalletDemocracyMetadataOwner", + owner: "PalletDemocracyMetadataOwner", + hash_: "H256", + }, + }, }, /** * Lookup46: pallet_democracy::vote_threshold::VoteThreshold **/ PalletDemocracyVoteThreshold: { - _enum: ['SuperMajorityApprove', 'SuperMajorityAgainst', 'SimpleMajority'] + _enum: ["SuperMajorityApprove", "SuperMajorityAgainst", "SimpleMajority"], }, /** * Lookup47: pallet_democracy::vote::AccountVote @@ -547,24 +558,24 @@ export default { PalletDemocracyVoteAccountVote: { _enum: { Standard: { - vote: 'Vote', - balance: 'u128', + vote: "Vote", + balance: "u128", }, Split: { - aye: 'u128', - nay: 'u128' - } - } + aye: "u128", + nay: "u128", + }, + }, }, /** * Lookup49: pallet_democracy::types::MetadataOwner **/ PalletDemocracyMetadataOwner: { _enum: { - External: 'Null', - Proposal: 'u32', - Referendum: 'u32' - } + External: "Null", + Proposal: "u32", + Referendum: "u32", + }, }, /** * Lookup50: pallet_collective::pallet::Event @@ -572,38 +583,38 @@ export default { PalletCollectiveEvent: { _enum: { Proposed: { - account: 'AccountId32', - proposalIndex: 'u32', - proposalHash: 'H256', - threshold: 'u32', + account: "AccountId32", + proposalIndex: "u32", + proposalHash: "H256", + threshold: "u32", }, Voted: { - account: 'AccountId32', - proposalHash: 'H256', - voted: 'bool', - yes: 'u32', - no: 'u32', + account: "AccountId32", + proposalHash: "H256", + voted: "bool", + yes: "u32", + no: "u32", }, Approved: { - proposalHash: 'H256', + proposalHash: "H256", }, Disapproved: { - proposalHash: 'H256', + proposalHash: "H256", }, Executed: { - proposalHash: 'H256', - result: 'Result', + proposalHash: "H256", + result: "Result", }, MemberExecuted: { - proposalHash: 'H256', - result: 'Result', + proposalHash: "H256", + result: "Result", }, Closed: { - proposalHash: 'H256', - yes: 'u32', - no: 'u32' - } - } + proposalHash: "H256", + yes: "u32", + no: "u32", + }, + }, }, /** * Lookup51: pallet_vesting::pallet::Event @@ -611,13 +622,13 @@ export default { PalletVestingEvent: { _enum: { VestingUpdated: { - account: 'AccountId32', - unvested: 'u128', + account: "AccountId32", + unvested: "u128", }, VestingCompleted: { - account: 'AccountId32' - } - } + account: "AccountId32", + }, + }, }, /** * Lookup52: pallet_elections_phragmen::pallet::Event @@ -625,25 +636,25 @@ export default { PalletElectionsPhragmenEvent: { _enum: { NewTerm: { - newMembers: 'Vec<(AccountId32,u128)>', + newMembers: "Vec<(AccountId32,u128)>", }, - EmptyTerm: 'Null', - ElectionError: 'Null', + EmptyTerm: "Null", + ElectionError: "Null", MemberKicked: { - member: 'AccountId32', + member: "AccountId32", }, Renounced: { - candidate: 'AccountId32', + candidate: "AccountId32", }, CandidateSlashed: { - candidate: 'AccountId32', - amount: 'u128', + candidate: "AccountId32", + amount: "u128", }, SeatHolderSlashed: { - seatHolder: 'AccountId32', - amount: 'u128' - } - } + seatHolder: "AccountId32", + amount: "u128", + }, + }, }, /** * Lookup55: pallet_election_provider_multi_phase::pallet::Event @@ -651,54 +662,54 @@ export default { PalletElectionProviderMultiPhaseEvent: { _enum: { SolutionStored: { - compute: 'PalletElectionProviderMultiPhaseElectionCompute', - origin: 'Option', - prevEjected: 'bool', + compute: "PalletElectionProviderMultiPhaseElectionCompute", + origin: "Option", + prevEjected: "bool", }, ElectionFinalized: { - compute: 'PalletElectionProviderMultiPhaseElectionCompute', - score: 'SpNposElectionsElectionScore', + compute: "PalletElectionProviderMultiPhaseElectionCompute", + score: "SpNposElectionsElectionScore", }, - ElectionFailed: 'Null', + ElectionFailed: "Null", Rewarded: { - account: 'AccountId32', - value: 'u128', + account: "AccountId32", + value: "u128", }, Slashed: { - account: 'AccountId32', - value: 'u128', + account: "AccountId32", + value: "u128", }, PhaseTransitioned: { - from: 'PalletElectionProviderMultiPhasePhase', - to: 'PalletElectionProviderMultiPhasePhase', - round: 'u32' - } - } + from: "PalletElectionProviderMultiPhasePhase", + to: "PalletElectionProviderMultiPhasePhase", + round: "u32", + }, + }, }, /** * Lookup56: pallet_election_provider_multi_phase::ElectionCompute **/ PalletElectionProviderMultiPhaseElectionCompute: { - _enum: ['OnChain', 'Signed', 'Unsigned', 'Fallback', 'Emergency'] + _enum: ["OnChain", "Signed", "Unsigned", "Fallback", "Emergency"], }, /** * Lookup57: sp_npos_elections::ElectionScore **/ SpNposElectionsElectionScore: { - minimalStake: 'u128', - sumStake: 'u128', - sumStakeSquared: 'u128' + minimalStake: "u128", + sumStake: "u128", + sumStakeSquared: "u128", }, /** * Lookup58: pallet_election_provider_multi_phase::Phase **/ PalletElectionProviderMultiPhasePhase: { _enum: { - Off: 'Null', - Signed: 'Null', - Unsigned: '(bool,u64)', - Emergency: 'Null' - } + Off: "Null", + Signed: "Null", + Unsigned: "(bool,u64)", + Emergency: "Null", + }, }, /** * Lookup60: pallet_staking::pallet::pallet::Event @@ -706,97 +717,97 @@ export default { PalletStakingPalletEvent: { _enum: { EraPaid: { - eraIndex: 'u32', - validatorPayout: 'u128', - remainder: 'u128', + eraIndex: "u32", + validatorPayout: "u128", + remainder: "u128", }, Rewarded: { - stash: 'AccountId32', - dest: 'PalletStakingRewardDestination', - amount: 'u128', + stash: "AccountId32", + dest: "PalletStakingRewardDestination", + amount: "u128", }, Slashed: { - staker: 'AccountId32', - amount: 'u128', + staker: "AccountId32", + amount: "u128", }, SlashReported: { - validator: 'AccountId32', - fraction: 'Perbill', - slashEra: 'u32', + validator: "AccountId32", + fraction: "Perbill", + slashEra: "u32", }, OldSlashingReportDiscarded: { - sessionIndex: 'u32', + sessionIndex: "u32", }, - StakersElected: 'Null', + StakersElected: "Null", Bonded: { - stash: 'AccountId32', - amount: 'u128', + stash: "AccountId32", + amount: "u128", }, Unbonded: { - stash: 'AccountId32', - amount: 'u128', + stash: "AccountId32", + amount: "u128", }, Withdrawn: { - stash: 'AccountId32', - amount: 'u128', + stash: "AccountId32", + amount: "u128", }, Kicked: { - nominator: 'AccountId32', - stash: 'AccountId32', + nominator: "AccountId32", + stash: "AccountId32", }, - StakingElectionFailed: 'Null', + StakingElectionFailed: "Null", Chilled: { - stash: 'AccountId32', + stash: "AccountId32", }, PayoutStarted: { - eraIndex: 'u32', - validatorStash: 'AccountId32', + eraIndex: "u32", + validatorStash: "AccountId32", }, ValidatorPrefsSet: { - stash: 'AccountId32', - prefs: 'PalletStakingValidatorPrefs', + stash: "AccountId32", + prefs: "PalletStakingValidatorPrefs", }, SnapshotVotersSizeExceeded: { _alias: { - size_: 'size', + size_: "size", }, - size_: 'u32', + size_: "u32", }, SnapshotTargetsSizeExceeded: { _alias: { - size_: 'size', + size_: "size", }, - size_: 'u32', + size_: "u32", }, ForceEra: { - mode: 'PalletStakingForcing' - } - } + mode: "PalletStakingForcing", + }, + }, }, /** * Lookup61: pallet_staking::RewardDestination **/ PalletStakingRewardDestination: { _enum: { - Staked: 'Null', - Stash: 'Null', - Controller: 'Null', - Account: 'AccountId32', - None: 'Null' - } + Staked: "Null", + Stash: "Null", + Controller: "Null", + Account: "AccountId32", + None: "Null", + }, }, /** * Lookup63: pallet_staking::ValidatorPrefs **/ PalletStakingValidatorPrefs: { - commission: 'Compact', - blocked: 'bool' + commission: "Compact", + blocked: "bool", }, /** * Lookup65: pallet_staking::Forcing **/ PalletStakingForcing: { - _enum: ['NotForcing', 'ForceNew', 'ForceNone', 'ForceAlways'] + _enum: ["NotForcing", "ForceNew", "ForceNone", "ForceAlways"], }, /** * Lookup66: pallet_session::pallet::Event @@ -804,9 +815,9 @@ export default { PalletSessionEvent: { _enum: { NewSession: { - sessionIndex: 'u32' - } - } + sessionIndex: "u32", + }, + }, }, /** * Lookup67: pallet_treasury::pallet::Event @@ -814,61 +825,61 @@ export default { PalletTreasuryEvent: { _enum: { Proposed: { - proposalIndex: 'u32', + proposalIndex: "u32", }, Spending: { - budgetRemaining: 'u128', + budgetRemaining: "u128", }, Awarded: { - proposalIndex: 'u32', - award: 'u128', - account: 'AccountId32', + proposalIndex: "u32", + award: "u128", + account: "AccountId32", }, Rejected: { - proposalIndex: 'u32', - slashed: 'u128', + proposalIndex: "u32", + slashed: "u128", }, Burnt: { - burntFunds: 'u128', + burntFunds: "u128", }, Rollover: { - rolloverBalance: 'u128', + rolloverBalance: "u128", }, Deposit: { - value: 'u128', + value: "u128", }, SpendApproved: { - proposalIndex: 'u32', - amount: 'u128', - beneficiary: 'AccountId32', + proposalIndex: "u32", + amount: "u128", + beneficiary: "AccountId32", }, UpdatedInactive: { - reactivated: 'u128', - deactivated: 'u128', + reactivated: "u128", + deactivated: "u128", }, AssetSpendApproved: { - index: 'u32', - assetKind: 'Null', - amount: 'u128', - beneficiary: 'AccountId32', - validFrom: 'u64', - expireAt: 'u64', + index: "u32", + assetKind: "Null", + amount: "u128", + beneficiary: "AccountId32", + validFrom: "u64", + expireAt: "u64", }, AssetSpendVoided: { - index: 'u32', + index: "u32", }, Paid: { - index: 'u32', - paymentId: 'Null', + index: "u32", + paymentId: "Null", }, PaymentFailed: { - index: 'u32', - paymentId: 'Null', + index: "u32", + paymentId: "Null", }, SpendProcessed: { - index: 'u32' - } - } + index: "u32", + }, + }, }, /** * Lookup68: pallet_bounties::pallet::Event @@ -876,45 +887,45 @@ export default { PalletBountiesEvent: { _enum: { BountyProposed: { - index: 'u32', + index: "u32", }, BountyRejected: { - index: 'u32', - bond: 'u128', + index: "u32", + bond: "u128", }, BountyBecameActive: { - index: 'u32', + index: "u32", }, BountyAwarded: { - index: 'u32', - beneficiary: 'AccountId32', + index: "u32", + beneficiary: "AccountId32", }, BountyClaimed: { - index: 'u32', - payout: 'u128', - beneficiary: 'AccountId32', + index: "u32", + payout: "u128", + beneficiary: "AccountId32", }, BountyCanceled: { - index: 'u32', + index: "u32", }, BountyExtended: { - index: 'u32', + index: "u32", }, BountyApproved: { - index: 'u32', + index: "u32", }, CuratorProposed: { - bountyId: 'u32', - curator: 'AccountId32', + bountyId: "u32", + curator: "AccountId32", }, CuratorUnassigned: { - bountyId: 'u32', + bountyId: "u32", }, CuratorAccepted: { - bountyId: 'u32', - curator: 'AccountId32' - } - } + bountyId: "u32", + curator: "AccountId32", + }, + }, }, /** * Lookup69: pallet_child_bounties::pallet::Event @@ -922,25 +933,25 @@ export default { PalletChildBountiesEvent: { _enum: { Added: { - index: 'u32', - childIndex: 'u32', + index: "u32", + childIndex: "u32", }, Awarded: { - index: 'u32', - childIndex: 'u32', - beneficiary: 'AccountId32', + index: "u32", + childIndex: "u32", + beneficiary: "AccountId32", }, Claimed: { - index: 'u32', - childIndex: 'u32', - payout: 'u128', - beneficiary: 'AccountId32', + index: "u32", + childIndex: "u32", + payout: "u128", + beneficiary: "AccountId32", }, Canceled: { - index: 'u32', - childIndex: 'u32' - } - } + index: "u32", + childIndex: "u32", + }, + }, }, /** * Lookup70: pallet_bags_list::pallet::Event @@ -948,15 +959,15 @@ export default { PalletBagsListEvent: { _enum: { Rebagged: { - who: 'AccountId32', - from: 'u64', - to: 'u64', + who: "AccountId32", + from: "u64", + to: "u64", }, ScoreUpdated: { - who: 'AccountId32', - newScore: 'u64' - } - } + who: "AccountId32", + newScore: "u64", + }, + }, }, /** * Lookup71: pallet_nomination_pools::pallet::Event @@ -964,109 +975,109 @@ export default { PalletNominationPoolsEvent: { _enum: { Created: { - depositor: 'AccountId32', - poolId: 'u32', + depositor: "AccountId32", + poolId: "u32", }, Bonded: { - member: 'AccountId32', - poolId: 'u32', - bonded: 'u128', - joined: 'bool', + member: "AccountId32", + poolId: "u32", + bonded: "u128", + joined: "bool", }, PaidOut: { - member: 'AccountId32', - poolId: 'u32', - payout: 'u128', + member: "AccountId32", + poolId: "u32", + payout: "u128", }, Unbonded: { - member: 'AccountId32', - poolId: 'u32', - balance: 'u128', - points: 'u128', - era: 'u32', + member: "AccountId32", + poolId: "u32", + balance: "u128", + points: "u128", + era: "u32", }, Withdrawn: { - member: 'AccountId32', - poolId: 'u32', - balance: 'u128', - points: 'u128', + member: "AccountId32", + poolId: "u32", + balance: "u128", + points: "u128", }, Destroyed: { - poolId: 'u32', + poolId: "u32", }, StateChanged: { - poolId: 'u32', - newState: 'PalletNominationPoolsPoolState', + poolId: "u32", + newState: "PalletNominationPoolsPoolState", }, MemberRemoved: { - poolId: 'u32', - member: 'AccountId32', + poolId: "u32", + member: "AccountId32", }, RolesUpdated: { - root: 'Option', - bouncer: 'Option', - nominator: 'Option', + root: "Option", + bouncer: "Option", + nominator: "Option", }, PoolSlashed: { - poolId: 'u32', - balance: 'u128', + poolId: "u32", + balance: "u128", }, UnbondingPoolSlashed: { - poolId: 'u32', - era: 'u32', - balance: 'u128', + poolId: "u32", + era: "u32", + balance: "u128", }, PoolCommissionUpdated: { - poolId: 'u32', - current: 'Option<(Perbill,AccountId32)>', + poolId: "u32", + current: "Option<(Perbill,AccountId32)>", }, PoolMaxCommissionUpdated: { - poolId: 'u32', - maxCommission: 'Perbill', + poolId: "u32", + maxCommission: "Perbill", }, PoolCommissionChangeRateUpdated: { - poolId: 'u32', - changeRate: 'PalletNominationPoolsCommissionChangeRate', + poolId: "u32", + changeRate: "PalletNominationPoolsCommissionChangeRate", }, PoolCommissionClaimPermissionUpdated: { - poolId: 'u32', - permission: 'Option', + poolId: "u32", + permission: "Option", }, PoolCommissionClaimed: { - poolId: 'u32', - commission: 'u128', + poolId: "u32", + commission: "u128", }, MinBalanceDeficitAdjusted: { - poolId: 'u32', - amount: 'u128', + poolId: "u32", + amount: "u128", }, MinBalanceExcessAdjusted: { - poolId: 'u32', - amount: 'u128' - } - } + poolId: "u32", + amount: "u128", + }, + }, }, /** * Lookup72: pallet_nomination_pools::PoolState **/ PalletNominationPoolsPoolState: { - _enum: ['Open', 'Blocked', 'Destroying'] + _enum: ["Open", "Blocked", "Destroying"], }, /** * Lookup75: pallet_nomination_pools::CommissionChangeRate **/ PalletNominationPoolsCommissionChangeRate: { - maxIncrease: 'Perbill', - minDelay: 'u64' + maxIncrease: "Perbill", + minDelay: "u64", }, /** * Lookup77: pallet_nomination_pools::CommissionClaimPermission **/ PalletNominationPoolsCommissionClaimPermission: { _enum: { - Permissionless: 'Null', - Account: 'AccountId32' - } + Permissionless: "Null", + Account: "AccountId32", + }, }, /** * Lookup78: pallet_scheduler::pallet::Event @@ -1074,31 +1085,31 @@ export default { PalletSchedulerEvent: { _enum: { Scheduled: { - when: 'u64', - index: 'u32', + when: "u64", + index: "u32", }, Canceled: { - when: 'u64', - index: 'u32', + when: "u64", + index: "u32", }, Dispatched: { - task: '(u64,u32)', - id: 'Option<[u8;32]>', - result: 'Result', + task: "(u64,u32)", + id: "Option<[u8;32]>", + result: "Result", }, CallUnavailable: { - task: '(u64,u32)', - id: 'Option<[u8;32]>', + task: "(u64,u32)", + id: "Option<[u8;32]>", }, PeriodicFailed: { - task: '(u64,u32)', - id: 'Option<[u8;32]>', + task: "(u64,u32)", + id: "Option<[u8;32]>", }, PermanentlyOverweight: { - task: '(u64,u32)', - id: 'Option<[u8;32]>' - } - } + task: "(u64,u32)", + id: "Option<[u8;32]>", + }, + }, }, /** * Lookup81: pallet_preimage::pallet::Event @@ -1107,23 +1118,23 @@ export default { _enum: { Noted: { _alias: { - hash_: 'hash', + hash_: "hash", }, - hash_: 'H256', + hash_: "H256", }, Requested: { _alias: { - hash_: 'hash', + hash_: "hash", }, - hash_: 'H256', + hash_: "H256", }, Cleared: { _alias: { - hash_: 'hash', + hash_: "hash", }, - hash_: 'H256' - } - } + hash_: "H256", + }, + }, }, /** * Lookup82: pallet_offences::pallet::Event @@ -1131,10 +1142,10 @@ export default { PalletOffencesEvent: { _enum: { Offence: { - kind: '[u8;16]', - timeslot: 'Bytes' - } - } + kind: "[u8;16]", + timeslot: "Bytes", + }, + }, }, /** * Lookup84: pallet_tx_pause::pallet::Event @@ -1142,12 +1153,12 @@ export default { PalletTxPauseEvent: { _enum: { CallPaused: { - fullName: '(Bytes,Bytes)', + fullName: "(Bytes,Bytes)", }, CallUnpaused: { - fullName: '(Bytes,Bytes)' - } - } + fullName: "(Bytes,Bytes)", + }, + }, }, /** * Lookup87: pallet_im_online::pallet::Event @@ -1155,36 +1166,36 @@ export default { PalletImOnlineEvent: { _enum: { HeartbeatReceived: { - authorityId: 'PalletImOnlineSr25519AppSr25519Public', + authorityId: "PalletImOnlineSr25519AppSr25519Public", }, - AllGood: 'Null', + AllGood: "Null", SomeOffline: { - offline: 'Vec<(AccountId32,SpStakingExposure)>' - } - } + offline: "Vec<(AccountId32,SpStakingExposure)>", + }, + }, }, /** * Lookup88: pallet_im_online::sr25519::app_sr25519::Public **/ - PalletImOnlineSr25519AppSr25519Public: 'SpCoreSr25519Public', + PalletImOnlineSr25519AppSr25519Public: "SpCoreSr25519Public", /** * Lookup89: sp_core::sr25519::Public **/ - SpCoreSr25519Public: '[u8;32]', + SpCoreSr25519Public: "[u8;32]", /** * Lookup92: sp_staking::Exposure **/ SpStakingExposure: { - total: 'Compact', - own: 'Compact', - others: 'Vec' + total: "Compact", + own: "Compact", + others: "Vec", }, /** * Lookup95: sp_staking::IndividualExposure **/ SpStakingIndividualExposure: { - who: 'AccountId32', - value: 'Compact' + who: "AccountId32", + value: "Compact", }, /** * Lookup96: pallet_identity::pallet::Event @@ -1192,73 +1203,73 @@ export default { PalletIdentityEvent: { _enum: { IdentitySet: { - who: 'AccountId32', + who: "AccountId32", }, IdentityCleared: { - who: 'AccountId32', - deposit: 'u128', + who: "AccountId32", + deposit: "u128", }, IdentityKilled: { - who: 'AccountId32', - deposit: 'u128', + who: "AccountId32", + deposit: "u128", }, JudgementRequested: { - who: 'AccountId32', - registrarIndex: 'u32', + who: "AccountId32", + registrarIndex: "u32", }, JudgementUnrequested: { - who: 'AccountId32', - registrarIndex: 'u32', + who: "AccountId32", + registrarIndex: "u32", }, JudgementGiven: { - target: 'AccountId32', - registrarIndex: 'u32', + target: "AccountId32", + registrarIndex: "u32", }, RegistrarAdded: { - registrarIndex: 'u32', + registrarIndex: "u32", }, SubIdentityAdded: { - sub: 'AccountId32', - main: 'AccountId32', - deposit: 'u128', + sub: "AccountId32", + main: "AccountId32", + deposit: "u128", }, SubIdentityRemoved: { - sub: 'AccountId32', - main: 'AccountId32', - deposit: 'u128', + sub: "AccountId32", + main: "AccountId32", + deposit: "u128", }, SubIdentityRevoked: { - sub: 'AccountId32', - main: 'AccountId32', - deposit: 'u128', + sub: "AccountId32", + main: "AccountId32", + deposit: "u128", }, AuthorityAdded: { - authority: 'AccountId32', + authority: "AccountId32", }, AuthorityRemoved: { - authority: 'AccountId32', + authority: "AccountId32", }, UsernameSet: { - who: 'AccountId32', - username: 'Bytes', + who: "AccountId32", + username: "Bytes", }, UsernameQueued: { - who: 'AccountId32', - username: 'Bytes', - expiration: 'u64', + who: "AccountId32", + username: "Bytes", + expiration: "u64", }, PreapprovalExpired: { - whose: 'AccountId32', + whose: "AccountId32", }, PrimaryUsernameSet: { - who: 'AccountId32', - username: 'Bytes', + who: "AccountId32", + username: "Bytes", }, DanglingUsernameRemoved: { - who: 'AccountId32', - username: 'Bytes' - } - } + who: "AccountId32", + username: "Bytes", + }, + }, }, /** * Lookup98: pallet_utility::pallet::Event @@ -1266,19 +1277,19 @@ export default { PalletUtilityEvent: { _enum: { BatchInterrupted: { - index: 'u32', - error: 'SpRuntimeDispatchError', + index: "u32", + error: "SpRuntimeDispatchError", }, - BatchCompleted: 'Null', - BatchCompletedWithErrors: 'Null', - ItemCompleted: 'Null', + BatchCompleted: "Null", + BatchCompletedWithErrors: "Null", + ItemCompleted: "Null", ItemFailed: { - error: 'SpRuntimeDispatchError', + error: "SpRuntimeDispatchError", }, DispatchedAs: { - result: 'Result' - } - } + result: "Result", + }, + }, }, /** * Lookup99: pallet_multisig::pallet::Event @@ -1286,37 +1297,37 @@ export default { PalletMultisigEvent: { _enum: { NewMultisig: { - approving: 'AccountId32', - multisig: 'AccountId32', - callHash: '[u8;32]', + approving: "AccountId32", + multisig: "AccountId32", + callHash: "[u8;32]", }, MultisigApproval: { - approving: 'AccountId32', - timepoint: 'PalletMultisigTimepoint', - multisig: 'AccountId32', - callHash: '[u8;32]', + approving: "AccountId32", + timepoint: "PalletMultisigTimepoint", + multisig: "AccountId32", + callHash: "[u8;32]", }, MultisigExecuted: { - approving: 'AccountId32', - timepoint: 'PalletMultisigTimepoint', - multisig: 'AccountId32', - callHash: '[u8;32]', - result: 'Result', + approving: "AccountId32", + timepoint: "PalletMultisigTimepoint", + multisig: "AccountId32", + callHash: "[u8;32]", + result: "Result", }, MultisigCancelled: { - cancelling: 'AccountId32', - timepoint: 'PalletMultisigTimepoint', - multisig: 'AccountId32', - callHash: '[u8;32]' - } - } + cancelling: "AccountId32", + timepoint: "PalletMultisigTimepoint", + multisig: "AccountId32", + callHash: "[u8;32]", + }, + }, }, /** * Lookup100: pallet_multisig::Timepoint **/ PalletMultisigTimepoint: { - height: 'u64', - index: 'u32' + height: "u64", + index: "u32", }, /** * Lookup101: pallet_ethereum::pallet::Event @@ -1324,70 +1335,70 @@ export default { PalletEthereumEvent: { _enum: { Executed: { - from: 'H160', - to: 'H160', - transactionHash: 'H256', - exitReason: 'EvmCoreErrorExitReason', - extraData: 'Bytes' - } - } + from: "H160", + to: "H160", + transactionHash: "H256", + exitReason: "EvmCoreErrorExitReason", + extraData: "Bytes", + }, + }, }, /** * Lookup104: evm_core::error::ExitReason **/ EvmCoreErrorExitReason: { _enum: { - Succeed: 'EvmCoreErrorExitSucceed', - Error: 'EvmCoreErrorExitError', - Revert: 'EvmCoreErrorExitRevert', - Fatal: 'EvmCoreErrorExitFatal' - } + Succeed: "EvmCoreErrorExitSucceed", + Error: "EvmCoreErrorExitError", + Revert: "EvmCoreErrorExitRevert", + Fatal: "EvmCoreErrorExitFatal", + }, }, /** * Lookup105: evm_core::error::ExitSucceed **/ EvmCoreErrorExitSucceed: { - _enum: ['Stopped', 'Returned', 'Suicided'] + _enum: ["Stopped", "Returned", "Suicided"], }, /** * Lookup106: evm_core::error::ExitError **/ EvmCoreErrorExitError: { _enum: { - StackUnderflow: 'Null', - StackOverflow: 'Null', - InvalidJump: 'Null', - InvalidRange: 'Null', - DesignatedInvalid: 'Null', - CallTooDeep: 'Null', - CreateCollision: 'Null', - CreateContractLimit: 'Null', - OutOfOffset: 'Null', - OutOfGas: 'Null', - OutOfFund: 'Null', - PCUnderflow: 'Null', - CreateEmpty: 'Null', - Other: 'Text', - MaxNonce: 'Null', - InvalidCode: 'u8' - } + StackUnderflow: "Null", + StackOverflow: "Null", + InvalidJump: "Null", + InvalidRange: "Null", + DesignatedInvalid: "Null", + CallTooDeep: "Null", + CreateCollision: "Null", + CreateContractLimit: "Null", + OutOfOffset: "Null", + OutOfGas: "Null", + OutOfFund: "Null", + PCUnderflow: "Null", + CreateEmpty: "Null", + Other: "Text", + MaxNonce: "Null", + InvalidCode: "u8", + }, }, /** * Lookup110: evm_core::error::ExitRevert **/ EvmCoreErrorExitRevert: { - _enum: ['Reverted'] + _enum: ["Reverted"], }, /** * Lookup111: evm_core::error::ExitFatal **/ EvmCoreErrorExitFatal: { _enum: { - NotSupported: 'Null', - UnhandledInterrupt: 'Null', - CallErrorAsFatal: 'EvmCoreErrorExitError', - Other: 'Text' - } + NotSupported: "Null", + UnhandledInterrupt: "Null", + CallErrorAsFatal: "EvmCoreErrorExitError", + Other: "Text", + }, }, /** * Lookup112: pallet_evm::pallet::Event @@ -1395,29 +1406,29 @@ export default { PalletEvmEvent: { _enum: { Log: { - log: 'EthereumLog', + log: "EthereumLog", }, Created: { - address: 'H160', + address: "H160", }, CreatedFailed: { - address: 'H160', + address: "H160", }, Executed: { - address: 'H160', + address: "H160", }, ExecutedFailed: { - address: 'H160' - } - } + address: "H160", + }, + }, }, /** * Lookup113: ethereum::log::Log **/ EthereumLog: { - address: 'H160', - topics: 'Vec', - data: 'Bytes' + address: "H160", + topics: "Vec", + data: "Bytes", }, /** * Lookup115: pallet_base_fee::pallet::Event @@ -1425,13 +1436,13 @@ export default { PalletBaseFeeEvent: { _enum: { NewBaseFeePerGas: { - fee: 'U256', + fee: "U256", }, - BaseFeeOverflow: 'Null', + BaseFeeOverflow: "Null", NewElasticity: { - elasticity: 'Permill' - } - } + elasticity: "Permill", + }, + }, }, /** * Lookup119: pallet_airdrop_claims::pallet::Event @@ -1439,95 +1450,108 @@ export default { PalletAirdropClaimsEvent: { _enum: { Claimed: { - recipient: 'AccountId32', - source: 'PalletAirdropClaimsUtilsMultiAddress', - amount: 'u128' - } - } + recipient: "AccountId32", + source: "PalletAirdropClaimsUtilsMultiAddress", + amount: "u128", + }, + }, }, /** * Lookup120: pallet_airdrop_claims::utils::MultiAddress **/ PalletAirdropClaimsUtilsMultiAddress: { _enum: { - EVM: 'PalletAirdropClaimsUtilsEthereumAddress', - Native: 'AccountId32' - } + EVM: "PalletAirdropClaimsUtilsEthereumAddress", + Native: "AccountId32", + }, }, /** * Lookup121: pallet_airdrop_claims::utils::ethereum_address::EthereumAddress **/ - PalletAirdropClaimsUtilsEthereumAddress: '[u8;20]', + PalletAirdropClaimsUtilsEthereumAddress: "[u8;20]", /** * Lookup122: pallet_roles::pallet::Event **/ PalletRolesEvent: { _enum: { RoleAssigned: { - account: 'AccountId32', - role: 'TanglePrimitivesRolesRoleType', + account: "AccountId32", + role: "TanglePrimitivesRolesRoleType", }, RoleRemoved: { - account: 'AccountId32', - role: 'TanglePrimitivesRolesRoleType', + account: "AccountId32", + role: "TanglePrimitivesRolesRoleType", }, Slashed: { - account: 'AccountId32', - amount: 'u128', + account: "AccountId32", + amount: "u128", }, ProfileCreated: { - account: 'AccountId32', - totalProfileRestake: 'u128', - roles: 'Vec', + account: "AccountId32", + totalProfileRestake: "u128", + roles: "Vec", }, ProfileUpdated: { - account: 'AccountId32', - totalProfileRestake: 'u128', - roles: 'Vec', + account: "AccountId32", + totalProfileRestake: "u128", + roles: "Vec", }, ProfileDeleted: { - account: 'AccountId32', + account: "AccountId32", }, PendingJobs: { - pendingJobs: 'Vec<(TanglePrimitivesRolesRoleType,u64)>', + pendingJobs: "Vec<(TanglePrimitivesRolesRoleType,u64)>", }, RolesRewardSet: { - totalRewards: 'u128', + totalRewards: "u128", }, PayoutStarted: { - eraIndex: 'u32', - validatorStash: 'AccountId32', + eraIndex: "u32", + validatorStash: "AccountId32", }, Rewarded: { - stash: 'AccountId32', - amount: 'u128', + stash: "AccountId32", + amount: "u128", }, MinRestakingBondUpdated: { - value: 'u128' - } - } + value: "u128", + }, + }, }, /** * Lookup123: tangle_primitives::roles::RoleType **/ TanglePrimitivesRolesRoleType: { _enum: { - Tss: 'TanglePrimitivesRolesTssThresholdSignatureRoleType', - ZkSaaS: 'TanglePrimitivesRolesZksaasZeroKnowledgeRoleType', - LightClientRelaying: 'Null' - } + Tss: "TanglePrimitivesRolesTssThresholdSignatureRoleType", + ZkSaaS: "TanglePrimitivesRolesZksaasZeroKnowledgeRoleType", + LightClientRelaying: "Null", + }, }, /** * Lookup124: tangle_primitives::roles::tss::ThresholdSignatureRoleType **/ TanglePrimitivesRolesTssThresholdSignatureRoleType: { - _enum: ['DfnsCGGMP21Secp256k1', 'DfnsCGGMP21Secp256r1', 'DfnsCGGMP21Stark', 'SilentShardDKLS23Secp256k1', 'ZcashFrostP256', 'ZcashFrostP384', 'ZcashFrostSecp256k1', 'ZcashFrostRistretto255', 'ZcashFrostEd25519', 'ZcashFrostEd448', 'GennaroDKGBls381', 'WstsV2'] + _enum: [ + "DfnsCGGMP21Secp256k1", + "DfnsCGGMP21Secp256r1", + "DfnsCGGMP21Stark", + "SilentShardDKLS23Secp256k1", + "ZcashFrostP256", + "ZcashFrostP384", + "ZcashFrostSecp256k1", + "ZcashFrostRistretto255", + "ZcashFrostEd25519", + "ZcashFrostEd448", + "GennaroDKGBls381", + "WstsV2", + ], }, /** * Lookup125: tangle_primitives::roles::zksaas::ZeroKnowledgeRoleType **/ TanglePrimitivesRolesZksaasZeroKnowledgeRoleType: { - _enum: ['ZkSaaSGroth16', 'ZkSaaSMarlin'] + _enum: ["ZkSaaSGroth16", "ZkSaaSMarlin"], }, /** * Lookup129: pallet_jobs::module::Event @@ -1535,277 +1559,479 @@ export default { PalletJobsModuleEvent: { _enum: { JobSubmitted: { - jobId: 'u64', - roleType: 'TanglePrimitivesRolesRoleType', - details: 'TanglePrimitivesJobsJobSubmission', + jobId: "u64", + roleType: "TanglePrimitivesRolesRoleType", + details: "TanglePrimitivesJobsJobSubmission", }, JobResultSubmitted: { - jobId: 'u64', - roleType: 'TanglePrimitivesRolesRoleType', + jobId: "u64", + roleType: "TanglePrimitivesRolesRoleType", }, ValidatorRewarded: { - id: 'AccountId32', - reward: 'u128', + id: "AccountId32", + reward: "u128", }, JobRefunded: { - jobId: 'u64', - roleType: 'TanglePrimitivesRolesRoleType', + jobId: "u64", + roleType: "TanglePrimitivesRolesRoleType", }, JobParticipantsUpdated: { - jobId: 'u64', - roleType: 'TanglePrimitivesRolesRoleType', - details: 'TanglePrimitivesJobsJobInfo', + jobId: "u64", + roleType: "TanglePrimitivesRolesRoleType", + details: "TanglePrimitivesJobsJobInfo", }, JobReSubmitted: { - jobId: 'u64', - roleType: 'TanglePrimitivesRolesRoleType', - details: 'TanglePrimitivesJobsJobInfo', + jobId: "u64", + roleType: "TanglePrimitivesRolesRoleType", + details: "TanglePrimitivesJobsJobInfo", }, JobResultExtended: { - jobId: 'u64', - roleType: 'TanglePrimitivesRolesRoleType', - newExpiry: 'u64' - } - } + jobId: "u64", + roleType: "TanglePrimitivesRolesRoleType", + newExpiry: "u64", + }, + }, }, /** * Lookup130: tangle_primitives::jobs::JobSubmission **/ TanglePrimitivesJobsJobSubmission: { - expiry: 'u64', - ttl: 'u64', - jobType: 'TanglePrimitivesJobsJobType', - fallback: 'TanglePrimitivesJobsFallbackOptions' + expiry: "u64", + ttl: "u64", + jobType: "TanglePrimitivesJobsJobType", + fallback: "TanglePrimitivesJobsFallbackOptions", }, /** * Lookup131: tangle_testnet_runtime::MaxParticipants **/ - TangleTestnetRuntimeMaxParticipants: 'Null', + TangleTestnetRuntimeMaxParticipants: "Null", /** * Lookup132: tangle_testnet_runtime::MaxSubmissionLen **/ - TangleTestnetRuntimeMaxSubmissionLen: 'Null', + TangleTestnetRuntimeMaxSubmissionLen: "Null", /** * Lookup133: tangle_testnet_runtime::MaxAdditionalParamsLen **/ - TangleTestnetRuntimeMaxAdditionalParamsLen: 'Null', + TangleTestnetRuntimeMaxAdditionalParamsLen: "Null", /** * Lookup134: tangle_primitives::jobs::JobType **/ TanglePrimitivesJobsJobType: { _enum: { - DKGTSSPhaseOne: 'TanglePrimitivesJobsTssDkgtssPhaseOneJobType', - DKGTSSPhaseTwo: 'TanglePrimitivesJobsTssDkgtssPhaseTwoJobType', - DKGTSSPhaseThree: 'TanglePrimitivesJobsTssDkgtssPhaseThreeJobType', - DKGTSSPhaseFour: 'TanglePrimitivesJobsTssDkgtssPhaseFourJobType', - ZkSaaSPhaseOne: 'TanglePrimitivesJobsZksaasZkSaaSPhaseOneJobType', - ZkSaaSPhaseTwo: 'TanglePrimitivesJobsZksaasZkSaaSPhaseTwoJobType' - } + DKGTSSPhaseOne: "TanglePrimitivesJobsTssDkgtssPhaseOneJobType", + DKGTSSPhaseTwo: "TanglePrimitivesJobsTssDkgtssPhaseTwoJobType", + DKGTSSPhaseThree: "TanglePrimitivesJobsTssDkgtssPhaseThreeJobType", + DKGTSSPhaseFour: "TanglePrimitivesJobsTssDkgtssPhaseFourJobType", + ZkSaaSPhaseOne: "TanglePrimitivesJobsZksaasZkSaaSPhaseOneJobType", + ZkSaaSPhaseTwo: "TanglePrimitivesJobsZksaasZkSaaSPhaseTwoJobType", + }, }, /** * Lookup135: tangle_primitives::jobs::tss::DKGTSSPhaseOneJobType **/ TanglePrimitivesJobsTssDkgtssPhaseOneJobType: { - participants: 'Vec', - threshold: 'u8', - permittedCaller: 'Option', - roleType: 'TanglePrimitivesRolesTssThresholdSignatureRoleType', - hdWallet: 'bool' + participants: "Vec", + threshold: "u8", + permittedCaller: "Option", + roleType: "TanglePrimitivesRolesTssThresholdSignatureRoleType", + hdWallet: "bool", }, /** * Lookup138: tangle_primitives::jobs::tss::DKGTSSPhaseTwoJobType **/ TanglePrimitivesJobsTssDkgtssPhaseTwoJobType: { - phaseOneId: 'u64', - submission: 'Bytes', - derivationPath: 'Option', - roleType: 'TanglePrimitivesRolesTssThresholdSignatureRoleType' + phaseOneId: "u64", + submission: "Bytes", + derivationPath: "Option", + roleType: "TanglePrimitivesRolesTssThresholdSignatureRoleType", }, /** * Lookup142: tangle_primitives::jobs::tss::DKGTSSPhaseThreeJobType **/ TanglePrimitivesJobsTssDkgtssPhaseThreeJobType: { - phaseOneId: 'u64', - roleType: 'TanglePrimitivesRolesTssThresholdSignatureRoleType' + phaseOneId: "u64", + roleType: "TanglePrimitivesRolesTssThresholdSignatureRoleType", }, /** * Lookup143: tangle_primitives::jobs::tss::DKGTSSPhaseFourJobType **/ TanglePrimitivesJobsTssDkgtssPhaseFourJobType: { - phaseOneId: 'u64', - newPhaseOneId: 'u64', - roleType: 'TanglePrimitivesRolesTssThresholdSignatureRoleType' + phaseOneId: "u64", + newPhaseOneId: "u64", + roleType: "TanglePrimitivesRolesTssThresholdSignatureRoleType", }, /** * Lookup144: tangle_primitives::jobs::zksaas::ZkSaaSPhaseOneJobType **/ TanglePrimitivesJobsZksaasZkSaaSPhaseOneJobType: { - participants: 'Vec', - permittedCaller: 'Option', - system: 'TanglePrimitivesJobsZksaasZkSaaSSystem', - roleType: 'TanglePrimitivesRolesZksaasZeroKnowledgeRoleType' + participants: "Vec", + permittedCaller: "Option", + system: "TanglePrimitivesJobsZksaasZkSaaSSystem", + roleType: "TanglePrimitivesRolesZksaasZeroKnowledgeRoleType", }, /** * Lookup145: tangle_primitives::jobs::zksaas::ZkSaaSSystem **/ TanglePrimitivesJobsZksaasZkSaaSSystem: { _enum: { - Groth16: 'TanglePrimitivesJobsZksaasGroth16System' - } + Groth16: "TanglePrimitivesJobsZksaasGroth16System", + }, }, /** * Lookup146: tangle_primitives::jobs::zksaas::Groth16System **/ TanglePrimitivesJobsZksaasGroth16System: { - circuit: 'TanglePrimitivesJobsZksaasHyperData', - numInputs: 'u64', - numConstraints: 'u64', - provingKey: 'TanglePrimitivesJobsZksaasHyperData', - verifyingKey: 'Bytes', - wasm: 'TanglePrimitivesJobsZksaasHyperData' + circuit: "TanglePrimitivesJobsZksaasHyperData", + numInputs: "u64", + numConstraints: "u64", + provingKey: "TanglePrimitivesJobsZksaasHyperData", + verifyingKey: "Bytes", + wasm: "TanglePrimitivesJobsZksaasHyperData", }, /** * Lookup147: tangle_primitives::jobs::zksaas::HyperData **/ TanglePrimitivesJobsZksaasHyperData: { _enum: { - Raw: 'Bytes', - IPFS: 'Bytes', - HTTP: 'Bytes' - } + Raw: "Bytes", + IPFS: "Bytes", + HTTP: "Bytes", + }, }, /** * Lookup148: tangle_primitives::jobs::zksaas::ZkSaaSPhaseTwoJobType **/ TanglePrimitivesJobsZksaasZkSaaSPhaseTwoJobType: { - phaseOneId: 'u64', - request: 'TanglePrimitivesJobsZksaasZkSaaSPhaseTwoRequest', - roleType: 'TanglePrimitivesRolesZksaasZeroKnowledgeRoleType' + phaseOneId: "u64", + request: "TanglePrimitivesJobsZksaasZkSaaSPhaseTwoRequest", + roleType: "TanglePrimitivesRolesZksaasZeroKnowledgeRoleType", }, /** * Lookup149: tangle_primitives::jobs::zksaas::ZkSaaSPhaseTwoRequest **/ TanglePrimitivesJobsZksaasZkSaaSPhaseTwoRequest: { _enum: { - Groth16: 'TanglePrimitivesJobsZksaasGroth16ProveRequest' - } + Groth16: "TanglePrimitivesJobsZksaasGroth16ProveRequest", + }, }, /** * Lookup150: tangle_primitives::jobs::zksaas::Groth16ProveRequest **/ TanglePrimitivesJobsZksaasGroth16ProveRequest: { - publicInput: 'Bytes', - aShares: 'Vec', - axShares: 'Vec', - qapShares: 'Vec' + publicInput: "Bytes", + aShares: "Vec", + axShares: "Vec", + qapShares: "Vec", }, /** * Lookup154: tangle_primitives::jobs::zksaas::QAPShare **/ TanglePrimitivesJobsZksaasQapShare: { - a: 'TanglePrimitivesJobsZksaasHyperData', - b: 'TanglePrimitivesJobsZksaasHyperData', - c: 'TanglePrimitivesJobsZksaasHyperData' + a: "TanglePrimitivesJobsZksaasHyperData", + b: "TanglePrimitivesJobsZksaasHyperData", + c: "TanglePrimitivesJobsZksaasHyperData", }, /** * Lookup156: tangle_primitives::jobs::FallbackOptions **/ TanglePrimitivesJobsFallbackOptions: { _enum: { - Destroy: 'Null', - RegenerateWithThreshold: 'u8' - } + Destroy: "Null", + RegenerateWithThreshold: "u8", + }, }, /** * Lookup157: tangle_primitives::jobs::JobInfo **/ TanglePrimitivesJobsJobInfo: { - owner: 'AccountId32', - expiry: 'u64', - ttl: 'u64', - jobType: 'TanglePrimitivesJobsJobType', - fee: 'u128', - fallback: 'TanglePrimitivesJobsFallbackOptions' + owner: "AccountId32", + expiry: "u64", + ttl: "u64", + jobType: "TanglePrimitivesJobsJobType", + fee: "u128", + fallback: "TanglePrimitivesJobsFallbackOptions", + }, + /** + * Lookup158: pallet_services::module::Event + **/ + PalletServicesModuleEvent: { + _enum: { + BlueprintCreated: { + owner: "AccountId32", + blueprintId: "u64", + }, + Registered: { + provider: "AccountId32", + blueprintId: "u64", + preferences: "TanglePrimitivesJobsV2OperatorPreferences", + registrationArgs: "Vec", + }, + Unregistered: { + operator: "AccountId32", + blueprintId: "u64", + }, + ApprovalPreferenceUpdated: { + operator: "AccountId32", + blueprintId: "u64", + approvalPreference: "TanglePrimitivesJobsV2ApprovalPrefrence", + }, + ServiceRequested: { + owner: "AccountId32", + requestId: "u64", + blueprintId: "u64", + pendingApprovals: "Vec", + approved: "Vec", + }, + ServiceRequestApproved: { + operator: "AccountId32", + requestId: "u64", + blueprintId: "u64", + pendingApprovals: "Vec", + approved: "Vec", + }, + ServiceRequestRejected: { + operator: "AccountId32", + requestId: "u64", + blueprintId: "u64", + }, + ServiceRequestUpdated: { + owner: "AccountId32", + requestId: "u64", + blueprintId: "u64", + pendingApprovals: "Vec", + approved: "Vec", + }, + ServiceInitiated: { + owner: "AccountId32", + requestId: "Option", + serviceId: "u64", + blueprintId: "u64", + }, + ServiceTerminated: { + owner: "AccountId32", + serviceId: "u64", + blueprintId: "u64", + }, + JobCalled: { + caller: "AccountId32", + serviceId: "u64", + callId: "u64", + job: "u8", + args: "Vec", + }, + JobResultSubmitted: { + operator: "AccountId32", + serviceId: "u64", + callId: "u64", + job: "u8", + result: "Vec", + }, + }, }, /** - * Lookup158: pallet_dkg::pallet::Event + * Lookup159: tangle_primitives::services::OperatorPreferences + **/ + TanglePrimitivesJobsV2OperatorPreferences: { + key: "SpCoreEcdsaPublic", + approval: "TanglePrimitivesJobsV2ApprovalPrefrence", + }, + /** + * Lookup160: sp_core::ecdsa::Public + **/ + SpCoreEcdsaPublic: "[u8;33]", + /** + * Lookup162: tangle_primitives::services::ApprovalPrefrence + **/ + TanglePrimitivesJobsV2ApprovalPrefrence: { + _enum: ["None", "Required"], + }, + /** + * Lookup164: tangle_primitives::services::field::Field + **/ + TanglePrimitivesJobsV2Field: { + _enum: { + None: "Null", + Bool: "bool", + Uint8: "u8", + Int8: "i8", + Uint16: "u16", + Int16: "i16", + Uint32: "u32", + Int32: "i32", + Uint64: "u64", + Int64: "i64", + String: "Bytes", + Bytes: "Bytes", + Array: "Vec", + List: "Vec", + __Unused14: "Null", + __Unused15: "Null", + __Unused16: "Null", + __Unused17: "Null", + __Unused18: "Null", + __Unused19: "Null", + __Unused20: "Null", + __Unused21: "Null", + __Unused22: "Null", + __Unused23: "Null", + __Unused24: "Null", + __Unused25: "Null", + __Unused26: "Null", + __Unused27: "Null", + __Unused28: "Null", + __Unused29: "Null", + __Unused30: "Null", + __Unused31: "Null", + __Unused32: "Null", + __Unused33: "Null", + __Unused34: "Null", + __Unused35: "Null", + __Unused36: "Null", + __Unused37: "Null", + __Unused38: "Null", + __Unused39: "Null", + __Unused40: "Null", + __Unused41: "Null", + __Unused42: "Null", + __Unused43: "Null", + __Unused44: "Null", + __Unused45: "Null", + __Unused46: "Null", + __Unused47: "Null", + __Unused48: "Null", + __Unused49: "Null", + __Unused50: "Null", + __Unused51: "Null", + __Unused52: "Null", + __Unused53: "Null", + __Unused54: "Null", + __Unused55: "Null", + __Unused56: "Null", + __Unused57: "Null", + __Unused58: "Null", + __Unused59: "Null", + __Unused60: "Null", + __Unused61: "Null", + __Unused62: "Null", + __Unused63: "Null", + __Unused64: "Null", + __Unused65: "Null", + __Unused66: "Null", + __Unused67: "Null", + __Unused68: "Null", + __Unused69: "Null", + __Unused70: "Null", + __Unused71: "Null", + __Unused72: "Null", + __Unused73: "Null", + __Unused74: "Null", + __Unused75: "Null", + __Unused76: "Null", + __Unused77: "Null", + __Unused78: "Null", + __Unused79: "Null", + __Unused80: "Null", + __Unused81: "Null", + __Unused82: "Null", + __Unused83: "Null", + __Unused84: "Null", + __Unused85: "Null", + __Unused86: "Null", + __Unused87: "Null", + __Unused88: "Null", + __Unused89: "Null", + __Unused90: "Null", + __Unused91: "Null", + __Unused92: "Null", + __Unused93: "Null", + __Unused94: "Null", + __Unused95: "Null", + __Unused96: "Null", + __Unused97: "Null", + __Unused98: "Null", + __Unused99: "Null", + AccountId: "AccountId32", + }, + }, + /** + * Lookup174: pallet_dkg::pallet::Event **/ PalletDkgEvent: { _enum: { - FeeUpdated: 'PalletDkgFeeInfo', + FeeUpdated: "PalletDkgFeeInfo", KeyRotated: { - fromJobId: 'u64', - toJobId: 'u64', - signature: 'Bytes' - } - } + fromJobId: "u64", + toJobId: "u64", + signature: "Bytes", + }, + }, }, /** - * Lookup159: pallet_dkg::types::FeeInfo + * Lookup175: pallet_dkg::types::FeeInfo **/ PalletDkgFeeInfo: { - baseFee: 'u128', - dkgValidatorFee: 'u128', - sigValidatorFee: 'u128', - refreshValidatorFee: 'u128', - storageFeePerByte: 'u128', - storageFeePerBlock: 'u128' + baseFee: "u128", + dkgValidatorFee: "u128", + sigValidatorFee: "u128", + refreshValidatorFee: "u128", + storageFeePerByte: "u128", + storageFeePerBlock: "u128", }, /** - * Lookup160: pallet_zksaas::pallet::Event + * Lookup176: pallet_zksaas::pallet::Event **/ PalletZksaasEvent: { _enum: { - FeeUpdated: 'PalletZksaasFeeInfo' - } + FeeUpdated: "PalletZksaasFeeInfo", + }, }, /** - * Lookup161: pallet_zksaas::types::FeeInfo + * Lookup177: pallet_zksaas::types::FeeInfo **/ PalletZksaasFeeInfo: { - baseFee: 'u128', - circuitFee: 'u128', - proveFee: 'u128', - storageFeePerByte: 'u128' + baseFee: "u128", + circuitFee: "u128", + proveFee: "u128", + storageFeePerByte: "u128", }, /** - * Lookup162: pallet_proxy::pallet::Event + * Lookup178: pallet_proxy::pallet::Event **/ PalletProxyEvent: { _enum: { ProxyExecuted: { - result: 'Result', + result: "Result", }, PureCreated: { - pure: 'AccountId32', - who: 'AccountId32', - proxyType: 'TangleTestnetRuntimeProxyType', - disambiguationIndex: 'u16', + pure: "AccountId32", + who: "AccountId32", + proxyType: "TangleTestnetRuntimeProxyType", + disambiguationIndex: "u16", }, Announced: { - real: 'AccountId32', - proxy: 'AccountId32', - callHash: 'H256', + real: "AccountId32", + proxy: "AccountId32", + callHash: "H256", }, ProxyAdded: { - delegator: 'AccountId32', - delegatee: 'AccountId32', - proxyType: 'TangleTestnetRuntimeProxyType', - delay: 'u64', + delegator: "AccountId32", + delegatee: "AccountId32", + proxyType: "TangleTestnetRuntimeProxyType", + delay: "u64", }, ProxyRemoved: { - delegator: 'AccountId32', - delegatee: 'AccountId32', - proxyType: 'TangleTestnetRuntimeProxyType', - delay: 'u64' - } - } + delegator: "AccountId32", + delegatee: "AccountId32", + proxyType: "TangleTestnetRuntimeProxyType", + delay: "u64", + }, + }, }, /** - * Lookup163: tangle_testnet_runtime::ProxyType + * Lookup179: tangle_testnet_runtime::ProxyType **/ TangleTestnetRuntimeProxyType: { - _enum: ['Any', 'NonTransfer', 'Governance', 'Staking'] + _enum: ["Any", "NonTransfer", "Governance", "Staking"], }, /** * Lookup165: pallet_multi_asset_delegation::pallet::Event @@ -1906,1206 +2132,1241 @@ export default { SygmaAccessSegregatorEvent: { _enum: { AccessGranted: { - palletIndex: 'u8', - extrinsicName: 'Bytes', - who: 'AccountId32' - } - } + palletIndex: "u8", + extrinsicName: "Bytes", + who: "AccountId32", + }, + }, }, /** - * Lookup169: sygma_basic_feehandler::pallet::Event + * Lookup181: sygma_basic_feehandler::pallet::Event **/ SygmaBasicFeehandlerEvent: { _enum: { FeeSet: { - domain: 'u8', - asset: 'StagingXcmV4AssetAssetId', - amount: 'u128' - } - } + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + amount: "u128", + }, + }, }, /** - * Lookup170: staging_xcm::v4::asset::AssetId + * Lookup182: staging_xcm::v4::asset::AssetId **/ - StagingXcmV4AssetAssetId: 'StagingXcmV4Location', + StagingXcmV4AssetAssetId: "StagingXcmV4Location", /** - * Lookup171: staging_xcm::v4::location::Location + * Lookup183: staging_xcm::v4::location::Location **/ StagingXcmV4Location: { - parents: 'u8', - interior: 'StagingXcmV4Junctions' + parents: "u8", + interior: "StagingXcmV4Junctions", }, /** - * Lookup172: staging_xcm::v4::junctions::Junctions + * Lookup184: staging_xcm::v4::junctions::Junctions **/ StagingXcmV4Junctions: { _enum: { - Here: 'Null', - X1: '[Lookup174;1]', - X2: '[Lookup174;2]', - X3: '[Lookup174;3]', - X4: '[Lookup174;4]', - X5: '[Lookup174;5]', - X6: '[Lookup174;6]', - X7: '[Lookup174;7]', - X8: '[Lookup174;8]' - } + Here: "Null", + X1: "[Lookup186;1]", + X2: "[Lookup186;2]", + X3: "[Lookup186;3]", + X4: "[Lookup186;4]", + X5: "[Lookup186;5]", + X6: "[Lookup186;6]", + X7: "[Lookup186;7]", + X8: "[Lookup186;8]", + }, }, /** - * Lookup174: staging_xcm::v4::junction::Junction + * Lookup186: staging_xcm::v4::junction::Junction **/ StagingXcmV4Junction: { _enum: { - Parachain: 'Compact', + Parachain: "Compact", AccountId32: { - network: 'Option', - id: '[u8;32]', + network: "Option", + id: "[u8;32]", }, AccountIndex64: { - network: 'Option', - index: 'Compact', + network: "Option", + index: "Compact", }, AccountKey20: { - network: 'Option', - key: '[u8;20]', + network: "Option", + key: "[u8;20]", }, - PalletInstance: 'u8', - GeneralIndex: 'Compact', + PalletInstance: "u8", + GeneralIndex: "Compact", GeneralKey: { - length: 'u8', - data: '[u8;32]', + length: "u8", + data: "[u8;32]", }, - OnlyChild: 'Null', + OnlyChild: "Null", Plurality: { - id: 'XcmV3JunctionBodyId', - part: 'XcmV3JunctionBodyPart', + id: "XcmV3JunctionBodyId", + part: "XcmV3JunctionBodyPart", }, - GlobalConsensus: 'StagingXcmV4JunctionNetworkId' - } + GlobalConsensus: "StagingXcmV4JunctionNetworkId", + }, }, /** - * Lookup177: staging_xcm::v4::junction::NetworkId + * Lookup189: staging_xcm::v4::junction::NetworkId **/ StagingXcmV4JunctionNetworkId: { _enum: { - ByGenesis: '[u8;32]', + ByGenesis: "[u8;32]", ByFork: { - blockNumber: 'u64', - blockHash: '[u8;32]', - }, - Polkadot: 'Null', - Kusama: 'Null', - Westend: 'Null', - Rococo: 'Null', - Wococo: 'Null', + blockNumber: "u64", + blockHash: "[u8;32]", + }, + Polkadot: "Null", + Kusama: "Null", + Westend: "Null", + Rococo: "Null", + Wococo: "Null", Ethereum: { - chainId: 'Compact', + chainId: "Compact", }, - BitcoinCore: 'Null', - BitcoinCash: 'Null', - PolkadotBulletin: 'Null' - } + BitcoinCore: "Null", + BitcoinCash: "Null", + PolkadotBulletin: "Null", + }, }, /** - * Lookup178: xcm::v3::junction::BodyId + * Lookup190: xcm::v3::junction::BodyId **/ XcmV3JunctionBodyId: { _enum: { - Unit: 'Null', - Moniker: '[u8;4]', - Index: 'Compact', - Executive: 'Null', - Technical: 'Null', - Legislative: 'Null', - Judicial: 'Null', - Defense: 'Null', - Administration: 'Null', - Treasury: 'Null' - } + Unit: "Null", + Moniker: "[u8;4]", + Index: "Compact", + Executive: "Null", + Technical: "Null", + Legislative: "Null", + Judicial: "Null", + Defense: "Null", + Administration: "Null", + Treasury: "Null", + }, }, /** - * Lookup179: xcm::v3::junction::BodyPart + * Lookup191: xcm::v3::junction::BodyPart **/ XcmV3JunctionBodyPart: { _enum: { - Voice: 'Null', + Voice: "Null", Members: { - count: 'Compact', + count: "Compact", }, Fraction: { - nom: 'Compact', - denom: 'Compact', + nom: "Compact", + denom: "Compact", }, AtLeastProportion: { - nom: 'Compact', - denom: 'Compact', + nom: "Compact", + denom: "Compact", }, MoreThanProportion: { - nom: 'Compact', - denom: 'Compact' - } - } + nom: "Compact", + denom: "Compact", + }, + }, }, /** - * Lookup187: sygma_fee_handler_router::pallet::Event + * Lookup199: sygma_fee_handler_router::pallet::Event **/ SygmaFeeHandlerRouterEvent: { _enum: { FeeHandlerSet: { - domain: 'u8', - asset: 'StagingXcmV4AssetAssetId', - handlerType: 'SygmaFeeHandlerRouterFeeHandlerType' - } - } + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + handlerType: "SygmaFeeHandlerRouterFeeHandlerType", + }, + }, }, /** - * Lookup188: sygma_fee_handler_router::pallet::FeeHandlerType + * Lookup200: sygma_fee_handler_router::pallet::FeeHandlerType **/ SygmaFeeHandlerRouterFeeHandlerType: { - _enum: ['BasicFeeHandler', 'PercentageFeeHandler', 'DynamicFeeHandler'] + _enum: ["BasicFeeHandler", "PercentageFeeHandler", "DynamicFeeHandler"], }, /** - * Lookup189: sygma_percentage_feehandler::pallet::Event + * Lookup201: sygma_percentage_feehandler::pallet::Event **/ SygmaPercentageFeehandlerEvent: { _enum: { FeeRateSet: { - domain: 'u8', - asset: 'StagingXcmV4AssetAssetId', - rateBasisPoint: 'u32', - feeLowerBound: 'u128', - feeUpperBound: 'u128' - } - } + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + rateBasisPoint: "u32", + feeLowerBound: "u128", + feeUpperBound: "u128", + }, + }, }, /** - * Lookup190: sygma_bridge::pallet::Event + * Lookup202: sygma_bridge::pallet::Event **/ SygmaBridgeEvent: { _enum: { Deposit: { - destDomainId: 'u8', - resourceId: '[u8;32]', - depositNonce: 'u64', - sender: 'AccountId32', - transferType: 'SygmaTraitsTransferType', - depositData: 'Bytes', - handlerResponse: 'Bytes', + destDomainId: "u8", + resourceId: "[u8;32]", + depositNonce: "u64", + sender: "AccountId32", + transferType: "SygmaTraitsTransferType", + depositData: "Bytes", + handlerResponse: "Bytes", }, ProposalExecution: { - originDomainId: 'u8', - depositNonce: 'u64', - dataHash: '[u8;32]', + originDomainId: "u8", + depositNonce: "u64", + dataHash: "[u8;32]", }, FailedHandlerExecution: { - error: 'Bytes', - originDomainId: 'u8', - depositNonce: 'u64', + error: "Bytes", + originDomainId: "u8", + depositNonce: "u64", }, Retry: { - depositOnBlockHeight: 'u128', - destDomainId: 'u8', - sender: 'AccountId32', + depositOnBlockHeight: "u128", + destDomainId: "u8", + sender: "AccountId32", }, BridgePaused: { - destDomainId: 'u8', + destDomainId: "u8", }, BridgeUnpaused: { - destDomainId: 'u8', + destDomainId: "u8", }, RegisterDestDomain: { - sender: 'AccountId32', - domainId: 'u8', - chainId: 'U256', + sender: "AccountId32", + domainId: "u8", + chainId: "U256", }, UnregisterDestDomain: { - sender: 'AccountId32', - domainId: 'u8', - chainId: 'U256', + sender: "AccountId32", + domainId: "u8", + chainId: "U256", }, FeeCollected: { - feePayer: 'AccountId32', - destDomainId: 'u8', - resourceId: '[u8;32]', - feeAmount: 'u128', - feeAssetId: 'StagingXcmV4AssetAssetId', + feePayer: "AccountId32", + destDomainId: "u8", + resourceId: "[u8;32]", + feeAmount: "u128", + feeAssetId: "StagingXcmV4AssetAssetId", }, AllBridgePaused: { - sender: 'AccountId32', + sender: "AccountId32", }, AllBridgeUnpaused: { - sender: 'AccountId32' - } - } + sender: "AccountId32", + }, + }, }, /** - * Lookup191: sygma_traits::TransferType + * Lookup203: sygma_traits::TransferType **/ SygmaTraitsTransferType: { - _enum: ['FungibleTransfer', 'NonFungibleTransfer', 'GenericTransfer'] + _enum: ["FungibleTransfer", "NonFungibleTransfer", "GenericTransfer"], }, /** - * Lookup192: frame_system::Phase + * Lookup204: frame_system::Phase **/ FrameSystemPhase: { _enum: { - ApplyExtrinsic: 'u32', - Finalization: 'Null', - Initialization: 'Null' - } + ApplyExtrinsic: "u32", + Finalization: "Null", + Initialization: "Null", + }, }, /** - * Lookup194: frame_system::LastRuntimeUpgradeInfo + * Lookup206: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { - specVersion: 'Compact', - specName: 'Text' + specVersion: "Compact", + specName: "Text", }, /** - * Lookup195: frame_system::CodeUpgradeAuthorization + * Lookup207: frame_system::CodeUpgradeAuthorization **/ FrameSystemCodeUpgradeAuthorization: { - codeHash: 'H256', - checkVersion: 'bool' + codeHash: "H256", + checkVersion: "bool", }, /** - * Lookup196: frame_system::pallet::Call + * Lookup208: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { remark: { - remark: 'Bytes', + remark: "Bytes", }, set_heap_pages: { - pages: 'u64', + pages: "u64", }, set_code: { - code: 'Bytes', + code: "Bytes", }, set_code_without_checks: { - code: 'Bytes', + code: "Bytes", }, set_storage: { - items: 'Vec<(Bytes,Bytes)>', + items: "Vec<(Bytes,Bytes)>", }, kill_storage: { _alias: { - keys_: 'keys', + keys_: "keys", }, - keys_: 'Vec', + keys_: "Vec", }, kill_prefix: { - prefix: 'Bytes', - subkeys: 'u32', + prefix: "Bytes", + subkeys: "u32", }, remark_with_event: { - remark: 'Bytes', + remark: "Bytes", }, - __Unused8: 'Null', + __Unused8: "Null", authorize_upgrade: { - codeHash: 'H256', + codeHash: "H256", }, authorize_upgrade_without_checks: { - codeHash: 'H256', + codeHash: "H256", }, apply_authorized_upgrade: { - code: 'Bytes' - } - } + code: "Bytes", + }, + }, }, /** - * Lookup200: frame_system::limits::BlockWeights + * Lookup212: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { - baseBlock: 'SpWeightsWeightV2Weight', - maxBlock: 'SpWeightsWeightV2Weight', - perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' + baseBlock: "SpWeightsWeightV2Weight", + maxBlock: "SpWeightsWeightV2Weight", + perClass: "FrameSupportDispatchPerDispatchClassWeightsPerClass", }, /** - * Lookup201: frame_support::dispatch::PerDispatchClass + * Lookup213: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeightsPerClass: { - normal: 'FrameSystemLimitsWeightsPerClass', - operational: 'FrameSystemLimitsWeightsPerClass', - mandatory: 'FrameSystemLimitsWeightsPerClass' + normal: "FrameSystemLimitsWeightsPerClass", + operational: "FrameSystemLimitsWeightsPerClass", + mandatory: "FrameSystemLimitsWeightsPerClass", }, /** - * Lookup202: frame_system::limits::WeightsPerClass + * Lookup214: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { - baseExtrinsic: 'SpWeightsWeightV2Weight', - maxExtrinsic: 'Option', - maxTotal: 'Option', - reserved: 'Option' + baseExtrinsic: "SpWeightsWeightV2Weight", + maxExtrinsic: "Option", + maxTotal: "Option", + reserved: "Option", }, /** - * Lookup204: frame_system::limits::BlockLength + * Lookup216: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { - max: 'FrameSupportDispatchPerDispatchClassU32' + max: "FrameSupportDispatchPerDispatchClassU32", }, /** - * Lookup205: frame_support::dispatch::PerDispatchClass + * Lookup217: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassU32: { - normal: 'u32', - operational: 'u32', - mandatory: 'u32' + normal: "u32", + operational: "u32", + mandatory: "u32", }, /** - * Lookup206: sp_weights::RuntimeDbWeight + * Lookup218: sp_weights::RuntimeDbWeight **/ SpWeightsRuntimeDbWeight: { - read: 'u64', - write: 'u64' + read: "u64", + write: "u64", }, /** - * Lookup207: sp_version::RuntimeVersion + * Lookup219: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { - specName: 'Text', - implName: 'Text', - authoringVersion: 'u32', - specVersion: 'u32', - implVersion: 'u32', - apis: 'Vec<([u8;8],u32)>', - transactionVersion: 'u32', - stateVersion: 'u8' + specName: "Text", + implName: "Text", + authoringVersion: "u32", + specVersion: "u32", + implVersion: "u32", + apis: "Vec<([u8;8],u32)>", + transactionVersion: "u32", + stateVersion: "u8", }, /** - * Lookup212: frame_system::pallet::Error + * Lookup224: frame_system::pallet::Error **/ FrameSystemError: { - _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered', 'NothingAuthorized', 'Unauthorized'] + _enum: [ + "InvalidSpecName", + "SpecVersionNeedsToIncrease", + "FailedToExtractRuntimeVersion", + "NonDefaultComposite", + "NonZeroRefCount", + "CallFiltered", + "NothingAuthorized", + "Unauthorized", + ], }, /** - * Lookup213: pallet_timestamp::pallet::Call + * Lookup225: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { set: { - now: 'Compact' - } - } + now: "Compact", + }, + }, }, /** - * Lookup214: pallet_sudo::pallet::Call + * Lookup226: pallet_sudo::pallet::Call **/ PalletSudoCall: { _enum: { sudo: { - call: 'Call', + call: "Call", }, sudo_unchecked_weight: { - call: 'Call', - weight: 'SpWeightsWeightV2Weight', + call: "Call", + weight: "SpWeightsWeightV2Weight", }, set_key: { _alias: { - new_: 'new', + new_: "new", }, - new_: 'MultiAddress', + new_: "MultiAddress", }, sudo_as: { - who: 'MultiAddress', - call: 'Call', + who: "MultiAddress", + call: "Call", }, - remove_key: 'Null' - } + remove_key: "Null", + }, }, /** - * Lookup216: pallet_assets::pallet::Call + * Lookup228: pallet_assets::pallet::Call **/ PalletAssetsCall: { _enum: { create: { - id: 'Compact', - admin: 'MultiAddress', - minBalance: 'u128', + id: "Compact", + admin: "MultiAddress", + minBalance: "u128", }, force_create: { - id: 'Compact', - owner: 'MultiAddress', - isSufficient: 'bool', - minBalance: 'Compact', + id: "Compact", + owner: "MultiAddress", + isSufficient: "bool", + minBalance: "Compact", }, start_destroy: { - id: 'Compact', + id: "Compact", }, destroy_accounts: { - id: 'Compact', + id: "Compact", }, destroy_approvals: { - id: 'Compact', + id: "Compact", }, finish_destroy: { - id: 'Compact', + id: "Compact", }, mint: { - id: 'Compact', - beneficiary: 'MultiAddress', - amount: 'Compact', + id: "Compact", + beneficiary: "MultiAddress", + amount: "Compact", }, burn: { - id: 'Compact', - who: 'MultiAddress', - amount: 'Compact', + id: "Compact", + who: "MultiAddress", + amount: "Compact", }, transfer: { - id: 'Compact', - target: 'MultiAddress', - amount: 'Compact', + id: "Compact", + target: "MultiAddress", + amount: "Compact", }, transfer_keep_alive: { - id: 'Compact', - target: 'MultiAddress', - amount: 'Compact', + id: "Compact", + target: "MultiAddress", + amount: "Compact", }, force_transfer: { - id: 'Compact', - source: 'MultiAddress', - dest: 'MultiAddress', - amount: 'Compact', + id: "Compact", + source: "MultiAddress", + dest: "MultiAddress", + amount: "Compact", }, freeze: { - id: 'Compact', - who: 'MultiAddress', + id: "Compact", + who: "MultiAddress", }, thaw: { - id: 'Compact', - who: 'MultiAddress', + id: "Compact", + who: "MultiAddress", }, freeze_asset: { - id: 'Compact', + id: "Compact", }, thaw_asset: { - id: 'Compact', + id: "Compact", }, transfer_ownership: { - id: 'Compact', - owner: 'MultiAddress', + id: "Compact", + owner: "MultiAddress", }, set_team: { - id: 'Compact', - issuer: 'MultiAddress', - admin: 'MultiAddress', - freezer: 'MultiAddress', + id: "Compact", + issuer: "MultiAddress", + admin: "MultiAddress", + freezer: "MultiAddress", }, set_metadata: { - id: 'Compact', - name: 'Bytes', - symbol: 'Bytes', - decimals: 'u8', + id: "Compact", + name: "Bytes", + symbol: "Bytes", + decimals: "u8", }, clear_metadata: { - id: 'Compact', + id: "Compact", }, force_set_metadata: { - id: 'Compact', - name: 'Bytes', - symbol: 'Bytes', - decimals: 'u8', - isFrozen: 'bool', + id: "Compact", + name: "Bytes", + symbol: "Bytes", + decimals: "u8", + isFrozen: "bool", }, force_clear_metadata: { - id: 'Compact', + id: "Compact", }, force_asset_status: { - id: 'Compact', - owner: 'MultiAddress', - issuer: 'MultiAddress', - admin: 'MultiAddress', - freezer: 'MultiAddress', - minBalance: 'Compact', - isSufficient: 'bool', - isFrozen: 'bool', + id: "Compact", + owner: "MultiAddress", + issuer: "MultiAddress", + admin: "MultiAddress", + freezer: "MultiAddress", + minBalance: "Compact", + isSufficient: "bool", + isFrozen: "bool", }, approve_transfer: { - id: 'Compact', - delegate: 'MultiAddress', - amount: 'Compact', + id: "Compact", + delegate: "MultiAddress", + amount: "Compact", }, cancel_approval: { - id: 'Compact', - delegate: 'MultiAddress', + id: "Compact", + delegate: "MultiAddress", }, force_cancel_approval: { - id: 'Compact', - owner: 'MultiAddress', - delegate: 'MultiAddress', + id: "Compact", + owner: "MultiAddress", + delegate: "MultiAddress", }, transfer_approved: { - id: 'Compact', - owner: 'MultiAddress', - destination: 'MultiAddress', - amount: 'Compact', + id: "Compact", + owner: "MultiAddress", + destination: "MultiAddress", + amount: "Compact", }, touch: { - id: 'Compact', + id: "Compact", }, refund: { - id: 'Compact', - allowBurn: 'bool', + id: "Compact", + allowBurn: "bool", }, set_min_balance: { - id: 'Compact', - minBalance: 'u128', + id: "Compact", + minBalance: "u128", }, touch_other: { - id: 'Compact', - who: 'MultiAddress', + id: "Compact", + who: "MultiAddress", }, refund_other: { - id: 'Compact', - who: 'MultiAddress', + id: "Compact", + who: "MultiAddress", }, block: { - id: 'Compact', - who: 'MultiAddress' - } - } + id: "Compact", + who: "MultiAddress", + }, + }, }, /** - * Lookup218: pallet_balances::pallet::Call + * Lookup230: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { transfer_allow_death: { - dest: 'MultiAddress', - value: 'Compact', + dest: "MultiAddress", + value: "Compact", }, - __Unused1: 'Null', + __Unused1: "Null", force_transfer: { - source: 'MultiAddress', - dest: 'MultiAddress', - value: 'Compact', + source: "MultiAddress", + dest: "MultiAddress", + value: "Compact", }, transfer_keep_alive: { - dest: 'MultiAddress', - value: 'Compact', + dest: "MultiAddress", + value: "Compact", }, transfer_all: { - dest: 'MultiAddress', - keepAlive: 'bool', + dest: "MultiAddress", + keepAlive: "bool", }, force_unreserve: { - who: 'MultiAddress', - amount: 'u128', + who: "MultiAddress", + amount: "u128", }, upgrade_accounts: { - who: 'Vec', + who: "Vec", }, - __Unused7: 'Null', + __Unused7: "Null", force_set_balance: { - who: 'MultiAddress', - newFree: 'Compact', + who: "MultiAddress", + newFree: "Compact", }, force_adjust_total_issuance: { - direction: 'PalletBalancesAdjustmentDirection', - delta: 'Compact' - } - } + direction: "PalletBalancesAdjustmentDirection", + delta: "Compact", + }, + }, }, /** - * Lookup219: pallet_balances::types::AdjustmentDirection + * Lookup231: pallet_balances::types::AdjustmentDirection **/ PalletBalancesAdjustmentDirection: { - _enum: ['Increase', 'Decrease'] + _enum: ["Increase", "Decrease"], }, /** - * Lookup220: pallet_babe::pallet::Call + * Lookup232: pallet_babe::pallet::Call **/ PalletBabeCall: { _enum: { report_equivocation: { - equivocationProof: 'SpConsensusSlotsEquivocationProof', - keyOwnerProof: 'SpSessionMembershipProof', + equivocationProof: "SpConsensusSlotsEquivocationProof", + keyOwnerProof: "SpSessionMembershipProof", }, report_equivocation_unsigned: { - equivocationProof: 'SpConsensusSlotsEquivocationProof', - keyOwnerProof: 'SpSessionMembershipProof', + equivocationProof: "SpConsensusSlotsEquivocationProof", + keyOwnerProof: "SpSessionMembershipProof", }, plan_config_change: { - config: 'SpConsensusBabeDigestsNextConfigDescriptor' - } - } + config: "SpConsensusBabeDigestsNextConfigDescriptor", + }, + }, }, /** - * Lookup221: sp_consensus_slots::EquivocationProof, sp_consensus_babe::app::Public> + * Lookup233: sp_consensus_slots::EquivocationProof, sp_consensus_babe::app::Public> **/ SpConsensusSlotsEquivocationProof: { - offender: 'SpConsensusBabeAppPublic', - slot: 'u64', - firstHeader: 'SpRuntimeHeader', - secondHeader: 'SpRuntimeHeader' + offender: "SpConsensusBabeAppPublic", + slot: "u64", + firstHeader: "SpRuntimeHeader", + secondHeader: "SpRuntimeHeader", }, /** - * Lookup222: sp_runtime::generic::header::Header + * Lookup234: sp_runtime::generic::header::Header **/ SpRuntimeHeader: { - parentHash: 'H256', - number: 'Compact', - stateRoot: 'H256', - extrinsicsRoot: 'H256', - digest: 'SpRuntimeDigest' + parentHash: "H256", + number: "Compact", + stateRoot: "H256", + extrinsicsRoot: "H256", + digest: "SpRuntimeDigest", }, /** - * Lookup223: sp_consensus_babe::app::Public + * Lookup235: sp_consensus_babe::app::Public **/ - SpConsensusBabeAppPublic: 'SpCoreSr25519Public', + SpConsensusBabeAppPublic: "SpCoreSr25519Public", /** - * Lookup225: sp_session::MembershipProof + * Lookup237: sp_session::MembershipProof **/ SpSessionMembershipProof: { - session: 'u32', - trieNodes: 'Vec', - validatorCount: 'u32' + session: "u32", + trieNodes: "Vec", + validatorCount: "u32", }, /** - * Lookup226: sp_consensus_babe::digests::NextConfigDescriptor + * Lookup238: sp_consensus_babe::digests::NextConfigDescriptor **/ SpConsensusBabeDigestsNextConfigDescriptor: { _enum: { - __Unused0: 'Null', + __Unused0: "Null", V1: { - c: '(u64,u64)', - allowedSlots: 'SpConsensusBabeAllowedSlots' - } - } + c: "(u64,u64)", + allowedSlots: "SpConsensusBabeAllowedSlots", + }, + }, }, /** - * Lookup228: sp_consensus_babe::AllowedSlots + * Lookup240: sp_consensus_babe::AllowedSlots **/ SpConsensusBabeAllowedSlots: { - _enum: ['PrimarySlots', 'PrimaryAndSecondaryPlainSlots', 'PrimaryAndSecondaryVRFSlots'] + _enum: [ + "PrimarySlots", + "PrimaryAndSecondaryPlainSlots", + "PrimaryAndSecondaryVRFSlots", + ], }, /** - * Lookup229: pallet_grandpa::pallet::Call + * Lookup241: pallet_grandpa::pallet::Call **/ PalletGrandpaCall: { _enum: { report_equivocation: { - equivocationProof: 'SpConsensusGrandpaEquivocationProof', - keyOwnerProof: 'SpCoreVoid', + equivocationProof: "SpConsensusGrandpaEquivocationProof", + keyOwnerProof: "SpCoreVoid", }, report_equivocation_unsigned: { - equivocationProof: 'SpConsensusGrandpaEquivocationProof', - keyOwnerProof: 'SpCoreVoid', + equivocationProof: "SpConsensusGrandpaEquivocationProof", + keyOwnerProof: "SpCoreVoid", }, note_stalled: { - delay: 'u64', - bestFinalizedBlockNumber: 'u64' - } - } + delay: "u64", + bestFinalizedBlockNumber: "u64", + }, + }, }, /** - * Lookup230: sp_consensus_grandpa::EquivocationProof + * Lookup242: sp_consensus_grandpa::EquivocationProof **/ SpConsensusGrandpaEquivocationProof: { - setId: 'u64', - equivocation: 'SpConsensusGrandpaEquivocation' + setId: "u64", + equivocation: "SpConsensusGrandpaEquivocation", }, /** - * Lookup231: sp_consensus_grandpa::Equivocation + * Lookup243: sp_consensus_grandpa::Equivocation **/ SpConsensusGrandpaEquivocation: { _enum: { - Prevote: 'FinalityGrandpaEquivocationPrevote', - Precommit: 'FinalityGrandpaEquivocationPrecommit' - } + Prevote: "FinalityGrandpaEquivocationPrevote", + Precommit: "FinalityGrandpaEquivocationPrecommit", + }, }, /** - * Lookup232: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> + * Lookup244: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> **/ FinalityGrandpaEquivocationPrevote: { - roundNumber: 'u64', - identity: 'SpConsensusGrandpaAppPublic', - first: '(FinalityGrandpaPrevote,SpConsensusGrandpaAppSignature)', - second: '(FinalityGrandpaPrevote,SpConsensusGrandpaAppSignature)' + roundNumber: "u64", + identity: "SpConsensusGrandpaAppPublic", + first: "(FinalityGrandpaPrevote,SpConsensusGrandpaAppSignature)", + second: "(FinalityGrandpaPrevote,SpConsensusGrandpaAppSignature)", }, /** - * Lookup233: finality_grandpa::Prevote + * Lookup245: finality_grandpa::Prevote **/ FinalityGrandpaPrevote: { - targetHash: 'H256', - targetNumber: 'u64' + targetHash: "H256", + targetNumber: "u64", }, /** - * Lookup234: sp_consensus_grandpa::app::Signature + * Lookup246: sp_consensus_grandpa::app::Signature **/ - SpConsensusGrandpaAppSignature: 'SpCoreEd25519Signature', + SpConsensusGrandpaAppSignature: "SpCoreEd25519Signature", /** - * Lookup235: sp_core::ed25519::Signature + * Lookup247: sp_core::ed25519::Signature **/ - SpCoreEd25519Signature: '[u8;64]', + SpCoreEd25519Signature: "[u8;64]", /** - * Lookup238: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> + * Lookup250: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> **/ FinalityGrandpaEquivocationPrecommit: { - roundNumber: 'u64', - identity: 'SpConsensusGrandpaAppPublic', - first: '(FinalityGrandpaPrecommit,SpConsensusGrandpaAppSignature)', - second: '(FinalityGrandpaPrecommit,SpConsensusGrandpaAppSignature)' + roundNumber: "u64", + identity: "SpConsensusGrandpaAppPublic", + first: "(FinalityGrandpaPrecommit,SpConsensusGrandpaAppSignature)", + second: "(FinalityGrandpaPrecommit,SpConsensusGrandpaAppSignature)", }, /** - * Lookup239: finality_grandpa::Precommit + * Lookup251: finality_grandpa::Precommit **/ FinalityGrandpaPrecommit: { - targetHash: 'H256', - targetNumber: 'u64' + targetHash: "H256", + targetNumber: "u64", }, /** - * Lookup241: sp_core::Void + * Lookup253: sp_core::Void **/ - SpCoreVoid: 'Null', + SpCoreVoid: "Null", /** - * Lookup242: pallet_indices::pallet::Call + * Lookup254: pallet_indices::pallet::Call **/ PalletIndicesCall: { _enum: { claim: { - index: 'u32', + index: "u32", }, transfer: { _alias: { - new_: 'new', + new_: "new", }, - new_: 'MultiAddress', - index: 'u32', + new_: "MultiAddress", + index: "u32", }, free: { - index: 'u32', + index: "u32", }, force_transfer: { _alias: { - new_: 'new', + new_: "new", }, - new_: 'MultiAddress', - index: 'u32', - freeze: 'bool', + new_: "MultiAddress", + index: "u32", + freeze: "bool", }, freeze: { - index: 'u32' - } - } + index: "u32", + }, + }, }, /** - * Lookup243: pallet_democracy::pallet::Call + * Lookup255: pallet_democracy::pallet::Call **/ PalletDemocracyCall: { _enum: { propose: { - proposal: 'FrameSupportPreimagesBounded', - value: 'Compact', + proposal: "FrameSupportPreimagesBounded", + value: "Compact", }, second: { - proposal: 'Compact', + proposal: "Compact", }, vote: { - refIndex: 'Compact', - vote: 'PalletDemocracyVoteAccountVote', + refIndex: "Compact", + vote: "PalletDemocracyVoteAccountVote", }, emergency_cancel: { - refIndex: 'u32', + refIndex: "u32", }, external_propose: { - proposal: 'FrameSupportPreimagesBounded', + proposal: "FrameSupportPreimagesBounded", }, external_propose_majority: { - proposal: 'FrameSupportPreimagesBounded', + proposal: "FrameSupportPreimagesBounded", }, external_propose_default: { - proposal: 'FrameSupportPreimagesBounded', + proposal: "FrameSupportPreimagesBounded", }, fast_track: { - proposalHash: 'H256', - votingPeriod: 'u64', - delay: 'u64', + proposalHash: "H256", + votingPeriod: "u64", + delay: "u64", }, veto_external: { - proposalHash: 'H256', + proposalHash: "H256", }, cancel_referendum: { - refIndex: 'Compact', + refIndex: "Compact", }, delegate: { - to: 'MultiAddress', - conviction: 'PalletDemocracyConviction', - balance: 'u128', + to: "MultiAddress", + conviction: "PalletDemocracyConviction", + balance: "u128", }, - undelegate: 'Null', - clear_public_proposals: 'Null', + undelegate: "Null", + clear_public_proposals: "Null", unlock: { - target: 'MultiAddress', + target: "MultiAddress", }, remove_vote: { - index: 'u32', + index: "u32", }, remove_other_vote: { - target: 'MultiAddress', - index: 'u32', + target: "MultiAddress", + index: "u32", }, blacklist: { - proposalHash: 'H256', - maybeRefIndex: 'Option', + proposalHash: "H256", + maybeRefIndex: "Option", }, cancel_proposal: { - propIndex: 'Compact', + propIndex: "Compact", }, set_metadata: { - owner: 'PalletDemocracyMetadataOwner', - maybeHash: 'Option' - } - } + owner: "PalletDemocracyMetadataOwner", + maybeHash: "Option", + }, + }, }, /** - * Lookup244: frame_support::traits::preimages::Bounded + * Lookup256: frame_support::traits::preimages::Bounded **/ FrameSupportPreimagesBounded: { _enum: { Legacy: { _alias: { - hash_: 'hash', + hash_: "hash", }, - hash_: 'H256', + hash_: "H256", }, - Inline: 'Bytes', + Inline: "Bytes", Lookup: { _alias: { - hash_: 'hash', + hash_: "hash", }, - hash_: 'H256', - len: 'u32' - } - } + hash_: "H256", + len: "u32", + }, + }, }, /** - * Lookup245: sp_runtime::traits::BlakeTwo256 + * Lookup257: sp_runtime::traits::BlakeTwo256 **/ - SpRuntimeBlakeTwo256: 'Null', + SpRuntimeBlakeTwo256: "Null", /** - * Lookup247: pallet_democracy::conviction::Conviction + * Lookup259: pallet_democracy::conviction::Conviction **/ PalletDemocracyConviction: { - _enum: ['None', 'Locked1x', 'Locked2x', 'Locked3x', 'Locked4x', 'Locked5x', 'Locked6x'] + _enum: [ + "None", + "Locked1x", + "Locked2x", + "Locked3x", + "Locked4x", + "Locked5x", + "Locked6x", + ], }, /** - * Lookup250: pallet_collective::pallet::Call + * Lookup262: pallet_collective::pallet::Call **/ PalletCollectiveCall: { _enum: { set_members: { - newMembers: 'Vec', - prime: 'Option', - oldCount: 'u32', + newMembers: "Vec", + prime: "Option", + oldCount: "u32", }, execute: { - proposal: 'Call', - lengthBound: 'Compact', + proposal: "Call", + lengthBound: "Compact", }, propose: { - threshold: 'Compact', - proposal: 'Call', - lengthBound: 'Compact', + threshold: "Compact", + proposal: "Call", + lengthBound: "Compact", }, vote: { - proposal: 'H256', - index: 'Compact', - approve: 'bool', + proposal: "H256", + index: "Compact", + approve: "bool", }, - __Unused4: 'Null', + __Unused4: "Null", disapprove_proposal: { - proposalHash: 'H256', + proposalHash: "H256", }, close: { - proposalHash: 'H256', - index: 'Compact', - proposalWeightBound: 'SpWeightsWeightV2Weight', - lengthBound: 'Compact' - } - } + proposalHash: "H256", + index: "Compact", + proposalWeightBound: "SpWeightsWeightV2Weight", + lengthBound: "Compact", + }, + }, }, /** - * Lookup251: pallet_vesting::pallet::Call + * Lookup263: pallet_vesting::pallet::Call **/ PalletVestingCall: { _enum: { - vest: 'Null', + vest: "Null", vest_other: { - target: 'MultiAddress', + target: "MultiAddress", }, vested_transfer: { - target: 'MultiAddress', - schedule: 'PalletVestingVestingInfo', + target: "MultiAddress", + schedule: "PalletVestingVestingInfo", }, force_vested_transfer: { - source: 'MultiAddress', - target: 'MultiAddress', - schedule: 'PalletVestingVestingInfo', + source: "MultiAddress", + target: "MultiAddress", + schedule: "PalletVestingVestingInfo", }, merge_schedules: { - schedule1Index: 'u32', - schedule2Index: 'u32', + schedule1Index: "u32", + schedule2Index: "u32", }, force_remove_vesting_schedule: { - target: 'MultiAddress', - scheduleIndex: 'u32' - } - } + target: "MultiAddress", + scheduleIndex: "u32", + }, + }, }, /** - * Lookup252: pallet_vesting::vesting_info::VestingInfo + * Lookup264: pallet_vesting::vesting_info::VestingInfo **/ PalletVestingVestingInfo: { - locked: 'u128', - perBlock: 'u128', - startingBlock: 'u64' + locked: "u128", + perBlock: "u128", + startingBlock: "u64", }, /** - * Lookup253: pallet_elections_phragmen::pallet::Call + * Lookup265: pallet_elections_phragmen::pallet::Call **/ PalletElectionsPhragmenCall: { _enum: { vote: { - votes: 'Vec', - value: 'Compact', + votes: "Vec", + value: "Compact", }, - remove_voter: 'Null', + remove_voter: "Null", submit_candidacy: { - candidateCount: 'Compact', + candidateCount: "Compact", }, renounce_candidacy: { - renouncing: 'PalletElectionsPhragmenRenouncing', + renouncing: "PalletElectionsPhragmenRenouncing", }, remove_member: { - who: 'MultiAddress', - slashBond: 'bool', - rerunElection: 'bool', + who: "MultiAddress", + slashBond: "bool", + rerunElection: "bool", }, clean_defunct_voters: { - numVoters: 'u32', - numDefunct: 'u32' - } - } + numVoters: "u32", + numDefunct: "u32", + }, + }, }, /** - * Lookup254: pallet_elections_phragmen::Renouncing + * Lookup266: pallet_elections_phragmen::Renouncing **/ PalletElectionsPhragmenRenouncing: { _enum: { - Member: 'Null', - RunnerUp: 'Null', - Candidate: 'Compact' - } + Member: "Null", + RunnerUp: "Null", + Candidate: "Compact", + }, }, /** - * Lookup255: pallet_election_provider_multi_phase::pallet::Call + * Lookup267: pallet_election_provider_multi_phase::pallet::Call **/ PalletElectionProviderMultiPhaseCall: { _enum: { submit_unsigned: { - rawSolution: 'PalletElectionProviderMultiPhaseRawSolution', - witness: 'PalletElectionProviderMultiPhaseSolutionOrSnapshotSize', + rawSolution: "PalletElectionProviderMultiPhaseRawSolution", + witness: "PalletElectionProviderMultiPhaseSolutionOrSnapshotSize", }, set_minimum_untrusted_score: { - maybeNextScore: 'Option', + maybeNextScore: "Option", }, set_emergency_election_result: { - supports: 'Vec<(AccountId32,SpNposElectionsSupport)>', + supports: "Vec<(AccountId32,SpNposElectionsSupport)>", }, submit: { - rawSolution: 'PalletElectionProviderMultiPhaseRawSolution', + rawSolution: "PalletElectionProviderMultiPhaseRawSolution", }, governance_fallback: { - maybeMaxVoters: 'Option', - maybeMaxTargets: 'Option' - } - } + maybeMaxVoters: "Option", + maybeMaxTargets: "Option", + }, + }, }, /** - * Lookup256: pallet_election_provider_multi_phase::RawSolution + * Lookup268: pallet_election_provider_multi_phase::RawSolution **/ PalletElectionProviderMultiPhaseRawSolution: { - solution: 'TangleTestnetRuntimeNposSolution16', - score: 'SpNposElectionsElectionScore', - round: 'u32' + solution: "TangleTestnetRuntimeNposSolution16", + score: "SpNposElectionsElectionScore", + round: "u32", }, /** - * Lookup257: tangle_testnet_runtime::NposSolution16 + * Lookup269: tangle_testnet_runtime::NposSolution16 **/ TangleTestnetRuntimeNposSolution16: { - votes1: 'Vec<(Compact,Compact)>', - votes2: 'Vec<(Compact,(Compact,Compact),Compact)>', - votes3: 'Vec<(Compact,[(Compact,Compact);2],Compact)>', - votes4: 'Vec<(Compact,[(Compact,Compact);3],Compact)>', - votes5: 'Vec<(Compact,[(Compact,Compact);4],Compact)>', - votes6: 'Vec<(Compact,[(Compact,Compact);5],Compact)>', - votes7: 'Vec<(Compact,[(Compact,Compact);6],Compact)>', - votes8: 'Vec<(Compact,[(Compact,Compact);7],Compact)>', - votes9: 'Vec<(Compact,[(Compact,Compact);8],Compact)>', - votes10: 'Vec<(Compact,[(Compact,Compact);9],Compact)>', - votes11: 'Vec<(Compact,[(Compact,Compact);10],Compact)>', - votes12: 'Vec<(Compact,[(Compact,Compact);11],Compact)>', - votes13: 'Vec<(Compact,[(Compact,Compact);12],Compact)>', - votes14: 'Vec<(Compact,[(Compact,Compact);13],Compact)>', - votes15: 'Vec<(Compact,[(Compact,Compact);14],Compact)>', - votes16: 'Vec<(Compact,[(Compact,Compact);15],Compact)>' - }, - /** - * Lookup308: pallet_election_provider_multi_phase::SolutionOrSnapshotSize + votes1: "Vec<(Compact,Compact)>", + votes2: "Vec<(Compact,(Compact,Compact),Compact)>", + votes3: + "Vec<(Compact,[(Compact,Compact);2],Compact)>", + votes4: + "Vec<(Compact,[(Compact,Compact);3],Compact)>", + votes5: + "Vec<(Compact,[(Compact,Compact);4],Compact)>", + votes6: + "Vec<(Compact,[(Compact,Compact);5],Compact)>", + votes7: + "Vec<(Compact,[(Compact,Compact);6],Compact)>", + votes8: + "Vec<(Compact,[(Compact,Compact);7],Compact)>", + votes9: + "Vec<(Compact,[(Compact,Compact);8],Compact)>", + votes10: + "Vec<(Compact,[(Compact,Compact);9],Compact)>", + votes11: + "Vec<(Compact,[(Compact,Compact);10],Compact)>", + votes12: + "Vec<(Compact,[(Compact,Compact);11],Compact)>", + votes13: + "Vec<(Compact,[(Compact,Compact);12],Compact)>", + votes14: + "Vec<(Compact,[(Compact,Compact);13],Compact)>", + votes15: + "Vec<(Compact,[(Compact,Compact);14],Compact)>", + votes16: + "Vec<(Compact,[(Compact,Compact);15],Compact)>", + }, + /** + * Lookup320: pallet_election_provider_multi_phase::SolutionOrSnapshotSize **/ PalletElectionProviderMultiPhaseSolutionOrSnapshotSize: { - voters: 'Compact', - targets: 'Compact' + voters: "Compact", + targets: "Compact", }, /** - * Lookup312: sp_npos_elections::Support + * Lookup324: sp_npos_elections::Support **/ SpNposElectionsSupport: { - total: 'u128', - voters: 'Vec<(AccountId32,u128)>' + total: "u128", + voters: "Vec<(AccountId32,u128)>", }, /** - * Lookup313: pallet_staking::pallet::pallet::Call + * Lookup325: pallet_staking::pallet::pallet::Call **/ PalletStakingPalletCall: { _enum: { bond: { - value: 'Compact', - payee: 'PalletStakingRewardDestination', + value: "Compact", + payee: "PalletStakingRewardDestination", }, bond_extra: { - maxAdditional: 'Compact', + maxAdditional: "Compact", }, unbond: { - value: 'Compact', + value: "Compact", }, withdraw_unbonded: { - numSlashingSpans: 'u32', + numSlashingSpans: "u32", }, validate: { - prefs: 'PalletStakingValidatorPrefs', + prefs: "PalletStakingValidatorPrefs", }, nominate: { - targets: 'Vec', + targets: "Vec", }, - chill: 'Null', + chill: "Null", set_payee: { - payee: 'PalletStakingRewardDestination', + payee: "PalletStakingRewardDestination", }, - set_controller: 'Null', + set_controller: "Null", set_validator_count: { _alias: { - new_: 'new', + new_: "new", }, - new_: 'Compact', + new_: "Compact", }, increase_validator_count: { - additional: 'Compact', + additional: "Compact", }, scale_validator_count: { - factor: 'Percent', + factor: "Percent", }, - force_no_eras: 'Null', - force_new_era: 'Null', + force_no_eras: "Null", + force_new_era: "Null", set_invulnerables: { - invulnerables: 'Vec', + invulnerables: "Vec", }, force_unstake: { - stash: 'AccountId32', - numSlashingSpans: 'u32', + stash: "AccountId32", + numSlashingSpans: "u32", }, - force_new_era_always: 'Null', + force_new_era_always: "Null", cancel_deferred_slash: { - era: 'u32', - slashIndices: 'Vec', + era: "u32", + slashIndices: "Vec", }, payout_stakers: { - validatorStash: 'AccountId32', - era: 'u32', + validatorStash: "AccountId32", + era: "u32", }, rebond: { - value: 'Compact', + value: "Compact", }, reap_stash: { - stash: 'AccountId32', - numSlashingSpans: 'u32', + stash: "AccountId32", + numSlashingSpans: "u32", }, kick: { - who: 'Vec', + who: "Vec", }, set_staking_configs: { - minNominatorBond: 'PalletStakingPalletConfigOpU128', - minValidatorBond: 'PalletStakingPalletConfigOpU128', - maxNominatorCount: 'PalletStakingPalletConfigOpU32', - maxValidatorCount: 'PalletStakingPalletConfigOpU32', - chillThreshold: 'PalletStakingPalletConfigOpPercent', - minCommission: 'PalletStakingPalletConfigOpPerbill', + minNominatorBond: "PalletStakingPalletConfigOpU128", + minValidatorBond: "PalletStakingPalletConfigOpU128", + maxNominatorCount: "PalletStakingPalletConfigOpU32", + maxValidatorCount: "PalletStakingPalletConfigOpU32", + chillThreshold: "PalletStakingPalletConfigOpPercent", + minCommission: "PalletStakingPalletConfigOpPerbill", }, chill_other: { - stash: 'AccountId32', + stash: "AccountId32", }, force_apply_min_commission: { - validatorStash: 'AccountId32', + validatorStash: "AccountId32", }, set_min_commission: { _alias: { - new_: 'new', + new_: "new", }, - new_: 'Perbill', + new_: "Perbill", }, payout_stakers_by_page: { - validatorStash: 'AccountId32', - era: 'u32', - page: 'u32', + validatorStash: "AccountId32", + era: "u32", + page: "u32", }, update_payee: { - controller: 'AccountId32', + controller: "AccountId32", }, deprecate_controller_batch: { - controllers: 'Vec' - } - } + controllers: "Vec", + }, + }, }, /** * Lookup316: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpU128: { _enum: { - Noop: 'Null', - Set: 'u128', - Remove: 'Null' - } + Noop: "Null", + Set: "u128", + Remove: "Null", + }, }, /** * Lookup317: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpU32: { _enum: { - Noop: 'Null', - Set: 'u32', - Remove: 'Null' - } + Noop: "Null", + Set: "u32", + Remove: "Null", + }, }, /** * Lookup318: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpPercent: { _enum: { - Noop: 'Null', - Set: 'Percent', - Remove: 'Null' - } + Noop: "Null", + Set: "Percent", + Remove: "Null", + }, }, /** * Lookup319: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpPerbill: { _enum: { - Noop: 'Null', - Set: 'Perbill', - Remove: 'Null' - } + Noop: "Null", + Set: "Perbill", + Remove: "Null", + }, }, /** * Lookup321: pallet_session::pallet::Call @@ -3114,27 +3375,27 @@ export default { _enum: { set_keys: { _alias: { - keys_: 'keys', + keys_: "keys", }, - keys_: 'TangleTestnetRuntimeOpaqueSessionKeys', - proof: 'Bytes', + keys_: "TangleTestnetRuntimeOpaqueSessionKeys", + proof: "Bytes", }, - purge_keys: 'Null' - } + purge_keys: "Null", + }, }, /** * Lookup322: tangle_testnet_runtime::opaque::SessionKeys **/ TangleTestnetRuntimeOpaqueSessionKeys: { - babe: 'SpConsensusBabeAppPublic', - grandpa: 'SpConsensusGrandpaAppPublic', - imOnline: 'PalletImOnlineSr25519AppSr25519Public', - role: 'TangleCryptoPrimitivesCryptoPublic' + babe: "SpConsensusBabeAppPublic", + grandpa: "SpConsensusGrandpaAppPublic", + imOnline: "PalletImOnlineSr25519AppSr25519Public", + role: "TangleCryptoPrimitivesCryptoPublic", }, /** * Lookup323: tangle_crypto_primitives::crypto::Public **/ - TangleCryptoPrimitivesCryptoPublic: 'SpCoreEcdsaPublic', + TangleCryptoPrimitivesCryptoPublic: "SpCoreEcdsaPublic", /** * Lookup324: sp_core::ecdsa::Public **/ @@ -3145,38 +3406,38 @@ export default { PalletTreasuryCall: { _enum: { propose_spend: { - value: 'Compact', - beneficiary: 'MultiAddress', + value: "Compact", + beneficiary: "MultiAddress", }, reject_proposal: { - proposalId: 'Compact', + proposalId: "Compact", }, approve_proposal: { - proposalId: 'Compact', + proposalId: "Compact", }, spend_local: { - amount: 'Compact', - beneficiary: 'MultiAddress', + amount: "Compact", + beneficiary: "MultiAddress", }, remove_approval: { - proposalId: 'Compact', + proposalId: "Compact", }, spend: { - assetKind: 'Null', - amount: 'Compact', - beneficiary: 'AccountId32', - validFrom: 'Option', + assetKind: "Null", + amount: "Compact", + beneficiary: "AccountId32", + validFrom: "Option", }, payout: { - index: 'u32', + index: "u32", }, check_status: { - index: 'u32', + index: "u32", }, void_spend: { - index: 'u32' - } - } + index: "u32", + }, + }, }, /** * Lookup328: pallet_bounties::pallet::Call @@ -3184,38 +3445,38 @@ export default { PalletBountiesCall: { _enum: { propose_bounty: { - value: 'Compact', - description: 'Bytes', + value: "Compact", + description: "Bytes", }, approve_bounty: { - bountyId: 'Compact', + bountyId: "Compact", }, propose_curator: { - bountyId: 'Compact', - curator: 'MultiAddress', - fee: 'Compact', + bountyId: "Compact", + curator: "MultiAddress", + fee: "Compact", }, unassign_curator: { - bountyId: 'Compact', + bountyId: "Compact", }, accept_curator: { - bountyId: 'Compact', + bountyId: "Compact", }, award_bounty: { - bountyId: 'Compact', - beneficiary: 'MultiAddress', + bountyId: "Compact", + beneficiary: "MultiAddress", }, claim_bounty: { - bountyId: 'Compact', + bountyId: "Compact", }, close_bounty: { - bountyId: 'Compact', + bountyId: "Compact", }, extend_bounty_expiry: { - bountyId: 'Compact', - remark: 'Bytes' - } - } + bountyId: "Compact", + remark: "Bytes", + }, + }, }, /** * Lookup329: pallet_child_bounties::pallet::Call @@ -3223,38 +3484,38 @@ export default { PalletChildBountiesCall: { _enum: { add_child_bounty: { - parentBountyId: 'Compact', - value: 'Compact', - description: 'Bytes', + parentBountyId: "Compact", + value: "Compact", + description: "Bytes", }, propose_curator: { - parentBountyId: 'Compact', - childBountyId: 'Compact', - curator: 'MultiAddress', - fee: 'Compact', + parentBountyId: "Compact", + childBountyId: "Compact", + curator: "MultiAddress", + fee: "Compact", }, accept_curator: { - parentBountyId: 'Compact', - childBountyId: 'Compact', + parentBountyId: "Compact", + childBountyId: "Compact", }, unassign_curator: { - parentBountyId: 'Compact', - childBountyId: 'Compact', + parentBountyId: "Compact", + childBountyId: "Compact", }, award_child_bounty: { - parentBountyId: 'Compact', - childBountyId: 'Compact', - beneficiary: 'MultiAddress', + parentBountyId: "Compact", + childBountyId: "Compact", + beneficiary: "MultiAddress", }, claim_child_bounty: { - parentBountyId: 'Compact', - childBountyId: 'Compact', + parentBountyId: "Compact", + childBountyId: "Compact", }, close_child_bounty: { - parentBountyId: 'Compact', - childBountyId: 'Compact' - } - } + parentBountyId: "Compact", + childBountyId: "Compact", + }, + }, }, /** * Lookup330: pallet_bags_list::pallet::Call @@ -3262,16 +3523,16 @@ export default { PalletBagsListCall: { _enum: { rebag: { - dislocated: 'MultiAddress', + dislocated: "MultiAddress", }, put_in_front_of: { - lighter: 'MultiAddress', + lighter: "MultiAddress", }, put_in_front_of_other: { - heavier: 'MultiAddress', - lighter: 'MultiAddress' - } - } + heavier: "MultiAddress", + lighter: "MultiAddress", + }, + }, }, /** * Lookup331: pallet_nomination_pools::pallet::Call @@ -3279,155 +3540,160 @@ export default { PalletNominationPoolsCall: { _enum: { join: { - amount: 'Compact', - poolId: 'u32', + amount: "Compact", + poolId: "u32", }, bond_extra: { - extra: 'PalletNominationPoolsBondExtra', + extra: "PalletNominationPoolsBondExtra", }, - claim_payout: 'Null', + claim_payout: "Null", unbond: { - memberAccount: 'MultiAddress', - unbondingPoints: 'Compact', + memberAccount: "MultiAddress", + unbondingPoints: "Compact", }, pool_withdraw_unbonded: { - poolId: 'u32', - numSlashingSpans: 'u32', + poolId: "u32", + numSlashingSpans: "u32", }, withdraw_unbonded: { - memberAccount: 'MultiAddress', - numSlashingSpans: 'u32', + memberAccount: "MultiAddress", + numSlashingSpans: "u32", }, create: { - amount: 'Compact', - root: 'MultiAddress', - nominator: 'MultiAddress', - bouncer: 'MultiAddress', + amount: "Compact", + root: "MultiAddress", + nominator: "MultiAddress", + bouncer: "MultiAddress", }, create_with_pool_id: { - amount: 'Compact', - root: 'MultiAddress', - nominator: 'MultiAddress', - bouncer: 'MultiAddress', - poolId: 'u32', + amount: "Compact", + root: "MultiAddress", + nominator: "MultiAddress", + bouncer: "MultiAddress", + poolId: "u32", }, nominate: { - poolId: 'u32', - validators: 'Vec', + poolId: "u32", + validators: "Vec", }, set_state: { - poolId: 'u32', - state: 'PalletNominationPoolsPoolState', + poolId: "u32", + state: "PalletNominationPoolsPoolState", }, set_metadata: { - poolId: 'u32', - metadata: 'Bytes', + poolId: "u32", + metadata: "Bytes", }, set_configs: { - minJoinBond: 'PalletNominationPoolsConfigOpU128', - minCreateBond: 'PalletNominationPoolsConfigOpU128', - maxPools: 'PalletNominationPoolsConfigOpU32', - maxMembers: 'PalletNominationPoolsConfigOpU32', - maxMembersPerPool: 'PalletNominationPoolsConfigOpU32', - globalMaxCommission: 'PalletNominationPoolsConfigOpPerbill', + minJoinBond: "PalletNominationPoolsConfigOpU128", + minCreateBond: "PalletNominationPoolsConfigOpU128", + maxPools: "PalletNominationPoolsConfigOpU32", + maxMembers: "PalletNominationPoolsConfigOpU32", + maxMembersPerPool: "PalletNominationPoolsConfigOpU32", + globalMaxCommission: "PalletNominationPoolsConfigOpPerbill", }, update_roles: { - poolId: 'u32', - newRoot: 'PalletNominationPoolsConfigOpAccountId32', - newNominator: 'PalletNominationPoolsConfigOpAccountId32', - newBouncer: 'PalletNominationPoolsConfigOpAccountId32', + poolId: "u32", + newRoot: "PalletNominationPoolsConfigOpAccountId32", + newNominator: "PalletNominationPoolsConfigOpAccountId32", + newBouncer: "PalletNominationPoolsConfigOpAccountId32", }, chill: { - poolId: 'u32', + poolId: "u32", }, bond_extra_other: { - member: 'MultiAddress', - extra: 'PalletNominationPoolsBondExtra', + member: "MultiAddress", + extra: "PalletNominationPoolsBondExtra", }, set_claim_permission: { - permission: 'PalletNominationPoolsClaimPermission', + permission: "PalletNominationPoolsClaimPermission", }, claim_payout_other: { - other: 'AccountId32', + other: "AccountId32", }, set_commission: { - poolId: 'u32', - newCommission: 'Option<(Perbill,AccountId32)>', + poolId: "u32", + newCommission: "Option<(Perbill,AccountId32)>", }, set_commission_max: { - poolId: 'u32', - maxCommission: 'Perbill', + poolId: "u32", + maxCommission: "Perbill", }, set_commission_change_rate: { - poolId: 'u32', - changeRate: 'PalletNominationPoolsCommissionChangeRate', + poolId: "u32", + changeRate: "PalletNominationPoolsCommissionChangeRate", }, claim_commission: { - poolId: 'u32', + poolId: "u32", }, adjust_pool_deposit: { - poolId: 'u32', + poolId: "u32", }, set_commission_claim_permission: { - poolId: 'u32', - permission: 'Option' - } - } + poolId: "u32", + permission: "Option", + }, + }, }, /** * Lookup332: pallet_nomination_pools::BondExtra **/ PalletNominationPoolsBondExtra: { _enum: { - FreeBalance: 'u128', - Rewards: 'Null' - } + FreeBalance: "u128", + Rewards: "Null", + }, }, /** * Lookup333: pallet_nomination_pools::ConfigOp **/ PalletNominationPoolsConfigOpU128: { _enum: { - Noop: 'Null', - Set: 'u128', - Remove: 'Null' - } + Noop: "Null", + Set: "u128", + Remove: "Null", + }, }, /** * Lookup334: pallet_nomination_pools::ConfigOp **/ PalletNominationPoolsConfigOpU32: { _enum: { - Noop: 'Null', - Set: 'u32', - Remove: 'Null' - } + Noop: "Null", + Set: "u32", + Remove: "Null", + }, }, /** * Lookup335: pallet_nomination_pools::ConfigOp **/ PalletNominationPoolsConfigOpPerbill: { _enum: { - Noop: 'Null', - Set: 'Perbill', - Remove: 'Null' - } + Noop: "Null", + Set: "Perbill", + Remove: "Null", + }, }, /** * Lookup336: pallet_nomination_pools::ConfigOp **/ PalletNominationPoolsConfigOpAccountId32: { _enum: { - Noop: 'Null', - Set: 'AccountId32', - Remove: 'Null' - } + Noop: "Null", + Set: "AccountId32", + Remove: "Null", + }, }, /** * Lookup337: pallet_nomination_pools::ClaimPermission **/ PalletNominationPoolsClaimPermission: { - _enum: ['Permissioned', 'PermissionlessCompound', 'PermissionlessWithdraw', 'PermissionlessAll'] + _enum: [ + "Permissioned", + "PermissionlessCompound", + "PermissionlessWithdraw", + "PermissionlessAll", + ], }, /** * Lookup338: pallet_scheduler::pallet::Call @@ -3435,39 +3701,39 @@ export default { PalletSchedulerCall: { _enum: { schedule: { - when: 'u64', - maybePeriodic: 'Option<(u64,u32)>', - priority: 'u8', - call: 'Call', + when: "u64", + maybePeriodic: "Option<(u64,u32)>", + priority: "u8", + call: "Call", }, cancel: { - when: 'u64', - index: 'u32', + when: "u64", + index: "u32", }, schedule_named: { - id: '[u8;32]', - when: 'u64', - maybePeriodic: 'Option<(u64,u32)>', - priority: 'u8', - call: 'Call', + id: "[u8;32]", + when: "u64", + maybePeriodic: "Option<(u64,u32)>", + priority: "u8", + call: "Call", }, cancel_named: { - id: '[u8;32]', + id: "[u8;32]", }, schedule_after: { - after: 'u64', - maybePeriodic: 'Option<(u64,u32)>', - priority: 'u8', - call: 'Call', + after: "u64", + maybePeriodic: "Option<(u64,u32)>", + priority: "u8", + call: "Call", }, schedule_named_after: { - id: '[u8;32]', - after: 'u64', - maybePeriodic: 'Option<(u64,u32)>', - priority: 'u8', - call: 'Call' - } - } + id: "[u8;32]", + after: "u64", + maybePeriodic: "Option<(u64,u32)>", + priority: "u8", + call: "Call", + }, + }, }, /** * Lookup340: pallet_preimage::pallet::Call @@ -3475,30 +3741,30 @@ export default { PalletPreimageCall: { _enum: { note_preimage: { - bytes: 'Bytes', + bytes: "Bytes", }, unnote_preimage: { _alias: { - hash_: 'hash', + hash_: "hash", }, - hash_: 'H256', + hash_: "H256", }, request_preimage: { _alias: { - hash_: 'hash', + hash_: "hash", }, - hash_: 'H256', + hash_: "H256", }, unrequest_preimage: { _alias: { - hash_: 'hash', + hash_: "hash", }, - hash_: 'H256', + hash_: "H256", }, ensure_updated: { - hashes: 'Vec' - } - } + hashes: "Vec", + }, + }, }, /** * Lookup341: pallet_tx_pause::pallet::Call @@ -3506,12 +3772,12 @@ export default { PalletTxPauseCall: { _enum: { pause: { - fullName: '(Bytes,Bytes)', + fullName: "(Bytes,Bytes)", }, unpause: { - ident: '(Bytes,Bytes)' - } - } + ident: "(Bytes,Bytes)", + }, + }, }, /** * Lookup342: pallet_im_online::pallet::Call @@ -3519,250 +3785,250 @@ export default { PalletImOnlineCall: { _enum: { heartbeat: { - heartbeat: 'PalletImOnlineHeartbeat', - signature: 'PalletImOnlineSr25519AppSr25519Signature' - } - } + heartbeat: "PalletImOnlineHeartbeat", + signature: "PalletImOnlineSr25519AppSr25519Signature", + }, + }, }, /** * Lookup343: pallet_im_online::Heartbeat **/ PalletImOnlineHeartbeat: { - blockNumber: 'u64', - sessionIndex: 'u32', - authorityIndex: 'u32', - validatorsLen: 'u32' + blockNumber: "u64", + sessionIndex: "u32", + authorityIndex: "u32", + validatorsLen: "u32", }, /** * Lookup344: pallet_im_online::sr25519::app_sr25519::Signature **/ - PalletImOnlineSr25519AppSr25519Signature: 'SpCoreSr25519Signature', + PalletImOnlineSr25519AppSr25519Signature: "SpCoreSr25519Signature", /** * Lookup345: sp_core::sr25519::Signature **/ - SpCoreSr25519Signature: '[u8;64]', + SpCoreSr25519Signature: "[u8;64]", /** * Lookup346: pallet_identity::pallet::Call **/ PalletIdentityCall: { _enum: { add_registrar: { - account: 'MultiAddress', + account: "MultiAddress", }, set_identity: { - info: 'PalletIdentityLegacyIdentityInfo', + info: "PalletIdentityLegacyIdentityInfo", }, set_subs: { - subs: 'Vec<(AccountId32,Data)>', + subs: "Vec<(AccountId32,Data)>", }, - clear_identity: 'Null', + clear_identity: "Null", request_judgement: { - regIndex: 'Compact', - maxFee: 'Compact', + regIndex: "Compact", + maxFee: "Compact", }, cancel_request: { - regIndex: 'u32', + regIndex: "u32", }, set_fee: { - index: 'Compact', - fee: 'Compact', + index: "Compact", + fee: "Compact", }, set_account_id: { _alias: { - new_: 'new', + new_: "new", }, - index: 'Compact', - new_: 'MultiAddress', + index: "Compact", + new_: "MultiAddress", }, set_fields: { - index: 'Compact', - fields: 'u64', + index: "Compact", + fields: "u64", }, provide_judgement: { - regIndex: 'Compact', - target: 'MultiAddress', - judgement: 'PalletIdentityJudgement', - identity: 'H256', + regIndex: "Compact", + target: "MultiAddress", + judgement: "PalletIdentityJudgement", + identity: "H256", }, kill_identity: { - target: 'MultiAddress', + target: "MultiAddress", }, add_sub: { - sub: 'MultiAddress', - data: 'Data', + sub: "MultiAddress", + data: "Data", }, rename_sub: { - sub: 'MultiAddress', - data: 'Data', + sub: "MultiAddress", + data: "Data", }, remove_sub: { - sub: 'MultiAddress', + sub: "MultiAddress", }, - quit_sub: 'Null', + quit_sub: "Null", add_username_authority: { - authority: 'MultiAddress', - suffix: 'Bytes', - allocation: 'u32', + authority: "MultiAddress", + suffix: "Bytes", + allocation: "u32", }, remove_username_authority: { - authority: 'MultiAddress', + authority: "MultiAddress", }, set_username_for: { - who: 'MultiAddress', - username: 'Bytes', - signature: 'Option', + who: "MultiAddress", + username: "Bytes", + signature: "Option", }, accept_username: { - username: 'Bytes', + username: "Bytes", }, remove_expired_approval: { - username: 'Bytes', + username: "Bytes", }, set_primary_username: { - username: 'Bytes', + username: "Bytes", }, remove_dangling_username: { - username: 'Bytes' - } - } + username: "Bytes", + }, + }, }, /** * Lookup347: pallet_identity::legacy::IdentityInfo **/ PalletIdentityLegacyIdentityInfo: { - additional: 'Vec<(Data,Data)>', - display: 'Data', - legal: 'Data', - web: 'Data', - riot: 'Data', - email: 'Data', - pgpFingerprint: 'Option<[u8;20]>', - image: 'Data', - twitter: 'Data' + additional: "Vec<(Data,Data)>", + display: "Data", + legal: "Data", + web: "Data", + riot: "Data", + email: "Data", + pgpFingerprint: "Option<[u8;20]>", + image: "Data", + twitter: "Data", }, /** * Lookup383: pallet_identity::types::Judgement **/ PalletIdentityJudgement: { _enum: { - Unknown: 'Null', - FeePaid: 'u128', - Reasonable: 'Null', - KnownGood: 'Null', - OutOfDate: 'Null', - LowQuality: 'Null', - Erroneous: 'Null' - } + Unknown: "Null", + FeePaid: "u128", + Reasonable: "Null", + KnownGood: "Null", + OutOfDate: "Null", + LowQuality: "Null", + Erroneous: "Null", + }, }, /** * Lookup385: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { - Ed25519: 'SpCoreEd25519Signature', - Sr25519: 'SpCoreSr25519Signature', - Ecdsa: 'SpCoreEcdsaSignature' - } + Ed25519: "SpCoreEd25519Signature", + Sr25519: "SpCoreSr25519Signature", + Ecdsa: "SpCoreEcdsaSignature", + }, }, /** * Lookup386: sp_core::ecdsa::Signature **/ - SpCoreEcdsaSignature: '[u8;65]', + SpCoreEcdsaSignature: "[u8;65]", /** * Lookup388: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { batch: { - calls: 'Vec', + calls: "Vec", }, as_derivative: { - index: 'u16', - call: 'Call', + index: "u16", + call: "Call", }, batch_all: { - calls: 'Vec', + calls: "Vec", }, dispatch_as: { - asOrigin: 'TangleTestnetRuntimeOriginCaller', - call: 'Call', + asOrigin: "TangleTestnetRuntimeOriginCaller", + call: "Call", }, force_batch: { - calls: 'Vec', + calls: "Vec", }, with_weight: { - call: 'Call', - weight: 'SpWeightsWeightV2Weight' - } - } + call: "Call", + weight: "SpWeightsWeightV2Weight", + }, + }, }, /** * Lookup390: tangle_testnet_runtime::OriginCaller **/ TangleTestnetRuntimeOriginCaller: { _enum: { - system: 'FrameSupportDispatchRawOrigin', - __Unused1: 'Null', - __Unused2: 'Null', - Void: 'SpCoreVoid', - __Unused4: 'Null', - __Unused5: 'Null', - __Unused6: 'Null', - __Unused7: 'Null', - __Unused8: 'Null', - __Unused9: 'Null', - __Unused10: 'Null', - __Unused11: 'Null', - Council: 'PalletCollectiveRawOrigin', - __Unused13: 'Null', - __Unused14: 'Null', - __Unused15: 'Null', - __Unused16: 'Null', - __Unused17: 'Null', - __Unused18: 'Null', - __Unused19: 'Null', - __Unused20: 'Null', - __Unused21: 'Null', - __Unused22: 'Null', - __Unused23: 'Null', - __Unused24: 'Null', - __Unused25: 'Null', - __Unused26: 'Null', - __Unused27: 'Null', - __Unused28: 'Null', - __Unused29: 'Null', - __Unused30: 'Null', - __Unused31: 'Null', - Ethereum: 'PalletEthereumRawOrigin' - } + system: "FrameSupportDispatchRawOrigin", + __Unused1: "Null", + __Unused2: "Null", + Void: "SpCoreVoid", + __Unused4: "Null", + __Unused5: "Null", + __Unused6: "Null", + __Unused7: "Null", + __Unused8: "Null", + __Unused9: "Null", + __Unused10: "Null", + __Unused11: "Null", + Council: "PalletCollectiveRawOrigin", + __Unused13: "Null", + __Unused14: "Null", + __Unused15: "Null", + __Unused16: "Null", + __Unused17: "Null", + __Unused18: "Null", + __Unused19: "Null", + __Unused20: "Null", + __Unused21: "Null", + __Unused22: "Null", + __Unused23: "Null", + __Unused24: "Null", + __Unused25: "Null", + __Unused26: "Null", + __Unused27: "Null", + __Unused28: "Null", + __Unused29: "Null", + __Unused30: "Null", + __Unused31: "Null", + Ethereum: "PalletEthereumRawOrigin", + }, }, /** * Lookup391: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { - Root: 'Null', - Signed: 'AccountId32', - None: 'Null' - } + Root: "Null", + Signed: "AccountId32", + None: "Null", + }, }, /** * Lookup392: pallet_collective::RawOrigin **/ PalletCollectiveRawOrigin: { _enum: { - Members: '(u32,u32)', - Member: 'AccountId32', - _Phantom: 'Null' - } + Members: "(u32,u32)", + Member: "AccountId32", + _Phantom: "Null", + }, }, /** * Lookup393: pallet_ethereum::RawOrigin **/ PalletEthereumRawOrigin: { _enum: { - EthereumTransaction: 'H160' - } + EthereumTransaction: "H160", + }, }, /** * Lookup394: pallet_multisig::pallet::Call @@ -3770,30 +4036,30 @@ export default { PalletMultisigCall: { _enum: { as_multi_threshold_1: { - otherSignatories: 'Vec', - call: 'Call', + otherSignatories: "Vec", + call: "Call", }, as_multi: { - threshold: 'u16', - otherSignatories: 'Vec', - maybeTimepoint: 'Option', - call: 'Call', - maxWeight: 'SpWeightsWeightV2Weight', + threshold: "u16", + otherSignatories: "Vec", + maybeTimepoint: "Option", + call: "Call", + maxWeight: "SpWeightsWeightV2Weight", }, approve_as_multi: { - threshold: 'u16', - otherSignatories: 'Vec', - maybeTimepoint: 'Option', - callHash: '[u8;32]', - maxWeight: 'SpWeightsWeightV2Weight', + threshold: "u16", + otherSignatories: "Vec", + maybeTimepoint: "Option", + callHash: "[u8;32]", + maxWeight: "SpWeightsWeightV2Weight", }, cancel_as_multi: { - threshold: 'u16', - otherSignatories: 'Vec', - timepoint: 'PalletMultisigTimepoint', - callHash: '[u8;32]' - } - } + threshold: "u16", + otherSignatories: "Vec", + timepoint: "PalletMultisigTimepoint", + callHash: "[u8;32]", + }, + }, }, /** * Lookup396: pallet_ethereum::pallet::Call @@ -3801,88 +4067,88 @@ export default { PalletEthereumCall: { _enum: { transact: { - transaction: 'EthereumTransactionTransactionV2' - } - } + transaction: "EthereumTransactionTransactionV2", + }, + }, }, /** * Lookup397: ethereum::transaction::TransactionV2 **/ EthereumTransactionTransactionV2: { _enum: { - Legacy: 'EthereumTransactionLegacyTransaction', - EIP2930: 'EthereumTransactionEip2930Transaction', - EIP1559: 'EthereumTransactionEip1559Transaction' - } + Legacy: "EthereumTransactionLegacyTransaction", + EIP2930: "EthereumTransactionEip2930Transaction", + EIP1559: "EthereumTransactionEip1559Transaction", + }, }, /** * Lookup398: ethereum::transaction::LegacyTransaction **/ EthereumTransactionLegacyTransaction: { - nonce: 'U256', - gasPrice: 'U256', - gasLimit: 'U256', - action: 'EthereumTransactionTransactionAction', - value: 'U256', - input: 'Bytes', - signature: 'EthereumTransactionTransactionSignature' + nonce: "U256", + gasPrice: "U256", + gasLimit: "U256", + action: "EthereumTransactionTransactionAction", + value: "U256", + input: "Bytes", + signature: "EthereumTransactionTransactionSignature", }, /** * Lookup399: ethereum::transaction::TransactionAction **/ EthereumTransactionTransactionAction: { _enum: { - Call: 'H160', - Create: 'Null' - } + Call: "H160", + Create: "Null", + }, }, /** * Lookup400: ethereum::transaction::TransactionSignature **/ EthereumTransactionTransactionSignature: { - v: 'u64', - r: 'H256', - s: 'H256' + v: "u64", + r: "H256", + s: "H256", }, /** * Lookup402: ethereum::transaction::EIP2930Transaction **/ EthereumTransactionEip2930Transaction: { - chainId: 'u64', - nonce: 'U256', - gasPrice: 'U256', - gasLimit: 'U256', - action: 'EthereumTransactionTransactionAction', - value: 'U256', - input: 'Bytes', - accessList: 'Vec', - oddYParity: 'bool', - r: 'H256', - s: 'H256' + chainId: "u64", + nonce: "U256", + gasPrice: "U256", + gasLimit: "U256", + action: "EthereumTransactionTransactionAction", + value: "U256", + input: "Bytes", + accessList: "Vec", + oddYParity: "bool", + r: "H256", + s: "H256", }, /** * Lookup404: ethereum::transaction::AccessListItem **/ EthereumTransactionAccessListItem: { - address: 'H160', - storageKeys: 'Vec' + address: "H160", + storageKeys: "Vec", }, /** * Lookup405: ethereum::transaction::EIP1559Transaction **/ EthereumTransactionEip1559Transaction: { - chainId: 'u64', - nonce: 'U256', - maxPriorityFeePerGas: 'U256', - maxFeePerGas: 'U256', - gasLimit: 'U256', - action: 'EthereumTransactionTransactionAction', - value: 'U256', - input: 'Bytes', - accessList: 'Vec', - oddYParity: 'bool', - r: 'H256', - s: 'H256' + chainId: "u64", + nonce: "U256", + maxPriorityFeePerGas: "U256", + maxFeePerGas: "U256", + gasLimit: "U256", + action: "EthereumTransactionTransactionAction", + value: "U256", + input: "Bytes", + accessList: "Vec", + oddYParity: "bool", + r: "H256", + s: "H256", }, /** * Lookup406: pallet_evm::pallet::Call @@ -3890,42 +4156,42 @@ export default { PalletEvmCall: { _enum: { withdraw: { - address: 'H160', - value: 'u128', + address: "H160", + value: "u128", }, call: { - source: 'H160', - target: 'H160', - input: 'Bytes', - value: 'U256', - gasLimit: 'u64', - maxFeePerGas: 'U256', - maxPriorityFeePerGas: 'Option', - nonce: 'Option', - accessList: 'Vec<(H160,Vec)>', + source: "H160", + target: "H160", + input: "Bytes", + value: "U256", + gasLimit: "u64", + maxFeePerGas: "U256", + maxPriorityFeePerGas: "Option", + nonce: "Option", + accessList: "Vec<(H160,Vec)>", }, create: { - source: 'H160', - init: 'Bytes', - value: 'U256', - gasLimit: 'u64', - maxFeePerGas: 'U256', - maxPriorityFeePerGas: 'Option', - nonce: 'Option', - accessList: 'Vec<(H160,Vec)>', + source: "H160", + init: "Bytes", + value: "U256", + gasLimit: "u64", + maxFeePerGas: "U256", + maxPriorityFeePerGas: "Option", + nonce: "Option", + accessList: "Vec<(H160,Vec)>", }, create2: { - source: 'H160', - init: 'Bytes', - salt: 'H256', - value: 'U256', - gasLimit: 'u64', - maxFeePerGas: 'U256', - maxPriorityFeePerGas: 'Option', - nonce: 'Option', - accessList: 'Vec<(H160,Vec)>' - } - } + source: "H160", + init: "Bytes", + salt: "H256", + value: "U256", + gasLimit: "u64", + maxFeePerGas: "U256", + maxPriorityFeePerGas: "Option", + nonce: "Option", + accessList: "Vec<(H160,Vec)>", + }, + }, }, /** * Lookup410: pallet_dynamic_fee::pallet::Call @@ -3933,9 +4199,9 @@ export default { PalletDynamicFeeCall: { _enum: { note_min_gas_price_target: { - target: 'U256' - } - } + target: "U256", + }, + }, }, /** * Lookup411: pallet_base_fee::pallet::Call @@ -3943,12 +4209,12 @@ export default { PalletBaseFeeCall: { _enum: { set_base_fee_per_gas: { - fee: 'U256', + fee: "U256", }, set_elasticity: { - elasticity: 'Permill' - } - } + elasticity: "Permill", + }, + }, }, /** * Lookup412: pallet_hotfix_sufficients::pallet::Call @@ -3956,9 +4222,9 @@ export default { PalletHotfixSufficientsCall: { _enum: { hotfix_inc_account_sufficients: { - addresses: 'Vec' - } - } + addresses: "Vec", + }, + }, }, /** * Lookup414: pallet_airdrop_claims::pallet::Call @@ -3966,61 +4232,61 @@ export default { PalletAirdropClaimsCall: { _enum: { claim: { - dest: 'Option', - signer: 'Option', - signature: 'PalletAirdropClaimsUtilsMultiAddressSignature', + dest: "Option", + signer: "Option", + signature: "PalletAirdropClaimsUtilsMultiAddressSignature", }, mint_claim: { - who: 'PalletAirdropClaimsUtilsMultiAddress', - value: 'u128', - vestingSchedule: 'Option>', - statement: 'Option', + who: "PalletAirdropClaimsUtilsMultiAddress", + value: "u128", + vestingSchedule: "Option>", + statement: "Option", }, claim_attest: { - dest: 'Option', - signer: 'Option', - signature: 'PalletAirdropClaimsUtilsMultiAddressSignature', - statement: 'Bytes', + dest: "Option", + signer: "Option", + signature: "PalletAirdropClaimsUtilsMultiAddressSignature", + statement: "Bytes", }, - __Unused3: 'Null', + __Unused3: "Null", move_claim: { _alias: { - new_: 'new', + new_: "new", }, - old: 'PalletAirdropClaimsUtilsMultiAddress', - new_: 'PalletAirdropClaimsUtilsMultiAddress', + old: "PalletAirdropClaimsUtilsMultiAddress", + new_: "PalletAirdropClaimsUtilsMultiAddress", }, force_set_expiry_config: { - expiryBlock: 'u64', - dest: 'PalletAirdropClaimsUtilsMultiAddress', + expiryBlock: "u64", + dest: "PalletAirdropClaimsUtilsMultiAddress", }, claim_signed: { - dest: 'Option' - } - } + dest: "Option", + }, + }, }, /** * Lookup416: pallet_airdrop_claims::utils::MultiAddressSignature **/ PalletAirdropClaimsUtilsMultiAddressSignature: { _enum: { - EVM: 'PalletAirdropClaimsUtilsEthereumAddressEcdsaSignature', - Native: 'PalletAirdropClaimsUtilsSr25519Signature' - } + EVM: "PalletAirdropClaimsUtilsEthereumAddressEcdsaSignature", + Native: "PalletAirdropClaimsUtilsSr25519Signature", + }, }, /** * Lookup417: pallet_airdrop_claims::utils::ethereum_address::EcdsaSignature **/ - PalletAirdropClaimsUtilsEthereumAddressEcdsaSignature: '[u8;65]', + PalletAirdropClaimsUtilsEthereumAddressEcdsaSignature: "[u8;65]", /** * Lookup418: pallet_airdrop_claims::utils::Sr25519Signature **/ - PalletAirdropClaimsUtilsSr25519Signature: 'SpCoreSr25519Signature', + PalletAirdropClaimsUtilsSr25519Signature: "SpCoreSr25519Signature", /** * Lookup424: pallet_airdrop_claims::StatementKind **/ PalletAirdropClaimsStatementKind: { - _enum: ['Regular', 'Safe'] + _enum: ["Regular", "Safe"], }, /** * Lookup425: pallet_roles::pallet::Call @@ -4028,450 +4294,799 @@ export default { PalletRolesCall: { _enum: { create_profile: { - profile: 'PalletRolesProfile', - maxActiveServices: 'Option', + profile: "PalletRolesProfile", + maxActiveServices: "Option", }, update_profile: { - updatedProfile: 'PalletRolesProfile', + updatedProfile: "PalletRolesProfile", }, - delete_profile: 'Null', - chill: 'Null', + delete_profile: "Null", + chill: "Null", unbond_funds: { - amount: 'Compact', + amount: "Compact", }, - withdraw_unbonded: 'Null', + withdraw_unbonded: "Null", payout_stakers: { - validatorStash: 'AccountId32', - era: 'u32', + validatorStash: "AccountId32", + era: "u32", }, set_min_restaking_bond: { - minRestakingBond: 'u128' - } - } + minRestakingBond: "u128", + }, + }, }, /** * Lookup426: pallet_roles::profile::Profile **/ PalletRolesProfile: { _enum: { - Independent: 'PalletRolesProfileIndependentRestakeProfile', - Shared: 'PalletRolesProfileSharedRestakeProfile' - } + Independent: "PalletRolesProfileIndependentRestakeProfile", + Shared: "PalletRolesProfileSharedRestakeProfile", + }, }, /** * Lookup427: pallet_roles::profile::IndependentRestakeProfile **/ PalletRolesProfileIndependentRestakeProfile: { - records: 'Vec' + records: "Vec", }, /** * Lookup429: pallet_roles::profile::Record **/ PalletRolesProfileRecord: { - role: 'TanglePrimitivesRolesRoleType', - amount: 'Option' + role: "TanglePrimitivesRolesRoleType", + amount: "Option", }, /** - * Lookup432: pallet_roles::profile::SharedRestakeProfile + * Lookup442: pallet_roles::profile::SharedRestakeProfile **/ PalletRolesProfileSharedRestakeProfile: { - records: 'Vec', - amount: 'u128' + records: "Vec", + amount: "u128", }, /** - * Lookup433: pallet_jobs::module::Call + * Lookup443: pallet_jobs::module::Call **/ PalletJobsModuleCall: { _enum: { submit_job: { - job: 'TanglePrimitivesJobsJobSubmission', + job: "TanglePrimitivesJobsJobSubmission", }, submit_job_result: { - roleType: 'TanglePrimitivesRolesRoleType', - jobId: 'u64', - result: 'TanglePrimitivesJobsJobResult', + roleType: "TanglePrimitivesRolesRoleType", + jobId: "u64", + result: "TanglePrimitivesJobsJobResult", }, - withdraw_rewards: 'Null', + withdraw_rewards: "Null", report_inactive_validator: { - roleType: 'TanglePrimitivesRolesRoleType', - jobId: 'u64', - validator: 'AccountId32', - offence: 'TanglePrimitivesJobsValidatorOffenceType', - signatures: 'Vec', + roleType: "TanglePrimitivesRolesRoleType", + jobId: "u64", + validator: "AccountId32", + offence: "TanglePrimitivesJobsValidatorOffenceType", + signatures: "Vec", }, set_permitted_caller: { - roleType: 'TanglePrimitivesRolesRoleType', - jobId: 'u64', - newPermittedCaller: 'AccountId32', + roleType: "TanglePrimitivesRolesRoleType", + jobId: "u64", + newPermittedCaller: "AccountId32", }, set_time_fee: { - newFee: 'u128', + newFee: "u128", }, submit_misbehavior: { - misbehavior: 'TanglePrimitivesMisbehaviorMisbehaviorSubmission', + misbehavior: "TanglePrimitivesMisbehaviorMisbehaviorSubmission", }, extend_job_result_ttl: { - roleType: 'TanglePrimitivesRolesRoleType', - jobId: 'u64', - extendBy: 'u64' - } - } + roleType: "TanglePrimitivesRolesRoleType", + jobId: "u64", + extendBy: "u64", + }, + }, }, /** - * Lookup434: tangle_primitives::jobs::JobResult + * Lookup444: tangle_primitives::jobs::JobResult **/ TanglePrimitivesJobsJobResult: { _enum: { - DKGPhaseOne: 'TanglePrimitivesJobsTssDkgtssKeySubmissionResult', - DKGPhaseTwo: 'TanglePrimitivesJobsTssDkgtssSignatureResult', - DKGPhaseThree: 'TanglePrimitivesJobsTssDkgtssKeyRefreshResult', - DKGPhaseFour: 'TanglePrimitivesJobsTssDkgtssKeyRotationResult', - ZkSaaSPhaseOne: 'TanglePrimitivesJobsZksaasZkSaaSCircuitResult', - ZkSaaSPhaseTwo: 'TanglePrimitivesJobsZksaasZkSaaSProofResult' - } + DKGPhaseOne: "TanglePrimitivesJobsTssDkgtssKeySubmissionResult", + DKGPhaseTwo: "TanglePrimitivesJobsTssDkgtssSignatureResult", + DKGPhaseThree: "TanglePrimitivesJobsTssDkgtssKeyRefreshResult", + DKGPhaseFour: "TanglePrimitivesJobsTssDkgtssKeyRotationResult", + ZkSaaSPhaseOne: "TanglePrimitivesJobsZksaasZkSaaSCircuitResult", + ZkSaaSPhaseTwo: "TanglePrimitivesJobsZksaasZkSaaSProofResult", + }, }, /** - * Lookup435: tangle_testnet_runtime::MaxKeyLen + * Lookup445: tangle_testnet_runtime::MaxKeyLen **/ - TangleTestnetRuntimeMaxKeyLen: 'Null', + TangleTestnetRuntimeMaxKeyLen: "Null", /** - * Lookup436: tangle_testnet_runtime::MaxSignatureLen + * Lookup446: tangle_testnet_runtime::MaxSignatureLen **/ - TangleTestnetRuntimeMaxSignatureLen: 'Null', + TangleTestnetRuntimeMaxSignatureLen: "Null", /** - * Lookup437: tangle_testnet_runtime::MaxDataLen + * Lookup447: tangle_testnet_runtime::MaxDataLen **/ - TangleTestnetRuntimeMaxDataLen: 'Null', + TangleTestnetRuntimeMaxDataLen: "Null", /** - * Lookup438: tangle_testnet_runtime::MaxProofLen + * Lookup448: tangle_testnet_runtime::MaxProofLen **/ - TangleTestnetRuntimeMaxProofLen: 'Null', + TangleTestnetRuntimeMaxProofLen: "Null", /** - * Lookup439: tangle_primitives::jobs::tss::DKGTSSKeySubmissionResult + * Lookup449: tangle_primitives::jobs::tss::DKGTSSKeySubmissionResult **/ TanglePrimitivesJobsTssDkgtssKeySubmissionResult: { - signatureScheme: 'TanglePrimitivesJobsTssDigitalSignatureScheme', - key: 'Bytes', - chainCode: 'Option<[u8;32]>', - participants: 'Vec', - signatures: 'Vec', - threshold: 'u8' + signatureScheme: "TanglePrimitivesJobsTssDigitalSignatureScheme", + key: "Bytes", + chainCode: "Option<[u8;32]>", + participants: "Vec", + signatures: "Vec", + threshold: "u8", }, /** - * Lookup440: tangle_primitives::jobs::tss::DigitalSignatureScheme + * Lookup450: tangle_primitives::jobs::tss::DigitalSignatureScheme **/ TanglePrimitivesJobsTssDigitalSignatureScheme: { - _enum: ['EcdsaSecp256k1', 'EcdsaSecp256r1', 'EcdsaStark', 'SchnorrP256', 'SchnorrP384', 'SchnorrSecp256k1', 'SchnorrSr25519', 'SchnorrRistretto255', 'SchnorrEd25519', 'SchnorrEd448', 'SchnorrTaproot', 'Bls381'] - }, - /** - * Lookup447: tangle_primitives::jobs::tss::DKGTSSSignatureResult + _enum: [ + "EcdsaSecp256k1", + "EcdsaSecp256r1", + "EcdsaStark", + "SchnorrP256", + "SchnorrP384", + "SchnorrSecp256k1", + "SchnorrSr25519", + "SchnorrRistretto255", + "SchnorrEd25519", + "SchnorrEd448", + "SchnorrTaproot", + "Bls381", + ], + }, + /** + * Lookup457: tangle_primitives::jobs::tss::DKGTSSSignatureResult **/ TanglePrimitivesJobsTssDkgtssSignatureResult: { - signatureScheme: 'TanglePrimitivesJobsTssDigitalSignatureScheme', - data: 'Bytes', - signature: 'Bytes', - verifyingKey: 'Bytes', - derivationPath: 'Option', - chainCode: 'Option<[u8;32]>' + signatureScheme: "TanglePrimitivesJobsTssDigitalSignatureScheme", + data: "Bytes", + signature: "Bytes", + verifyingKey: "Bytes", + derivationPath: "Option", + chainCode: "Option<[u8;32]>", }, /** - * Lookup449: tangle_primitives::jobs::tss::DKGTSSKeyRefreshResult + * Lookup459: tangle_primitives::jobs::tss::DKGTSSKeyRefreshResult **/ TanglePrimitivesJobsTssDkgtssKeyRefreshResult: { - signatureScheme: 'TanglePrimitivesJobsTssDigitalSignatureScheme' + signatureScheme: "TanglePrimitivesJobsTssDigitalSignatureScheme", }, /** - * Lookup450: tangle_primitives::jobs::tss::DKGTSSKeyRotationResult + * Lookup460: tangle_primitives::jobs::tss::DKGTSSKeyRotationResult **/ TanglePrimitivesJobsTssDkgtssKeyRotationResult: { - phaseOneId: 'u64', - newPhaseOneId: 'u64', - newKey: 'Bytes', - key: 'Bytes', - signature: 'Bytes', - signatureScheme: 'TanglePrimitivesJobsTssDigitalSignatureScheme', - derivationPath: 'Option', - chainCode: 'Option<[u8;32]>' + phaseOneId: "u64", + newPhaseOneId: "u64", + newKey: "Bytes", + key: "Bytes", + signature: "Bytes", + signatureScheme: "TanglePrimitivesJobsTssDigitalSignatureScheme", + derivationPath: "Option", + chainCode: "Option<[u8;32]>", }, /** - * Lookup451: tangle_primitives::jobs::zksaas::ZkSaaSCircuitResult + * Lookup461: tangle_primitives::jobs::zksaas::ZkSaaSCircuitResult **/ TanglePrimitivesJobsZksaasZkSaaSCircuitResult: { - jobId: 'u64', - participants: 'Vec' + jobId: "u64", + participants: "Vec", }, /** - * Lookup454: tangle_primitives::jobs::zksaas::ZkSaaSProofResult + * Lookup464: tangle_primitives::jobs::zksaas::ZkSaaSProofResult **/ TanglePrimitivesJobsZksaasZkSaaSProofResult: { _enum: { - Arkworks: 'TanglePrimitivesJobsZksaasArkworksProofResult', - Circom: 'TanglePrimitivesJobsZksaasCircomProofResult' - } + Arkworks: "TanglePrimitivesJobsZksaasArkworksProofResult", + Circom: "TanglePrimitivesJobsZksaasCircomProofResult", + }, }, /** - * Lookup455: tangle_primitives::jobs::zksaas::ArkworksProofResult + * Lookup465: tangle_primitives::jobs::zksaas::ArkworksProofResult **/ TanglePrimitivesJobsZksaasArkworksProofResult: { - proof: 'Bytes' + proof: "Bytes", }, /** - * Lookup457: tangle_primitives::jobs::zksaas::CircomProofResult + * Lookup467: tangle_primitives::jobs::zksaas::CircomProofResult **/ TanglePrimitivesJobsZksaasCircomProofResult: { - proof: 'Bytes' + proof: "Bytes", }, /** - * Lookup458: tangle_primitives::jobs::ValidatorOffenceType + * Lookup468: tangle_primitives::jobs::ValidatorOffenceType **/ TanglePrimitivesJobsValidatorOffenceType: { - _enum: ['Inactivity', 'InvalidSignatureSubmitted', 'RejectedValidAction', 'ApprovedInvalidAction'] + _enum: [ + "Inactivity", + "InvalidSignatureSubmitted", + "RejectedValidAction", + "ApprovedInvalidAction", + ], }, /** - * Lookup459: tangle_primitives::misbehavior::MisbehaviorSubmission + * Lookup469: tangle_primitives::misbehavior::MisbehaviorSubmission **/ TanglePrimitivesMisbehaviorMisbehaviorSubmission: { - roleType: 'TanglePrimitivesRolesRoleType', - offender: '[u8;33]', - jobId: 'u64', - justification: 'TanglePrimitivesMisbehaviorMisbehaviorJustification' + roleType: "TanglePrimitivesRolesRoleType", + offender: "[u8;33]", + jobId: "u64", + justification: "TanglePrimitivesMisbehaviorMisbehaviorJustification", }, /** - * Lookup460: tangle_primitives::misbehavior::MisbehaviorJustification + * Lookup470: tangle_primitives::misbehavior::MisbehaviorJustification **/ TanglePrimitivesMisbehaviorMisbehaviorJustification: { _enum: { - DKGTSS: 'TanglePrimitivesMisbehaviorDkgtssJustification', - ZkSaaS: 'TanglePrimitivesMisbehaviorZkSaaSJustification' - } + DKGTSS: "TanglePrimitivesMisbehaviorDkgtssJustification", + ZkSaaS: "TanglePrimitivesMisbehaviorZkSaaSJustification", + }, }, /** - * Lookup461: tangle_primitives::misbehavior::DKGTSSJustification + * Lookup471: tangle_primitives::misbehavior::DKGTSSJustification **/ TanglePrimitivesMisbehaviorDkgtssJustification: { _enum: { - DfnsCGGMP21: 'TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification', - ZCashFrost: 'TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification' - } + DfnsCGGMP21: + "TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification", + ZCashFrost: + "TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification", + }, }, /** - * Lookup462: tangle_primitives::misbehavior::dfns_cggmp21::DfnsCGGMP21Justification + * Lookup472: tangle_primitives::misbehavior::dfns_cggmp21::DfnsCGGMP21Justification **/ TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification: { _enum: { Keygen: { - participants: 'Vec<[u8;33]>', - t: 'u16', - reason: 'TanglePrimitivesMisbehaviorDfnsCggmp21KeygenAborted', + participants: "Vec<[u8;33]>", + t: "u16", + reason: "TanglePrimitivesMisbehaviorDfnsCggmp21KeygenAborted", }, KeyRefresh: { - participants: 'Vec<[u8;33]>', - t: 'u16', - reason: 'TanglePrimitivesMisbehaviorDfnsCggmp21KeyRefreshAborted', + participants: "Vec<[u8;33]>", + t: "u16", + reason: "TanglePrimitivesMisbehaviorDfnsCggmp21KeyRefreshAborted", }, Signing: { - participants: 'Vec<[u8;33]>', - t: 'u16', - reason: 'TanglePrimitivesMisbehaviorDfnsCggmp21SigningAborted' - } - } + participants: "Vec<[u8;33]>", + t: "u16", + reason: "TanglePrimitivesMisbehaviorDfnsCggmp21SigningAborted", + }, + }, }, /** - * Lookup464: tangle_primitives::misbehavior::dfns_cggmp21::KeygenAborted + * Lookup474: tangle_primitives::misbehavior::dfns_cggmp21::KeygenAborted **/ TanglePrimitivesMisbehaviorDfnsCggmp21KeygenAborted: { _enum: { InvalidDecommitment: { - round1: 'TanglePrimitivesMisbehaviorSignedRoundMessage', - round2a: 'TanglePrimitivesMisbehaviorSignedRoundMessage', + round1: "TanglePrimitivesMisbehaviorSignedRoundMessage", + round2a: "TanglePrimitivesMisbehaviorSignedRoundMessage", }, InvalidSchnorrProof: { - round2a: 'Vec', - round3: 'TanglePrimitivesMisbehaviorSignedRoundMessage', + round2a: "Vec", + round3: "TanglePrimitivesMisbehaviorSignedRoundMessage", }, FeldmanVerificationFailed: { - round2a: 'TanglePrimitivesMisbehaviorSignedRoundMessage', - round2b: 'TanglePrimitivesMisbehaviorSignedRoundMessage', + round2a: "TanglePrimitivesMisbehaviorSignedRoundMessage", + round2b: "TanglePrimitivesMisbehaviorSignedRoundMessage", }, InvalidDataSize: { - round2a: 'TanglePrimitivesMisbehaviorSignedRoundMessage' - } - } + round2a: "TanglePrimitivesMisbehaviorSignedRoundMessage", + }, + }, }, /** - * Lookup465: tangle_primitives::misbehavior::SignedRoundMessage + * Lookup475: tangle_primitives::misbehavior::SignedRoundMessage **/ TanglePrimitivesMisbehaviorSignedRoundMessage: { - sender: 'u16', - message: 'Bytes', - signature: 'Bytes' + sender: "u16", + message: "Bytes", + signature: "Bytes", }, /** - * Lookup467: tangle_primitives::misbehavior::dfns_cggmp21::KeyRefreshAborted + * Lookup477: tangle_primitives::misbehavior::dfns_cggmp21::KeyRefreshAborted **/ TanglePrimitivesMisbehaviorDfnsCggmp21KeyRefreshAborted: { _enum: { InvalidDecommitment: { - round1: 'TanglePrimitivesMisbehaviorSignedRoundMessage', - round2: 'TanglePrimitivesMisbehaviorSignedRoundMessage', + round1: "TanglePrimitivesMisbehaviorSignedRoundMessage", + round2: "TanglePrimitivesMisbehaviorSignedRoundMessage", }, - InvalidSchnorrProof: 'Null', + InvalidSchnorrProof: "Null", InvalidModProof: { - reason: 'TanglePrimitivesMisbehaviorDfnsCggmp21InvalidProofReason', - round2: 'Vec', - round3: 'TanglePrimitivesMisbehaviorSignedRoundMessage', + reason: "TanglePrimitivesMisbehaviorDfnsCggmp21InvalidProofReason", + round2: "Vec", + round3: "TanglePrimitivesMisbehaviorSignedRoundMessage", }, - InvalidFacProof: 'Null', + InvalidFacProof: "Null", InvalidRingPedersenParameters: { - round2: 'TanglePrimitivesMisbehaviorSignedRoundMessage', + round2: "TanglePrimitivesMisbehaviorSignedRoundMessage", }, - InvalidX: 'Null', - InvalidXShare: 'Null', - InvalidDataSize: 'Null', - PaillierDec: 'Null' - } + InvalidX: "Null", + InvalidXShare: "Null", + InvalidDataSize: "Null", + PaillierDec: "Null", + }, }, /** - * Lookup468: tangle_primitives::misbehavior::dfns_cggmp21::InvalidProofReason + * Lookup478: tangle_primitives::misbehavior::dfns_cggmp21::InvalidProofReason **/ TanglePrimitivesMisbehaviorDfnsCggmp21InvalidProofReason: { _enum: { - EqualityCheck: 'u8', - RangeCheck: 'u8', - Encryption: 'Null', - PaillierEnc: 'Null', - PaillierOp: 'Null', - ModPow: 'Null', - ModulusIsPrime: 'Null', - ModulusIsEven: 'Null', - IncorrectNthRoot: 'u8', - IncorrectFourthRoot: 'u8' - } + EqualityCheck: "u8", + RangeCheck: "u8", + Encryption: "Null", + PaillierEnc: "Null", + PaillierOp: "Null", + ModPow: "Null", + ModulusIsPrime: "Null", + ModulusIsEven: "Null", + IncorrectNthRoot: "u8", + IncorrectFourthRoot: "u8", + }, }, /** - * Lookup469: tangle_primitives::misbehavior::dfns_cggmp21::SigningAborted + * Lookup479: tangle_primitives::misbehavior::dfns_cggmp21::SigningAborted **/ TanglePrimitivesMisbehaviorDfnsCggmp21SigningAborted: { - _enum: ['EncProofOfK', 'InvalidPsi', 'InvalidPsiPrimePrime', 'MismatchedDelta'] + _enum: [ + "EncProofOfK", + "InvalidPsi", + "InvalidPsiPrimePrime", + "MismatchedDelta", + ], }, /** - * Lookup470: tangle_primitives::misbehavior::zcash_frost::ZCashFrostJustification + * Lookup480: tangle_primitives::misbehavior::zcash_frost::ZCashFrostJustification **/ TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification: { _enum: { Keygen: { - participants: 'Vec<[u8;33]>', - t: 'u16', - reason: 'TanglePrimitivesMisbehaviorZcashFrostKeygenAborted', + participants: "Vec<[u8;33]>", + t: "u16", + reason: "TanglePrimitivesMisbehaviorZcashFrostKeygenAborted", }, Signing: { - participants: 'Vec<[u8;33]>', - t: 'u16', - reason: 'TanglePrimitivesMisbehaviorZcashFrostSigningAborted' - } - } + participants: "Vec<[u8;33]>", + t: "u16", + reason: "TanglePrimitivesMisbehaviorZcashFrostSigningAborted", + }, + }, }, /** - * Lookup471: tangle_primitives::misbehavior::zcash_frost::KeygenAborted + * Lookup481: tangle_primitives::misbehavior::zcash_frost::KeygenAborted **/ TanglePrimitivesMisbehaviorZcashFrostKeygenAborted: { _enum: { InvalidProofOfKnowledge: { - round1: 'TanglePrimitivesMisbehaviorSignedRoundMessage', + round1: "TanglePrimitivesMisbehaviorSignedRoundMessage", }, InvalidSecretShare: { - round1: 'TanglePrimitivesMisbehaviorSignedRoundMessage', - round2: 'TanglePrimitivesMisbehaviorSignedRoundMessage' - } - } + round1: "TanglePrimitivesMisbehaviorSignedRoundMessage", + round2: "TanglePrimitivesMisbehaviorSignedRoundMessage", + }, + }, }, /** - * Lookup472: tangle_primitives::misbehavior::zcash_frost::SigningAborted + * Lookup482: tangle_primitives::misbehavior::zcash_frost::SigningAborted **/ TanglePrimitivesMisbehaviorZcashFrostSigningAborted: { _enum: { InvalidSignatureShare: { - round1: 'Vec', - round2: 'Vec' - } - } + round1: "Vec", + round2: "Vec", + }, + }, }, /** - * Lookup473: tangle_primitives::misbehavior::ZkSaaSJustification + * Lookup483: tangle_primitives::misbehavior::ZkSaaSJustification **/ - TanglePrimitivesMisbehaviorZkSaaSJustification: 'Null', + TanglePrimitivesMisbehaviorZkSaaSJustification: "Null", /** - * Lookup474: pallet_dkg::pallet::Call + * Lookup484: pallet_services::module::Call + **/ + PalletServicesModuleCall: { + _enum: { + create_blueprint: { + blueprint: "TanglePrimitivesJobsV2ServiceBlueprint", + }, + register: { + blueprintId: "Compact", + preferences: "TanglePrimitivesJobsV2OperatorPreferences", + registrationArgs: "Vec", + }, + unregister: { + blueprintId: "Compact", + }, + update_approval_preference: { + blueprintId: "Compact", + approvalPreference: "TanglePrimitivesJobsV2ApprovalPrefrence", + }, + request: { + blueprintId: "Compact", + permittedCallers: "Vec", + serviceProviders: "Vec", + ttl: "Compact", + requestArgs: "Vec", + }, + approve: { + requestId: "Compact", + }, + reject: { + requestId: "Compact", + }, + terminate: { + serviceId: "Compact", + }, + call: { + serviceId: "Compact", + job: "Compact", + args: "Vec", + }, + submit_result: { + serviceId: "Compact", + callId: "Compact", + result: "Vec", + }, + }, + }, + /** + * Lookup485: tangle_primitives::services::ServiceBlueprint + **/ + TanglePrimitivesJobsV2ServiceBlueprint: { + metadata: "TanglePrimitivesJobsV2ServiceMetadata", + jobs: "Vec", + registrationHook: "TanglePrimitivesJobsV2ServiceRegistrationHook", + registrationParams: "Vec", + requestHook: "TanglePrimitivesJobsV2ServiceRequestHook", + requestParams: "Vec", + gadget: "TanglePrimitivesJobsV2Gadget", + }, + /** + * Lookup486: tangle_primitives::services::ServiceMetadata + **/ + TanglePrimitivesJobsV2ServiceMetadata: { + name: "Bytes", + description: "Option", + author: "Option", + category: "Option", + codeRepository: "Option", + logo: "Option", + website: "Option", + license: "Option", + }, + /** + * Lookup491: tangle_primitives::services::JobDefinition + **/ + TanglePrimitivesJobsV2JobDefinition: { + metadata: "TanglePrimitivesJobsV2JobMetadata", + params: "Vec", + result: "Vec", + verifier: "TanglePrimitivesJobsV2JobResultVerifier", + }, + /** + * Lookup492: tangle_primitives::services::JobMetadata + **/ + TanglePrimitivesJobsV2JobMetadata: { + name: "Bytes", + description: "Option", + }, + /** + * Lookup494: tangle_primitives::services::field::FieldType + **/ + TanglePrimitivesJobsV2FieldFieldType: { + _enum: { + Void: "Null", + Bool: "Null", + Uint8: "Null", + Int8: "Null", + Uint16: "Null", + Int16: "Null", + Uint32: "Null", + Int32: "Null", + Uint64: "Null", + Int64: "Null", + String: "Null", + Bytes: "Null", + Optional: "TanglePrimitivesJobsV2FieldFieldType", + Array: "(u64,TanglePrimitivesJobsV2FieldFieldType)", + List: "TanglePrimitivesJobsV2FieldFieldType", + __Unused15: "Null", + __Unused16: "Null", + __Unused17: "Null", + __Unused18: "Null", + __Unused19: "Null", + __Unused20: "Null", + __Unused21: "Null", + __Unused22: "Null", + __Unused23: "Null", + __Unused24: "Null", + __Unused25: "Null", + __Unused26: "Null", + __Unused27: "Null", + __Unused28: "Null", + __Unused29: "Null", + __Unused30: "Null", + __Unused31: "Null", + __Unused32: "Null", + __Unused33: "Null", + __Unused34: "Null", + __Unused35: "Null", + __Unused36: "Null", + __Unused37: "Null", + __Unused38: "Null", + __Unused39: "Null", + __Unused40: "Null", + __Unused41: "Null", + __Unused42: "Null", + __Unused43: "Null", + __Unused44: "Null", + __Unused45: "Null", + __Unused46: "Null", + __Unused47: "Null", + __Unused48: "Null", + __Unused49: "Null", + __Unused50: "Null", + __Unused51: "Null", + __Unused52: "Null", + __Unused53: "Null", + __Unused54: "Null", + __Unused55: "Null", + __Unused56: "Null", + __Unused57: "Null", + __Unused58: "Null", + __Unused59: "Null", + __Unused60: "Null", + __Unused61: "Null", + __Unused62: "Null", + __Unused63: "Null", + __Unused64: "Null", + __Unused65: "Null", + __Unused66: "Null", + __Unused67: "Null", + __Unused68: "Null", + __Unused69: "Null", + __Unused70: "Null", + __Unused71: "Null", + __Unused72: "Null", + __Unused73: "Null", + __Unused74: "Null", + __Unused75: "Null", + __Unused76: "Null", + __Unused77: "Null", + __Unused78: "Null", + __Unused79: "Null", + __Unused80: "Null", + __Unused81: "Null", + __Unused82: "Null", + __Unused83: "Null", + __Unused84: "Null", + __Unused85: "Null", + __Unused86: "Null", + __Unused87: "Null", + __Unused88: "Null", + __Unused89: "Null", + __Unused90: "Null", + __Unused91: "Null", + __Unused92: "Null", + __Unused93: "Null", + __Unused94: "Null", + __Unused95: "Null", + __Unused96: "Null", + __Unused97: "Null", + __Unused98: "Null", + __Unused99: "Null", + AccountId: "Null", + }, + }, + /** + * Lookup496: tangle_primitives::services::JobResultVerifier + **/ + TanglePrimitivesJobsV2JobResultVerifier: { + _enum: { + None: "Null", + Evm: "H160", + }, + }, + /** + * Lookup498: tangle_primitives::services::ServiceRegistrationHook + **/ + TanglePrimitivesJobsV2ServiceRegistrationHook: { + _enum: { + None: "Null", + Evm: "H160", + }, + }, + /** + * Lookup499: tangle_primitives::services::ServiceRequestHook + **/ + TanglePrimitivesJobsV2ServiceRequestHook: { + _enum: { + None: "Null", + Evm: "H160", + }, + }, + /** + * Lookup500: tangle_primitives::services::Gadget + **/ + TanglePrimitivesJobsV2Gadget: { + _enum: { + Wasm: "TanglePrimitivesJobsV2WasmGadget", + Native: "TanglePrimitivesJobsV2NativeGadget", + Container: "TanglePrimitivesJobsV2ContainerGadget", + }, + }, + /** + * Lookup501: tangle_primitives::services::WasmGadget + **/ + TanglePrimitivesJobsV2WasmGadget: { + runtime: "TanglePrimitivesJobsV2WasmRuntime", + soruces: "Vec", + }, + /** + * Lookup502: tangle_primitives::services::WasmRuntime + **/ + TanglePrimitivesJobsV2WasmRuntime: { + _enum: ["Wasmtime", "Wasmer"], + }, + /** + * Lookup504: tangle_primitives::services::GadgetSource + **/ + TanglePrimitivesJobsV2GadgetSource: { + fetcher: "TanglePrimitivesJobsV2GadgetSourceFetcher", + }, + /** + * Lookup505: tangle_primitives::services::GadgetSourceFetcher + **/ + TanglePrimitivesJobsV2GadgetSourceFetcher: { + _enum: { + IPFS: "Bytes", + Github: "TanglePrimitivesJobsV2GithubFetcher", + ContainerImage: "TanglePrimitivesJobsV2ImageRegistryFetcher", + }, + }, + /** + * Lookup507: tangle_primitives::services::GithubFetcher + **/ + TanglePrimitivesJobsV2GithubFetcher: { + owner: "Bytes", + repo: "Bytes", + tag: "Bytes", + binaries: "Vec", + }, + /** + * Lookup515: tangle_primitives::services::GadgetBinary + **/ + TanglePrimitivesJobsV2GadgetBinary: { + arch: "TanglePrimitivesJobsV2Architecture", + os: "TanglePrimitivesJobsV2OperatingSystem", + name: "Bytes", + sha256: "[u8;32]", + }, + /** + * Lookup516: tangle_primitives::services::Architecture + **/ + TanglePrimitivesJobsV2Architecture: { + _enum: [ + "Wasm", + "Wasm64", + "Wasi", + "Wasi64", + "Amd", + "Amd64", + "Arm", + "Arm64", + "RiscV", + "RiscV64", + ], + }, + /** + * Lookup517: tangle_primitives::services::OperatingSystem + **/ + TanglePrimitivesJobsV2OperatingSystem: { + _enum: ["Unknown", "Linux", "Windows", "MacOS", "BSD"], + }, + /** + * Lookup521: tangle_primitives::services::ImageRegistryFetcher + **/ + TanglePrimitivesJobsV2ImageRegistryFetcher: { + _alias: { + registry_: "registry", + }, + }, + /** + * Lookup529: tangle_primitives::services::NativeGadget + **/ + TanglePrimitivesJobsV2NativeGadget: { + soruces: "Vec", + }, + /** + * Lookup530: tangle_primitives::services::ContainerGadget + **/ + TanglePrimitivesJobsV2ContainerGadget: { + soruces: "Vec", + }, + /** + * Lookup532: pallet_dkg::pallet::Call **/ PalletDkgCall: { _enum: { set_fee: { - feeInfo: 'PalletDkgFeeInfo' - } - } + feeInfo: "PalletDkgFeeInfo", + }, + }, }, /** - * Lookup475: pallet_zksaas::pallet::Call + * Lookup533: pallet_zksaas::pallet::Call **/ PalletZksaasCall: { _enum: { set_fee: { - feeInfo: 'PalletZksaasFeeInfo' - } - } + feeInfo: "PalletZksaasFeeInfo", + }, + }, }, /** - * Lookup476: pallet_proxy::pallet::Call + * Lookup534: pallet_proxy::pallet::Call **/ PalletProxyCall: { _enum: { proxy: { - real: 'MultiAddress', - forceProxyType: 'Option', - call: 'Call', + real: "MultiAddress", + forceProxyType: "Option", + call: "Call", }, add_proxy: { - delegate: 'MultiAddress', - proxyType: 'TangleTestnetRuntimeProxyType', - delay: 'u64', + delegate: "MultiAddress", + proxyType: "TangleTestnetRuntimeProxyType", + delay: "u64", }, remove_proxy: { - delegate: 'MultiAddress', - proxyType: 'TangleTestnetRuntimeProxyType', - delay: 'u64', + delegate: "MultiAddress", + proxyType: "TangleTestnetRuntimeProxyType", + delay: "u64", }, - remove_proxies: 'Null', + remove_proxies: "Null", create_pure: { - proxyType: 'TangleTestnetRuntimeProxyType', - delay: 'u64', - index: 'u16', + proxyType: "TangleTestnetRuntimeProxyType", + delay: "u64", + index: "u16", }, kill_pure: { - spawner: 'MultiAddress', - proxyType: 'TangleTestnetRuntimeProxyType', - index: 'u16', - height: 'Compact', - extIndex: 'Compact', + spawner: "MultiAddress", + proxyType: "TangleTestnetRuntimeProxyType", + index: "u16", + height: "Compact", + extIndex: "Compact", }, announce: { - real: 'MultiAddress', - callHash: 'H256', + real: "MultiAddress", + callHash: "H256", }, remove_announcement: { - real: 'MultiAddress', - callHash: 'H256', + real: "MultiAddress", + callHash: "H256", }, reject_announcement: { - delegate: 'MultiAddress', - callHash: 'H256', + delegate: "MultiAddress", + callHash: "H256", }, proxy_announced: { - delegate: 'MultiAddress', - real: 'MultiAddress', - forceProxyType: 'Option', - call: 'Call' - } - } + delegate: "MultiAddress", + real: "MultiAddress", + forceProxyType: "Option", + call: "Call", + }, + }, }, /** * Lookup478: pallet_multi_asset_delegation::pallet::Call @@ -4479,13 +5094,13 @@ export default { PalletMultiAssetDelegationCall: { _enum: { join_operators: { - bondAmount: 'u128', + bondAmount: "u128", }, - schedule_leave_operators: 'Null', - cancel_leave_operators: 'Null', - execute_leave_operators: 'Null', + schedule_leave_operators: "Null", + cancel_leave_operators: "Null", + execute_leave_operators: "Null", operator_bond_more: { - additionalBond: 'u128', + additionalBond: "u128", }, schedule_operator_unstake: { unstakeAmount: 'u128', @@ -4508,9 +5123,9 @@ export default { amount: 'u128', }, delegate: { - operator: 'AccountId32', - assetId: 'u128', - amount: 'u128', + operator: "AccountId32", + assetId: "u128", + amount: "u128", }, schedule_delegator_unstake: { operator: 'AccountId32', @@ -4544,11 +5159,11 @@ export default { SygmaAccessSegregatorCall: { _enum: { grant_access: { - palletIndex: 'u8', - extrinsicName: 'Bytes', - who: 'AccountId32' - } - } + palletIndex: "u8", + extrinsicName: "Bytes", + who: "AccountId32", + }, + }, }, /** * Lookup480: sygma_basic_feehandler::pallet::Call @@ -4556,11 +5171,11 @@ export default { SygmaBasicFeehandlerCall: { _enum: { set_fee: { - domain: 'u8', - asset: 'StagingXcmV4AssetAssetId', - amount: 'u128' - } - } + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + amount: "u128", + }, + }, }, /** * Lookup481: sygma_fee_handler_router::pallet::Call @@ -4568,11 +5183,11 @@ export default { SygmaFeeHandlerRouterCall: { _enum: { set_fee_handler: { - domain: 'u8', - asset: 'StagingXcmV4AssetAssetId', - handlerType: 'SygmaFeeHandlerRouterFeeHandlerType' - } - } + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + handlerType: "SygmaFeeHandlerRouterFeeHandlerType", + }, + }, }, /** * Lookup482: sygma_percentage_feehandler::pallet::Call @@ -4580,13 +5195,13 @@ export default { SygmaPercentageFeehandlerCall: { _enum: { set_fee_rate: { - domain: 'u8', - asset: 'StagingXcmV4AssetAssetId', - feeRateBasisPoint: 'u32', - feeLowerBound: 'u128', - feeUpperBound: 'u128' - } - } + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + feeRateBasisPoint: "u32", + feeLowerBound: "u128", + feeUpperBound: "u128", + }, + }, }, /** * Lookup483: sygma_bridge::pallet::Call @@ -4594,1174 +5209,1834 @@ export default { SygmaBridgeCall: { _enum: { pause_bridge: { - destDomainId: 'u8', + destDomainId: "u8", }, unpause_bridge: { - destDomainId: 'u8', + destDomainId: "u8", }, set_mpc_address: { - addr: 'SygmaTraitsMpcAddress', + addr: "SygmaTraitsMpcAddress", }, register_domain: { - destDomainId: 'u8', - destChainId: 'U256', + destDomainId: "u8", + destChainId: "U256", }, unregister_domain: { - destDomainId: 'u8', - destChainId: 'U256', + destDomainId: "u8", + destChainId: "U256", }, deposit: { - asset: 'StagingXcmV4Asset', - dest: 'StagingXcmV4Location', + asset: "StagingXcmV4Asset", + dest: "StagingXcmV4Location", }, retry: { - depositOnBlockHeight: 'u128', - destDomainId: 'u8', + depositOnBlockHeight: "u128", + destDomainId: "u8", }, execute_proposal: { - proposals: 'Vec', - signature: 'Bytes', + proposals: "Vec", + signature: "Bytes", }, - pause_all_bridges: 'Null', - unpause_all_bridges: 'Null' - } + pause_all_bridges: "Null", + unpause_all_bridges: "Null", + }, }, /** * Lookup484: sygma_traits::MpcAddress **/ - SygmaTraitsMpcAddress: '[u8;20]', + SygmaTraitsMpcAddress: "[u8;20]", /** * Lookup485: staging_xcm::v4::asset::Asset **/ StagingXcmV4Asset: { - id: 'StagingXcmV4AssetAssetId', - fun: 'StagingXcmV4AssetFungibility' + id: "StagingXcmV4AssetAssetId", + fun: "StagingXcmV4AssetFungibility", }, /** * Lookup486: staging_xcm::v4::asset::Fungibility **/ StagingXcmV4AssetFungibility: { _enum: { - Fungible: 'Compact', - NonFungible: 'StagingXcmV4AssetAssetInstance' - } + Fungible: "Compact", + NonFungible: "StagingXcmV4AssetAssetInstance", + }, }, /** * Lookup487: staging_xcm::v4::asset::AssetInstance **/ StagingXcmV4AssetAssetInstance: { _enum: { - Undefined: 'Null', - Index: 'Compact', - Array4: '[u8;4]', - Array8: '[u8;8]', - Array16: '[u8;16]', - Array32: '[u8;32]' - } + Undefined: "Null", + Index: "Compact", + Array4: "[u8;4]", + Array8: "[u8;8]", + Array16: "[u8;16]", + Array32: "[u8;32]", + }, }, /** * Lookup489: sygma_bridge::pallet::Proposal **/ SygmaBridgeProposal: { - originDomainId: 'u8', - depositNonce: 'u64', - resourceId: '[u8;32]', - data: 'Bytes' + originDomainId: "u8", + depositNonce: "u64", + resourceId: "[u8;32]", + data: "Bytes", + }, + /** + * Lookup536: sygma_access_segregator::pallet::Call + **/ + SygmaAccessSegregatorCall: { + _enum: { + grant_access: { + palletIndex: "u8", + extrinsicName: "Bytes", + who: "AccountId32", + }, + }, + }, + /** + * Lookup537: sygma_basic_feehandler::pallet::Call + **/ + SygmaBasicFeehandlerCall: { + _enum: { + set_fee: { + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + amount: "u128", + }, + }, + }, + /** + * Lookup538: sygma_fee_handler_router::pallet::Call + **/ + SygmaFeeHandlerRouterCall: { + _enum: { + set_fee_handler: { + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + handlerType: "SygmaFeeHandlerRouterFeeHandlerType", + }, + }, + }, + /** + * Lookup539: sygma_percentage_feehandler::pallet::Call + **/ + SygmaPercentageFeehandlerCall: { + _enum: { + set_fee_rate: { + domain: "u8", + asset: "StagingXcmV4AssetAssetId", + feeRateBasisPoint: "u32", + feeLowerBound: "u128", + feeUpperBound: "u128", + }, + }, + }, + /** + * Lookup540: sygma_bridge::pallet::Call + **/ + SygmaBridgeCall: { + _enum: { + pause_bridge: { + destDomainId: "u8", + }, + unpause_bridge: { + destDomainId: "u8", + }, + set_mpc_address: { + addr: "SygmaTraitsMpcAddress", + }, + register_domain: { + destDomainId: "u8", + destChainId: "U256", + }, + unregister_domain: { + destDomainId: "u8", + destChainId: "U256", + }, + deposit: { + asset: "StagingXcmV4Asset", + dest: "StagingXcmV4Location", + }, + retry: { + depositOnBlockHeight: "u128", + destDomainId: "u8", + }, + execute_proposal: { + proposals: "Vec", + signature: "Bytes", + }, + pause_all_bridges: "Null", + unpause_all_bridges: "Null", + }, + }, + /** + * Lookup541: sygma_traits::MpcAddress + **/ + SygmaTraitsMpcAddress: "[u8;20]", + /** + * Lookup542: staging_xcm::v4::asset::Asset + **/ + StagingXcmV4Asset: { + id: "StagingXcmV4AssetAssetId", + fun: "StagingXcmV4AssetFungibility", + }, + /** + * Lookup543: staging_xcm::v4::asset::Fungibility + **/ + StagingXcmV4AssetFungibility: { + _enum: { + Fungible: "Compact", + NonFungible: "StagingXcmV4AssetAssetInstance", + }, + }, + /** + * Lookup544: staging_xcm::v4::asset::AssetInstance + **/ + StagingXcmV4AssetAssetInstance: { + _enum: { + Undefined: "Null", + Index: "Compact", + Array4: "[u8;4]", + Array8: "[u8;8]", + Array16: "[u8;16]", + Array32: "[u8;32]", + }, + }, + /** + * Lookup546: sygma_bridge::pallet::Proposal + **/ + SygmaBridgeProposal: { + originDomainId: "u8", + depositNonce: "u64", + resourceId: "[u8;32]", + data: "Bytes", }, /** - * Lookup490: pallet_sudo::pallet::Error + * Lookup547: pallet_sudo::pallet::Error **/ PalletSudoError: { - _enum: ['RequireSudo'] + _enum: ["RequireSudo"], }, /** - * Lookup492: pallet_assets::types::AssetDetails + * Lookup549: pallet_assets::types::AssetDetails **/ PalletAssetsAssetDetails: { - owner: 'AccountId32', - issuer: 'AccountId32', - admin: 'AccountId32', - freezer: 'AccountId32', - supply: 'u128', - deposit: 'u128', - minBalance: 'u128', - isSufficient: 'bool', - accounts: 'u32', - sufficients: 'u32', - approvals: 'u32', - status: 'PalletAssetsAssetStatus' - }, - /** - * Lookup493: pallet_assets::types::AssetStatus + owner: "AccountId32", + issuer: "AccountId32", + admin: "AccountId32", + freezer: "AccountId32", + supply: "u128", + deposit: "u128", + minBalance: "u128", + isSufficient: "bool", + accounts: "u32", + sufficients: "u32", + approvals: "u32", + status: "PalletAssetsAssetStatus", + }, + /** + * Lookup550: pallet_assets::types::AssetStatus **/ PalletAssetsAssetStatus: { - _enum: ['Live', 'Frozen', 'Destroying'] + _enum: ["Live", "Frozen", "Destroying"], }, /** - * Lookup495: pallet_assets::types::AssetAccount + * Lookup552: pallet_assets::types::AssetAccount **/ PalletAssetsAssetAccount: { - balance: 'u128', - status: 'PalletAssetsAccountStatus', - reason: 'PalletAssetsExistenceReason', - extra: 'Null' + balance: "u128", + status: "PalletAssetsAccountStatus", + reason: "PalletAssetsExistenceReason", + extra: "Null", }, /** - * Lookup496: pallet_assets::types::AccountStatus + * Lookup553: pallet_assets::types::AccountStatus **/ PalletAssetsAccountStatus: { - _enum: ['Liquid', 'Frozen', 'Blocked'] + _enum: ["Liquid", "Frozen", "Blocked"], }, /** - * Lookup497: pallet_assets::types::ExistenceReason + * Lookup554: pallet_assets::types::ExistenceReason **/ PalletAssetsExistenceReason: { _enum: { - Consumer: 'Null', - Sufficient: 'Null', - DepositHeld: 'u128', - DepositRefunded: 'Null', - DepositFrom: '(AccountId32,u128)' - } + Consumer: "Null", + Sufficient: "Null", + DepositHeld: "u128", + DepositRefunded: "Null", + DepositFrom: "(AccountId32,u128)", + }, }, /** - * Lookup499: pallet_assets::types::Approval + * Lookup556: pallet_assets::types::Approval **/ PalletAssetsApproval: { - amount: 'u128', - deposit: 'u128' + amount: "u128", + deposit: "u128", }, /** - * Lookup500: pallet_assets::types::AssetMetadata> + * Lookup557: pallet_assets::types::AssetMetadata> **/ PalletAssetsAssetMetadata: { - deposit: 'u128', - name: 'Bytes', - symbol: 'Bytes', - decimals: 'u8', - isFrozen: 'bool' + deposit: "u128", + name: "Bytes", + symbol: "Bytes", + decimals: "u8", + isFrozen: "bool", }, /** - * Lookup502: pallet_assets::pallet::Error + * Lookup559: pallet_assets::pallet::Error **/ PalletAssetsError: { - _enum: ['BalanceLow', 'NoAccount', 'NoPermission', 'Unknown', 'Frozen', 'InUse', 'BadWitness', 'MinBalanceZero', 'UnavailableConsumer', 'BadMetadata', 'Unapproved', 'WouldDie', 'AlreadyExists', 'NoDeposit', 'WouldBurn', 'LiveAsset', 'AssetNotLive', 'IncorrectStatus', 'NotFrozen', 'CallbackFailed'] - }, - /** - * Lookup504: pallet_balances::types::BalanceLock + _enum: [ + "BalanceLow", + "NoAccount", + "NoPermission", + "Unknown", + "Frozen", + "InUse", + "BadWitness", + "MinBalanceZero", + "UnavailableConsumer", + "BadMetadata", + "Unapproved", + "WouldDie", + "AlreadyExists", + "NoDeposit", + "WouldBurn", + "LiveAsset", + "AssetNotLive", + "IncorrectStatus", + "NotFrozen", + "CallbackFailed", + ], + }, + /** + * Lookup561: pallet_balances::types::BalanceLock **/ PalletBalancesBalanceLock: { - id: '[u8;8]', - amount: 'u128', - reasons: 'PalletBalancesReasons' + id: "[u8;8]", + amount: "u128", + reasons: "PalletBalancesReasons", }, /** - * Lookup505: pallet_balances::types::Reasons + * Lookup562: pallet_balances::types::Reasons **/ PalletBalancesReasons: { - _enum: ['Fee', 'Misc', 'All'] + _enum: ["Fee", "Misc", "All"], }, /** - * Lookup508: pallet_balances::types::ReserveData + * Lookup565: pallet_balances::types::ReserveData **/ PalletBalancesReserveData: { - id: '[u8;8]', - amount: 'u128' + id: "[u8;8]", + amount: "u128", }, /** - * Lookup511: pallet_balances::types::IdAmount + * Lookup568: pallet_balances::types::IdAmount **/ PalletBalancesIdAmountRuntimeHoldReason: { - id: 'TangleTestnetRuntimeRuntimeHoldReason', - amount: 'u128' + id: "TangleTestnetRuntimeRuntimeHoldReason", + amount: "u128", }, /** - * Lookup512: tangle_testnet_runtime::RuntimeHoldReason + * Lookup569: tangle_testnet_runtime::RuntimeHoldReason **/ TangleTestnetRuntimeRuntimeHoldReason: { _enum: { - __Unused0: 'Null', - __Unused1: 'Null', - __Unused2: 'Null', - __Unused3: 'Null', - __Unused4: 'Null', - __Unused5: 'Null', - __Unused6: 'Null', - __Unused7: 'Null', - __Unused8: 'Null', - __Unused9: 'Null', - __Unused10: 'Null', - __Unused11: 'Null', - __Unused12: 'Null', - __Unused13: 'Null', - __Unused14: 'Null', - __Unused15: 'Null', - __Unused16: 'Null', - __Unused17: 'Null', - __Unused18: 'Null', - __Unused19: 'Null', - __Unused20: 'Null', - __Unused21: 'Null', - __Unused22: 'Null', - __Unused23: 'Null', - __Unused24: 'Null', - Preimage: 'PalletPreimageHoldReason' - } + __Unused0: "Null", + __Unused1: "Null", + __Unused2: "Null", + __Unused3: "Null", + __Unused4: "Null", + __Unused5: "Null", + __Unused6: "Null", + __Unused7: "Null", + __Unused8: "Null", + __Unused9: "Null", + __Unused10: "Null", + __Unused11: "Null", + __Unused12: "Null", + __Unused13: "Null", + __Unused14: "Null", + __Unused15: "Null", + __Unused16: "Null", + __Unused17: "Null", + __Unused18: "Null", + __Unused19: "Null", + __Unused20: "Null", + __Unused21: "Null", + __Unused22: "Null", + __Unused23: "Null", + __Unused24: "Null", + Preimage: "PalletPreimageHoldReason", + }, }, /** - * Lookup513: pallet_preimage::pallet::HoldReason + * Lookup570: pallet_preimage::pallet::HoldReason **/ PalletPreimageHoldReason: { - _enum: ['Preimage'] + _enum: ["Preimage"], }, /** - * Lookup516: pallet_balances::types::IdAmount + * Lookup573: pallet_balances::types::IdAmount **/ PalletBalancesIdAmountRuntimeFreezeReason: { - id: 'TangleTestnetRuntimeRuntimeFreezeReason', - amount: 'u128' + id: "TangleTestnetRuntimeRuntimeFreezeReason", + amount: "u128", }, /** - * Lookup517: tangle_testnet_runtime::RuntimeFreezeReason + * Lookup574: tangle_testnet_runtime::RuntimeFreezeReason **/ TangleTestnetRuntimeRuntimeFreezeReason: { _enum: { - __Unused0: 'Null', - __Unused1: 'Null', - __Unused2: 'Null', - __Unused3: 'Null', - __Unused4: 'Null', - __Unused5: 'Null', - __Unused6: 'Null', - __Unused7: 'Null', - __Unused8: 'Null', - __Unused9: 'Null', - __Unused10: 'Null', - __Unused11: 'Null', - __Unused12: 'Null', - __Unused13: 'Null', - __Unused14: 'Null', - __Unused15: 'Null', - __Unused16: 'Null', - __Unused17: 'Null', - __Unused18: 'Null', - __Unused19: 'Null', - __Unused20: 'Null', - __Unused21: 'Null', - __Unused22: 'Null', - NominationPools: 'PalletNominationPoolsFreezeReason' - } + __Unused0: "Null", + __Unused1: "Null", + __Unused2: "Null", + __Unused3: "Null", + __Unused4: "Null", + __Unused5: "Null", + __Unused6: "Null", + __Unused7: "Null", + __Unused8: "Null", + __Unused9: "Null", + __Unused10: "Null", + __Unused11: "Null", + __Unused12: "Null", + __Unused13: "Null", + __Unused14: "Null", + __Unused15: "Null", + __Unused16: "Null", + __Unused17: "Null", + __Unused18: "Null", + __Unused19: "Null", + __Unused20: "Null", + __Unused21: "Null", + __Unused22: "Null", + NominationPools: "PalletNominationPoolsFreezeReason", + }, }, /** - * Lookup518: pallet_nomination_pools::pallet::FreezeReason + * Lookup575: pallet_nomination_pools::pallet::FreezeReason **/ PalletNominationPoolsFreezeReason: { - _enum: ['PoolMinBalance'] + _enum: ["PoolMinBalance"], }, /** - * Lookup520: pallet_balances::pallet::Error + * Lookup577: pallet_balances::pallet::Error **/ PalletBalancesError: { - _enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'Expendability', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves', 'TooManyHolds', 'TooManyFreezes', 'IssuanceDeactivated', 'DeltaZero'] - }, - /** - * Lookup522: pallet_transaction_payment::Releases + _enum: [ + "VestingBalance", + "LiquidityRestrictions", + "InsufficientBalance", + "ExistentialDeposit", + "Expendability", + "ExistingVestingSchedule", + "DeadAccount", + "TooManyReserves", + "TooManyHolds", + "TooManyFreezes", + "IssuanceDeactivated", + "DeltaZero", + ], + }, + /** + * Lookup579: pallet_transaction_payment::Releases **/ PalletTransactionPaymentReleases: { - _enum: ['V1Ancient', 'V2'] + _enum: ["V1Ancient", "V2"], }, /** - * Lookup529: sp_consensus_babe::digests::PreDigest + * Lookup586: sp_consensus_babe::digests::PreDigest **/ SpConsensusBabeDigestsPreDigest: { _enum: { - __Unused0: 'Null', - Primary: 'SpConsensusBabeDigestsPrimaryPreDigest', - SecondaryPlain: 'SpConsensusBabeDigestsSecondaryPlainPreDigest', - SecondaryVRF: 'SpConsensusBabeDigestsSecondaryVRFPreDigest' - } + __Unused0: "Null", + Primary: "SpConsensusBabeDigestsPrimaryPreDigest", + SecondaryPlain: "SpConsensusBabeDigestsSecondaryPlainPreDigest", + SecondaryVRF: "SpConsensusBabeDigestsSecondaryVRFPreDigest", + }, }, /** - * Lookup530: sp_consensus_babe::digests::PrimaryPreDigest + * Lookup587: sp_consensus_babe::digests::PrimaryPreDigest **/ SpConsensusBabeDigestsPrimaryPreDigest: { - authorityIndex: 'u32', - slot: 'u64', - vrfSignature: 'SpCoreSr25519VrfVrfSignature' + authorityIndex: "u32", + slot: "u64", + vrfSignature: "SpCoreSr25519VrfVrfSignature", }, /** - * Lookup531: sp_core::sr25519::vrf::VrfSignature + * Lookup588: sp_core::sr25519::vrf::VrfSignature **/ SpCoreSr25519VrfVrfSignature: { - preOutput: '[u8;32]', - proof: '[u8;64]' + preOutput: "[u8;32]", + proof: "[u8;64]", }, /** - * Lookup532: sp_consensus_babe::digests::SecondaryPlainPreDigest + * Lookup589: sp_consensus_babe::digests::SecondaryPlainPreDigest **/ SpConsensusBabeDigestsSecondaryPlainPreDigest: { - authorityIndex: 'u32', - slot: 'u64' + authorityIndex: "u32", + slot: "u64", }, /** - * Lookup533: sp_consensus_babe::digests::SecondaryVRFPreDigest + * Lookup590: sp_consensus_babe::digests::SecondaryVRFPreDigest **/ SpConsensusBabeDigestsSecondaryVRFPreDigest: { - authorityIndex: 'u32', - slot: 'u64', - vrfSignature: 'SpCoreSr25519VrfVrfSignature' + authorityIndex: "u32", + slot: "u64", + vrfSignature: "SpCoreSr25519VrfVrfSignature", }, /** - * Lookup534: sp_consensus_babe::BabeEpochConfiguration + * Lookup591: sp_consensus_babe::BabeEpochConfiguration **/ SpConsensusBabeBabeEpochConfiguration: { - c: '(u64,u64)', - allowedSlots: 'SpConsensusBabeAllowedSlots' + c: "(u64,u64)", + allowedSlots: "SpConsensusBabeAllowedSlots", }, /** - * Lookup536: pallet_babe::pallet::Error + * Lookup593: pallet_babe::pallet::Error **/ PalletBabeError: { - _enum: ['InvalidEquivocationProof', 'InvalidKeyOwnershipProof', 'DuplicateOffenceReport', 'InvalidConfiguration'] + _enum: [ + "InvalidEquivocationProof", + "InvalidKeyOwnershipProof", + "DuplicateOffenceReport", + "InvalidConfiguration", + ], }, /** - * Lookup537: pallet_grandpa::StoredState + * Lookup594: pallet_grandpa::StoredState **/ PalletGrandpaStoredState: { _enum: { - Live: 'Null', + Live: "Null", PendingPause: { - scheduledAt: 'u64', - delay: 'u64', + scheduledAt: "u64", + delay: "u64", }, - Paused: 'Null', + Paused: "Null", PendingResume: { - scheduledAt: 'u64', - delay: 'u64' - } - } + scheduledAt: "u64", + delay: "u64", + }, + }, }, /** - * Lookup538: pallet_grandpa::StoredPendingChange + * Lookup595: pallet_grandpa::StoredPendingChange **/ PalletGrandpaStoredPendingChange: { - scheduledAt: 'u64', - delay: 'u64', - nextAuthorities: 'Vec<(SpConsensusGrandpaAppPublic,u64)>', - forced: 'Option' + scheduledAt: "u64", + delay: "u64", + nextAuthorities: "Vec<(SpConsensusGrandpaAppPublic,u64)>", + forced: "Option", }, /** - * Lookup540: pallet_grandpa::pallet::Error + * Lookup597: pallet_grandpa::pallet::Error **/ PalletGrandpaError: { - _enum: ['PauseFailed', 'ResumeFailed', 'ChangePending', 'TooSoon', 'InvalidKeyOwnershipProof', 'InvalidEquivocationProof', 'DuplicateOffenceReport'] + _enum: [ + "PauseFailed", + "ResumeFailed", + "ChangePending", + "TooSoon", + "InvalidKeyOwnershipProof", + "InvalidEquivocationProof", + "DuplicateOffenceReport", + ], }, /** - * Lookup542: pallet_indices::pallet::Error + * Lookup599: pallet_indices::pallet::Error **/ PalletIndicesError: { - _enum: ['NotAssigned', 'NotOwner', 'InUse', 'NotTransfer', 'Permanent'] + _enum: ["NotAssigned", "NotOwner", "InUse", "NotTransfer", "Permanent"], }, /** - * Lookup547: pallet_democracy::types::ReferendumInfo, Balance> + * Lookup604: pallet_democracy::types::ReferendumInfo, Balance> **/ PalletDemocracyReferendumInfo: { _enum: { - Ongoing: 'PalletDemocracyReferendumStatus', + Ongoing: "PalletDemocracyReferendumStatus", Finished: { - approved: 'bool', - end: 'u64' - } - } + approved: "bool", + end: "u64", + }, + }, }, /** - * Lookup548: pallet_democracy::types::ReferendumStatus, Balance> + * Lookup605: pallet_democracy::types::ReferendumStatus, Balance> **/ PalletDemocracyReferendumStatus: { - end: 'u64', - proposal: 'FrameSupportPreimagesBounded', - threshold: 'PalletDemocracyVoteThreshold', - delay: 'u64', - tally: 'PalletDemocracyTally' + end: "u64", + proposal: "FrameSupportPreimagesBounded", + threshold: "PalletDemocracyVoteThreshold", + delay: "u64", + tally: "PalletDemocracyTally", }, /** - * Lookup549: pallet_democracy::types::Tally + * Lookup606: pallet_democracy::types::Tally **/ PalletDemocracyTally: { - ayes: 'u128', - nays: 'u128', - turnout: 'u128' + ayes: "u128", + nays: "u128", + turnout: "u128", }, /** - * Lookup550: pallet_democracy::vote::Voting + * Lookup607: pallet_democracy::vote::Voting **/ PalletDemocracyVoteVoting: { _enum: { Direct: { - votes: 'Vec<(u32,PalletDemocracyVoteAccountVote)>', - delegations: 'PalletDemocracyDelegations', - prior: 'PalletDemocracyVotePriorLock', + votes: "Vec<(u32,PalletDemocracyVoteAccountVote)>", + delegations: "PalletDemocracyDelegations", + prior: "PalletDemocracyVotePriorLock", }, Delegating: { - balance: 'u128', - target: 'AccountId32', - conviction: 'PalletDemocracyConviction', - delegations: 'PalletDemocracyDelegations', - prior: 'PalletDemocracyVotePriorLock' - } - } + balance: "u128", + target: "AccountId32", + conviction: "PalletDemocracyConviction", + delegations: "PalletDemocracyDelegations", + prior: "PalletDemocracyVotePriorLock", + }, + }, }, /** - * Lookup554: pallet_democracy::types::Delegations + * Lookup611: pallet_democracy::types::Delegations **/ PalletDemocracyDelegations: { - votes: 'u128', - capital: 'u128' + votes: "u128", + capital: "u128", }, /** - * Lookup555: pallet_democracy::vote::PriorLock + * Lookup612: pallet_democracy::vote::PriorLock **/ - PalletDemocracyVotePriorLock: '(u64,u128)', + PalletDemocracyVotePriorLock: "(u64,u128)", /** - * Lookup558: pallet_democracy::pallet::Error + * Lookup615: pallet_democracy::pallet::Error **/ PalletDemocracyError: { - _enum: ['ValueLow', 'ProposalMissing', 'AlreadyCanceled', 'DuplicateProposal', 'ProposalBlacklisted', 'NotSimpleMajority', 'InvalidHash', 'NoProposal', 'AlreadyVetoed', 'ReferendumInvalid', 'NoneWaiting', 'NotVoter', 'NoPermission', 'AlreadyDelegating', 'InsufficientFunds', 'NotDelegating', 'VotesExist', 'InstantNotAllowed', 'Nonsense', 'WrongUpperBound', 'MaxVotesReached', 'TooMany', 'VotingPeriodLow', 'PreimageNotExist'] - }, - /** - * Lookup560: pallet_collective::Votes + _enum: [ + "ValueLow", + "ProposalMissing", + "AlreadyCanceled", + "DuplicateProposal", + "ProposalBlacklisted", + "NotSimpleMajority", + "InvalidHash", + "NoProposal", + "AlreadyVetoed", + "ReferendumInvalid", + "NoneWaiting", + "NotVoter", + "NoPermission", + "AlreadyDelegating", + "InsufficientFunds", + "NotDelegating", + "VotesExist", + "InstantNotAllowed", + "Nonsense", + "WrongUpperBound", + "MaxVotesReached", + "TooMany", + "VotingPeriodLow", + "PreimageNotExist", + ], + }, + /** + * Lookup617: pallet_collective::Votes **/ PalletCollectiveVotes: { - index: 'u32', - threshold: 'u32', - ayes: 'Vec', - nays: 'Vec', - end: 'u64' + index: "u32", + threshold: "u32", + ayes: "Vec", + nays: "Vec", + end: "u64", }, /** - * Lookup561: pallet_collective::pallet::Error + * Lookup618: pallet_collective::pallet::Error **/ PalletCollectiveError: { - _enum: ['NotMember', 'DuplicateProposal', 'ProposalMissing', 'WrongIndex', 'DuplicateVote', 'AlreadyInitialized', 'TooEarly', 'TooManyProposals', 'WrongProposalWeight', 'WrongProposalLength', 'PrimeAccountNotMember'] - }, - /** - * Lookup564: pallet_vesting::Releases + _enum: [ + "NotMember", + "DuplicateProposal", + "ProposalMissing", + "WrongIndex", + "DuplicateVote", + "AlreadyInitialized", + "TooEarly", + "TooManyProposals", + "WrongProposalWeight", + "WrongProposalLength", + "PrimeAccountNotMember", + ], + }, + /** + * Lookup621: pallet_vesting::Releases **/ PalletVestingReleases: { - _enum: ['V0', 'V1'] + _enum: ["V0", "V1"], }, /** - * Lookup565: pallet_vesting::pallet::Error + * Lookup622: pallet_vesting::pallet::Error **/ PalletVestingError: { - _enum: ['NotVesting', 'AtMaxVestingSchedules', 'AmountLow', 'ScheduleIndexOutOfBounds', 'InvalidScheduleParams'] + _enum: [ + "NotVesting", + "AtMaxVestingSchedules", + "AmountLow", + "ScheduleIndexOutOfBounds", + "InvalidScheduleParams", + ], }, /** - * Lookup567: pallet_elections_phragmen::SeatHolder + * Lookup624: pallet_elections_phragmen::SeatHolder **/ PalletElectionsPhragmenSeatHolder: { - who: 'AccountId32', - stake: 'u128', - deposit: 'u128' + who: "AccountId32", + stake: "u128", + deposit: "u128", }, /** - * Lookup568: pallet_elections_phragmen::Voter + * Lookup625: pallet_elections_phragmen::Voter **/ PalletElectionsPhragmenVoter: { - votes: 'Vec', - stake: 'u128', - deposit: 'u128' + votes: "Vec", + stake: "u128", + deposit: "u128", }, /** - * Lookup569: pallet_elections_phragmen::pallet::Error + * Lookup626: pallet_elections_phragmen::pallet::Error **/ PalletElectionsPhragmenError: { - _enum: ['UnableToVote', 'NoVotes', 'TooManyVotes', 'MaximumVotesExceeded', 'LowBalance', 'UnableToPayBond', 'MustBeVoter', 'DuplicatedCandidate', 'TooManyCandidates', 'MemberSubmit', 'RunnerUpSubmit', 'InsufficientCandidateFunds', 'NotMember', 'InvalidWitnessData', 'InvalidVoteCount', 'InvalidRenouncing', 'InvalidReplacement'] - }, - /** - * Lookup570: pallet_election_provider_multi_phase::ReadySolution + _enum: [ + "UnableToVote", + "NoVotes", + "TooManyVotes", + "MaximumVotesExceeded", + "LowBalance", + "UnableToPayBond", + "MustBeVoter", + "DuplicatedCandidate", + "TooManyCandidates", + "MemberSubmit", + "RunnerUpSubmit", + "InsufficientCandidateFunds", + "NotMember", + "InvalidWitnessData", + "InvalidVoteCount", + "InvalidRenouncing", + "InvalidReplacement", + ], + }, + /** + * Lookup627: pallet_election_provider_multi_phase::ReadySolution **/ PalletElectionProviderMultiPhaseReadySolution: { - supports: 'Vec<(AccountId32,SpNposElectionsSupport)>', - score: 'SpNposElectionsElectionScore', - compute: 'PalletElectionProviderMultiPhaseElectionCompute' + supports: "Vec<(AccountId32,SpNposElectionsSupport)>", + score: "SpNposElectionsElectionScore", + compute: "PalletElectionProviderMultiPhaseElectionCompute", }, /** - * Lookup572: pallet_election_provider_multi_phase::RoundSnapshot + * Lookup629: pallet_election_provider_multi_phase::RoundSnapshot **/ PalletElectionProviderMultiPhaseRoundSnapshot: { - voters: 'Vec<(AccountId32,u64,Vec)>', - targets: 'Vec' + voters: "Vec<(AccountId32,u64,Vec)>", + targets: "Vec", }, /** - * Lookup579: pallet_election_provider_multi_phase::signed::SignedSubmission + * Lookup636: pallet_election_provider_multi_phase::signed::SignedSubmission **/ PalletElectionProviderMultiPhaseSignedSignedSubmission: { - who: 'AccountId32', - deposit: 'u128', - rawSolution: 'PalletElectionProviderMultiPhaseRawSolution', - callFee: 'u128' + who: "AccountId32", + deposit: "u128", + rawSolution: "PalletElectionProviderMultiPhaseRawSolution", + callFee: "u128", }, /** - * Lookup580: pallet_election_provider_multi_phase::pallet::Error + * Lookup637: pallet_election_provider_multi_phase::pallet::Error **/ PalletElectionProviderMultiPhaseError: { - _enum: ['PreDispatchEarlySubmission', 'PreDispatchWrongWinnerCount', 'PreDispatchWeakSubmission', 'SignedQueueFull', 'SignedCannotPayDeposit', 'SignedInvalidWitness', 'SignedTooMuchWeight', 'OcwCallWrongEra', 'MissingSnapshotMetadata', 'InvalidSubmissionIndex', 'CallNotAllowed', 'FallbackFailed', 'BoundNotMet', 'TooManyWinners', 'PreDispatchDifferentRound'] - }, - /** - * Lookup581: pallet_staking::StakingLedger + _enum: [ + "PreDispatchEarlySubmission", + "PreDispatchWrongWinnerCount", + "PreDispatchWeakSubmission", + "SignedQueueFull", + "SignedCannotPayDeposit", + "SignedInvalidWitness", + "SignedTooMuchWeight", + "OcwCallWrongEra", + "MissingSnapshotMetadata", + "InvalidSubmissionIndex", + "CallNotAllowed", + "FallbackFailed", + "BoundNotMet", + "TooManyWinners", + "PreDispatchDifferentRound", + ], + }, + /** + * Lookup638: pallet_staking::StakingLedger **/ PalletStakingStakingLedger: { - stash: 'AccountId32', - total: 'Compact', - active: 'Compact', - unlocking: 'Vec', - legacyClaimedRewards: 'Vec' + stash: "AccountId32", + total: "Compact", + active: "Compact", + unlocking: "Vec", + legacyClaimedRewards: "Vec", }, /** - * Lookup583: pallet_staking::UnlockChunk + * Lookup640: pallet_staking::UnlockChunk **/ PalletStakingUnlockChunk: { - value: 'Compact', - era: 'Compact' + value: "Compact", + era: "Compact", }, /** - * Lookup586: pallet_staking::Nominations + * Lookup643: pallet_staking::Nominations **/ PalletStakingNominations: { - targets: 'Vec', - submittedIn: 'u32', - suppressed: 'bool' + targets: "Vec", + submittedIn: "u32", + suppressed: "bool", }, /** - * Lookup587: pallet_staking::ActiveEraInfo + * Lookup644: pallet_staking::ActiveEraInfo **/ PalletStakingActiveEraInfo: { - index: 'u32', - start: 'Option' + index: "u32", + start: "Option", }, /** - * Lookup589: sp_staking::PagedExposureMetadata + * Lookup645: sp_staking::PagedExposureMetadata **/ SpStakingPagedExposureMetadata: { - total: 'Compact', - own: 'Compact', - nominatorCount: 'u32', - pageCount: 'u32' + total: "Compact", + own: "Compact", + nominatorCount: "u32", + pageCount: "u32", }, /** - * Lookup591: sp_staking::ExposurePage + * Lookup647: sp_staking::ExposurePage **/ SpStakingExposurePage: { - pageTotal: 'Compact', - others: 'Vec' + pageTotal: "Compact", + others: "Vec", }, /** - * Lookup592: pallet_staking::EraRewardPoints + * Lookup648: pallet_staking::EraRewardPoints **/ PalletStakingEraRewardPoints: { - total: 'u32', - individual: 'BTreeMap' + total: "u32", + individual: "BTreeMap", }, /** - * Lookup597: pallet_staking::UnappliedSlash + * Lookup653: pallet_staking::UnappliedSlash **/ PalletStakingUnappliedSlash: { - validator: 'AccountId32', - own: 'u128', - others: 'Vec<(AccountId32,u128)>', - reporters: 'Vec', - payout: 'u128' + validator: "AccountId32", + own: "u128", + others: "Vec<(AccountId32,u128)>", + reporters: "Vec", + payout: "u128", }, /** - * Lookup601: pallet_staking::slashing::SlashingSpans + * Lookup657: pallet_staking::slashing::SlashingSpans **/ PalletStakingSlashingSlashingSpans: { - spanIndex: 'u32', - lastStart: 'u32', - lastNonzeroSlash: 'u32', - prior: 'Vec' + spanIndex: "u32", + lastStart: "u32", + lastNonzeroSlash: "u32", + prior: "Vec", }, /** - * Lookup602: pallet_staking::slashing::SpanRecord + * Lookup658: pallet_staking::slashing::SpanRecord **/ PalletStakingSlashingSpanRecord: { - slashed: 'u128', - paidOut: 'u128' + slashed: "u128", + paidOut: "u128", }, /** - * Lookup605: pallet_staking::pallet::pallet::Error + * Lookup661: pallet_staking::pallet::pallet::Error **/ PalletStakingPalletError: { - _enum: ['NotController', 'NotStash', 'AlreadyBonded', 'AlreadyPaired', 'EmptyTargets', 'DuplicateIndex', 'InvalidSlashIndex', 'InsufficientBond', 'NoMoreChunks', 'NoUnlockChunk', 'FundedTarget', 'InvalidEraToReward', 'InvalidNumberOfNominations', 'NotSortedAndUnique', 'AlreadyClaimed', 'InvalidPage', 'IncorrectHistoryDepth', 'IncorrectSlashingSpans', 'BadState', 'TooManyTargets', 'BadTarget', 'CannotChillOther', 'TooManyNominators', 'TooManyValidators', 'CommissionTooLow', 'BoundNotMet', 'ControllerDeprecated', 'RestakeActive'] - }, - /** - * Lookup609: sp_core::crypto::KeyTypeId - **/ - SpCoreCryptoKeyTypeId: '[u8;4]', - /** - * Lookup610: pallet_session::pallet::Error + _enum: [ + "NotController", + "NotStash", + "AlreadyBonded", + "AlreadyPaired", + "EmptyTargets", + "DuplicateIndex", + "InvalidSlashIndex", + "InsufficientBond", + "NoMoreChunks", + "NoUnlockChunk", + "FundedTarget", + "InvalidEraToReward", + "InvalidNumberOfNominations", + "NotSortedAndUnique", + "AlreadyClaimed", + "InvalidPage", + "IncorrectHistoryDepth", + "IncorrectSlashingSpans", + "BadState", + "TooManyTargets", + "BadTarget", + "CannotChillOther", + "TooManyNominators", + "TooManyValidators", + "CommissionTooLow", + "BoundNotMet", + "ControllerDeprecated", + "RestakeActive", + ], + }, + /** + * Lookup665: sp_core::crypto::KeyTypeId + **/ + SpCoreCryptoKeyTypeId: "[u8;4]", + /** + * Lookup666: pallet_session::pallet::Error **/ PalletSessionError: { - _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] + _enum: [ + "InvalidProof", + "NoAssociatedValidatorId", + "DuplicatedKey", + "NoKeys", + "NoAccount", + ], }, /** - * Lookup612: pallet_treasury::Proposal + * Lookup668: pallet_treasury::Proposal **/ PalletTreasuryProposal: { - proposer: 'AccountId32', - value: 'u128', - beneficiary: 'AccountId32', - bond: 'u128' + proposer: "AccountId32", + value: "u128", + beneficiary: "AccountId32", + bond: "u128", }, /** - * Lookup614: pallet_treasury::SpendStatus + * Lookup670: pallet_treasury::SpendStatus **/ PalletTreasurySpendStatus: { - assetKind: 'Null', - amount: 'u128', - beneficiary: 'AccountId32', - validFrom: 'u64', - expireAt: 'u64', - status: 'PalletTreasuryPaymentState' + assetKind: "Null", + amount: "u128", + beneficiary: "AccountId32", + validFrom: "u64", + expireAt: "u64", + status: "PalletTreasuryPaymentState", }, /** - * Lookup615: pallet_treasury::PaymentState + * Lookup671: pallet_treasury::PaymentState **/ PalletTreasuryPaymentState: { _enum: { - Pending: 'Null', + Pending: "Null", Attempted: { - id: 'Null', + id: "Null", }, - Failed: 'Null' - } + Failed: "Null", + }, }, /** - * Lookup616: frame_support::PalletId + * Lookup672: frame_support::PalletId **/ - FrameSupportPalletId: '[u8;8]', + FrameSupportPalletId: "[u8;8]", /** - * Lookup617: pallet_treasury::pallet::Error + * Lookup673: pallet_treasury::pallet::Error **/ PalletTreasuryError: { - _enum: ['InsufficientProposersBalance', 'InvalidIndex', 'TooManyApprovals', 'InsufficientPermission', 'ProposalNotApproved', 'FailedToConvertBalance', 'SpendExpired', 'EarlyPayout', 'AlreadyAttempted', 'PayoutError', 'NotAttempted', 'Inconclusive'] - }, - /** - * Lookup618: pallet_bounties::Bounty + _enum: [ + "InsufficientProposersBalance", + "InvalidIndex", + "TooManyApprovals", + "InsufficientPermission", + "ProposalNotApproved", + "FailedToConvertBalance", + "SpendExpired", + "EarlyPayout", + "AlreadyAttempted", + "PayoutError", + "NotAttempted", + "Inconclusive", + ], + }, + /** + * Lookup674: pallet_bounties::Bounty **/ PalletBountiesBounty: { - proposer: 'AccountId32', - value: 'u128', - fee: 'u128', - curatorDeposit: 'u128', - bond: 'u128', - status: 'PalletBountiesBountyStatus' + proposer: "AccountId32", + value: "u128", + fee: "u128", + curatorDeposit: "u128", + bond: "u128", + status: "PalletBountiesBountyStatus", }, /** - * Lookup619: pallet_bounties::BountyStatus + * Lookup675: pallet_bounties::BountyStatus **/ PalletBountiesBountyStatus: { _enum: { - Proposed: 'Null', - Approved: 'Null', - Funded: 'Null', + Proposed: "Null", + Approved: "Null", + Funded: "Null", CuratorProposed: { - curator: 'AccountId32', + curator: "AccountId32", }, Active: { - curator: 'AccountId32', - updateDue: 'u64', + curator: "AccountId32", + updateDue: "u64", }, PendingPayout: { - curator: 'AccountId32', - beneficiary: 'AccountId32', - unlockAt: 'u64' - } - } + curator: "AccountId32", + beneficiary: "AccountId32", + unlockAt: "u64", + }, + }, }, /** - * Lookup621: pallet_bounties::pallet::Error + * Lookup677: pallet_bounties::pallet::Error **/ PalletBountiesError: { - _enum: ['InsufficientProposersBalance', 'InvalidIndex', 'ReasonTooBig', 'UnexpectedStatus', 'RequireCurator', 'InvalidValue', 'InvalidFee', 'PendingPayout', 'Premature', 'HasActiveChildBounty', 'TooManyQueued'] - }, - /** - * Lookup622: pallet_child_bounties::ChildBounty + _enum: [ + "InsufficientProposersBalance", + "InvalidIndex", + "ReasonTooBig", + "UnexpectedStatus", + "RequireCurator", + "InvalidValue", + "InvalidFee", + "PendingPayout", + "Premature", + "HasActiveChildBounty", + "TooManyQueued", + ], + }, + /** + * Lookup678: pallet_child_bounties::ChildBounty **/ PalletChildBountiesChildBounty: { - parentBounty: 'u32', - value: 'u128', - fee: 'u128', - curatorDeposit: 'u128', - status: 'PalletChildBountiesChildBountyStatus' + parentBounty: "u32", + value: "u128", + fee: "u128", + curatorDeposit: "u128", + status: "PalletChildBountiesChildBountyStatus", }, /** - * Lookup623: pallet_child_bounties::ChildBountyStatus + * Lookup679: pallet_child_bounties::ChildBountyStatus **/ PalletChildBountiesChildBountyStatus: { _enum: { - Added: 'Null', + Added: "Null", CuratorProposed: { - curator: 'AccountId32', + curator: "AccountId32", }, Active: { - curator: 'AccountId32', + curator: "AccountId32", }, PendingPayout: { - curator: 'AccountId32', - beneficiary: 'AccountId32', - unlockAt: 'u64' - } - } + curator: "AccountId32", + beneficiary: "AccountId32", + unlockAt: "u64", + }, + }, }, /** - * Lookup624: pallet_child_bounties::pallet::Error + * Lookup680: pallet_child_bounties::pallet::Error **/ PalletChildBountiesError: { - _enum: ['ParentBountyNotActive', 'InsufficientBountyBalance', 'TooManyChildBounties'] + _enum: [ + "ParentBountyNotActive", + "InsufficientBountyBalance", + "TooManyChildBounties", + ], }, /** - * Lookup625: pallet_bags_list::list::Node + * Lookup681: pallet_bags_list::list::Node **/ PalletBagsListListNode: { - id: 'AccountId32', - prev: 'Option', - next: 'Option', - bagUpper: 'u64', - score: 'u64' + id: "AccountId32", + prev: "Option", + next: "Option", + bagUpper: "u64", + score: "u64", }, /** - * Lookup626: pallet_bags_list::list::Bag + * Lookup682: pallet_bags_list::list::Bag **/ PalletBagsListListBag: { - head: 'Option', - tail: 'Option' + head: "Option", + tail: "Option", }, /** - * Lookup628: pallet_bags_list::pallet::Error + * Lookup684: pallet_bags_list::pallet::Error **/ PalletBagsListError: { _enum: { - List: 'PalletBagsListListListError' - } + List: "PalletBagsListListListError", + }, }, /** - * Lookup629: pallet_bags_list::list::ListError + * Lookup685: pallet_bags_list::list::ListError **/ PalletBagsListListListError: { - _enum: ['Duplicate', 'NotHeavier', 'NotInSameBag', 'NodeNotFound'] + _enum: ["Duplicate", "NotHeavier", "NotInSameBag", "NodeNotFound"], }, /** - * Lookup630: pallet_nomination_pools::PoolMember + * Lookup686: pallet_nomination_pools::PoolMember **/ PalletNominationPoolsPoolMember: { - poolId: 'u32', - points: 'u128', - lastRecordedRewardCounter: 'u128', - unbondingEras: 'BTreeMap' + poolId: "u32", + points: "u128", + lastRecordedRewardCounter: "u128", + unbondingEras: "BTreeMap", }, /** - * Lookup635: pallet_nomination_pools::BondedPoolInner + * Lookup691: pallet_nomination_pools::BondedPoolInner **/ PalletNominationPoolsBondedPoolInner: { - commission: 'PalletNominationPoolsCommission', - memberCounter: 'u32', - points: 'u128', - roles: 'PalletNominationPoolsPoolRoles', - state: 'PalletNominationPoolsPoolState' + commission: "PalletNominationPoolsCommission", + memberCounter: "u32", + points: "u128", + roles: "PalletNominationPoolsPoolRoles", + state: "PalletNominationPoolsPoolState", }, /** - * Lookup636: pallet_nomination_pools::Commission + * Lookup692: pallet_nomination_pools::Commission **/ PalletNominationPoolsCommission: { - current: 'Option<(Perbill,AccountId32)>', - max: 'Option', - changeRate: 'Option', - throttleFrom: 'Option', - claimPermission: 'Option' + current: "Option<(Perbill,AccountId32)>", + max: "Option", + changeRate: "Option", + throttleFrom: "Option", + claimPermission: "Option", }, /** - * Lookup639: pallet_nomination_pools::PoolRoles + * Lookup695: pallet_nomination_pools::PoolRoles **/ PalletNominationPoolsPoolRoles: { - depositor: 'AccountId32', - root: 'Option', - nominator: 'Option', - bouncer: 'Option' + depositor: "AccountId32", + root: "Option", + nominator: "Option", + bouncer: "Option", }, /** - * Lookup640: pallet_nomination_pools::RewardPool + * Lookup696: pallet_nomination_pools::RewardPool **/ PalletNominationPoolsRewardPool: { - lastRecordedRewardCounter: 'u128', - lastRecordedTotalPayouts: 'u128', - totalRewardsClaimed: 'u128', - totalCommissionPending: 'u128', - totalCommissionClaimed: 'u128' + lastRecordedRewardCounter: "u128", + lastRecordedTotalPayouts: "u128", + totalRewardsClaimed: "u128", + totalCommissionPending: "u128", + totalCommissionClaimed: "u128", }, /** - * Lookup641: pallet_nomination_pools::SubPools + * Lookup697: pallet_nomination_pools::SubPools **/ PalletNominationPoolsSubPools: { - noEra: 'PalletNominationPoolsUnbondPool', - withEra: 'BTreeMap' + noEra: "PalletNominationPoolsUnbondPool", + withEra: "BTreeMap", }, /** - * Lookup642: pallet_nomination_pools::UnbondPool + * Lookup698: pallet_nomination_pools::UnbondPool **/ PalletNominationPoolsUnbondPool: { - points: 'u128', - balance: 'u128' + points: "u128", + balance: "u128", }, /** - * Lookup647: pallet_nomination_pools::pallet::Error + * Lookup703: pallet_nomination_pools::pallet::Error **/ PalletNominationPoolsError: { _enum: { - PoolNotFound: 'Null', - PoolMemberNotFound: 'Null', - RewardPoolNotFound: 'Null', - SubPoolsNotFound: 'Null', - AccountBelongsToOtherPool: 'Null', - FullyUnbonding: 'Null', - MaxUnbondingLimit: 'Null', - CannotWithdrawAny: 'Null', - MinimumBondNotMet: 'Null', - OverflowRisk: 'Null', - NotDestroying: 'Null', - NotNominator: 'Null', - NotKickerOrDestroying: 'Null', - NotOpen: 'Null', - MaxPools: 'Null', - MaxPoolMembers: 'Null', - CanNotChangeState: 'Null', - DoesNotHavePermission: 'Null', - MetadataExceedsMaxLen: 'Null', - Defensive: 'PalletNominationPoolsDefensiveError', - PartialUnbondNotAllowedPermissionlessly: 'Null', - MaxCommissionRestricted: 'Null', - CommissionExceedsMaximum: 'Null', - CommissionExceedsGlobalMaximum: 'Null', - CommissionChangeThrottled: 'Null', - CommissionChangeRateNotAllowed: 'Null', - NoPendingCommission: 'Null', - NoCommissionCurrentSet: 'Null', - PoolIdInUse: 'Null', - InvalidPoolId: 'Null', - BondExtraRestricted: 'Null', - NothingToAdjust: 'Null' - } + PoolNotFound: "Null", + PoolMemberNotFound: "Null", + RewardPoolNotFound: "Null", + SubPoolsNotFound: "Null", + AccountBelongsToOtherPool: "Null", + FullyUnbonding: "Null", + MaxUnbondingLimit: "Null", + CannotWithdrawAny: "Null", + MinimumBondNotMet: "Null", + OverflowRisk: "Null", + NotDestroying: "Null", + NotNominator: "Null", + NotKickerOrDestroying: "Null", + NotOpen: "Null", + MaxPools: "Null", + MaxPoolMembers: "Null", + CanNotChangeState: "Null", + DoesNotHavePermission: "Null", + MetadataExceedsMaxLen: "Null", + Defensive: "PalletNominationPoolsDefensiveError", + PartialUnbondNotAllowedPermissionlessly: "Null", + MaxCommissionRestricted: "Null", + CommissionExceedsMaximum: "Null", + CommissionExceedsGlobalMaximum: "Null", + CommissionChangeThrottled: "Null", + CommissionChangeRateNotAllowed: "Null", + NoPendingCommission: "Null", + NoCommissionCurrentSet: "Null", + PoolIdInUse: "Null", + InvalidPoolId: "Null", + BondExtraRestricted: "Null", + NothingToAdjust: "Null", + }, }, /** - * Lookup648: pallet_nomination_pools::pallet::DefensiveError + * Lookup704: pallet_nomination_pools::pallet::DefensiveError **/ PalletNominationPoolsDefensiveError: { - _enum: ['NotEnoughSpaceInUnbondPool', 'PoolNotFound', 'RewardPoolNotFound', 'SubPoolsNotFound', 'BondedStashKilledPrematurely'] + _enum: [ + "NotEnoughSpaceInUnbondPool", + "PoolNotFound", + "RewardPoolNotFound", + "SubPoolsNotFound", + "BondedStashKilledPrematurely", + ], }, /** - * Lookup651: pallet_scheduler::Scheduled, BlockNumber, tangle_testnet_runtime::OriginCaller, sp_core::crypto::AccountId32> + * Lookup707: pallet_scheduler::Scheduled, BlockNumber, tangle_testnet_runtime::OriginCaller, sp_core::crypto::AccountId32> **/ PalletSchedulerScheduled: { - maybeId: 'Option<[u8;32]>', - priority: 'u8', - call: 'FrameSupportPreimagesBounded', - maybePeriodic: 'Option<(u64,u32)>', - origin: 'TangleTestnetRuntimeOriginCaller' + maybeId: "Option<[u8;32]>", + priority: "u8", + call: "FrameSupportPreimagesBounded", + maybePeriodic: "Option<(u64,u32)>", + origin: "TangleTestnetRuntimeOriginCaller", }, /** - * Lookup653: pallet_scheduler::pallet::Error + * Lookup709: pallet_scheduler::pallet::Error **/ PalletSchedulerError: { - _enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange', 'Named'] + _enum: [ + "FailedToSchedule", + "NotFound", + "TargetBlockNumberInPast", + "RescheduleNoChange", + "Named", + ], }, /** - * Lookup654: pallet_preimage::OldRequestStatus + * Lookup710: pallet_preimage::OldRequestStatus **/ PalletPreimageOldRequestStatus: { _enum: { Unrequested: { - deposit: '(AccountId32,u128)', - len: 'u32', + deposit: "(AccountId32,u128)", + len: "u32", }, Requested: { - deposit: 'Option<(AccountId32,u128)>', - count: 'u32', - len: 'Option' - } - } + deposit: "Option<(AccountId32,u128)>", + count: "u32", + len: "Option", + }, + }, }, /** - * Lookup656: pallet_preimage::RequestStatus + * Lookup712: pallet_preimage::RequestStatus **/ PalletPreimageRequestStatus: { _enum: { Unrequested: { - ticket: '(AccountId32,Null)', - len: 'u32', + ticket: "(AccountId32,Null)", + len: "u32", }, Requested: { - maybeTicket: 'Option<(AccountId32,Null)>', - count: 'u32', - maybeLen: 'Option' - } - } + maybeTicket: "Option<(AccountId32,Null)>", + count: "u32", + maybeLen: "Option", + }, + }, }, /** - * Lookup660: pallet_preimage::pallet::Error + * Lookup716: pallet_preimage::pallet::Error **/ PalletPreimageError: { - _enum: ['TooBig', 'AlreadyNoted', 'NotAuthorized', 'NotNoted', 'Requested', 'NotRequested', 'TooMany', 'TooFew'] + _enum: [ + "TooBig", + "AlreadyNoted", + "NotAuthorized", + "NotNoted", + "Requested", + "NotRequested", + "TooMany", + "TooFew", + ], }, /** - * Lookup661: sp_staking::offence::OffenceDetails + * Lookup717: sp_staking::offence::OffenceDetails **/ SpStakingOffenceOffenceDetails: { - offender: '(AccountId32,SpStakingExposure)', - reporters: 'Vec' + offender: "(AccountId32,SpStakingExposure)", + reporters: "Vec", }, /** - * Lookup663: pallet_tx_pause::pallet::Error + * Lookup719: pallet_tx_pause::pallet::Error **/ PalletTxPauseError: { - _enum: ['IsPaused', 'IsUnpaused', 'Unpausable', 'NotFound'] + _enum: ["IsPaused", "IsUnpaused", "Unpausable", "NotFound"], }, /** - * Lookup666: pallet_im_online::pallet::Error + * Lookup722: pallet_im_online::pallet::Error **/ PalletImOnlineError: { - _enum: ['InvalidKey', 'DuplicatedHeartbeat'] + _enum: ["InvalidKey", "DuplicatedHeartbeat"], }, /** - * Lookup668: pallet_identity::types::Registration> + * Lookup724: pallet_identity::types::Registration> **/ PalletIdentityRegistration: { - judgements: 'Vec<(u32,PalletIdentityJudgement)>', - deposit: 'u128', - info: 'PalletIdentityLegacyIdentityInfo' + judgements: "Vec<(u32,PalletIdentityJudgement)>", + deposit: "u128", + info: "PalletIdentityLegacyIdentityInfo", }, /** - * Lookup677: pallet_identity::types::RegistrarInfo + * Lookup733: pallet_identity::types::RegistrarInfo **/ PalletIdentityRegistrarInfo: { - account: 'AccountId32', - fee: 'u128', - fields: 'u64' + account: "AccountId32", + fee: "u128", + fields: "u64", }, /** - * Lookup679: pallet_identity::types::AuthorityProperties> + * Lookup735: pallet_identity::types::AuthorityProperties> **/ PalletIdentityAuthorityProperties: { - suffix: 'Bytes', - allocation: 'u32' + suffix: "Bytes", + allocation: "u32", }, /** - * Lookup682: pallet_identity::pallet::Error + * Lookup738: pallet_identity::pallet::Error **/ PalletIdentityError: { - _enum: ['TooManySubAccounts', 'NotFound', 'NotNamed', 'EmptyIndex', 'FeeChanged', 'NoIdentity', 'StickyJudgement', 'JudgementGiven', 'InvalidJudgement', 'InvalidIndex', 'InvalidTarget', 'TooManyRegistrars', 'AlreadyClaimed', 'NotSub', 'NotOwned', 'JudgementForDifferentIdentity', 'JudgementPaymentFailed', 'InvalidSuffix', 'NotUsernameAuthority', 'NoAllocation', 'InvalidSignature', 'RequiresSignature', 'InvalidUsername', 'UsernameTaken', 'NoUsername', 'NotExpired'] - }, - /** - * Lookup683: pallet_utility::pallet::Error + _enum: [ + "TooManySubAccounts", + "NotFound", + "NotNamed", + "EmptyIndex", + "FeeChanged", + "NoIdentity", + "StickyJudgement", + "JudgementGiven", + "InvalidJudgement", + "InvalidIndex", + "InvalidTarget", + "TooManyRegistrars", + "AlreadyClaimed", + "NotSub", + "NotOwned", + "JudgementForDifferentIdentity", + "JudgementPaymentFailed", + "InvalidSuffix", + "NotUsernameAuthority", + "NoAllocation", + "InvalidSignature", + "RequiresSignature", + "InvalidUsername", + "UsernameTaken", + "NoUsername", + "NotExpired", + ], + }, + /** + * Lookup739: pallet_utility::pallet::Error **/ PalletUtilityError: { - _enum: ['TooManyCalls'] + _enum: ["TooManyCalls"], }, /** - * Lookup685: pallet_multisig::Multisig + * Lookup741: pallet_multisig::Multisig **/ PalletMultisigMultisig: { - when: 'PalletMultisigTimepoint', - deposit: 'u128', - depositor: 'AccountId32', - approvals: 'Vec' + when: "PalletMultisigTimepoint", + deposit: "u128", + depositor: "AccountId32", + approvals: "Vec", }, /** - * Lookup686: pallet_multisig::pallet::Error + * Lookup742: pallet_multisig::pallet::Error **/ PalletMultisigError: { - _enum: ['MinimumThreshold', 'AlreadyApproved', 'NoApprovalsNeeded', 'TooFewSignatories', 'TooManySignatories', 'SignatoriesOutOfOrder', 'SenderInSignatories', 'NotFound', 'NotOwner', 'NoTimepoint', 'WrongTimepoint', 'UnexpectedTimepoint', 'MaxWeightTooLow', 'AlreadyStored'] - }, - /** - * Lookup689: fp_rpc::TransactionStatus + _enum: [ + "MinimumThreshold", + "AlreadyApproved", + "NoApprovalsNeeded", + "TooFewSignatories", + "TooManySignatories", + "SignatoriesOutOfOrder", + "SenderInSignatories", + "NotFound", + "NotOwner", + "NoTimepoint", + "WrongTimepoint", + "UnexpectedTimepoint", + "MaxWeightTooLow", + "AlreadyStored", + ], + }, + /** + * Lookup745: fp_rpc::TransactionStatus **/ FpRpcTransactionStatus: { - transactionHash: 'H256', - transactionIndex: 'u32', - from: 'H160', - to: 'Option', - contractAddress: 'Option', - logs: 'Vec', - logsBloom: 'EthbloomBloom' + transactionHash: "H256", + transactionIndex: "u32", + from: "H160", + to: "Option", + contractAddress: "Option", + logs: "Vec", + logsBloom: "EthbloomBloom", }, /** - * Lookup692: ethbloom::Bloom + * Lookup748: ethbloom::Bloom **/ - EthbloomBloom: '[u8;256]', + EthbloomBloom: "[u8;256]", /** - * Lookup694: ethereum::receipt::ReceiptV3 + * Lookup750: ethereum::receipt::ReceiptV3 **/ EthereumReceiptReceiptV3: { _enum: { - Legacy: 'EthereumReceiptEip658ReceiptData', - EIP2930: 'EthereumReceiptEip658ReceiptData', - EIP1559: 'EthereumReceiptEip658ReceiptData' - } + Legacy: "EthereumReceiptEip658ReceiptData", + EIP2930: "EthereumReceiptEip658ReceiptData", + EIP1559: "EthereumReceiptEip658ReceiptData", + }, }, /** - * Lookup695: ethereum::receipt::EIP658ReceiptData + * Lookup751: ethereum::receipt::EIP658ReceiptData **/ EthereumReceiptEip658ReceiptData: { - statusCode: 'u8', - usedGas: 'U256', - logsBloom: 'EthbloomBloom', - logs: 'Vec' + statusCode: "u8", + usedGas: "U256", + logsBloom: "EthbloomBloom", + logs: "Vec", }, /** - * Lookup696: ethereum::block::Block + * Lookup752: ethereum::block::Block **/ EthereumBlock: { - header: 'EthereumHeader', - transactions: 'Vec', - ommers: 'Vec' + header: "EthereumHeader", + transactions: "Vec", + ommers: "Vec", }, /** - * Lookup697: ethereum::header::Header + * Lookup753: ethereum::header::Header **/ EthereumHeader: { - parentHash: 'H256', - ommersHash: 'H256', - beneficiary: 'H160', - stateRoot: 'H256', - transactionsRoot: 'H256', - receiptsRoot: 'H256', - logsBloom: 'EthbloomBloom', - difficulty: 'U256', - number: 'U256', - gasLimit: 'U256', - gasUsed: 'U256', - timestamp: 'u64', - extraData: 'Bytes', - mixHash: 'H256', - nonce: 'EthereumTypesHashH64' + parentHash: "H256", + ommersHash: "H256", + beneficiary: "H160", + stateRoot: "H256", + transactionsRoot: "H256", + receiptsRoot: "H256", + logsBloom: "EthbloomBloom", + difficulty: "U256", + number: "U256", + gasLimit: "U256", + gasUsed: "U256", + timestamp: "u64", + extraData: "Bytes", + mixHash: "H256", + nonce: "EthereumTypesHashH64", }, /** - * Lookup698: ethereum_types::hash::H64 + * Lookup754: ethereum_types::hash::H64 **/ - EthereumTypesHashH64: '[u8;8]', + EthereumTypesHashH64: "[u8;8]", /** - * Lookup703: pallet_ethereum::pallet::Error + * Lookup759: pallet_ethereum::pallet::Error **/ PalletEthereumError: { - _enum: ['InvalidSignature', 'PreLogExists'] + _enum: ["InvalidSignature", "PreLogExists"], }, /** - * Lookup704: pallet_evm::CodeMetadata + * Lookup760: pallet_evm::CodeMetadata **/ PalletEvmCodeMetadata: { _alias: { - size_: 'size', - hash_: 'hash' + size_: "size", + hash_: "hash", }, - size_: 'u64', - hash_: 'H256' + size_: "u64", + hash_: "H256", }, /** - * Lookup706: pallet_evm::pallet::Error + * Lookup762: pallet_evm::pallet::Error **/ PalletEvmError: { - _enum: ['BalanceLow', 'FeeOverflow', 'PaymentOverflow', 'WithdrawFailed', 'GasPriceTooLow', 'InvalidNonce', 'GasLimitTooLow', 'GasLimitTooHigh', 'InvalidChainId', 'InvalidSignature', 'Reentrancy', 'TransactionMustComeFromEOA', 'Undefined'] - }, - /** - * Lookup707: pallet_hotfix_sufficients::pallet::Error + _enum: [ + "BalanceLow", + "FeeOverflow", + "PaymentOverflow", + "WithdrawFailed", + "GasPriceTooLow", + "InvalidNonce", + "GasLimitTooLow", + "GasLimitTooHigh", + "InvalidChainId", + "InvalidSignature", + "Reentrancy", + "TransactionMustComeFromEOA", + "Undefined", + ], + }, + /** + * Lookup763: pallet_hotfix_sufficients::pallet::Error **/ PalletHotfixSufficientsError: { - _enum: ['MaxAddressCountExceeded'] + _enum: ["MaxAddressCountExceeded"], }, /** - * Lookup709: pallet_airdrop_claims::pallet::Error + * Lookup765: pallet_airdrop_claims::pallet::Error **/ PalletAirdropClaimsError: { - _enum: ['InvalidEthereumSignature', 'InvalidNativeSignature', 'InvalidNativeAccount', 'SignerHasNoClaim', 'SenderHasNoClaim', 'PotUnderflow', 'InvalidStatement', 'VestedBalanceExists'] + _enum: [ + "InvalidEthereumSignature", + "InvalidNativeSignature", + "InvalidNativeAccount", + "SignerHasNoClaim", + "SenderHasNoClaim", + "PotUnderflow", + "InvalidStatement", + "VestedBalanceExists", + ], }, /** - * Lookup710: pallet_roles::types::RestakingLedger + * Lookup766: pallet_roles::types::RestakingLedger **/ PalletRolesRestakingLedger: { - stash: 'AccountId32', - total: 'Compact', - profile: 'PalletRolesProfile', - roles: 'BTreeMap', - roleKey: 'Bytes', - unlocking: 'Vec', - claimedRewards: 'Vec', - maxActiveServices: 'u32' + stash: "AccountId32", + total: "Compact", + profile: "PalletRolesProfile", + roles: "BTreeMap", + roleKey: "Bytes", + unlocking: "Vec", + claimedRewards: "Vec", + maxActiveServices: "u32", }, /** - * Lookup716: pallet_roles::types::UnlockChunk + * Lookup772: pallet_roles::types::UnlockChunk **/ PalletRolesUnlockChunk: { - value: 'Compact', - era: 'Compact' + value: "Compact", + era: "Compact", }, /** - * Lookup720: pallet_roles::pallet::Error + * Lookup776: pallet_roles::pallet::Error **/ PalletRolesError: { - _enum: ['NotValidator', 'HasRoleAssigned', 'RoleNotAssigned', 'MaxRoles', 'RoleCannotBeRemoved', 'RestakingAmountCannotBeUpdated', 'ExceedsMaxRestakeValue', 'InsufficientRestakingBond', 'ProfileUpdateFailed', 'ProfileAlreadyExists', 'NoProfileFound', 'ProfileDeleteRequestFailed', 'SessionKeysNotProvided', 'KeySizeExceeded', 'CannotGetCurrentEra', 'InvalidEraToReward', 'BoundNotMet', 'AlreadyClaimed', 'NoMoreChunks'] - }, - /** - * Lookup721: tangle_primitives::jobs::PhaseResult + _enum: [ + "NotValidator", + "HasRoleAssigned", + "RoleNotAssigned", + "MaxRoles", + "RoleCannotBeRemoved", + "RestakingAmountCannotBeUpdated", + "ExceedsMaxRestakeValue", + "InsufficientRestakingBond", + "ProfileUpdateFailed", + "ProfileAlreadyExists", + "NoProfileFound", + "ProfileDeleteRequestFailed", + "SessionKeysNotProvided", + "KeySizeExceeded", + "CannotGetCurrentEra", + "InvalidEraToReward", + "BoundNotMet", + "AlreadyClaimed", + "NoMoreChunks", + ], + }, + /** + * Lookup777: tangle_primitives::jobs::PhaseResult **/ TanglePrimitivesJobsPhaseResult: { - owner: 'AccountId32', - result: 'TanglePrimitivesJobsJobResult', - ttl: 'u64', - permittedCaller: 'Option', - jobType: 'TanglePrimitivesJobsJobType' + owner: "AccountId32", + result: "TanglePrimitivesJobsJobResult", + ttl: "u64", + permittedCaller: "Option", + jobType: "TanglePrimitivesJobsJobType", }, /** - * Lookup723: pallet_jobs::module::Error + * Lookup779: pallet_jobs::module::Error **/ PalletJobsModuleError: { - _enum: ['InvalidJobPhase', 'InvalidValidator', 'InvalidJobParams', 'PreviousResultNotFound', 'ResultExpired', 'JobAlreadyExpired', 'JobNotFound', 'PhaseOneResultNotFound', 'NoRewards', 'NotEnoughValidators', 'EmptyResult', 'EmptyJob', 'ValidatorRoleKeyNotFound', 'ResultNotExpectedType', 'NoPermission', 'TooManyParticipants', 'ExceedsMaxKeySize', 'TooManyJobsForValidator'] + _enum: [ + "InvalidJobPhase", + "InvalidValidator", + "InvalidJobParams", + "PreviousResultNotFound", + "ResultExpired", + "JobAlreadyExpired", + "JobNotFound", + "PhaseOneResultNotFound", + "NoRewards", + "NotEnoughValidators", + "EmptyResult", + "EmptyJob", + "ValidatorRoleKeyNotFound", + "ResultNotExpectedType", + "NoPermission", + "TooManyParticipants", + "ExceedsMaxKeySize", + "TooManyJobsForValidator", + ], + }, + /** + * Lookup782: tangle_primitives::services::ServiceRequest + **/ + TanglePrimitivesJobsV2ServiceRequest: { + blueprint: "u64", + owner: "AccountId32", + permittedCallers: "Vec", + ttl: "u64", + args: "Vec", + operatorsWithApprovalState: + "Vec<(AccountId32,TanglePrimitivesJobsV2ApprovalState)>", + }, + /** + * Lookup787: tangle_primitives::services::ApprovalState + **/ + TanglePrimitivesJobsV2ApprovalState: { + _enum: ["Pending", "Approved", "Rejected"], + }, + /** + * Lookup789: tangle_primitives::services::Service + **/ + TanglePrimitivesJobsV2Service: { + id: "u64", + blueprint: "u64", + owner: "AccountId32", + permittedCallers: "Vec", + operators: "Vec", + ttl: "u64", + }, + /** + * Lookup793: tangle_primitives::services::JobCall + **/ + TanglePrimitivesJobsV2JobCall: { + serviceId: "u64", + job: "u8", + args: "Vec", + }, + /** + * Lookup794: tangle_primitives::services::JobCallResult + **/ + TanglePrimitivesJobsV2JobCallResult: { + serviceId: "u64", + callId: "u64", + result: "Vec", + }, + /** + * Lookup795: tangle_primitives::services::OperatorProfile + **/ + TanglePrimitivesJobsV2OperatorProfile: { + services: "BTreeSet", + blueprints: "BTreeSet", + }, + /** + * Lookup798: pallet_services::module::Error + **/ + PalletServicesModuleError: { + _enum: { + BlueprintNotFound: "Null", + AlreadyRegistered: "Null", + InvalidRegistrationInput: "Null", + InvalidRequestInput: "Null", + InvalidJobCallInput: "Null", + InvalidJobResult: "Null", + NotRegistered: "Null", + ServiceRequestNotFound: "Null", + ServiceNotFound: "Null", + TypeCheck: "TanglePrimitivesJobsV2TypeCheckError", + MaxPermittedCallersExceeded: "Null", + MaxServiceProvidersExceeded: "Null", + MaxServicesPerUserExceeded: "Null", + MaxFieldsExceeded: "Null", + ApprovalNotRequested: "Null", + JobDefinitionNotFound: "Null", + ServiceOrJobCallNotFound: "Null", + JobCallResultNotFound: "Null", + EVMAbiEncode: "Null", + OperatorProfileNotFound: "Null", + MaxServicesPerProviderExceeded: "Null", + }, }, /** - * Lookup724: pallet_dkg::pallet::Error + * Lookup799: tangle_primitives::services::TypeCheckError **/ - PalletDkgError: { - _enum: ['CannotRetreiveSigner', 'NotEnoughSigners', 'InvalidSignatureData', 'NoParticipantsFound', 'NoSignaturesFound', 'InvalidJobType', 'DuplicateSignature', 'InvalidSignature', 'InvalidSignatureScheme', 'InvalidSignatureDeserialization', 'InvalidVerifyingKey', 'InvalidVerifyingKeyDeserialization', 'SigningKeyMismatch', 'InvalidParticipantPublicKey', 'InvalidBlsPublicKey', 'InvalidRoleType', 'InvalidJustification', 'MalformedRoundMessage', 'NotSignedByOffender', 'ValidDecommitment', 'ValidDataSize', 'ValidFeldmanVerification', 'ValidSchnorrProof', 'ValidRingPedersenParameters', 'ValidModProof', 'ValidFrostSignatureShare', 'InvalidFrostMessageSerialization', 'InvalidFrostMessageDeserialization', 'InvalidIdentifierDeserialization', 'ValidFrostSignature', 'UnknownIdentifier', 'DuplicateIdentifier', 'IncorrectNumberOfIdentifiers', 'IdentifierDerivationNotSupported', 'MalformedFrostSignature', 'InvalidFrostSignature', 'InvalidFrostSignatureShare', 'InvalidFrostSignatureScheme', 'MalformedFrostVerifyingKey', 'MalformedFrostSigningKey', 'MissingFrostCommitment', 'IdentityCommitment', 'FrostFieldError', 'FrostGroupError', 'FieldElementError', 'InvalidPublicKey', 'InvalidMessage', 'MalformedStarkSignature'] + TanglePrimitivesJobsV2TypeCheckError: { + _enum: { + ArgumentTypeMismatch: { + index: "u8", + expected: "TanglePrimitivesJobsV2FieldFieldType", + actual: "TanglePrimitivesJobsV2FieldFieldType", + }, + NotEnoughArguments: { + expected: "u8", + actual: "u8", + }, + ResultTypeMismatch: { + index: "u8", + expected: "TanglePrimitivesJobsV2FieldFieldType", + actual: "TanglePrimitivesJobsV2FieldFieldType", + }, + }, }, /** - * Lookup725: pallet_zksaas::pallet::Error + * Lookup800: pallet_dkg::pallet::Error + **/ + PalletDkgError: { + _enum: [ + "CannotRetreiveSigner", + "NotEnoughSigners", + "InvalidSignatureData", + "NoParticipantsFound", + "NoSignaturesFound", + "InvalidJobType", + "DuplicateSignature", + "InvalidSignature", + "InvalidSignatureScheme", + "InvalidSignatureDeserialization", + "InvalidVerifyingKey", + "InvalidVerifyingKeyDeserialization", + "SigningKeyMismatch", + "InvalidParticipantPublicKey", + "InvalidBlsPublicKey", + "InvalidRoleType", + "InvalidJustification", + "MalformedRoundMessage", + "NotSignedByOffender", + "ValidDecommitment", + "ValidDataSize", + "ValidFeldmanVerification", + "ValidSchnorrProof", + "ValidRingPedersenParameters", + "ValidModProof", + "ValidFrostSignatureShare", + "InvalidFrostMessageSerialization", + "InvalidFrostMessageDeserialization", + "InvalidIdentifierDeserialization", + "ValidFrostSignature", + "UnknownIdentifier", + "DuplicateIdentifier", + "IncorrectNumberOfIdentifiers", + "IdentifierDerivationNotSupported", + "MalformedFrostSignature", + "InvalidFrostSignature", + "InvalidFrostSignatureShare", + "InvalidFrostSignatureScheme", + "MalformedFrostVerifyingKey", + "MalformedFrostSigningKey", + "MissingFrostCommitment", + "IdentityCommitment", + "FrostFieldError", + "FrostGroupError", + "FieldElementError", + "InvalidPublicKey", + "InvalidMessage", + "MalformedStarkSignature", + ], + }, + /** + * Lookup801: pallet_zksaas::pallet::Error **/ PalletZksaasError: { - _enum: ['InvalidJobType', 'InvalidProof', 'MalformedProof'] + _enum: ["InvalidJobType", "InvalidProof", "MalformedProof"], }, /** - * Lookup728: pallet_proxy::ProxyDefinition + * Lookup804: pallet_proxy::ProxyDefinition **/ PalletProxyProxyDefinition: { - delegate: 'AccountId32', - proxyType: 'TangleTestnetRuntimeProxyType', - delay: 'u64' + delegate: "AccountId32", + proxyType: "TangleTestnetRuntimeProxyType", + delay: "u64", }, /** - * Lookup732: pallet_proxy::Announcement + * Lookup808: pallet_proxy::Announcement **/ PalletProxyAnnouncement: { - real: 'AccountId32', - callHash: 'H256', - height: 'u64' + real: "AccountId32", + callHash: "H256", + height: "u64", }, /** - * Lookup734: pallet_proxy::pallet::Error + * Lookup810: pallet_proxy::pallet::Error **/ PalletProxyError: { - _enum: ['TooMany', 'NotFound', 'NotProxy', 'Unproxyable', 'Duplicate', 'NoPermission', 'Unannounced', 'NoSelfProxy'] + _enum: [ + "TooMany", + "NotFound", + "NotProxy", + "Unproxyable", + "Duplicate", + "NoPermission", + "Unannounced", + "NoSelfProxy", + ], + }, + /** + * Lookup812: sygma_access_segregator::pallet::Error + **/ + SygmaAccessSegregatorError: { + _enum: ["Unimplemented", "GrantAccessFailed"], + }, + /** + * Lookup814: sygma_basic_feehandler::pallet::Error + **/ + SygmaBasicFeehandlerError: { + _enum: ["Unimplemented", "AccessDenied"], + }, + /** + * Lookup815: sygma_fee_handler_router::pallet::Error + **/ + SygmaFeeHandlerRouterError: { + _enum: ["AccessDenied", "Unimplemented"], + }, + /** + * Lookup817: sygma_percentage_feehandler::pallet::Error + **/ + SygmaPercentageFeehandlerError: { + _enum: [ + "Unimplemented", + "AccessDenied", + "FeeRateOutOfRange", + "InvalidFeeBound", + ], }, /** - * Lookup735: pallet_multi_asset_delegation::types::operator::OperatorMetadata + * Lookup824: sygma_bridge::pallet::Error + **/ + SygmaBridgeError: { + _enum: [ + "AccessDenied", + "BadMpcSignature", + "InsufficientBalance", + "TransactFailed", + "FeeTooExpensive", + "MissingMpcAddress", + "MpcAddrNotUpdatable", + "BridgePaused", + "BridgeUnpaused", + "MissingFeeConfig", + "AssetNotBound", + "ProposalAlreadyComplete", + "EmptyProposalList", + "TransactorFailed", + "InvalidDepositData", + "DestDomainNotSupported", + "DestChainIDNotMatch", + "ExtractDestDataFailed", + "DecimalConversionFail", + "DepositNonceOverflow", + "NoLiquidityHolderAccountBound", + "Unimplemented", + ], + }, + /** + * Lookup827: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ PalletMultiAssetDelegationOperatorOperatorMetadata: { stake: 'u128', @@ -5771,39 +7046,39 @@ export default { status: 'PalletMultiAssetDelegationOperatorOperatorStatus' }, /** - * Lookup737: pallet_multi_asset_delegation::types::operator::OperatorBondLessRequest + * Lookup828: frame_system::extensions::check_spec_version::CheckSpecVersion **/ PalletMultiAssetDelegationOperatorOperatorBondLessRequest: { - amount: 'u128', - requestTime: 'u32' + amount: "u128", + requestTime: "u32", }, /** - * Lookup739: pallet_multi_asset_delegation::types::operator::DelegatorBond + * Lookup829: frame_system::extensions::check_tx_version::CheckTxVersion **/ PalletMultiAssetDelegationOperatorDelegatorBond: { - delegator: 'AccountId32', - amount: 'u128', - assetId: 'u128' + delegator: "AccountId32", + amount: "u128", + assetId: "u128", }, /** - * Lookup740: pallet_multi_asset_delegation::types::operator::OperatorStatus + * Lookup830: frame_system::extensions::check_genesis::CheckGenesis **/ PalletMultiAssetDelegationOperatorOperatorStatus: { _enum: { - Active: 'Null', - Inactive: 'Null', - Leaving: 'u32' - } + Active: "Null", + Inactive: "Null", + Leaving: "u32", + }, }, /** - * Lookup741: pallet_multi_asset_delegation::types::operator::OperatorSnapshot + * Lookup833: frame_system::extensions::check_nonce::CheckNonce **/ PalletMultiAssetDelegationOperatorOperatorSnapshot: { stake: 'u128', delegations: 'Vec' }, /** - * Lookup742: pallet_multi_asset_delegation::types::delegator::DelegatorMetadata + * Lookup834: frame_system::extensions::check_weight::CheckWeight **/ PalletMultiAssetDelegationDelegatorDelegatorMetadata: { deposits: 'BTreeMap', @@ -5821,12 +7096,12 @@ export default { requestedRound: 'u32' }, /** - * Lookup749: pallet_multi_asset_delegation::types::delegator::BondInfoDelegator + * Lookup837: tangle_testnet_runtime::Runtime **/ PalletMultiAssetDelegationDelegatorBondInfoDelegator: { - operator: 'AccountId32', - amount: 'u128', - assetId: 'u128' + operator: "AccountId32", + amount: "u128", + assetId: "u128", }, /** * Lookup751: pallet_multi_asset_delegation::types::delegator::BondLessRequest @@ -5842,9 +7117,9 @@ export default { **/ PalletMultiAssetDelegationDelegatorDelegatorStatus: { _enum: { - Active: 'Null', - LeavingScheduled: 'u32' - } + Active: "Null", + LeavingScheduled: "u32", + }, }, /** * Lookup754: pallet_multi_asset_delegation::types::rewards::RewardConfig @@ -5870,60 +7145,96 @@ export default { * Lookup761: sygma_access_segregator::pallet::Error **/ SygmaAccessSegregatorError: { - _enum: ['Unimplemented', 'GrantAccessFailed'] + _enum: ["Unimplemented", "GrantAccessFailed"], }, /** * Lookup763: sygma_basic_feehandler::pallet::Error **/ SygmaBasicFeehandlerError: { - _enum: ['Unimplemented', 'AccessDenied'] + _enum: ["Unimplemented", "AccessDenied"], }, /** * Lookup764: sygma_fee_handler_router::pallet::Error **/ SygmaFeeHandlerRouterError: { - _enum: ['AccessDenied', 'Unimplemented'] + _enum: ["AccessDenied", "Unimplemented"], }, /** * Lookup766: sygma_percentage_feehandler::pallet::Error **/ SygmaPercentageFeehandlerError: { - _enum: ['Unimplemented', 'AccessDenied', 'FeeRateOutOfRange', 'InvalidFeeBound'] + _enum: [ + "Unimplemented", + "AccessDenied", + "FeeRateOutOfRange", + "InvalidFeeBound", + ], }, /** * Lookup773: sygma_bridge::pallet::Error **/ SygmaBridgeError: { - _enum: ['AccessDenied', 'BadMpcSignature', 'InsufficientBalance', 'TransactFailedDeposit', 'TransactFailedWithdraw', 'TransactFailedFeeDeposit', 'TransactFailedHoldInReserved', 'TransactFailedReleaseFromReserved', 'FeeTooExpensive', 'MissingMpcAddress', 'MpcAddrNotUpdatable', 'BridgePaused', 'BridgeUnpaused', 'MissingFeeConfig', 'AssetNotBound', 'ProposalAlreadyComplete', 'EmptyProposalList', 'TransactorFailed', 'InvalidDepositDataInvalidLength', 'InvalidDepositDataInvalidAmount', 'InvalidDepositDataInvalidRecipientLength', 'InvalidDepositDataRecipientLengthNotMatch', 'InvalidDepositDataInvalidRecipient', 'DestDomainNotSupported', 'DestChainIDNotMatch', 'ExtractDestDataFailed', 'DecimalConversionFail', 'DepositNonceOverflow', 'NoLiquidityHolderAccountBound', 'Unimplemented'] + _enum: [ + "AccessDenied", + "BadMpcSignature", + "InsufficientBalance", + "TransactFailedDeposit", + "TransactFailedWithdraw", + "TransactFailedFeeDeposit", + "TransactFailedHoldInReserved", + "TransactFailedReleaseFromReserved", + "FeeTooExpensive", + "MissingMpcAddress", + "MpcAddrNotUpdatable", + "BridgePaused", + "BridgeUnpaused", + "MissingFeeConfig", + "AssetNotBound", + "ProposalAlreadyComplete", + "EmptyProposalList", + "TransactorFailed", + "InvalidDepositDataInvalidLength", + "InvalidDepositDataInvalidAmount", + "InvalidDepositDataInvalidRecipientLength", + "InvalidDepositDataRecipientLengthNotMatch", + "InvalidDepositDataInvalidRecipient", + "DestDomainNotSupported", + "DestChainIDNotMatch", + "ExtractDestDataFailed", + "DecimalConversionFail", + "DepositNonceOverflow", + "NoLiquidityHolderAccountBound", + "Unimplemented", + ], }, /** * Lookup776: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ - FrameSystemExtensionsCheckNonZeroSender: 'Null', + FrameSystemExtensionsCheckNonZeroSender: "Null", /** * Lookup777: frame_system::extensions::check_spec_version::CheckSpecVersion **/ - FrameSystemExtensionsCheckSpecVersion: 'Null', + FrameSystemExtensionsCheckSpecVersion: "Null", /** * Lookup778: frame_system::extensions::check_tx_version::CheckTxVersion **/ - FrameSystemExtensionsCheckTxVersion: 'Null', + FrameSystemExtensionsCheckTxVersion: "Null", /** * Lookup779: frame_system::extensions::check_genesis::CheckGenesis **/ - FrameSystemExtensionsCheckGenesis: 'Null', + FrameSystemExtensionsCheckGenesis: "Null", /** * Lookup782: frame_system::extensions::check_nonce::CheckNonce **/ - FrameSystemExtensionsCheckNonce: 'Compact', + FrameSystemExtensionsCheckNonce: "Compact", /** * Lookup783: frame_system::extensions::check_weight::CheckWeight **/ - FrameSystemExtensionsCheckWeight: 'Null', + FrameSystemExtensionsCheckWeight: "Null", /** * Lookup784: pallet_transaction_payment::ChargeTransactionPayment **/ - PalletTransactionPaymentChargeTransactionPayment: 'Compact', + PalletTransactionPaymentChargeTransactionPayment: "Compact", /** * Lookup785: frame_metadata_hash_extension::CheckMetadataHash **/ @@ -5939,5 +7250,5 @@ export default { /** * Lookup788: tangle_testnet_runtime::Runtime **/ - TangleTestnetRuntimeRuntime: 'Null' + TangleTestnetRuntimeRuntime: "Null", }; diff --git a/types/src/interfaces/registry.ts b/types/src/interfaces/registry.ts index c7da7ea9c..e0e55dafd 100644 --- a/types/src/interfaces/registry.ts +++ b/types/src/interfaces/registry.ts @@ -3,11 +3,11 @@ // import type lookup before we augment - in some environments // this is required to allow for ambient/previous definitions -import '@polkadot/types/types/registry'; +import "@polkadot/types/types/registry"; import type { EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FinalityGrandpaEquivocationPrecommit, FinalityGrandpaEquivocationPrevote, FinalityGrandpaPrecommit, FinalityGrandpaPrevote, FpRpcTransactionStatus, FrameMetadataHashExtensionCheckMetadataHash, FrameMetadataHashExtensionMode, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemCodeUpgradeAuthorization, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, PalletAirdropClaimsCall, PalletAirdropClaimsError, PalletAirdropClaimsEvent, PalletAirdropClaimsStatementKind, PalletAirdropClaimsUtilsEthereumAddress, PalletAirdropClaimsUtilsEthereumAddressEcdsaSignature, PalletAirdropClaimsUtilsMultiAddress, PalletAirdropClaimsUtilsMultiAddressSignature, PalletAirdropClaimsUtilsSr25519Signature, PalletAssetsAccountStatus, PalletAssetsApproval, PalletAssetsAssetAccount, PalletAssetsAssetDetails, PalletAssetsAssetMetadata, PalletAssetsAssetStatus, PalletAssetsCall, PalletAssetsError, PalletAssetsEvent, PalletAssetsExistenceReason, PalletBabeCall, PalletBabeError, PalletBagsListCall, PalletBagsListError, PalletBagsListEvent, PalletBagsListListBag, PalletBagsListListListError, PalletBagsListListNode, PalletBalancesAccountData, PalletBalancesAdjustmentDirection, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReasons, PalletBalancesReserveData, PalletBaseFeeCall, PalletBaseFeeEvent, PalletBountiesBounty, PalletBountiesBountyStatus, PalletBountiesCall, PalletBountiesError, PalletBountiesEvent, PalletChildBountiesCall, PalletChildBountiesChildBounty, PalletChildBountiesChildBountyStatus, PalletChildBountiesError, PalletChildBountiesEvent, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDkgCall, PalletDkgError, PalletDkgEvent, PalletDkgFeeInfo, PalletDynamicFeeCall, PalletElectionProviderMultiPhaseCall, PalletElectionProviderMultiPhaseElectionCompute, PalletElectionProviderMultiPhaseError, PalletElectionProviderMultiPhaseEvent, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletElectionsPhragmenCall, PalletElectionsPhragmenError, PalletElectionsPhragmenEvent, PalletElectionsPhragmenRenouncing, PalletElectionsPhragmenSeatHolder, PalletElectionsPhragmenVoter, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumRawOrigin, PalletEvmCall, PalletEvmCodeMetadata, PalletEvmError, PalletEvmEvent, PalletGrandpaCall, PalletGrandpaError, PalletGrandpaEvent, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletHotfixSufficientsCall, PalletHotfixSufficientsError, PalletIdentityAuthorityProperties, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityJudgement, PalletIdentityLegacyIdentityInfo, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletImOnlineCall, PalletImOnlineError, PalletImOnlineEvent, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Public, PalletImOnlineSr25519AppSr25519Signature, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletJobsModuleCall, PalletJobsModuleError, PalletJobsModuleEvent, PalletMultiAssetDelegationCall, PalletMultiAssetDelegationDelegatorBondInfoDelegator, PalletMultiAssetDelegationDelegatorBondLessRequest, PalletMultiAssetDelegationDelegatorDelegatorMetadata, PalletMultiAssetDelegationDelegatorDelegatorStatus, PalletMultiAssetDelegationDelegatorWithdrawRequest, PalletMultiAssetDelegationError, PalletMultiAssetDelegationEvent, PalletMultiAssetDelegationOperatorDelegatorBond, PalletMultiAssetDelegationOperatorOperatorBondLessRequest, PalletMultiAssetDelegationOperatorOperatorMetadata, PalletMultiAssetDelegationOperatorOperatorSnapshot, PalletMultiAssetDelegationOperatorOperatorStatus, PalletMultiAssetDelegationRewardsAssetAction, PalletMultiAssetDelegationRewardsRewardConfig, PalletMultiAssetDelegationRewardsRewardConfigForAssetPool, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletNominationPoolsBondExtra, PalletNominationPoolsBondedPoolInner, PalletNominationPoolsCall, PalletNominationPoolsClaimPermission, PalletNominationPoolsCommission, PalletNominationPoolsCommissionChangeRate, PalletNominationPoolsCommissionClaimPermission, PalletNominationPoolsConfigOpAccountId32, PalletNominationPoolsConfigOpPerbill, PalletNominationPoolsConfigOpU128, PalletNominationPoolsConfigOpU32, PalletNominationPoolsDefensiveError, PalletNominationPoolsError, PalletNominationPoolsEvent, PalletNominationPoolsFreezeReason, PalletNominationPoolsPoolMember, PalletNominationPoolsPoolRoles, PalletNominationPoolsPoolState, PalletNominationPoolsRewardPool, PalletNominationPoolsSubPools, PalletNominationPoolsUnbondPool, PalletOffencesEvent, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageHoldReason, PalletPreimageOldRequestStatus, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletRolesCall, PalletRolesError, PalletRolesEvent, PalletRolesProfile, PalletRolesProfileIndependentRestakeProfile, PalletRolesProfileRecord, PalletRolesProfileSharedRestakeProfile, PalletRolesRestakingLedger, PalletRolesUnlockChunk, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingForcing, PalletStakingNominations, PalletStakingPalletCall, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingPalletError, PalletStakingPalletEvent, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingUnlockChunk, PalletStakingValidatorPrefs, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTimestampCall, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryPaymentState, PalletTreasuryProposal, PalletTreasurySpendStatus, PalletTxPauseCall, PalletTxPauseError, PalletTxPauseEvent, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletZksaasCall, PalletZksaasError, PalletZksaasEvent, PalletZksaasFeeInfo, SpArithmeticArithmeticError, SpConsensusBabeAllowedSlots, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpConsensusBabeDigestsPrimaryPreDigest, SpConsensusBabeDigestsSecondaryPlainPreDigest, SpConsensusBabeDigestsSecondaryVRFPreDigest, SpConsensusGrandpaAppPublic, SpConsensusGrandpaAppSignature, SpConsensusGrandpaEquivocation, SpConsensusGrandpaEquivocationProof, SpConsensusSlotsEquivocationProof, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreSr25519VrfVrfSignature, SpCoreVoid, SpNposElectionsElectionScore, SpNposElectionsSupport, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpSessionMembershipProof, SpStakingExposure, SpStakingExposurePage, SpStakingIndividualExposure, SpStakingOffenceOffenceDetails, SpStakingPagedExposureMetadata, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, StagingXcmV4Asset, StagingXcmV4AssetAssetId, StagingXcmV4AssetAssetInstance, StagingXcmV4AssetFungibility, StagingXcmV4Junction, StagingXcmV4JunctionNetworkId, StagingXcmV4Junctions, StagingXcmV4Location, SygmaAccessSegregatorCall, SygmaAccessSegregatorError, SygmaAccessSegregatorEvent, SygmaBasicFeehandlerCall, SygmaBasicFeehandlerError, SygmaBasicFeehandlerEvent, SygmaBridgeCall, SygmaBridgeError, SygmaBridgeEvent, SygmaBridgeProposal, SygmaFeeHandlerRouterCall, SygmaFeeHandlerRouterError, SygmaFeeHandlerRouterEvent, SygmaFeeHandlerRouterFeeHandlerType, SygmaPercentageFeehandlerCall, SygmaPercentageFeehandlerError, SygmaPercentageFeehandlerEvent, SygmaTraitsMpcAddress, SygmaTraitsTransferType, TangleCryptoPrimitivesCryptoPublic, TanglePrimitivesJobsFallbackOptions, TanglePrimitivesJobsJobInfo, TanglePrimitivesJobsJobResult, TanglePrimitivesJobsJobSubmission, TanglePrimitivesJobsJobType, TanglePrimitivesJobsPhaseResult, TanglePrimitivesJobsTssDigitalSignatureScheme, TanglePrimitivesJobsTssDkgtssKeyRefreshResult, TanglePrimitivesJobsTssDkgtssKeyRotationResult, TanglePrimitivesJobsTssDkgtssKeySubmissionResult, TanglePrimitivesJobsTssDkgtssPhaseFourJobType, TanglePrimitivesJobsTssDkgtssPhaseOneJobType, TanglePrimitivesJobsTssDkgtssPhaseThreeJobType, TanglePrimitivesJobsTssDkgtssPhaseTwoJobType, TanglePrimitivesJobsTssDkgtssSignatureResult, TanglePrimitivesJobsValidatorOffenceType, TanglePrimitivesJobsZksaasArkworksProofResult, TanglePrimitivesJobsZksaasCircomProofResult, TanglePrimitivesJobsZksaasGroth16ProveRequest, TanglePrimitivesJobsZksaasGroth16System, TanglePrimitivesJobsZksaasHyperData, TanglePrimitivesJobsZksaasQapShare, TanglePrimitivesJobsZksaasZkSaaSCircuitResult, TanglePrimitivesJobsZksaasZkSaaSPhaseOneJobType, TanglePrimitivesJobsZksaasZkSaaSPhaseTwoJobType, TanglePrimitivesJobsZksaasZkSaaSPhaseTwoRequest, TanglePrimitivesJobsZksaasZkSaaSProofResult, TanglePrimitivesJobsZksaasZkSaaSSystem, TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification, TanglePrimitivesMisbehaviorDfnsCggmp21InvalidProofReason, TanglePrimitivesMisbehaviorDfnsCggmp21KeyRefreshAborted, TanglePrimitivesMisbehaviorDfnsCggmp21KeygenAborted, TanglePrimitivesMisbehaviorDfnsCggmp21SigningAborted, TanglePrimitivesMisbehaviorDkgtssJustification, TanglePrimitivesMisbehaviorMisbehaviorJustification, TanglePrimitivesMisbehaviorMisbehaviorSubmission, TanglePrimitivesMisbehaviorSignedRoundMessage, TanglePrimitivesMisbehaviorZcashFrostKeygenAborted, TanglePrimitivesMisbehaviorZcashFrostSigningAborted, TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification, TanglePrimitivesMisbehaviorZkSaaSJustification, TanglePrimitivesRolesRoleType, TanglePrimitivesRolesTssThresholdSignatureRoleType, TanglePrimitivesRolesZksaasZeroKnowledgeRoleType, TangleTestnetRuntimeMaxAdditionalParamsLen, TangleTestnetRuntimeMaxDataLen, TangleTestnetRuntimeMaxKeyLen, TangleTestnetRuntimeMaxParticipants, TangleTestnetRuntimeMaxProofLen, TangleTestnetRuntimeMaxSignatureLen, TangleTestnetRuntimeMaxSubmissionLen, TangleTestnetRuntimeNposSolution16, TangleTestnetRuntimeOpaqueSessionKeys, TangleTestnetRuntimeOriginCaller, TangleTestnetRuntimeProxyType, TangleTestnetRuntimeRuntime, TangleTestnetRuntimeRuntimeFreezeReason, TangleTestnetRuntimeRuntimeHoldReason, XcmV3JunctionBodyId, XcmV3JunctionBodyPart } from '@polkadot/types/lookup'; -declare module '@polkadot/types/types/registry' { +declare module "@polkadot/types/types/registry" { interface InterfaceTypes { EthbloomBloom: EthbloomBloom; EthereumBlock: EthereumBlock; @@ -252,6 +252,9 @@ declare module '@polkadot/types/types/registry' { PalletSchedulerError: PalletSchedulerError; PalletSchedulerEvent: PalletSchedulerEvent; PalletSchedulerScheduled: PalletSchedulerScheduled; + PalletServicesModuleCall: PalletServicesModuleCall; + PalletServicesModuleError: PalletServicesModuleError; + PalletServicesModuleEvent: PalletServicesModuleEvent; PalletSessionCall: PalletSessionCall; PalletSessionError: PalletSessionError; PalletSessionEvent: PalletSessionEvent; @@ -387,6 +390,36 @@ declare module '@polkadot/types/types/registry' { TanglePrimitivesJobsTssDkgtssPhaseThreeJobType: TanglePrimitivesJobsTssDkgtssPhaseThreeJobType; TanglePrimitivesJobsTssDkgtssPhaseTwoJobType: TanglePrimitivesJobsTssDkgtssPhaseTwoJobType; TanglePrimitivesJobsTssDkgtssSignatureResult: TanglePrimitivesJobsTssDkgtssSignatureResult; + TanglePrimitivesJobsV2ApprovalPrefrence: TanglePrimitivesJobsV2ApprovalPrefrence; + TanglePrimitivesJobsV2ApprovalState: TanglePrimitivesJobsV2ApprovalState; + TanglePrimitivesJobsV2Architecture: TanglePrimitivesJobsV2Architecture; + TanglePrimitivesJobsV2ContainerGadget: TanglePrimitivesJobsV2ContainerGadget; + TanglePrimitivesJobsV2Field: TanglePrimitivesJobsV2Field; + TanglePrimitivesJobsV2FieldFieldType: TanglePrimitivesJobsV2FieldFieldType; + TanglePrimitivesJobsV2Gadget: TanglePrimitivesJobsV2Gadget; + TanglePrimitivesJobsV2GadgetBinary: TanglePrimitivesJobsV2GadgetBinary; + TanglePrimitivesJobsV2GadgetSource: TanglePrimitivesJobsV2GadgetSource; + TanglePrimitivesJobsV2GadgetSourceFetcher: TanglePrimitivesJobsV2GadgetSourceFetcher; + TanglePrimitivesJobsV2GithubFetcher: TanglePrimitivesJobsV2GithubFetcher; + TanglePrimitivesJobsV2ImageRegistryFetcher: TanglePrimitivesJobsV2ImageRegistryFetcher; + TanglePrimitivesJobsV2JobCall: TanglePrimitivesJobsV2JobCall; + TanglePrimitivesJobsV2JobCallResult: TanglePrimitivesJobsV2JobCallResult; + TanglePrimitivesJobsV2JobDefinition: TanglePrimitivesJobsV2JobDefinition; + TanglePrimitivesJobsV2JobMetadata: TanglePrimitivesJobsV2JobMetadata; + TanglePrimitivesJobsV2JobResultVerifier: TanglePrimitivesJobsV2JobResultVerifier; + TanglePrimitivesJobsV2NativeGadget: TanglePrimitivesJobsV2NativeGadget; + TanglePrimitivesJobsV2OperatingSystem: TanglePrimitivesJobsV2OperatingSystem; + TanglePrimitivesJobsV2OperatorPreferences: TanglePrimitivesJobsV2OperatorPreferences; + TanglePrimitivesJobsV2OperatorProfile: TanglePrimitivesJobsV2OperatorProfile; + TanglePrimitivesJobsV2Service: TanglePrimitivesJobsV2Service; + TanglePrimitivesJobsV2ServiceBlueprint: TanglePrimitivesJobsV2ServiceBlueprint; + TanglePrimitivesJobsV2ServiceMetadata: TanglePrimitivesJobsV2ServiceMetadata; + TanglePrimitivesJobsV2ServiceRegistrationHook: TanglePrimitivesJobsV2ServiceRegistrationHook; + TanglePrimitivesJobsV2ServiceRequest: TanglePrimitivesJobsV2ServiceRequest; + TanglePrimitivesJobsV2ServiceRequestHook: TanglePrimitivesJobsV2ServiceRequestHook; + TanglePrimitivesJobsV2TypeCheckError: TanglePrimitivesJobsV2TypeCheckError; + TanglePrimitivesJobsV2WasmGadget: TanglePrimitivesJobsV2WasmGadget; + TanglePrimitivesJobsV2WasmRuntime: TanglePrimitivesJobsV2WasmRuntime; TanglePrimitivesJobsValidatorOffenceType: TanglePrimitivesJobsValidatorOffenceType; TanglePrimitivesJobsZksaasArkworksProofResult: TanglePrimitivesJobsZksaasArkworksProofResult; TanglePrimitivesJobsZksaasCircomProofResult: TanglePrimitivesJobsZksaasCircomProofResult; diff --git a/types/src/interfaces/types-lookup.ts b/types/src/interfaces/types-lookup.ts index 3cfeeb956..c5b0584dd 100644 --- a/types/src/interfaces/types-lookup.ts +++ b/types/src/interfaces/types-lookup.ts @@ -3,16 +3,50 @@ // import type lookup before we augment - in some environments // this is required to allow for ambient/previous definitions -import '@polkadot/types/lookup'; - -import type { Data } from '@polkadot/types'; -import type { BTreeMap, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; -import type { ITuple } from '@polkadot/types-codec/types'; -import type { Vote } from '@polkadot/types/interfaces/elections'; -import type { AccountId32, Call, H160, H256, MultiAddress, PerU16, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; -import type { Event } from '@polkadot/types/interfaces/system'; - -declare module '@polkadot/types/lookup' { +import "@polkadot/types/lookup"; + +import type { Data } from "@polkadot/types"; +import type { + BTreeMap, + BTreeSet, + Bytes, + Compact, + Enum, + Null, + Option, + Result, + Struct, + Text, + U256, + U8aFixed, + Vec, + bool, + i16, + i32, + i64, + i8, + u128, + u16, + u32, + u64, + u8, +} from "@polkadot/types-codec"; +import type { ITuple } from "@polkadot/types-codec/types"; +import type { Vote } from "@polkadot/types/interfaces/elections"; +import type { + AccountId32, + Call, + H160, + H256, + MultiAddress, + PerU16, + Perbill, + Percent, + Permill, +} from "@polkadot/types/interfaces/runtime"; +import type { Event } from "@polkadot/types/interfaces/system"; + +declare module "@polkadot/types/lookup" { /** @name FrameSystemAccountInfo (3) */ interface FrameSystemAccountInfo extends Struct { readonly nonce: u32; @@ -59,7 +93,12 @@ declare module '@polkadot/types/lookup' { readonly isPreRuntime: boolean; readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>; readonly isRuntimeEnvironmentUpdated: boolean; - readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated'; + readonly type: + | "Other" + | "Consensus" + | "Seal" + | "PreRuntime" + | "RuntimeEnvironmentUpdated"; } /** @name FrameSystemEventRecord (19) */ @@ -99,7 +138,14 @@ declare module '@polkadot/types/lookup' { readonly codeHash: H256; readonly checkVersion: bool; } & Struct; - readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked' | 'UpgradeAuthorized'; + readonly type: + | "ExtrinsicSuccess" + | "ExtrinsicFailed" + | "CodeUpdated" + | "NewAccount" + | "KilledAccount" + | "Remarked" + | "UpgradeAuthorized"; } /** @name FrameSupportDispatchDispatchInfo (22) */ @@ -114,14 +160,14 @@ declare module '@polkadot/types/lookup' { readonly isNormal: boolean; readonly isOperational: boolean; readonly isMandatory: boolean; - readonly type: 'Normal' | 'Operational' | 'Mandatory'; + readonly type: "Normal" | "Operational" | "Mandatory"; } /** @name FrameSupportDispatchPays (24) */ interface FrameSupportDispatchPays extends Enum { readonly isYes: boolean; readonly isNo: boolean; - readonly type: 'Yes' | 'No'; + readonly type: "Yes" | "No"; } /** @name SpRuntimeDispatchError (25) */ @@ -144,7 +190,21 @@ declare module '@polkadot/types/lookup' { readonly isCorruption: boolean; readonly isUnavailable: boolean; readonly isRootNotAllowed: boolean; - readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable' | 'RootNotAllowed'; + readonly type: + | "Other" + | "CannotLookup" + | "BadOrigin" + | "Module" + | "ConsumerRemaining" + | "NoProviders" + | "TooManyConsumers" + | "Token" + | "Arithmetic" + | "Transactional" + | "Exhausted" + | "Corruption" + | "Unavailable" + | "RootNotAllowed"; } /** @name SpRuntimeModuleError (26) */ @@ -165,7 +225,17 @@ declare module '@polkadot/types/lookup' { readonly isCannotCreateHold: boolean; readonly isNotExpendable: boolean; readonly isBlocked: boolean; - readonly type: 'FundsUnavailable' | 'OnlyProvider' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported' | 'CannotCreateHold' | 'NotExpendable' | 'Blocked'; + readonly type: + | "FundsUnavailable" + | "OnlyProvider" + | "BelowMinimum" + | "CannotCreate" + | "UnknownAsset" + | "Frozen" + | "Unsupported" + | "CannotCreateHold" + | "NotExpendable" + | "Blocked"; } /** @name SpArithmeticArithmeticError (28) */ @@ -173,14 +243,14 @@ declare module '@polkadot/types/lookup' { readonly isUnderflow: boolean; readonly isOverflow: boolean; readonly isDivisionByZero: boolean; - readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero'; + readonly type: "Underflow" | "Overflow" | "DivisionByZero"; } /** @name SpRuntimeTransactionalError (29) */ interface SpRuntimeTransactionalError extends Enum { readonly isLimitReached: boolean; readonly isNoLayer: boolean; - readonly type: 'LimitReached' | 'NoLayer'; + readonly type: "LimitReached" | "NoLayer"; } /** @name PalletSudoEvent (31) */ @@ -199,94 +269,94 @@ declare module '@polkadot/types/lookup' { readonly asSudoAsDone: { readonly sudoResult: Result; } & Struct; - readonly type: 'Sudid' | 'KeyChanged' | 'KeyRemoved' | 'SudoAsDone'; + readonly type: "Sudid" | "KeyChanged" | "KeyRemoved" | "SudoAsDone"; } /** @name PalletAssetsEvent (35) */ interface PalletAssetsEvent extends Enum { readonly isCreated: boolean; readonly asCreated: { - readonly assetId: u128; + readonly assetId: u32; readonly creator: AccountId32; readonly owner: AccountId32; } & Struct; readonly isIssued: boolean; readonly asIssued: { - readonly assetId: u128; + readonly assetId: u32; readonly owner: AccountId32; readonly amount: u128; } & Struct; readonly isTransferred: boolean; readonly asTransferred: { - readonly assetId: u128; + readonly assetId: u32; readonly from: AccountId32; readonly to: AccountId32; readonly amount: u128; } & Struct; readonly isBurned: boolean; readonly asBurned: { - readonly assetId: u128; + readonly assetId: u32; readonly owner: AccountId32; readonly balance: u128; } & Struct; readonly isTeamChanged: boolean; readonly asTeamChanged: { - readonly assetId: u128; + readonly assetId: u32; readonly issuer: AccountId32; readonly admin: AccountId32; readonly freezer: AccountId32; } & Struct; readonly isOwnerChanged: boolean; readonly asOwnerChanged: { - readonly assetId: u128; + readonly assetId: u32; readonly owner: AccountId32; } & Struct; readonly isFrozen: boolean; readonly asFrozen: { - readonly assetId: u128; + readonly assetId: u32; readonly who: AccountId32; } & Struct; readonly isThawed: boolean; readonly asThawed: { - readonly assetId: u128; + readonly assetId: u32; readonly who: AccountId32; } & Struct; readonly isAssetFrozen: boolean; readonly asAssetFrozen: { - readonly assetId: u128; + readonly assetId: u32; } & Struct; readonly isAssetThawed: boolean; readonly asAssetThawed: { - readonly assetId: u128; + readonly assetId: u32; } & Struct; readonly isAccountsDestroyed: boolean; readonly asAccountsDestroyed: { - readonly assetId: u128; + readonly assetId: u32; readonly accountsDestroyed: u32; readonly accountsRemaining: u32; } & Struct; readonly isApprovalsDestroyed: boolean; readonly asApprovalsDestroyed: { - readonly assetId: u128; + readonly assetId: u32; readonly approvalsDestroyed: u32; readonly approvalsRemaining: u32; } & Struct; readonly isDestructionStarted: boolean; readonly asDestructionStarted: { - readonly assetId: u128; + readonly assetId: u32; } & Struct; readonly isDestroyed: boolean; readonly asDestroyed: { - readonly assetId: u128; + readonly assetId: u32; } & Struct; readonly isForceCreated: boolean; readonly asForceCreated: { - readonly assetId: u128; + readonly assetId: u32; readonly owner: AccountId32; } & Struct; readonly isMetadataSet: boolean; readonly asMetadataSet: { - readonly assetId: u128; + readonly assetId: u32; readonly name: Bytes; readonly symbol: Bytes; readonly decimals: u8; @@ -294,24 +364,24 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isMetadataCleared: boolean; readonly asMetadataCleared: { - readonly assetId: u128; + readonly assetId: u32; } & Struct; readonly isApprovedTransfer: boolean; readonly asApprovedTransfer: { - readonly assetId: u128; + readonly assetId: u32; readonly source: AccountId32; readonly delegate: AccountId32; readonly amount: u128; } & Struct; readonly isApprovalCancelled: boolean; readonly asApprovalCancelled: { - readonly assetId: u128; + readonly assetId: u32; readonly owner: AccountId32; readonly delegate: AccountId32; } & Struct; readonly isTransferredApproved: boolean; readonly asTransferredApproved: { - readonly assetId: u128; + readonly assetId: u32; readonly owner: AccountId32; readonly delegate: AccountId32; readonly destination: AccountId32; @@ -319,25 +389,49 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isAssetStatusChanged: boolean; readonly asAssetStatusChanged: { - readonly assetId: u128; + readonly assetId: u32; } & Struct; readonly isAssetMinBalanceChanged: boolean; readonly asAssetMinBalanceChanged: { - readonly assetId: u128; + readonly assetId: u32; readonly newMinBalance: u128; } & Struct; readonly isTouched: boolean; readonly asTouched: { - readonly assetId: u128; + readonly assetId: u32; readonly who: AccountId32; readonly depositor: AccountId32; } & Struct; readonly isBlocked: boolean; readonly asBlocked: { - readonly assetId: u128; + readonly assetId: u32; readonly who: AccountId32; } & Struct; - readonly type: 'Created' | 'Issued' | 'Transferred' | 'Burned' | 'TeamChanged' | 'OwnerChanged' | 'Frozen' | 'Thawed' | 'AssetFrozen' | 'AssetThawed' | 'AccountsDestroyed' | 'ApprovalsDestroyed' | 'DestructionStarted' | 'Destroyed' | 'ForceCreated' | 'MetadataSet' | 'MetadataCleared' | 'ApprovedTransfer' | 'ApprovalCancelled' | 'TransferredApproved' | 'AssetStatusChanged' | 'AssetMinBalanceChanged' | 'Touched' | 'Blocked'; + readonly type: + | "Created" + | "Issued" + | "Transferred" + | "Burned" + | "TeamChanged" + | "OwnerChanged" + | "Frozen" + | "Thawed" + | "AssetFrozen" + | "AssetThawed" + | "AccountsDestroyed" + | "ApprovalsDestroyed" + | "DestructionStarted" + | "Destroyed" + | "ForceCreated" + | "MetadataSet" + | "MetadataCleared" + | "ApprovedTransfer" + | "ApprovalCancelled" + | "TransferredApproved" + | "AssetStatusChanged" + | "AssetMinBalanceChanged" + | "Touched" + | "Blocked"; } /** @name PalletBalancesEvent (36) */ @@ -452,14 +546,36 @@ declare module '@polkadot/types/lookup' { readonly old: u128; readonly new_: u128; } & Struct; - readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed' | 'Minted' | 'Burned' | 'Suspended' | 'Restored' | 'Upgraded' | 'Issued' | 'Rescinded' | 'Locked' | 'Unlocked' | 'Frozen' | 'Thawed' | 'TotalIssuanceForced'; + readonly type: + | "Endowed" + | "DustLost" + | "Transfer" + | "BalanceSet" + | "Reserved" + | "Unreserved" + | "ReserveRepatriated" + | "Deposit" + | "Withdraw" + | "Slashed" + | "Minted" + | "Burned" + | "Suspended" + | "Restored" + | "Upgraded" + | "Issued" + | "Rescinded" + | "Locked" + | "Unlocked" + | "Frozen" + | "Thawed" + | "TotalIssuanceForced"; } /** @name FrameSupportTokensMiscBalanceStatus (37) */ interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; readonly isReserved: boolean; - readonly type: 'Free' | 'Reserved'; + readonly type: "Free" | "Reserved"; } /** @name PalletTransactionPaymentEvent (38) */ @@ -470,7 +586,7 @@ declare module '@polkadot/types/lookup' { readonly actualFee: u128; readonly tip: u128; } & Struct; - readonly type: 'TransactionFeePaid'; + readonly type: "TransactionFeePaid"; } /** @name PalletGrandpaEvent (39) */ @@ -481,7 +597,7 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isPaused: boolean; readonly isResumed: boolean; - readonly type: 'NewAuthorities' | 'Paused' | 'Resumed'; + readonly type: "NewAuthorities" | "Paused" | "Resumed"; } /** @name SpConsensusGrandpaAppPublic (42) */ @@ -506,7 +622,7 @@ declare module '@polkadot/types/lookup' { readonly index: u32; readonly who: AccountId32; } & Struct; - readonly type: 'IndexAssigned' | 'IndexFreed' | 'IndexFrozen'; + readonly type: "IndexAssigned" | "IndexFreed" | "IndexFrozen"; } /** @name PalletDemocracyEvent (45) */ @@ -589,7 +705,24 @@ declare module '@polkadot/types/lookup' { readonly owner: PalletDemocracyMetadataOwner; readonly hash_: H256; } & Struct; - readonly type: 'Proposed' | 'Tabled' | 'ExternalTabled' | 'Started' | 'Passed' | 'NotPassed' | 'Cancelled' | 'Delegated' | 'Undelegated' | 'Vetoed' | 'Blacklisted' | 'Voted' | 'Seconded' | 'ProposalCanceled' | 'MetadataSet' | 'MetadataCleared' | 'MetadataTransferred'; + readonly type: + | "Proposed" + | "Tabled" + | "ExternalTabled" + | "Started" + | "Passed" + | "NotPassed" + | "Cancelled" + | "Delegated" + | "Undelegated" + | "Vetoed" + | "Blacklisted" + | "Voted" + | "Seconded" + | "ProposalCanceled" + | "MetadataSet" + | "MetadataCleared" + | "MetadataTransferred"; } /** @name PalletDemocracyVoteThreshold (46) */ @@ -597,7 +730,10 @@ declare module '@polkadot/types/lookup' { readonly isSuperMajorityApprove: boolean; readonly isSuperMajorityAgainst: boolean; readonly isSimpleMajority: boolean; - readonly type: 'SuperMajorityApprove' | 'SuperMajorityAgainst' | 'SimpleMajority'; + readonly type: + | "SuperMajorityApprove" + | "SuperMajorityAgainst" + | "SimpleMajority"; } /** @name PalletDemocracyVoteAccountVote (47) */ @@ -612,7 +748,7 @@ declare module '@polkadot/types/lookup' { readonly aye: u128; readonly nay: u128; } & Struct; - readonly type: 'Standard' | 'Split'; + readonly type: "Standard" | "Split"; } /** @name PalletDemocracyMetadataOwner (49) */ @@ -622,7 +758,7 @@ declare module '@polkadot/types/lookup' { readonly asProposal: u32; readonly isReferendum: boolean; readonly asReferendum: u32; - readonly type: 'External' | 'Proposal' | 'Referendum'; + readonly type: "External" | "Proposal" | "Referendum"; } /** @name PalletCollectiveEvent (50) */ @@ -666,7 +802,14 @@ declare module '@polkadot/types/lookup' { readonly yes: u32; readonly no: u32; } & Struct; - readonly type: 'Proposed' | 'Voted' | 'Approved' | 'Disapproved' | 'Executed' | 'MemberExecuted' | 'Closed'; + readonly type: + | "Proposed" + | "Voted" + | "Approved" + | "Disapproved" + | "Executed" + | "MemberExecuted" + | "Closed"; } /** @name PalletVestingEvent (51) */ @@ -680,7 +823,7 @@ declare module '@polkadot/types/lookup' { readonly asVestingCompleted: { readonly account: AccountId32; } & Struct; - readonly type: 'VestingUpdated' | 'VestingCompleted'; + readonly type: "VestingUpdated" | "VestingCompleted"; } /** @name PalletElectionsPhragmenEvent (52) */ @@ -709,7 +852,14 @@ declare module '@polkadot/types/lookup' { readonly seatHolder: AccountId32; readonly amount: u128; } & Struct; - readonly type: 'NewTerm' | 'EmptyTerm' | 'ElectionError' | 'MemberKicked' | 'Renounced' | 'CandidateSlashed' | 'SeatHolderSlashed'; + readonly type: + | "NewTerm" + | "EmptyTerm" + | "ElectionError" + | "MemberKicked" + | "Renounced" + | "CandidateSlashed" + | "SeatHolderSlashed"; } /** @name PalletElectionProviderMultiPhaseEvent (55) */ @@ -742,7 +892,13 @@ declare module '@polkadot/types/lookup' { readonly to: PalletElectionProviderMultiPhasePhase; readonly round: u32; } & Struct; - readonly type: 'SolutionStored' | 'ElectionFinalized' | 'ElectionFailed' | 'Rewarded' | 'Slashed' | 'PhaseTransitioned'; + readonly type: + | "SolutionStored" + | "ElectionFinalized" + | "ElectionFailed" + | "Rewarded" + | "Slashed" + | "PhaseTransitioned"; } /** @name PalletElectionProviderMultiPhaseElectionCompute (56) */ @@ -752,7 +908,7 @@ declare module '@polkadot/types/lookup' { readonly isUnsigned: boolean; readonly isFallback: boolean; readonly isEmergency: boolean; - readonly type: 'OnChain' | 'Signed' | 'Unsigned' | 'Fallback' | 'Emergency'; + readonly type: "OnChain" | "Signed" | "Unsigned" | "Fallback" | "Emergency"; } /** @name SpNposElectionsElectionScore (57) */ @@ -769,7 +925,7 @@ declare module '@polkadot/types/lookup' { readonly isUnsigned: boolean; readonly asUnsigned: ITuple<[bool, u64]>; readonly isEmergency: boolean; - readonly type: 'Off' | 'Signed' | 'Unsigned' | 'Emergency'; + readonly type: "Off" | "Signed" | "Unsigned" | "Emergency"; } /** @name PalletStakingPalletEvent (60) */ @@ -849,7 +1005,24 @@ declare module '@polkadot/types/lookup' { readonly asForceEra: { readonly mode: PalletStakingForcing; } & Struct; - readonly type: 'EraPaid' | 'Rewarded' | 'Slashed' | 'SlashReported' | 'OldSlashingReportDiscarded' | 'StakersElected' | 'Bonded' | 'Unbonded' | 'Withdrawn' | 'Kicked' | 'StakingElectionFailed' | 'Chilled' | 'PayoutStarted' | 'ValidatorPrefsSet' | 'SnapshotVotersSizeExceeded' | 'SnapshotTargetsSizeExceeded' | 'ForceEra'; + readonly type: + | "EraPaid" + | "Rewarded" + | "Slashed" + | "SlashReported" + | "OldSlashingReportDiscarded" + | "StakersElected" + | "Bonded" + | "Unbonded" + | "Withdrawn" + | "Kicked" + | "StakingElectionFailed" + | "Chilled" + | "PayoutStarted" + | "ValidatorPrefsSet" + | "SnapshotVotersSizeExceeded" + | "SnapshotTargetsSizeExceeded" + | "ForceEra"; } /** @name PalletStakingRewardDestination (61) */ @@ -860,7 +1033,7 @@ declare module '@polkadot/types/lookup' { readonly isAccount: boolean; readonly asAccount: AccountId32; readonly isNone: boolean; - readonly type: 'Staked' | 'Stash' | 'Controller' | 'Account' | 'None'; + readonly type: "Staked" | "Stash" | "Controller" | "Account" | "None"; } /** @name PalletStakingValidatorPrefs (63) */ @@ -875,7 +1048,7 @@ declare module '@polkadot/types/lookup' { readonly isForceNew: boolean; readonly isForceNone: boolean; readonly isForceAlways: boolean; - readonly type: 'NotForcing' | 'ForceNew' | 'ForceNone' | 'ForceAlways'; + readonly type: "NotForcing" | "ForceNew" | "ForceNone" | "ForceAlways"; } /** @name PalletSessionEvent (66) */ @@ -884,7 +1057,7 @@ declare module '@polkadot/types/lookup' { readonly asNewSession: { readonly sessionIndex: u32; } & Struct; - readonly type: 'NewSession'; + readonly type: "NewSession"; } /** @name PalletTreasuryEvent (67) */ @@ -958,7 +1131,21 @@ declare module '@polkadot/types/lookup' { readonly asSpendProcessed: { readonly index: u32; } & Struct; - readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit' | 'SpendApproved' | 'UpdatedInactive' | 'AssetSpendApproved' | 'AssetSpendVoided' | 'Paid' | 'PaymentFailed' | 'SpendProcessed'; + readonly type: + | "Proposed" + | "Spending" + | "Awarded" + | "Rejected" + | "Burnt" + | "Rollover" + | "Deposit" + | "SpendApproved" + | "UpdatedInactive" + | "AssetSpendApproved" + | "AssetSpendVoided" + | "Paid" + | "PaymentFailed" + | "SpendProcessed"; } /** @name PalletBountiesEvent (68) */ @@ -1013,7 +1200,18 @@ declare module '@polkadot/types/lookup' { readonly bountyId: u32; readonly curator: AccountId32; } & Struct; - readonly type: 'BountyProposed' | 'BountyRejected' | 'BountyBecameActive' | 'BountyAwarded' | 'BountyClaimed' | 'BountyCanceled' | 'BountyExtended' | 'BountyApproved' | 'CuratorProposed' | 'CuratorUnassigned' | 'CuratorAccepted'; + readonly type: + | "BountyProposed" + | "BountyRejected" + | "BountyBecameActive" + | "BountyAwarded" + | "BountyClaimed" + | "BountyCanceled" + | "BountyExtended" + | "BountyApproved" + | "CuratorProposed" + | "CuratorUnassigned" + | "CuratorAccepted"; } /** @name PalletChildBountiesEvent (69) */ @@ -1041,7 +1239,7 @@ declare module '@polkadot/types/lookup' { readonly index: u32; readonly childIndex: u32; } & Struct; - readonly type: 'Added' | 'Awarded' | 'Claimed' | 'Canceled'; + readonly type: "Added" | "Awarded" | "Claimed" | "Canceled"; } /** @name PalletBagsListEvent (70) */ @@ -1057,7 +1255,7 @@ declare module '@polkadot/types/lookup' { readonly who: AccountId32; readonly newScore: u64; } & Struct; - readonly type: 'Rebagged' | 'ScoreUpdated'; + readonly type: "Rebagged" | "ScoreUpdated"; } /** @name PalletNominationPoolsEvent (71) */ @@ -1161,7 +1359,25 @@ declare module '@polkadot/types/lookup' { readonly poolId: u32; readonly amount: u128; } & Struct; - readonly type: 'Created' | 'Bonded' | 'PaidOut' | 'Unbonded' | 'Withdrawn' | 'Destroyed' | 'StateChanged' | 'MemberRemoved' | 'RolesUpdated' | 'PoolSlashed' | 'UnbondingPoolSlashed' | 'PoolCommissionUpdated' | 'PoolMaxCommissionUpdated' | 'PoolCommissionChangeRateUpdated' | 'PoolCommissionClaimPermissionUpdated' | 'PoolCommissionClaimed' | 'MinBalanceDeficitAdjusted' | 'MinBalanceExcessAdjusted'; + readonly type: + | "Created" + | "Bonded" + | "PaidOut" + | "Unbonded" + | "Withdrawn" + | "Destroyed" + | "StateChanged" + | "MemberRemoved" + | "RolesUpdated" + | "PoolSlashed" + | "UnbondingPoolSlashed" + | "PoolCommissionUpdated" + | "PoolMaxCommissionUpdated" + | "PoolCommissionChangeRateUpdated" + | "PoolCommissionClaimPermissionUpdated" + | "PoolCommissionClaimed" + | "MinBalanceDeficitAdjusted" + | "MinBalanceExcessAdjusted"; } /** @name PalletNominationPoolsPoolState (72) */ @@ -1169,7 +1385,7 @@ declare module '@polkadot/types/lookup' { readonly isOpen: boolean; readonly isBlocked: boolean; readonly isDestroying: boolean; - readonly type: 'Open' | 'Blocked' | 'Destroying'; + readonly type: "Open" | "Blocked" | "Destroying"; } /** @name PalletNominationPoolsCommissionChangeRate (75) */ @@ -1183,7 +1399,7 @@ declare module '@polkadot/types/lookup' { readonly isPermissionless: boolean; readonly isAccount: boolean; readonly asAccount: AccountId32; - readonly type: 'Permissionless' | 'Account'; + readonly type: "Permissionless" | "Account"; } /** @name PalletSchedulerEvent (78) */ @@ -1219,7 +1435,13 @@ declare module '@polkadot/types/lookup' { readonly task: ITuple<[u64, u32]>; readonly id: Option; } & Struct; - readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallUnavailable' | 'PeriodicFailed' | 'PermanentlyOverweight'; + readonly type: + | "Scheduled" + | "Canceled" + | "Dispatched" + | "CallUnavailable" + | "PeriodicFailed" + | "PermanentlyOverweight"; } /** @name PalletPreimageEvent (81) */ @@ -1236,7 +1458,7 @@ declare module '@polkadot/types/lookup' { readonly asCleared: { readonly hash_: H256; } & Struct; - readonly type: 'Noted' | 'Requested' | 'Cleared'; + readonly type: "Noted" | "Requested" | "Cleared"; } /** @name PalletOffencesEvent (82) */ @@ -1246,7 +1468,7 @@ declare module '@polkadot/types/lookup' { readonly kind: U8aFixed; readonly timeslot: Bytes; } & Struct; - readonly type: 'Offence'; + readonly type: "Offence"; } /** @name PalletTxPauseEvent (84) */ @@ -1259,7 +1481,7 @@ declare module '@polkadot/types/lookup' { readonly asCallUnpaused: { readonly fullName: ITuple<[Bytes, Bytes]>; } & Struct; - readonly type: 'CallPaused' | 'CallUnpaused'; + readonly type: "CallPaused" | "CallUnpaused"; } /** @name PalletImOnlineEvent (87) */ @@ -1273,7 +1495,7 @@ declare module '@polkadot/types/lookup' { readonly asSomeOffline: { readonly offline: Vec>; } & Struct; - readonly type: 'HeartbeatReceived' | 'AllGood' | 'SomeOffline'; + readonly type: "HeartbeatReceived" | "AllGood" | "SomeOffline"; } /** @name PalletImOnlineSr25519AppSr25519Public (88) */ @@ -1381,7 +1603,24 @@ declare module '@polkadot/types/lookup' { readonly who: AccountId32; readonly username: Bytes; } & Struct; - readonly type: 'IdentitySet' | 'IdentityCleared' | 'IdentityKilled' | 'JudgementRequested' | 'JudgementUnrequested' | 'JudgementGiven' | 'RegistrarAdded' | 'SubIdentityAdded' | 'SubIdentityRemoved' | 'SubIdentityRevoked' | 'AuthorityAdded' | 'AuthorityRemoved' | 'UsernameSet' | 'UsernameQueued' | 'PreapprovalExpired' | 'PrimaryUsernameSet' | 'DanglingUsernameRemoved'; + readonly type: + | "IdentitySet" + | "IdentityCleared" + | "IdentityKilled" + | "JudgementRequested" + | "JudgementUnrequested" + | "JudgementGiven" + | "RegistrarAdded" + | "SubIdentityAdded" + | "SubIdentityRemoved" + | "SubIdentityRevoked" + | "AuthorityAdded" + | "AuthorityRemoved" + | "UsernameSet" + | "UsernameQueued" + | "PreapprovalExpired" + | "PrimaryUsernameSet" + | "DanglingUsernameRemoved"; } /** @name PalletUtilityEvent (98) */ @@ -1402,7 +1641,13 @@ declare module '@polkadot/types/lookup' { readonly asDispatchedAs: { readonly result: Result; } & Struct; - readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs'; + readonly type: + | "BatchInterrupted" + | "BatchCompleted" + | "BatchCompletedWithErrors" + | "ItemCompleted" + | "ItemFailed" + | "DispatchedAs"; } /** @name PalletMultisigEvent (99) */ @@ -1435,7 +1680,11 @@ declare module '@polkadot/types/lookup' { readonly multisig: AccountId32; readonly callHash: U8aFixed; } & Struct; - readonly type: 'NewMultisig' | 'MultisigApproval' | 'MultisigExecuted' | 'MultisigCancelled'; + readonly type: + | "NewMultisig" + | "MultisigApproval" + | "MultisigExecuted" + | "MultisigCancelled"; } /** @name PalletMultisigTimepoint (100) */ @@ -1454,7 +1703,7 @@ declare module '@polkadot/types/lookup' { readonly exitReason: EvmCoreErrorExitReason; readonly extraData: Bytes; } & Struct; - readonly type: 'Executed'; + readonly type: "Executed"; } /** @name EvmCoreErrorExitReason (104) */ @@ -1467,7 +1716,7 @@ declare module '@polkadot/types/lookup' { readonly asRevert: EvmCoreErrorExitRevert; readonly isFatal: boolean; readonly asFatal: EvmCoreErrorExitFatal; - readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal'; + readonly type: "Succeed" | "Error" | "Revert" | "Fatal"; } /** @name EvmCoreErrorExitSucceed (105) */ @@ -1475,7 +1724,7 @@ declare module '@polkadot/types/lookup' { readonly isStopped: boolean; readonly isReturned: boolean; readonly isSuicided: boolean; - readonly type: 'Stopped' | 'Returned' | 'Suicided'; + readonly type: "Stopped" | "Returned" | "Suicided"; } /** @name EvmCoreErrorExitError (106) */ @@ -1498,13 +1747,29 @@ declare module '@polkadot/types/lookup' { readonly isMaxNonce: boolean; readonly isInvalidCode: boolean; readonly asInvalidCode: u8; - readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'MaxNonce' | 'InvalidCode'; + readonly type: + | "StackUnderflow" + | "StackOverflow" + | "InvalidJump" + | "InvalidRange" + | "DesignatedInvalid" + | "CallTooDeep" + | "CreateCollision" + | "CreateContractLimit" + | "OutOfOffset" + | "OutOfGas" + | "OutOfFund" + | "PcUnderflow" + | "CreateEmpty" + | "Other" + | "MaxNonce" + | "InvalidCode"; } /** @name EvmCoreErrorExitRevert (110) */ interface EvmCoreErrorExitRevert extends Enum { readonly isReverted: boolean; - readonly type: 'Reverted'; + readonly type: "Reverted"; } /** @name EvmCoreErrorExitFatal (111) */ @@ -1515,7 +1780,11 @@ declare module '@polkadot/types/lookup' { readonly asCallErrorAsFatal: EvmCoreErrorExitError; readonly isOther: boolean; readonly asOther: Text; - readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other'; + readonly type: + | "NotSupported" + | "UnhandledInterrupt" + | "CallErrorAsFatal" + | "Other"; } /** @name PalletEvmEvent (112) */ @@ -1540,7 +1809,12 @@ declare module '@polkadot/types/lookup' { readonly asExecutedFailed: { readonly address: H160; } & Struct; - readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed'; + readonly type: + | "Log" + | "Created" + | "CreatedFailed" + | "Executed" + | "ExecutedFailed"; } /** @name EthereumLog (113) */ @@ -1561,7 +1835,7 @@ declare module '@polkadot/types/lookup' { readonly asNewElasticity: { readonly elasticity: Permill; } & Struct; - readonly type: 'NewBaseFeePerGas' | 'BaseFeeOverflow' | 'NewElasticity'; + readonly type: "NewBaseFeePerGas" | "BaseFeeOverflow" | "NewElasticity"; } /** @name PalletAirdropClaimsEvent (119) */ @@ -1572,7 +1846,7 @@ declare module '@polkadot/types/lookup' { readonly source: PalletAirdropClaimsUtilsMultiAddress; readonly amount: u128; } & Struct; - readonly type: 'Claimed'; + readonly type: "Claimed"; } /** @name PalletAirdropClaimsUtilsMultiAddress (120) */ @@ -1581,7 +1855,7 @@ declare module '@polkadot/types/lookup' { readonly asEvm: PalletAirdropClaimsUtilsEthereumAddress; readonly isNative: boolean; readonly asNative: AccountId32; - readonly type: 'Evm' | 'Native'; + readonly type: "Evm" | "Native"; } /** @name PalletAirdropClaimsUtilsEthereumAddress (121) */ @@ -1642,7 +1916,18 @@ declare module '@polkadot/types/lookup' { readonly asMinRestakingBondUpdated: { readonly value: u128; } & Struct; - readonly type: 'RoleAssigned' | 'RoleRemoved' | 'Slashed' | 'ProfileCreated' | 'ProfileUpdated' | 'ProfileDeleted' | 'PendingJobs' | 'RolesRewardSet' | 'PayoutStarted' | 'Rewarded' | 'MinRestakingBondUpdated'; + readonly type: + | "RoleAssigned" + | "RoleRemoved" + | "Slashed" + | "ProfileCreated" + | "ProfileUpdated" + | "ProfileDeleted" + | "PendingJobs" + | "RolesRewardSet" + | "PayoutStarted" + | "Rewarded" + | "MinRestakingBondUpdated"; } /** @name TanglePrimitivesRolesRoleType (123) */ @@ -1652,7 +1937,7 @@ declare module '@polkadot/types/lookup' { readonly isZkSaaS: boolean; readonly asZkSaaS: TanglePrimitivesRolesZksaasZeroKnowledgeRoleType; readonly isLightClientRelaying: boolean; - readonly type: 'Tss' | 'ZkSaaS' | 'LightClientRelaying'; + readonly type: "Tss" | "ZkSaaS" | "LightClientRelaying"; } /** @name TanglePrimitivesRolesTssThresholdSignatureRoleType (124) */ @@ -1669,14 +1954,26 @@ declare module '@polkadot/types/lookup' { readonly isZcashFrostEd448: boolean; readonly isGennaroDKGBls381: boolean; readonly isWstsV2: boolean; - readonly type: 'DfnsCGGMP21Secp256k1' | 'DfnsCGGMP21Secp256r1' | 'DfnsCGGMP21Stark' | 'SilentShardDKLS23Secp256k1' | 'ZcashFrostP256' | 'ZcashFrostP384' | 'ZcashFrostSecp256k1' | 'ZcashFrostRistretto255' | 'ZcashFrostEd25519' | 'ZcashFrostEd448' | 'GennaroDKGBls381' | 'WstsV2'; + readonly type: + | "DfnsCGGMP21Secp256k1" + | "DfnsCGGMP21Secp256r1" + | "DfnsCGGMP21Stark" + | "SilentShardDKLS23Secp256k1" + | "ZcashFrostP256" + | "ZcashFrostP384" + | "ZcashFrostSecp256k1" + | "ZcashFrostRistretto255" + | "ZcashFrostEd25519" + | "ZcashFrostEd448" + | "GennaroDKGBls381" + | "WstsV2"; } /** @name TanglePrimitivesRolesZksaasZeroKnowledgeRoleType (125) */ interface TanglePrimitivesRolesZksaasZeroKnowledgeRoleType extends Enum { readonly isZkSaaSGroth16: boolean; readonly isZkSaaSMarlin: boolean; - readonly type: 'ZkSaaSGroth16' | 'ZkSaaSMarlin'; + readonly type: "ZkSaaSGroth16" | "ZkSaaSMarlin"; } /** @name PalletJobsModuleEvent (129) */ @@ -1720,7 +2017,14 @@ declare module '@polkadot/types/lookup' { readonly roleType: TanglePrimitivesRolesRoleType; readonly newExpiry: u64; } & Struct; - readonly type: 'JobSubmitted' | 'JobResultSubmitted' | 'ValidatorRewarded' | 'JobRefunded' | 'JobParticipantsUpdated' | 'JobReSubmitted' | 'JobResultExtended'; + readonly type: + | "JobSubmitted" + | "JobResultSubmitted" + | "ValidatorRewarded" + | "JobRefunded" + | "JobParticipantsUpdated" + | "JobReSubmitted" + | "JobResultExtended"; } /** @name TanglePrimitivesJobsJobSubmission (130) */ @@ -1754,7 +2058,13 @@ declare module '@polkadot/types/lookup' { readonly asZkSaaSPhaseOne: TanglePrimitivesJobsZksaasZkSaaSPhaseOneJobType; readonly isZkSaaSPhaseTwo: boolean; readonly asZkSaaSPhaseTwo: TanglePrimitivesJobsZksaasZkSaaSPhaseTwoJobType; - readonly type: 'DkgtssPhaseOne' | 'DkgtssPhaseTwo' | 'DkgtssPhaseThree' | 'DkgtssPhaseFour' | 'ZkSaaSPhaseOne' | 'ZkSaaSPhaseTwo'; + readonly type: + | "DkgtssPhaseOne" + | "DkgtssPhaseTwo" + | "DkgtssPhaseThree" + | "DkgtssPhaseFour" + | "ZkSaaSPhaseOne" + | "ZkSaaSPhaseTwo"; } /** @name TanglePrimitivesJobsTssDkgtssPhaseOneJobType (135) */ @@ -1799,7 +2109,7 @@ declare module '@polkadot/types/lookup' { interface TanglePrimitivesJobsZksaasZkSaaSSystem extends Enum { readonly isGroth16: boolean; readonly asGroth16: TanglePrimitivesJobsZksaasGroth16System; - readonly type: 'Groth16'; + readonly type: "Groth16"; } /** @name TanglePrimitivesJobsZksaasGroth16System (146) */ @@ -1820,7 +2130,7 @@ declare module '@polkadot/types/lookup' { readonly asIpfs: Bytes; readonly isHttp: boolean; readonly asHttp: Bytes; - readonly type: 'Raw' | 'Ipfs' | 'Http'; + readonly type: "Raw" | "Ipfs" | "Http"; } /** @name TanglePrimitivesJobsZksaasZkSaaSPhaseTwoJobType (148) */ @@ -1834,7 +2144,7 @@ declare module '@polkadot/types/lookup' { interface TanglePrimitivesJobsZksaasZkSaaSPhaseTwoRequest extends Enum { readonly isGroth16: boolean; readonly asGroth16: TanglePrimitivesJobsZksaasGroth16ProveRequest; - readonly type: 'Groth16'; + readonly type: "Groth16"; } /** @name TanglePrimitivesJobsZksaasGroth16ProveRequest (150) */ @@ -1857,7 +2167,7 @@ declare module '@polkadot/types/lookup' { readonly isDestroy: boolean; readonly isRegenerateWithThreshold: boolean; readonly asRegenerateWithThreshold: u8; - readonly type: 'Destroy' | 'RegenerateWithThreshold'; + readonly type: "Destroy" | "RegenerateWithThreshold"; } /** @name TanglePrimitivesJobsJobInfo (157) */ @@ -1870,7 +2180,171 @@ declare module '@polkadot/types/lookup' { readonly fallback: TanglePrimitivesJobsFallbackOptions; } - /** @name PalletDkgEvent (158) */ + /** @name PalletServicesModuleEvent (158) */ + interface PalletServicesModuleEvent extends Enum { + readonly isBlueprintCreated: boolean; + readonly asBlueprintCreated: { + readonly owner: AccountId32; + readonly blueprintId: u64; + } & Struct; + readonly isRegistered: boolean; + readonly asRegistered: { + readonly provider: AccountId32; + readonly blueprintId: u64; + readonly preferences: TanglePrimitivesJobsV2OperatorPreferences; + readonly registrationArgs: Vec; + } & Struct; + readonly isUnregistered: boolean; + readonly asUnregistered: { + readonly operator: AccountId32; + readonly blueprintId: u64; + } & Struct; + readonly isApprovalPreferenceUpdated: boolean; + readonly asApprovalPreferenceUpdated: { + readonly operator: AccountId32; + readonly blueprintId: u64; + readonly approvalPreference: TanglePrimitivesJobsV2ApprovalPrefrence; + } & Struct; + readonly isServiceRequested: boolean; + readonly asServiceRequested: { + readonly owner: AccountId32; + readonly requestId: u64; + readonly blueprintId: u64; + readonly pendingApprovals: Vec; + readonly approved: Vec; + } & Struct; + readonly isServiceRequestApproved: boolean; + readonly asServiceRequestApproved: { + readonly operator: AccountId32; + readonly requestId: u64; + readonly blueprintId: u64; + readonly pendingApprovals: Vec; + readonly approved: Vec; + } & Struct; + readonly isServiceRequestRejected: boolean; + readonly asServiceRequestRejected: { + readonly operator: AccountId32; + readonly requestId: u64; + readonly blueprintId: u64; + } & Struct; + readonly isServiceRequestUpdated: boolean; + readonly asServiceRequestUpdated: { + readonly owner: AccountId32; + readonly requestId: u64; + readonly blueprintId: u64; + readonly pendingApprovals: Vec; + readonly approved: Vec; + } & Struct; + readonly isServiceInitiated: boolean; + readonly asServiceInitiated: { + readonly owner: AccountId32; + readonly requestId: Option; + readonly serviceId: u64; + readonly blueprintId: u64; + } & Struct; + readonly isServiceTerminated: boolean; + readonly asServiceTerminated: { + readonly owner: AccountId32; + readonly serviceId: u64; + readonly blueprintId: u64; + } & Struct; + readonly isJobCalled: boolean; + readonly asJobCalled: { + readonly caller: AccountId32; + readonly serviceId: u64; + readonly callId: u64; + readonly job: u8; + readonly args: Vec; + } & Struct; + readonly isJobResultSubmitted: boolean; + readonly asJobResultSubmitted: { + readonly operator: AccountId32; + readonly serviceId: u64; + readonly callId: u64; + readonly job: u8; + readonly result: Vec; + } & Struct; + readonly type: + | "BlueprintCreated" + | "Registered" + | "Unregistered" + | "ApprovalPreferenceUpdated" + | "ServiceRequested" + | "ServiceRequestApproved" + | "ServiceRequestRejected" + | "ServiceRequestUpdated" + | "ServiceInitiated" + | "ServiceTerminated" + | "JobCalled" + | "JobResultSubmitted"; + } + + /** @name TanglePrimitivesJobsV2OperatorPreferences (159) */ + interface TanglePrimitivesJobsV2OperatorPreferences extends Struct { + readonly key: SpCoreEcdsaPublic; + readonly approval: TanglePrimitivesJobsV2ApprovalPrefrence; + } + + /** @name SpCoreEcdsaPublic (160) */ + interface SpCoreEcdsaPublic extends U8aFixed {} + + /** @name TanglePrimitivesJobsV2ApprovalPrefrence (162) */ + interface TanglePrimitivesJobsV2ApprovalPrefrence extends Enum { + readonly isNone: boolean; + readonly isRequired: boolean; + readonly type: "None" | "Required"; + } + + /** @name TanglePrimitivesJobsV2Field (164) */ + interface TanglePrimitivesJobsV2Field extends Enum { + readonly isNone: boolean; + readonly isBool: boolean; + readonly asBool: bool; + readonly isUint8: boolean; + readonly asUint8: u8; + readonly isInt8: boolean; + readonly asInt8: i8; + readonly isUint16: boolean; + readonly asUint16: u16; + readonly isInt16: boolean; + readonly asInt16: i16; + readonly isUint32: boolean; + readonly asUint32: u32; + readonly isInt32: boolean; + readonly asInt32: i32; + readonly isUint64: boolean; + readonly asUint64: u64; + readonly isInt64: boolean; + readonly asInt64: i64; + readonly isString: boolean; + readonly asString: Bytes; + readonly isBytes: boolean; + readonly asBytes: Bytes; + readonly isArray: boolean; + readonly asArray: Vec; + readonly isList: boolean; + readonly asList: Vec; + readonly isAccountId: boolean; + readonly asAccountId: AccountId32; + readonly type: + | "None" + | "Bool" + | "Uint8" + | "Int8" + | "Uint16" + | "Int16" + | "Uint32" + | "Int32" + | "Uint64" + | "Int64" + | "String" + | "Bytes" + | "Array" + | "List" + | "AccountId"; + } + + /** @name PalletDkgEvent (174) */ interface PalletDkgEvent extends Enum { readonly isFeeUpdated: boolean; readonly asFeeUpdated: PalletDkgFeeInfo; @@ -1880,10 +2354,10 @@ declare module '@polkadot/types/lookup' { readonly toJobId: u64; readonly signature: Bytes; } & Struct; - readonly type: 'FeeUpdated' | 'KeyRotated'; + readonly type: "FeeUpdated" | "KeyRotated"; } - /** @name PalletDkgFeeInfo (159) */ + /** @name PalletDkgFeeInfo (175) */ interface PalletDkgFeeInfo extends Struct { readonly baseFee: u128; readonly dkgValidatorFee: u128; @@ -1893,14 +2367,14 @@ declare module '@polkadot/types/lookup' { readonly storageFeePerBlock: u128; } - /** @name PalletZksaasEvent (160) */ + /** @name PalletZksaasEvent (176) */ interface PalletZksaasEvent extends Enum { readonly isFeeUpdated: boolean; readonly asFeeUpdated: PalletZksaasFeeInfo; - readonly type: 'FeeUpdated'; + readonly type: "FeeUpdated"; } - /** @name PalletZksaasFeeInfo (161) */ + /** @name PalletZksaasFeeInfo (177) */ interface PalletZksaasFeeInfo extends Struct { readonly baseFee: u128; readonly circuitFee: u128; @@ -1908,7 +2382,7 @@ declare module '@polkadot/types/lookup' { readonly storageFeePerByte: u128; } - /** @name PalletProxyEvent (162) */ + /** @name PalletProxyEvent (178) */ interface PalletProxyEvent extends Enum { readonly isProxyExecuted: boolean; readonly asProxyExecuted: { @@ -1941,16 +2415,21 @@ declare module '@polkadot/types/lookup' { readonly proxyType: TangleTestnetRuntimeProxyType; readonly delay: u64; } & Struct; - readonly type: 'ProxyExecuted' | 'PureCreated' | 'Announced' | 'ProxyAdded' | 'ProxyRemoved'; + readonly type: + | "ProxyExecuted" + | "PureCreated" + | "Announced" + | "ProxyAdded" + | "ProxyRemoved"; } - /** @name TangleTestnetRuntimeProxyType (163) */ + /** @name TangleTestnetRuntimeProxyType (179) */ interface TangleTestnetRuntimeProxyType extends Enum { readonly isAny: boolean; readonly isNonTransfer: boolean; readonly isGovernance: boolean; readonly isStaking: boolean; - readonly type: 'Any' | 'NonTransfer' | 'Governance' | 'Staking'; + readonly type: "Any" | "NonTransfer" | "Governance" | "Staking"; } /** @name PalletMultiAssetDelegationEvent (165) */ @@ -2074,10 +2553,10 @@ declare module '@polkadot/types/lookup' { readonly extrinsicName: Bytes; readonly who: AccountId32; } & Struct; - readonly type: 'AccessGranted'; + readonly type: "AccessGranted"; } - /** @name SygmaBasicFeehandlerEvent (169) */ + /** @name SygmaBasicFeehandlerEvent (181) */ interface SygmaBasicFeehandlerEvent extends Enum { readonly isFeeSet: boolean; readonly asFeeSet: { @@ -2085,19 +2564,19 @@ declare module '@polkadot/types/lookup' { readonly asset: StagingXcmV4AssetAssetId; readonly amount: u128; } & Struct; - readonly type: 'FeeSet'; + readonly type: "FeeSet"; } - /** @name StagingXcmV4AssetAssetId (170) */ + /** @name StagingXcmV4AssetAssetId (182) */ interface StagingXcmV4AssetAssetId extends StagingXcmV4Location {} - /** @name StagingXcmV4Location (171) */ + /** @name StagingXcmV4Location (183) */ interface StagingXcmV4Location extends Struct { readonly parents: u8; readonly interior: StagingXcmV4Junctions; } - /** @name StagingXcmV4Junctions (172) */ + /** @name StagingXcmV4Junctions (184) */ interface StagingXcmV4Junctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; @@ -2116,10 +2595,19 @@ declare module '@polkadot/types/lookup' { readonly asX7: StagingXcmV4Junction; readonly isX8: boolean; readonly asX8: StagingXcmV4Junction; - readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; - } - - /** @name StagingXcmV4Junction (174) */ + readonly type: + | "Here" + | "X1" + | "X2" + | "X3" + | "X4" + | "X5" + | "X6" + | "X7" + | "X8"; + } + + /** @name StagingXcmV4Junction (186) */ interface StagingXcmV4Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; @@ -2155,10 +2643,20 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isGlobalConsensus: boolean; readonly asGlobalConsensus: StagingXcmV4JunctionNetworkId; - readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality' | 'GlobalConsensus'; - } - - /** @name StagingXcmV4JunctionNetworkId (177) */ + readonly type: + | "Parachain" + | "AccountId32" + | "AccountIndex64" + | "AccountKey20" + | "PalletInstance" + | "GeneralIndex" + | "GeneralKey" + | "OnlyChild" + | "Plurality" + | "GlobalConsensus"; + } + + /** @name StagingXcmV4JunctionNetworkId (189) */ interface StagingXcmV4JunctionNetworkId extends Enum { readonly isByGenesis: boolean; readonly asByGenesis: U8aFixed; @@ -2179,10 +2677,21 @@ declare module '@polkadot/types/lookup' { readonly isBitcoinCore: boolean; readonly isBitcoinCash: boolean; readonly isPolkadotBulletin: boolean; - readonly type: 'ByGenesis' | 'ByFork' | 'Polkadot' | 'Kusama' | 'Westend' | 'Rococo' | 'Wococo' | 'Ethereum' | 'BitcoinCore' | 'BitcoinCash' | 'PolkadotBulletin'; - } - - /** @name XcmV3JunctionBodyId (178) */ + readonly type: + | "ByGenesis" + | "ByFork" + | "Polkadot" + | "Kusama" + | "Westend" + | "Rococo" + | "Wococo" + | "Ethereum" + | "BitcoinCore" + | "BitcoinCash" + | "PolkadotBulletin"; + } + + /** @name XcmV3JunctionBodyId (190) */ interface XcmV3JunctionBodyId extends Enum { readonly isUnit: boolean; readonly isMoniker: boolean; @@ -2196,10 +2705,20 @@ declare module '@polkadot/types/lookup' { readonly isDefense: boolean; readonly isAdministration: boolean; readonly isTreasury: boolean; - readonly type: 'Unit' | 'Moniker' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; - } - - /** @name XcmV3JunctionBodyPart (179) */ + readonly type: + | "Unit" + | "Moniker" + | "Index" + | "Executive" + | "Technical" + | "Legislative" + | "Judicial" + | "Defense" + | "Administration" + | "Treasury"; + } + + /** @name XcmV3JunctionBodyPart (191) */ interface XcmV3JunctionBodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; @@ -2221,10 +2740,15 @@ declare module '@polkadot/types/lookup' { readonly nom: Compact; readonly denom: Compact; } & Struct; - readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; + readonly type: + | "Voice" + | "Members" + | "Fraction" + | "AtLeastProportion" + | "MoreThanProportion"; } - /** @name SygmaFeeHandlerRouterEvent (187) */ + /** @name SygmaFeeHandlerRouterEvent (199) */ interface SygmaFeeHandlerRouterEvent extends Enum { readonly isFeeHandlerSet: boolean; readonly asFeeHandlerSet: { @@ -2232,18 +2756,21 @@ declare module '@polkadot/types/lookup' { readonly asset: StagingXcmV4AssetAssetId; readonly handlerType: SygmaFeeHandlerRouterFeeHandlerType; } & Struct; - readonly type: 'FeeHandlerSet'; + readonly type: "FeeHandlerSet"; } - /** @name SygmaFeeHandlerRouterFeeHandlerType (188) */ + /** @name SygmaFeeHandlerRouterFeeHandlerType (200) */ interface SygmaFeeHandlerRouterFeeHandlerType extends Enum { readonly isBasicFeeHandler: boolean; readonly isPercentageFeeHandler: boolean; readonly isDynamicFeeHandler: boolean; - readonly type: 'BasicFeeHandler' | 'PercentageFeeHandler' | 'DynamicFeeHandler'; + readonly type: + | "BasicFeeHandler" + | "PercentageFeeHandler" + | "DynamicFeeHandler"; } - /** @name SygmaPercentageFeehandlerEvent (189) */ + /** @name SygmaPercentageFeehandlerEvent (201) */ interface SygmaPercentageFeehandlerEvent extends Enum { readonly isFeeRateSet: boolean; readonly asFeeRateSet: { @@ -2253,10 +2780,10 @@ declare module '@polkadot/types/lookup' { readonly feeLowerBound: u128; readonly feeUpperBound: u128; } & Struct; - readonly type: 'FeeRateSet'; + readonly type: "FeeRateSet"; } - /** @name SygmaBridgeEvent (190) */ + /** @name SygmaBridgeEvent (202) */ interface SygmaBridgeEvent extends Enum { readonly isDeposit: boolean; readonly asDeposit: { @@ -2322,39 +2849,53 @@ declare module '@polkadot/types/lookup' { readonly asAllBridgeUnpaused: { readonly sender: AccountId32; } & Struct; - readonly type: 'Deposit' | 'ProposalExecution' | 'FailedHandlerExecution' | 'Retry' | 'BridgePaused' | 'BridgeUnpaused' | 'RegisterDestDomain' | 'UnregisterDestDomain' | 'FeeCollected' | 'AllBridgePaused' | 'AllBridgeUnpaused'; - } - - /** @name SygmaTraitsTransferType (191) */ + readonly type: + | "Deposit" + | "ProposalExecution" + | "FailedHandlerExecution" + | "Retry" + | "BridgePaused" + | "BridgeUnpaused" + | "RegisterDestDomain" + | "UnregisterDestDomain" + | "FeeCollected" + | "AllBridgePaused" + | "AllBridgeUnpaused"; + } + + /** @name SygmaTraitsTransferType (203) */ interface SygmaTraitsTransferType extends Enum { readonly isFungibleTransfer: boolean; readonly isNonFungibleTransfer: boolean; readonly isGenericTransfer: boolean; - readonly type: 'FungibleTransfer' | 'NonFungibleTransfer' | 'GenericTransfer'; + readonly type: + | "FungibleTransfer" + | "NonFungibleTransfer" + | "GenericTransfer"; } - /** @name FrameSystemPhase (192) */ + /** @name FrameSystemPhase (204) */ interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; readonly isFinalization: boolean; readonly isInitialization: boolean; - readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; + readonly type: "ApplyExtrinsic" | "Finalization" | "Initialization"; } - /** @name FrameSystemLastRuntimeUpgradeInfo (194) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (206) */ interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCodeUpgradeAuthorization (195) */ + /** @name FrameSystemCodeUpgradeAuthorization (207) */ interface FrameSystemCodeUpgradeAuthorization extends Struct { readonly codeHash: H256; readonly checkVersion: bool; } - /** @name FrameSystemCall (196) */ + /** @name FrameSystemCall (208) */ interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { @@ -2401,24 +2942,35 @@ declare module '@polkadot/types/lookup' { readonly asApplyAuthorizedUpgrade: { readonly code: Bytes; } & Struct; - readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent' | 'AuthorizeUpgrade' | 'AuthorizeUpgradeWithoutChecks' | 'ApplyAuthorizedUpgrade'; - } - - /** @name FrameSystemLimitsBlockWeights (200) */ + readonly type: + | "Remark" + | "SetHeapPages" + | "SetCode" + | "SetCodeWithoutChecks" + | "SetStorage" + | "KillStorage" + | "KillPrefix" + | "RemarkWithEvent" + | "AuthorizeUpgrade" + | "AuthorizeUpgradeWithoutChecks" + | "ApplyAuthorizedUpgrade"; + } + + /** @name FrameSystemLimitsBlockWeights (212) */ interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: SpWeightsWeightV2Weight; readonly maxBlock: SpWeightsWeightV2Weight; readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (201) */ + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (213) */ interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (202) */ + /** @name FrameSystemLimitsWeightsPerClass (214) */ interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: SpWeightsWeightV2Weight; readonly maxExtrinsic: Option; @@ -2426,25 +2978,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (204) */ + /** @name FrameSystemLimitsBlockLength (216) */ interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportDispatchPerDispatchClassU32 (205) */ + /** @name FrameSupportDispatchPerDispatchClassU32 (217) */ interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name SpWeightsRuntimeDbWeight (206) */ + /** @name SpWeightsRuntimeDbWeight (218) */ interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (207) */ + /** @name SpVersionRuntimeVersion (219) */ interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -2456,7 +3008,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (212) */ + /** @name FrameSystemError (224) */ interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -2466,19 +3018,27 @@ declare module '@polkadot/types/lookup' { readonly isCallFiltered: boolean; readonly isNothingAuthorized: boolean; readonly isUnauthorized: boolean; - readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered' | 'NothingAuthorized' | 'Unauthorized'; - } - - /** @name PalletTimestampCall (213) */ + readonly type: + | "InvalidSpecName" + | "SpecVersionNeedsToIncrease" + | "FailedToExtractRuntimeVersion" + | "NonDefaultComposite" + | "NonZeroRefCount" + | "CallFiltered" + | "NothingAuthorized" + | "Unauthorized"; + } + + /** @name PalletTimestampCall (225) */ interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { readonly now: Compact; } & Struct; - readonly type: 'Set'; + readonly type: "Set"; } - /** @name PalletSudoCall (214) */ + /** @name PalletSudoCall (226) */ interface PalletSudoCall extends Enum { readonly isSudo: boolean; readonly asSudo: { @@ -2499,115 +3059,120 @@ declare module '@polkadot/types/lookup' { readonly call: Call; } & Struct; readonly isRemoveKey: boolean; - readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs' | 'RemoveKey'; + readonly type: + | "Sudo" + | "SudoUncheckedWeight" + | "SetKey" + | "SudoAs" + | "RemoveKey"; } - /** @name PalletAssetsCall (216) */ + /** @name PalletAssetsCall (228) */ interface PalletAssetsCall extends Enum { readonly isCreate: boolean; readonly asCreate: { - readonly id: Compact; + readonly id: Compact; readonly admin: MultiAddress; readonly minBalance: u128; } & Struct; readonly isForceCreate: boolean; readonly asForceCreate: { - readonly id: Compact; + readonly id: Compact; readonly owner: MultiAddress; readonly isSufficient: bool; readonly minBalance: Compact; } & Struct; readonly isStartDestroy: boolean; readonly asStartDestroy: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isDestroyAccounts: boolean; readonly asDestroyAccounts: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isDestroyApprovals: boolean; readonly asDestroyApprovals: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isFinishDestroy: boolean; readonly asFinishDestroy: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isMint: boolean; readonly asMint: { - readonly id: Compact; + readonly id: Compact; readonly beneficiary: MultiAddress; readonly amount: Compact; } & Struct; readonly isBurn: boolean; readonly asBurn: { - readonly id: Compact; + readonly id: Compact; readonly who: MultiAddress; readonly amount: Compact; } & Struct; readonly isTransfer: boolean; readonly asTransfer: { - readonly id: Compact; + readonly id: Compact; readonly target: MultiAddress; readonly amount: Compact; } & Struct; readonly isTransferKeepAlive: boolean; readonly asTransferKeepAlive: { - readonly id: Compact; + readonly id: Compact; readonly target: MultiAddress; readonly amount: Compact; } & Struct; readonly isForceTransfer: boolean; readonly asForceTransfer: { - readonly id: Compact; + readonly id: Compact; readonly source: MultiAddress; readonly dest: MultiAddress; readonly amount: Compact; } & Struct; readonly isFreeze: boolean; readonly asFreeze: { - readonly id: Compact; + readonly id: Compact; readonly who: MultiAddress; } & Struct; readonly isThaw: boolean; readonly asThaw: { - readonly id: Compact; + readonly id: Compact; readonly who: MultiAddress; } & Struct; readonly isFreezeAsset: boolean; readonly asFreezeAsset: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isThawAsset: boolean; readonly asThawAsset: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isTransferOwnership: boolean; readonly asTransferOwnership: { - readonly id: Compact; + readonly id: Compact; readonly owner: MultiAddress; } & Struct; readonly isSetTeam: boolean; readonly asSetTeam: { - readonly id: Compact; + readonly id: Compact; readonly issuer: MultiAddress; readonly admin: MultiAddress; readonly freezer: MultiAddress; } & Struct; readonly isSetMetadata: boolean; readonly asSetMetadata: { - readonly id: Compact; + readonly id: Compact; readonly name: Bytes; readonly symbol: Bytes; readonly decimals: u8; } & Struct; readonly isClearMetadata: boolean; readonly asClearMetadata: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isForceSetMetadata: boolean; readonly asForceSetMetadata: { - readonly id: Compact; + readonly id: Compact; readonly name: Bytes; readonly symbol: Bytes; readonly decimals: u8; @@ -2615,11 +3180,11 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isForceClearMetadata: boolean; readonly asForceClearMetadata: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isForceAssetStatus: boolean; readonly asForceAssetStatus: { - readonly id: Compact; + readonly id: Compact; readonly owner: MultiAddress; readonly issuer: MultiAddress; readonly admin: MultiAddress; @@ -2630,61 +3195,93 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isApproveTransfer: boolean; readonly asApproveTransfer: { - readonly id: Compact; + readonly id: Compact; readonly delegate: MultiAddress; readonly amount: Compact; } & Struct; readonly isCancelApproval: boolean; readonly asCancelApproval: { - readonly id: Compact; + readonly id: Compact; readonly delegate: MultiAddress; } & Struct; readonly isForceCancelApproval: boolean; readonly asForceCancelApproval: { - readonly id: Compact; + readonly id: Compact; readonly owner: MultiAddress; readonly delegate: MultiAddress; } & Struct; readonly isTransferApproved: boolean; readonly asTransferApproved: { - readonly id: Compact; + readonly id: Compact; readonly owner: MultiAddress; readonly destination: MultiAddress; readonly amount: Compact; } & Struct; readonly isTouch: boolean; readonly asTouch: { - readonly id: Compact; + readonly id: Compact; } & Struct; readonly isRefund: boolean; readonly asRefund: { - readonly id: Compact; + readonly id: Compact; readonly allowBurn: bool; } & Struct; readonly isSetMinBalance: boolean; readonly asSetMinBalance: { - readonly id: Compact; + readonly id: Compact; readonly minBalance: u128; } & Struct; readonly isTouchOther: boolean; readonly asTouchOther: { - readonly id: Compact; + readonly id: Compact; readonly who: MultiAddress; } & Struct; readonly isRefundOther: boolean; readonly asRefundOther: { - readonly id: Compact; + readonly id: Compact; readonly who: MultiAddress; } & Struct; readonly isBlock: boolean; readonly asBlock: { - readonly id: Compact; + readonly id: Compact; readonly who: MultiAddress; } & Struct; - readonly type: 'Create' | 'ForceCreate' | 'StartDestroy' | 'DestroyAccounts' | 'DestroyApprovals' | 'FinishDestroy' | 'Mint' | 'Burn' | 'Transfer' | 'TransferKeepAlive' | 'ForceTransfer' | 'Freeze' | 'Thaw' | 'FreezeAsset' | 'ThawAsset' | 'TransferOwnership' | 'SetTeam' | 'SetMetadata' | 'ClearMetadata' | 'ForceSetMetadata' | 'ForceClearMetadata' | 'ForceAssetStatus' | 'ApproveTransfer' | 'CancelApproval' | 'ForceCancelApproval' | 'TransferApproved' | 'Touch' | 'Refund' | 'SetMinBalance' | 'TouchOther' | 'RefundOther' | 'Block'; - } - - /** @name PalletBalancesCall (218) */ + readonly type: + | "Create" + | "ForceCreate" + | "StartDestroy" + | "DestroyAccounts" + | "DestroyApprovals" + | "FinishDestroy" + | "Mint" + | "Burn" + | "Transfer" + | "TransferKeepAlive" + | "ForceTransfer" + | "Freeze" + | "Thaw" + | "FreezeAsset" + | "ThawAsset" + | "TransferOwnership" + | "SetTeam" + | "SetMetadata" + | "ClearMetadata" + | "ForceSetMetadata" + | "ForceClearMetadata" + | "ForceAssetStatus" + | "ApproveTransfer" + | "CancelApproval" + | "ForceCancelApproval" + | "TransferApproved" + | "Touch" + | "Refund" + | "SetMinBalance" + | "TouchOther" + | "RefundOther" + | "Block"; + } + + /** @name PalletBalancesCall (230) */ interface PalletBalancesCall extends Enum { readonly isTransferAllowDeath: boolean; readonly asTransferAllowDeath: { @@ -2726,17 +3323,25 @@ declare module '@polkadot/types/lookup' { readonly direction: PalletBalancesAdjustmentDirection; readonly delta: Compact; } & Struct; - readonly type: 'TransferAllowDeath' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve' | 'UpgradeAccounts' | 'ForceSetBalance' | 'ForceAdjustTotalIssuance'; + readonly type: + | "TransferAllowDeath" + | "ForceTransfer" + | "TransferKeepAlive" + | "TransferAll" + | "ForceUnreserve" + | "UpgradeAccounts" + | "ForceSetBalance" + | "ForceAdjustTotalIssuance"; } - /** @name PalletBalancesAdjustmentDirection (219) */ + /** @name PalletBalancesAdjustmentDirection (231) */ interface PalletBalancesAdjustmentDirection extends Enum { readonly isIncrease: boolean; readonly isDecrease: boolean; - readonly type: 'Increase' | 'Decrease'; + readonly type: "Increase" | "Decrease"; } - /** @name PalletBabeCall (220) */ + /** @name PalletBabeCall (232) */ interface PalletBabeCall extends Enum { readonly isReportEquivocation: boolean; readonly asReportEquivocation: { @@ -2752,10 +3357,13 @@ declare module '@polkadot/types/lookup' { readonly asPlanConfigChange: { readonly config: SpConsensusBabeDigestsNextConfigDescriptor; } & Struct; - readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'PlanConfigChange'; + readonly type: + | "ReportEquivocation" + | "ReportEquivocationUnsigned" + | "PlanConfigChange"; } - /** @name SpConsensusSlotsEquivocationProof (221) */ + /** @name SpConsensusSlotsEquivocationProof (233) */ interface SpConsensusSlotsEquivocationProof extends Struct { readonly offender: SpConsensusBabeAppPublic; readonly slot: u64; @@ -2763,7 +3371,7 @@ declare module '@polkadot/types/lookup' { readonly secondHeader: SpRuntimeHeader; } - /** @name SpRuntimeHeader (222) */ + /** @name SpRuntimeHeader (234) */ interface SpRuntimeHeader extends Struct { readonly parentHash: H256; readonly number: Compact; @@ -2772,35 +3380,38 @@ declare module '@polkadot/types/lookup' { readonly digest: SpRuntimeDigest; } - /** @name SpConsensusBabeAppPublic (223) */ + /** @name SpConsensusBabeAppPublic (235) */ interface SpConsensusBabeAppPublic extends SpCoreSr25519Public {} - /** @name SpSessionMembershipProof (225) */ + /** @name SpSessionMembershipProof (237) */ interface SpSessionMembershipProof extends Struct { readonly session: u32; readonly trieNodes: Vec; readonly validatorCount: u32; } - /** @name SpConsensusBabeDigestsNextConfigDescriptor (226) */ + /** @name SpConsensusBabeDigestsNextConfigDescriptor (238) */ interface SpConsensusBabeDigestsNextConfigDescriptor extends Enum { readonly isV1: boolean; readonly asV1: { readonly c: ITuple<[u64, u64]>; readonly allowedSlots: SpConsensusBabeAllowedSlots; } & Struct; - readonly type: 'V1'; + readonly type: "V1"; } - /** @name SpConsensusBabeAllowedSlots (228) */ + /** @name SpConsensusBabeAllowedSlots (240) */ interface SpConsensusBabeAllowedSlots extends Enum { readonly isPrimarySlots: boolean; readonly isPrimaryAndSecondaryPlainSlots: boolean; readonly isPrimaryAndSecondaryVRFSlots: boolean; - readonly type: 'PrimarySlots' | 'PrimaryAndSecondaryPlainSlots' | 'PrimaryAndSecondaryVRFSlots'; + readonly type: + | "PrimarySlots" + | "PrimaryAndSecondaryPlainSlots" + | "PrimaryAndSecondaryVRFSlots"; } - /** @name PalletGrandpaCall (229) */ + /** @name PalletGrandpaCall (241) */ interface PalletGrandpaCall extends Enum { readonly isReportEquivocation: boolean; readonly asReportEquivocation: { @@ -2817,62 +3428,73 @@ declare module '@polkadot/types/lookup' { readonly delay: u64; readonly bestFinalizedBlockNumber: u64; } & Struct; - readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'NoteStalled'; + readonly type: + | "ReportEquivocation" + | "ReportEquivocationUnsigned" + | "NoteStalled"; } - /** @name SpConsensusGrandpaEquivocationProof (230) */ + /** @name SpConsensusGrandpaEquivocationProof (242) */ interface SpConsensusGrandpaEquivocationProof extends Struct { readonly setId: u64; readonly equivocation: SpConsensusGrandpaEquivocation; } - /** @name SpConsensusGrandpaEquivocation (231) */ + /** @name SpConsensusGrandpaEquivocation (243) */ interface SpConsensusGrandpaEquivocation extends Enum { readonly isPrevote: boolean; readonly asPrevote: FinalityGrandpaEquivocationPrevote; readonly isPrecommit: boolean; readonly asPrecommit: FinalityGrandpaEquivocationPrecommit; - readonly type: 'Prevote' | 'Precommit'; + readonly type: "Prevote" | "Precommit"; } - /** @name FinalityGrandpaEquivocationPrevote (232) */ + /** @name FinalityGrandpaEquivocationPrevote (244) */ interface FinalityGrandpaEquivocationPrevote extends Struct { readonly roundNumber: u64; readonly identity: SpConsensusGrandpaAppPublic; - readonly first: ITuple<[FinalityGrandpaPrevote, SpConsensusGrandpaAppSignature]>; - readonly second: ITuple<[FinalityGrandpaPrevote, SpConsensusGrandpaAppSignature]>; + readonly first: ITuple< + [FinalityGrandpaPrevote, SpConsensusGrandpaAppSignature] + >; + readonly second: ITuple< + [FinalityGrandpaPrevote, SpConsensusGrandpaAppSignature] + >; } - /** @name FinalityGrandpaPrevote (233) */ + /** @name FinalityGrandpaPrevote (245) */ interface FinalityGrandpaPrevote extends Struct { readonly targetHash: H256; readonly targetNumber: u64; } - /** @name SpConsensusGrandpaAppSignature (234) */ + /** @name SpConsensusGrandpaAppSignature (246) */ interface SpConsensusGrandpaAppSignature extends SpCoreEd25519Signature {} - /** @name SpCoreEd25519Signature (235) */ + /** @name SpCoreEd25519Signature (247) */ interface SpCoreEd25519Signature extends U8aFixed {} - /** @name FinalityGrandpaEquivocationPrecommit (238) */ + /** @name FinalityGrandpaEquivocationPrecommit (250) */ interface FinalityGrandpaEquivocationPrecommit extends Struct { readonly roundNumber: u64; readonly identity: SpConsensusGrandpaAppPublic; - readonly first: ITuple<[FinalityGrandpaPrecommit, SpConsensusGrandpaAppSignature]>; - readonly second: ITuple<[FinalityGrandpaPrecommit, SpConsensusGrandpaAppSignature]>; + readonly first: ITuple< + [FinalityGrandpaPrecommit, SpConsensusGrandpaAppSignature] + >; + readonly second: ITuple< + [FinalityGrandpaPrecommit, SpConsensusGrandpaAppSignature] + >; } - /** @name FinalityGrandpaPrecommit (239) */ + /** @name FinalityGrandpaPrecommit (251) */ interface FinalityGrandpaPrecommit extends Struct { readonly targetHash: H256; readonly targetNumber: u64; } - /** @name SpCoreVoid (241) */ + /** @name SpCoreVoid (253) */ type SpCoreVoid = Null; - /** @name PalletIndicesCall (242) */ + /** @name PalletIndicesCall (254) */ interface PalletIndicesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -2897,10 +3519,10 @@ declare module '@polkadot/types/lookup' { readonly asFreeze: { readonly index: u32; } & Struct; - readonly type: 'Claim' | 'Transfer' | 'Free' | 'ForceTransfer' | 'Freeze'; + readonly type: "Claim" | "Transfer" | "Free" | "ForceTransfer" | "Freeze"; } - /** @name PalletDemocracyCall (243) */ + /** @name PalletDemocracyCall (255) */ interface PalletDemocracyCall extends Enum { readonly isPropose: boolean; readonly asPropose: { @@ -2981,10 +3603,29 @@ declare module '@polkadot/types/lookup' { readonly owner: PalletDemocracyMetadataOwner; readonly maybeHash: Option; } & Struct; - readonly type: 'Propose' | 'Second' | 'Vote' | 'EmergencyCancel' | 'ExternalPropose' | 'ExternalProposeMajority' | 'ExternalProposeDefault' | 'FastTrack' | 'VetoExternal' | 'CancelReferendum' | 'Delegate' | 'Undelegate' | 'ClearPublicProposals' | 'Unlock' | 'RemoveVote' | 'RemoveOtherVote' | 'Blacklist' | 'CancelProposal' | 'SetMetadata'; - } - - /** @name FrameSupportPreimagesBounded (244) */ + readonly type: + | "Propose" + | "Second" + | "Vote" + | "EmergencyCancel" + | "ExternalPropose" + | "ExternalProposeMajority" + | "ExternalProposeDefault" + | "FastTrack" + | "VetoExternal" + | "CancelReferendum" + | "Delegate" + | "Undelegate" + | "ClearPublicProposals" + | "Unlock" + | "RemoveVote" + | "RemoveOtherVote" + | "Blacklist" + | "CancelProposal" + | "SetMetadata"; + } + + /** @name FrameSupportPreimagesBounded (256) */ interface FrameSupportPreimagesBounded extends Enum { readonly isLegacy: boolean; readonly asLegacy: { @@ -2997,13 +3638,13 @@ declare module '@polkadot/types/lookup' { readonly hash_: H256; readonly len: u32; } & Struct; - readonly type: 'Legacy' | 'Inline' | 'Lookup'; + readonly type: "Legacy" | "Inline" | "Lookup"; } - /** @name SpRuntimeBlakeTwo256 (245) */ + /** @name SpRuntimeBlakeTwo256 (257) */ type SpRuntimeBlakeTwo256 = Null; - /** @name PalletDemocracyConviction (247) */ + /** @name PalletDemocracyConviction (259) */ interface PalletDemocracyConviction extends Enum { readonly isNone: boolean; readonly isLocked1x: boolean; @@ -3012,10 +3653,17 @@ declare module '@polkadot/types/lookup' { readonly isLocked4x: boolean; readonly isLocked5x: boolean; readonly isLocked6x: boolean; - readonly type: 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x'; + readonly type: + | "None" + | "Locked1x" + | "Locked2x" + | "Locked3x" + | "Locked4x" + | "Locked5x" + | "Locked6x"; } - /** @name PalletCollectiveCall (250) */ + /** @name PalletCollectiveCall (262) */ interface PalletCollectiveCall extends Enum { readonly isSetMembers: boolean; readonly asSetMembers: { @@ -3051,10 +3699,16 @@ declare module '@polkadot/types/lookup' { readonly proposalWeightBound: SpWeightsWeightV2Weight; readonly lengthBound: Compact; } & Struct; - readonly type: 'SetMembers' | 'Execute' | 'Propose' | 'Vote' | 'DisapproveProposal' | 'Close'; + readonly type: + | "SetMembers" + | "Execute" + | "Propose" + | "Vote" + | "DisapproveProposal" + | "Close"; } - /** @name PalletVestingCall (251) */ + /** @name PalletVestingCall (263) */ interface PalletVestingCall extends Enum { readonly isVest: boolean; readonly isVestOther: boolean; @@ -3082,17 +3736,23 @@ declare module '@polkadot/types/lookup' { readonly target: MultiAddress; readonly scheduleIndex: u32; } & Struct; - readonly type: 'Vest' | 'VestOther' | 'VestedTransfer' | 'ForceVestedTransfer' | 'MergeSchedules' | 'ForceRemoveVestingSchedule'; + readonly type: + | "Vest" + | "VestOther" + | "VestedTransfer" + | "ForceVestedTransfer" + | "MergeSchedules" + | "ForceRemoveVestingSchedule"; } - /** @name PalletVestingVestingInfo (252) */ + /** @name PalletVestingVestingInfo (264) */ interface PalletVestingVestingInfo extends Struct { readonly locked: u128; readonly perBlock: u128; readonly startingBlock: u64; } - /** @name PalletElectionsPhragmenCall (253) */ + /** @name PalletElectionsPhragmenCall (265) */ interface PalletElectionsPhragmenCall extends Enum { readonly isVote: boolean; readonly asVote: { @@ -3119,19 +3779,25 @@ declare module '@polkadot/types/lookup' { readonly numVoters: u32; readonly numDefunct: u32; } & Struct; - readonly type: 'Vote' | 'RemoveVoter' | 'SubmitCandidacy' | 'RenounceCandidacy' | 'RemoveMember' | 'CleanDefunctVoters'; + readonly type: + | "Vote" + | "RemoveVoter" + | "SubmitCandidacy" + | "RenounceCandidacy" + | "RemoveMember" + | "CleanDefunctVoters"; } - /** @name PalletElectionsPhragmenRenouncing (254) */ + /** @name PalletElectionsPhragmenRenouncing (266) */ interface PalletElectionsPhragmenRenouncing extends Enum { readonly isMember: boolean; readonly isRunnerUp: boolean; readonly isCandidate: boolean; readonly asCandidate: Compact; - readonly type: 'Member' | 'RunnerUp' | 'Candidate'; + readonly type: "Member" | "RunnerUp" | "Candidate"; } - /** @name PalletElectionProviderMultiPhaseCall (255) */ + /** @name PalletElectionProviderMultiPhaseCall (267) */ interface PalletElectionProviderMultiPhaseCall extends Enum { readonly isSubmitUnsigned: boolean; readonly asSubmitUnsigned: { @@ -3155,49 +3821,171 @@ declare module '@polkadot/types/lookup' { readonly maybeMaxVoters: Option; readonly maybeMaxTargets: Option; } & Struct; - readonly type: 'SubmitUnsigned' | 'SetMinimumUntrustedScore' | 'SetEmergencyElectionResult' | 'Submit' | 'GovernanceFallback'; + readonly type: + | "SubmitUnsigned" + | "SetMinimumUntrustedScore" + | "SetEmergencyElectionResult" + | "Submit" + | "GovernanceFallback"; } - /** @name PalletElectionProviderMultiPhaseRawSolution (256) */ + /** @name PalletElectionProviderMultiPhaseRawSolution (268) */ interface PalletElectionProviderMultiPhaseRawSolution extends Struct { readonly solution: TangleTestnetRuntimeNposSolution16; readonly score: SpNposElectionsElectionScore; readonly round: u32; } - /** @name TangleTestnetRuntimeNposSolution16 (257) */ + /** @name TangleTestnetRuntimeNposSolution16 (269) */ interface TangleTestnetRuntimeNposSolution16 extends Struct { readonly votes1: Vec, Compact]>>; - readonly votes2: Vec, ITuple<[Compact, Compact]>, Compact]>>; - readonly votes3: Vec, Vec, Compact]>>, Compact]>>; - readonly votes4: Vec, Vec, Compact]>>, Compact]>>; - readonly votes5: Vec, Vec, Compact]>>, Compact]>>; - readonly votes6: Vec, Vec, Compact]>>, Compact]>>; - readonly votes7: Vec, Vec, Compact]>>, Compact]>>; - readonly votes8: Vec, Vec, Compact]>>, Compact]>>; - readonly votes9: Vec, Vec, Compact]>>, Compact]>>; - readonly votes10: Vec, Vec, Compact]>>, Compact]>>; - readonly votes11: Vec, Vec, Compact]>>, Compact]>>; - readonly votes12: Vec, Vec, Compact]>>, Compact]>>; - readonly votes13: Vec, Vec, Compact]>>, Compact]>>; - readonly votes14: Vec, Vec, Compact]>>, Compact]>>; - readonly votes15: Vec, Vec, Compact]>>, Compact]>>; - readonly votes16: Vec, Vec, Compact]>>, Compact]>>; - } - - /** @name PalletElectionProviderMultiPhaseSolutionOrSnapshotSize (308) */ - interface PalletElectionProviderMultiPhaseSolutionOrSnapshotSize extends Struct { + readonly votes2: Vec< + ITuple< + [Compact, ITuple<[Compact, Compact]>, Compact] + > + >; + readonly votes3: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes4: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes5: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes6: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes7: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes8: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes9: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes10: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes11: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes12: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes13: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes14: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes15: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + readonly votes16: Vec< + ITuple< + [ + Compact, + Vec, Compact]>>, + Compact, + ] + > + >; + } + + /** @name PalletElectionProviderMultiPhaseSolutionOrSnapshotSize (320) */ + interface PalletElectionProviderMultiPhaseSolutionOrSnapshotSize + extends Struct { readonly voters: Compact; readonly targets: Compact; } - /** @name SpNposElectionsSupport (312) */ + /** @name SpNposElectionsSupport (324) */ interface SpNposElectionsSupport extends Struct { readonly total: u128; readonly voters: Vec>; } - /** @name PalletStakingPalletCall (313) */ + /** @name PalletStakingPalletCall (325) */ interface PalletStakingPalletCall extends Enum { readonly isBond: boolean; readonly asBond: { @@ -3312,7 +4100,36 @@ declare module '@polkadot/types/lookup' { readonly asDeprecateControllerBatch: { readonly controllers: Vec; } & Struct; - readonly type: 'Bond' | 'BondExtra' | 'Unbond' | 'WithdrawUnbonded' | 'Validate' | 'Nominate' | 'Chill' | 'SetPayee' | 'SetController' | 'SetValidatorCount' | 'IncreaseValidatorCount' | 'ScaleValidatorCount' | 'ForceNoEras' | 'ForceNewEra' | 'SetInvulnerables' | 'ForceUnstake' | 'ForceNewEraAlways' | 'CancelDeferredSlash' | 'PayoutStakers' | 'Rebond' | 'ReapStash' | 'Kick' | 'SetStakingConfigs' | 'ChillOther' | 'ForceApplyMinCommission' | 'SetMinCommission' | 'PayoutStakersByPage' | 'UpdatePayee' | 'DeprecateControllerBatch'; + readonly type: + | "Bond" + | "BondExtra" + | "Unbond" + | "WithdrawUnbonded" + | "Validate" + | "Nominate" + | "Chill" + | "SetPayee" + | "SetController" + | "SetValidatorCount" + | "IncreaseValidatorCount" + | "ScaleValidatorCount" + | "ForceNoEras" + | "ForceNewEra" + | "SetInvulnerables" + | "ForceUnstake" + | "ForceNewEraAlways" + | "CancelDeferredSlash" + | "PayoutStakers" + | "Rebond" + | "ReapStash" + | "Kick" + | "SetStakingConfigs" + | "ChillOther" + | "ForceApplyMinCommission" + | "SetMinCommission" + | "PayoutStakersByPage" + | "UpdatePayee" + | "DeprecateControllerBatch"; } /** @name PalletStakingPalletConfigOpU128 (316) */ @@ -3321,7 +4138,7 @@ declare module '@polkadot/types/lookup' { readonly isSet: boolean; readonly asSet: u128; readonly isRemove: boolean; - readonly type: 'Noop' | 'Set' | 'Remove'; + readonly type: "Noop" | "Set" | "Remove"; } /** @name PalletStakingPalletConfigOpU32 (317) */ @@ -3330,7 +4147,7 @@ declare module '@polkadot/types/lookup' { readonly isSet: boolean; readonly asSet: u32; readonly isRemove: boolean; - readonly type: 'Noop' | 'Set' | 'Remove'; + readonly type: "Noop" | "Set" | "Remove"; } /** @name PalletStakingPalletConfigOpPercent (318) */ @@ -3339,7 +4156,7 @@ declare module '@polkadot/types/lookup' { readonly isSet: boolean; readonly asSet: Percent; readonly isRemove: boolean; - readonly type: 'Noop' | 'Set' | 'Remove'; + readonly type: "Noop" | "Set" | "Remove"; } /** @name PalletStakingPalletConfigOpPerbill (319) */ @@ -3348,7 +4165,7 @@ declare module '@polkadot/types/lookup' { readonly isSet: boolean; readonly asSet: Perbill; readonly isRemove: boolean; - readonly type: 'Noop' | 'Set' | 'Remove'; + readonly type: "Noop" | "Set" | "Remove"; } /** @name PalletSessionCall (321) */ @@ -3359,7 +4176,7 @@ declare module '@polkadot/types/lookup' { readonly proof: Bytes; } & Struct; readonly isPurgeKeys: boolean; - readonly type: 'SetKeys' | 'PurgeKeys'; + readonly type: "SetKeys" | "PurgeKeys"; } /** @name TangleTestnetRuntimeOpaqueSessionKeys (322) */ @@ -3419,7 +4236,16 @@ declare module '@polkadot/types/lookup' { readonly asVoidSpend: { readonly index: u32; } & Struct; - readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'SpendLocal' | 'RemoveApproval' | 'Spend' | 'Payout' | 'CheckStatus' | 'VoidSpend'; + readonly type: + | "ProposeSpend" + | "RejectProposal" + | "ApproveProposal" + | "SpendLocal" + | "RemoveApproval" + | "Spend" + | "Payout" + | "CheckStatus" + | "VoidSpend"; } /** @name PalletBountiesCall (328) */ @@ -3465,7 +4291,16 @@ declare module '@polkadot/types/lookup' { readonly bountyId: Compact; readonly remark: Bytes; } & Struct; - readonly type: 'ProposeBounty' | 'ApproveBounty' | 'ProposeCurator' | 'UnassignCurator' | 'AcceptCurator' | 'AwardBounty' | 'ClaimBounty' | 'CloseBounty' | 'ExtendBountyExpiry'; + readonly type: + | "ProposeBounty" + | "ApproveBounty" + | "ProposeCurator" + | "UnassignCurator" + | "AcceptCurator" + | "AwardBounty" + | "ClaimBounty" + | "CloseBounty" + | "ExtendBountyExpiry"; } /** @name PalletChildBountiesCall (329) */ @@ -3509,7 +4344,14 @@ declare module '@polkadot/types/lookup' { readonly parentBountyId: Compact; readonly childBountyId: Compact; } & Struct; - readonly type: 'AddChildBounty' | 'ProposeCurator' | 'AcceptCurator' | 'UnassignCurator' | 'AwardChildBounty' | 'ClaimChildBounty' | 'CloseChildBounty'; + readonly type: + | "AddChildBounty" + | "ProposeCurator" + | "AcceptCurator" + | "UnassignCurator" + | "AwardChildBounty" + | "ClaimChildBounty" + | "CloseChildBounty"; } /** @name PalletBagsListCall (330) */ @@ -3527,7 +4369,7 @@ declare module '@polkadot/types/lookup' { readonly heavier: MultiAddress; readonly lighter: MultiAddress; } & Struct; - readonly type: 'Rebag' | 'PutInFrontOf' | 'PutInFrontOfOther'; + readonly type: "Rebag" | "PutInFrontOf" | "PutInFrontOfOther"; } /** @name PalletNominationPoolsCall (331) */ @@ -3648,7 +4490,30 @@ declare module '@polkadot/types/lookup' { readonly poolId: u32; readonly permission: Option; } & Struct; - readonly type: 'Join' | 'BondExtra' | 'ClaimPayout' | 'Unbond' | 'PoolWithdrawUnbonded' | 'WithdrawUnbonded' | 'Create' | 'CreateWithPoolId' | 'Nominate' | 'SetState' | 'SetMetadata' | 'SetConfigs' | 'UpdateRoles' | 'Chill' | 'BondExtraOther' | 'SetClaimPermission' | 'ClaimPayoutOther' | 'SetCommission' | 'SetCommissionMax' | 'SetCommissionChangeRate' | 'ClaimCommission' | 'AdjustPoolDeposit' | 'SetCommissionClaimPermission'; + readonly type: + | "Join" + | "BondExtra" + | "ClaimPayout" + | "Unbond" + | "PoolWithdrawUnbonded" + | "WithdrawUnbonded" + | "Create" + | "CreateWithPoolId" + | "Nominate" + | "SetState" + | "SetMetadata" + | "SetConfigs" + | "UpdateRoles" + | "Chill" + | "BondExtraOther" + | "SetClaimPermission" + | "ClaimPayoutOther" + | "SetCommission" + | "SetCommissionMax" + | "SetCommissionChangeRate" + | "ClaimCommission" + | "AdjustPoolDeposit" + | "SetCommissionClaimPermission"; } /** @name PalletNominationPoolsBondExtra (332) */ @@ -3656,7 +4521,7 @@ declare module '@polkadot/types/lookup' { readonly isFreeBalance: boolean; readonly asFreeBalance: u128; readonly isRewards: boolean; - readonly type: 'FreeBalance' | 'Rewards'; + readonly type: "FreeBalance" | "Rewards"; } /** @name PalletNominationPoolsConfigOpU128 (333) */ @@ -3665,7 +4530,7 @@ declare module '@polkadot/types/lookup' { readonly isSet: boolean; readonly asSet: u128; readonly isRemove: boolean; - readonly type: 'Noop' | 'Set' | 'Remove'; + readonly type: "Noop" | "Set" | "Remove"; } /** @name PalletNominationPoolsConfigOpU32 (334) */ @@ -3674,7 +4539,7 @@ declare module '@polkadot/types/lookup' { readonly isSet: boolean; readonly asSet: u32; readonly isRemove: boolean; - readonly type: 'Noop' | 'Set' | 'Remove'; + readonly type: "Noop" | "Set" | "Remove"; } /** @name PalletNominationPoolsConfigOpPerbill (335) */ @@ -3683,7 +4548,7 @@ declare module '@polkadot/types/lookup' { readonly isSet: boolean; readonly asSet: Perbill; readonly isRemove: boolean; - readonly type: 'Noop' | 'Set' | 'Remove'; + readonly type: "Noop" | "Set" | "Remove"; } /** @name PalletNominationPoolsConfigOpAccountId32 (336) */ @@ -3692,7 +4557,7 @@ declare module '@polkadot/types/lookup' { readonly isSet: boolean; readonly asSet: AccountId32; readonly isRemove: boolean; - readonly type: 'Noop' | 'Set' | 'Remove'; + readonly type: "Noop" | "Set" | "Remove"; } /** @name PalletNominationPoolsClaimPermission (337) */ @@ -3701,7 +4566,11 @@ declare module '@polkadot/types/lookup' { readonly isPermissionlessCompound: boolean; readonly isPermissionlessWithdraw: boolean; readonly isPermissionlessAll: boolean; - readonly type: 'Permissioned' | 'PermissionlessCompound' | 'PermissionlessWithdraw' | 'PermissionlessAll'; + readonly type: + | "Permissioned" + | "PermissionlessCompound" + | "PermissionlessWithdraw" + | "PermissionlessAll"; } /** @name PalletSchedulerCall (338) */ @@ -3745,7 +4614,13 @@ declare module '@polkadot/types/lookup' { readonly priority: u8; readonly call: Call; } & Struct; - readonly type: 'Schedule' | 'Cancel' | 'ScheduleNamed' | 'CancelNamed' | 'ScheduleAfter' | 'ScheduleNamedAfter'; + readonly type: + | "Schedule" + | "Cancel" + | "ScheduleNamed" + | "CancelNamed" + | "ScheduleAfter" + | "ScheduleNamedAfter"; } /** @name PalletPreimageCall (340) */ @@ -3770,7 +4645,12 @@ declare module '@polkadot/types/lookup' { readonly asEnsureUpdated: { readonly hashes: Vec; } & Struct; - readonly type: 'NotePreimage' | 'UnnotePreimage' | 'RequestPreimage' | 'UnrequestPreimage' | 'EnsureUpdated'; + readonly type: + | "NotePreimage" + | "UnnotePreimage" + | "RequestPreimage" + | "UnrequestPreimage" + | "EnsureUpdated"; } /** @name PalletTxPauseCall (341) */ @@ -3783,7 +4663,7 @@ declare module '@polkadot/types/lookup' { readonly asUnpause: { readonly ident: ITuple<[Bytes, Bytes]>; } & Struct; - readonly type: 'Pause' | 'Unpause'; + readonly type: "Pause" | "Unpause"; } /** @name PalletImOnlineCall (342) */ @@ -3793,7 +4673,7 @@ declare module '@polkadot/types/lookup' { readonly heartbeat: PalletImOnlineHeartbeat; readonly signature: PalletImOnlineSr25519AppSr25519Signature; } & Struct; - readonly type: 'Heartbeat'; + readonly type: "Heartbeat"; } /** @name PalletImOnlineHeartbeat (343) */ @@ -3907,7 +4787,29 @@ declare module '@polkadot/types/lookup' { readonly asRemoveDanglingUsername: { readonly username: Bytes; } & Struct; - readonly type: 'AddRegistrar' | 'SetIdentity' | 'SetSubs' | 'ClearIdentity' | 'RequestJudgement' | 'CancelRequest' | 'SetFee' | 'SetAccountId' | 'SetFields' | 'ProvideJudgement' | 'KillIdentity' | 'AddSub' | 'RenameSub' | 'RemoveSub' | 'QuitSub' | 'AddUsernameAuthority' | 'RemoveUsernameAuthority' | 'SetUsernameFor' | 'AcceptUsername' | 'RemoveExpiredApproval' | 'SetPrimaryUsername' | 'RemoveDanglingUsername'; + readonly type: + | "AddRegistrar" + | "SetIdentity" + | "SetSubs" + | "ClearIdentity" + | "RequestJudgement" + | "CancelRequest" + | "SetFee" + | "SetAccountId" + | "SetFields" + | "ProvideJudgement" + | "KillIdentity" + | "AddSub" + | "RenameSub" + | "RemoveSub" + | "QuitSub" + | "AddUsernameAuthority" + | "RemoveUsernameAuthority" + | "SetUsernameFor" + | "AcceptUsername" + | "RemoveExpiredApproval" + | "SetPrimaryUsername" + | "RemoveDanglingUsername"; } /** @name PalletIdentityLegacyIdentityInfo (347) */ @@ -3933,7 +4835,14 @@ declare module '@polkadot/types/lookup' { readonly isOutOfDate: boolean; readonly isLowQuality: boolean; readonly isErroneous: boolean; - readonly type: 'Unknown' | 'FeePaid' | 'Reasonable' | 'KnownGood' | 'OutOfDate' | 'LowQuality' | 'Erroneous'; + readonly type: + | "Unknown" + | "FeePaid" + | "Reasonable" + | "KnownGood" + | "OutOfDate" + | "LowQuality" + | "Erroneous"; } /** @name SpRuntimeMultiSignature (385) */ @@ -3944,7 +4853,7 @@ declare module '@polkadot/types/lookup' { readonly asSr25519: SpCoreSr25519Signature; readonly isEcdsa: boolean; readonly asEcdsa: SpCoreEcdsaSignature; - readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; + readonly type: "Ed25519" | "Sr25519" | "Ecdsa"; } /** @name SpCoreEcdsaSignature (386) */ @@ -3979,7 +4888,13 @@ declare module '@polkadot/types/lookup' { readonly call: Call; readonly weight: SpWeightsWeightV2Weight; } & Struct; - readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight'; + readonly type: + | "Batch" + | "AsDerivative" + | "BatchAll" + | "DispatchAs" + | "ForceBatch" + | "WithWeight"; } /** @name TangleTestnetRuntimeOriginCaller (390) */ @@ -3991,7 +4906,7 @@ declare module '@polkadot/types/lookup' { readonly asCouncil: PalletCollectiveRawOrigin; readonly isEthereum: boolean; readonly asEthereum: PalletEthereumRawOrigin; - readonly type: 'System' | 'Void' | 'Council' | 'Ethereum'; + readonly type: "System" | "Void" | "Council" | "Ethereum"; } /** @name FrameSupportDispatchRawOrigin (391) */ @@ -4000,7 +4915,7 @@ declare module '@polkadot/types/lookup' { readonly isSigned: boolean; readonly asSigned: AccountId32; readonly isNone: boolean; - readonly type: 'Root' | 'Signed' | 'None'; + readonly type: "Root" | "Signed" | "None"; } /** @name PalletCollectiveRawOrigin (392) */ @@ -4010,14 +4925,14 @@ declare module '@polkadot/types/lookup' { readonly isMember: boolean; readonly asMember: AccountId32; readonly isPhantom: boolean; - readonly type: 'Members' | 'Member' | 'Phantom'; + readonly type: "Members" | "Member" | "Phantom"; } /** @name PalletEthereumRawOrigin (393) */ interface PalletEthereumRawOrigin extends Enum { readonly isEthereumTransaction: boolean; readonly asEthereumTransaction: H160; - readonly type: 'EthereumTransaction'; + readonly type: "EthereumTransaction"; } /** @name PalletMultisigCall (394) */ @@ -4050,7 +4965,11 @@ declare module '@polkadot/types/lookup' { readonly timepoint: PalletMultisigTimepoint; readonly callHash: U8aFixed; } & Struct; - readonly type: 'AsMultiThreshold1' | 'AsMulti' | 'ApproveAsMulti' | 'CancelAsMulti'; + readonly type: + | "AsMultiThreshold1" + | "AsMulti" + | "ApproveAsMulti" + | "CancelAsMulti"; } /** @name PalletEthereumCall (396) */ @@ -4059,7 +4978,7 @@ declare module '@polkadot/types/lookup' { readonly asTransact: { readonly transaction: EthereumTransactionTransactionV2; } & Struct; - readonly type: 'Transact'; + readonly type: "Transact"; } /** @name EthereumTransactionTransactionV2 (397) */ @@ -4070,7 +4989,7 @@ declare module '@polkadot/types/lookup' { readonly asEip2930: EthereumTransactionEip2930Transaction; readonly isEip1559: boolean; readonly asEip1559: EthereumTransactionEip1559Transaction; - readonly type: 'Legacy' | 'Eip2930' | 'Eip1559'; + readonly type: "Legacy" | "Eip2930" | "Eip1559"; } /** @name EthereumTransactionLegacyTransaction (398) */ @@ -4089,7 +5008,7 @@ declare module '@polkadot/types/lookup' { readonly isCall: boolean; readonly asCall: H160; readonly isCreate: boolean; - readonly type: 'Call' | 'Create'; + readonly type: "Call" | "Create"; } /** @name EthereumTransactionTransactionSignature (400) */ @@ -4178,7 +5097,7 @@ declare module '@polkadot/types/lookup' { readonly nonce: Option; readonly accessList: Vec]>>; } & Struct; - readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2'; + readonly type: "Withdraw" | "Call" | "Create" | "Create2"; } /** @name PalletDynamicFeeCall (410) */ @@ -4187,7 +5106,7 @@ declare module '@polkadot/types/lookup' { readonly asNoteMinGasPriceTarget: { readonly target: U256; } & Struct; - readonly type: 'NoteMinGasPriceTarget'; + readonly type: "NoteMinGasPriceTarget"; } /** @name PalletBaseFeeCall (411) */ @@ -4200,7 +5119,7 @@ declare module '@polkadot/types/lookup' { readonly asSetElasticity: { readonly elasticity: Permill; } & Struct; - readonly type: 'SetBaseFeePerGas' | 'SetElasticity'; + readonly type: "SetBaseFeePerGas" | "SetElasticity"; } /** @name PalletHotfixSufficientsCall (412) */ @@ -4209,7 +5128,7 @@ declare module '@polkadot/types/lookup' { readonly asHotfixIncAccountSufficients: { readonly addresses: Vec; } & Struct; - readonly type: 'HotfixIncAccountSufficients'; + readonly type: "HotfixIncAccountSufficients"; } /** @name PalletAirdropClaimsCall (414) */ @@ -4248,7 +5167,13 @@ declare module '@polkadot/types/lookup' { readonly asClaimSigned: { readonly dest: Option; } & Struct; - readonly type: 'Claim' | 'MintClaim' | 'ClaimAttest' | 'MoveClaim' | 'ForceSetExpiryConfig' | 'ClaimSigned'; + readonly type: + | "Claim" + | "MintClaim" + | "ClaimAttest" + | "MoveClaim" + | "ForceSetExpiryConfig" + | "ClaimSigned"; } /** @name PalletAirdropClaimsUtilsMultiAddressSignature (416) */ @@ -4257,7 +5182,7 @@ declare module '@polkadot/types/lookup' { readonly asEvm: PalletAirdropClaimsUtilsEthereumAddressEcdsaSignature; readonly isNative: boolean; readonly asNative: PalletAirdropClaimsUtilsSr25519Signature; - readonly type: 'Evm' | 'Native'; + readonly type: "Evm" | "Native"; } /** @name PalletAirdropClaimsUtilsEthereumAddressEcdsaSignature (417) */ @@ -4270,7 +5195,7 @@ declare module '@polkadot/types/lookup' { interface PalletAirdropClaimsStatementKind extends Enum { readonly isRegular: boolean; readonly isSafe: boolean; - readonly type: 'Regular' | 'Safe'; + readonly type: "Regular" | "Safe"; } /** @name PalletRolesCall (425) */ @@ -4300,7 +5225,15 @@ declare module '@polkadot/types/lookup' { readonly asSetMinRestakingBond: { readonly minRestakingBond: u128; } & Struct; - readonly type: 'CreateProfile' | 'UpdateProfile' | 'DeleteProfile' | 'Chill' | 'UnbondFunds' | 'WithdrawUnbonded' | 'PayoutStakers' | 'SetMinRestakingBond'; + readonly type: + | "CreateProfile" + | "UpdateProfile" + | "DeleteProfile" + | "Chill" + | "UnbondFunds" + | "WithdrawUnbonded" + | "PayoutStakers" + | "SetMinRestakingBond"; } /** @name PalletRolesProfile (426) */ @@ -4309,7 +5242,7 @@ declare module '@polkadot/types/lookup' { readonly asIndependent: PalletRolesProfileIndependentRestakeProfile; readonly isShared: boolean; readonly asShared: PalletRolesProfileSharedRestakeProfile; - readonly type: 'Independent' | 'Shared'; + readonly type: "Independent" | "Shared"; } /** @name PalletRolesProfileIndependentRestakeProfile (427) */ @@ -4323,13 +5256,13 @@ declare module '@polkadot/types/lookup' { readonly amount: Option; } - /** @name PalletRolesProfileSharedRestakeProfile (432) */ + /** @name PalletRolesProfileSharedRestakeProfile (442) */ interface PalletRolesProfileSharedRestakeProfile extends Struct { readonly records: Vec; readonly amount: u128; } - /** @name PalletJobsModuleCall (433) */ + /** @name PalletJobsModuleCall (443) */ interface PalletJobsModuleCall extends Enum { readonly isSubmitJob: boolean; readonly asSubmitJob: { @@ -4370,10 +5303,18 @@ declare module '@polkadot/types/lookup' { readonly jobId: u64; readonly extendBy: u64; } & Struct; - readonly type: 'SubmitJob' | 'SubmitJobResult' | 'WithdrawRewards' | 'ReportInactiveValidator' | 'SetPermittedCaller' | 'SetTimeFee' | 'SubmitMisbehavior' | 'ExtendJobResultTtl'; + readonly type: + | "SubmitJob" + | "SubmitJobResult" + | "WithdrawRewards" + | "ReportInactiveValidator" + | "SetPermittedCaller" + | "SetTimeFee" + | "SubmitMisbehavior" + | "ExtendJobResultTtl"; } - /** @name TanglePrimitivesJobsJobResult (434) */ + /** @name TanglePrimitivesJobsJobResult (444) */ interface TanglePrimitivesJobsJobResult extends Enum { readonly isDkgPhaseOne: boolean; readonly asDkgPhaseOne: TanglePrimitivesJobsTssDkgtssKeySubmissionResult; @@ -4387,22 +5328,28 @@ declare module '@polkadot/types/lookup' { readonly asZkSaaSPhaseOne: TanglePrimitivesJobsZksaasZkSaaSCircuitResult; readonly isZkSaaSPhaseTwo: boolean; readonly asZkSaaSPhaseTwo: TanglePrimitivesJobsZksaasZkSaaSProofResult; - readonly type: 'DkgPhaseOne' | 'DkgPhaseTwo' | 'DkgPhaseThree' | 'DkgPhaseFour' | 'ZkSaaSPhaseOne' | 'ZkSaaSPhaseTwo'; + readonly type: + | "DkgPhaseOne" + | "DkgPhaseTwo" + | "DkgPhaseThree" + | "DkgPhaseFour" + | "ZkSaaSPhaseOne" + | "ZkSaaSPhaseTwo"; } - /** @name TangleTestnetRuntimeMaxKeyLen (435) */ + /** @name TangleTestnetRuntimeMaxKeyLen (445) */ type TangleTestnetRuntimeMaxKeyLen = Null; - /** @name TangleTestnetRuntimeMaxSignatureLen (436) */ + /** @name TangleTestnetRuntimeMaxSignatureLen (446) */ type TangleTestnetRuntimeMaxSignatureLen = Null; - /** @name TangleTestnetRuntimeMaxDataLen (437) */ + /** @name TangleTestnetRuntimeMaxDataLen (447) */ type TangleTestnetRuntimeMaxDataLen = Null; - /** @name TangleTestnetRuntimeMaxProofLen (438) */ + /** @name TangleTestnetRuntimeMaxProofLen (448) */ type TangleTestnetRuntimeMaxProofLen = Null; - /** @name TanglePrimitivesJobsTssDkgtssKeySubmissionResult (439) */ + /** @name TanglePrimitivesJobsTssDkgtssKeySubmissionResult (449) */ interface TanglePrimitivesJobsTssDkgtssKeySubmissionResult extends Struct { readonly signatureScheme: TanglePrimitivesJobsTssDigitalSignatureScheme; readonly key: Bytes; @@ -4412,7 +5359,7 @@ declare module '@polkadot/types/lookup' { readonly threshold: u8; } - /** @name TanglePrimitivesJobsTssDigitalSignatureScheme (440) */ + /** @name TanglePrimitivesJobsTssDigitalSignatureScheme (450) */ interface TanglePrimitivesJobsTssDigitalSignatureScheme extends Enum { readonly isEcdsaSecp256k1: boolean; readonly isEcdsaSecp256r1: boolean; @@ -4426,10 +5373,22 @@ declare module '@polkadot/types/lookup' { readonly isSchnorrEd448: boolean; readonly isSchnorrTaproot: boolean; readonly isBls381: boolean; - readonly type: 'EcdsaSecp256k1' | 'EcdsaSecp256r1' | 'EcdsaStark' | 'SchnorrP256' | 'SchnorrP384' | 'SchnorrSecp256k1' | 'SchnorrSr25519' | 'SchnorrRistretto255' | 'SchnorrEd25519' | 'SchnorrEd448' | 'SchnorrTaproot' | 'Bls381'; - } - - /** @name TanglePrimitivesJobsTssDkgtssSignatureResult (447) */ + readonly type: + | "EcdsaSecp256k1" + | "EcdsaSecp256r1" + | "EcdsaStark" + | "SchnorrP256" + | "SchnorrP384" + | "SchnorrSecp256k1" + | "SchnorrSr25519" + | "SchnorrRistretto255" + | "SchnorrEd25519" + | "SchnorrEd448" + | "SchnorrTaproot" + | "Bls381"; + } + + /** @name TanglePrimitivesJobsTssDkgtssSignatureResult (457) */ interface TanglePrimitivesJobsTssDkgtssSignatureResult extends Struct { readonly signatureScheme: TanglePrimitivesJobsTssDigitalSignatureScheme; readonly data: Bytes; @@ -4439,12 +5398,12 @@ declare module '@polkadot/types/lookup' { readonly chainCode: Option; } - /** @name TanglePrimitivesJobsTssDkgtssKeyRefreshResult (449) */ + /** @name TanglePrimitivesJobsTssDkgtssKeyRefreshResult (459) */ interface TanglePrimitivesJobsTssDkgtssKeyRefreshResult extends Struct { readonly signatureScheme: TanglePrimitivesJobsTssDigitalSignatureScheme; } - /** @name TanglePrimitivesJobsTssDkgtssKeyRotationResult (450) */ + /** @name TanglePrimitivesJobsTssDkgtssKeyRotationResult (460) */ interface TanglePrimitivesJobsTssDkgtssKeyRotationResult extends Struct { readonly phaseOneId: u64; readonly newPhaseOneId: u64; @@ -4456,41 +5415,45 @@ declare module '@polkadot/types/lookup' { readonly chainCode: Option; } - /** @name TanglePrimitivesJobsZksaasZkSaaSCircuitResult (451) */ + /** @name TanglePrimitivesJobsZksaasZkSaaSCircuitResult (461) */ interface TanglePrimitivesJobsZksaasZkSaaSCircuitResult extends Struct { readonly jobId: u64; readonly participants: Vec; } - /** @name TanglePrimitivesJobsZksaasZkSaaSProofResult (454) */ + /** @name TanglePrimitivesJobsZksaasZkSaaSProofResult (464) */ interface TanglePrimitivesJobsZksaasZkSaaSProofResult extends Enum { readonly isArkworks: boolean; readonly asArkworks: TanglePrimitivesJobsZksaasArkworksProofResult; readonly isCircom: boolean; readonly asCircom: TanglePrimitivesJobsZksaasCircomProofResult; - readonly type: 'Arkworks' | 'Circom'; + readonly type: "Arkworks" | "Circom"; } - /** @name TanglePrimitivesJobsZksaasArkworksProofResult (455) */ + /** @name TanglePrimitivesJobsZksaasArkworksProofResult (465) */ interface TanglePrimitivesJobsZksaasArkworksProofResult extends Struct { readonly proof: Bytes; } - /** @name TanglePrimitivesJobsZksaasCircomProofResult (457) */ + /** @name TanglePrimitivesJobsZksaasCircomProofResult (467) */ interface TanglePrimitivesJobsZksaasCircomProofResult extends Struct { readonly proof: Bytes; } - /** @name TanglePrimitivesJobsValidatorOffenceType (458) */ + /** @name TanglePrimitivesJobsValidatorOffenceType (468) */ interface TanglePrimitivesJobsValidatorOffenceType extends Enum { readonly isInactivity: boolean; readonly isInvalidSignatureSubmitted: boolean; readonly isRejectedValidAction: boolean; readonly isApprovedInvalidAction: boolean; - readonly type: 'Inactivity' | 'InvalidSignatureSubmitted' | 'RejectedValidAction' | 'ApprovedInvalidAction'; + readonly type: + | "Inactivity" + | "InvalidSignatureSubmitted" + | "RejectedValidAction" + | "ApprovedInvalidAction"; } - /** @name TanglePrimitivesMisbehaviorMisbehaviorSubmission (459) */ + /** @name TanglePrimitivesMisbehaviorMisbehaviorSubmission (469) */ interface TanglePrimitivesMisbehaviorMisbehaviorSubmission extends Struct { readonly roleType: TanglePrimitivesRolesRoleType; readonly offender: U8aFixed; @@ -4498,25 +5461,26 @@ declare module '@polkadot/types/lookup' { readonly justification: TanglePrimitivesMisbehaviorMisbehaviorJustification; } - /** @name TanglePrimitivesMisbehaviorMisbehaviorJustification (460) */ + /** @name TanglePrimitivesMisbehaviorMisbehaviorJustification (470) */ interface TanglePrimitivesMisbehaviorMisbehaviorJustification extends Enum { readonly isDkgtss: boolean; readonly asDkgtss: TanglePrimitivesMisbehaviorDkgtssJustification; readonly isZkSaaS: boolean; - readonly type: 'Dkgtss' | 'ZkSaaS'; + readonly type: "Dkgtss" | "ZkSaaS"; } - /** @name TanglePrimitivesMisbehaviorDkgtssJustification (461) */ + /** @name TanglePrimitivesMisbehaviorDkgtssJustification (471) */ interface TanglePrimitivesMisbehaviorDkgtssJustification extends Enum { readonly isDfnsCGGMP21: boolean; readonly asDfnsCGGMP21: TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification; readonly isZCashFrost: boolean; readonly asZCashFrost: TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification; - readonly type: 'DfnsCGGMP21' | 'ZCashFrost'; + readonly type: "DfnsCGGMP21" | "ZCashFrost"; } - /** @name TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification (462) */ - interface TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification extends Enum { + /** @name TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification (472) */ + interface TanglePrimitivesMisbehaviorDfnsCggmp21DfnsCGGMP21Justification + extends Enum { readonly isKeygen: boolean; readonly asKeygen: { readonly participants: Vec; @@ -4535,10 +5499,10 @@ declare module '@polkadot/types/lookup' { readonly t: u16; readonly reason: TanglePrimitivesMisbehaviorDfnsCggmp21SigningAborted; } & Struct; - readonly type: 'Keygen' | 'KeyRefresh' | 'Signing'; + readonly type: "Keygen" | "KeyRefresh" | "Signing"; } - /** @name TanglePrimitivesMisbehaviorDfnsCggmp21KeygenAborted (464) */ + /** @name TanglePrimitivesMisbehaviorDfnsCggmp21KeygenAborted (474) */ interface TanglePrimitivesMisbehaviorDfnsCggmp21KeygenAborted extends Enum { readonly isInvalidDecommitment: boolean; readonly asInvalidDecommitment: { @@ -4559,18 +5523,23 @@ declare module '@polkadot/types/lookup' { readonly asInvalidDataSize: { readonly round2a: TanglePrimitivesMisbehaviorSignedRoundMessage; } & Struct; - readonly type: 'InvalidDecommitment' | 'InvalidSchnorrProof' | 'FeldmanVerificationFailed' | 'InvalidDataSize'; + readonly type: + | "InvalidDecommitment" + | "InvalidSchnorrProof" + | "FeldmanVerificationFailed" + | "InvalidDataSize"; } - /** @name TanglePrimitivesMisbehaviorSignedRoundMessage (465) */ + /** @name TanglePrimitivesMisbehaviorSignedRoundMessage (475) */ interface TanglePrimitivesMisbehaviorSignedRoundMessage extends Struct { readonly sender: u16; readonly message: Bytes; readonly signature: Bytes; } - /** @name TanglePrimitivesMisbehaviorDfnsCggmp21KeyRefreshAborted (467) */ - interface TanglePrimitivesMisbehaviorDfnsCggmp21KeyRefreshAborted extends Enum { + /** @name TanglePrimitivesMisbehaviorDfnsCggmp21KeyRefreshAborted (477) */ + interface TanglePrimitivesMisbehaviorDfnsCggmp21KeyRefreshAborted + extends Enum { readonly isInvalidDecommitment: boolean; readonly asInvalidDecommitment: { readonly round1: TanglePrimitivesMisbehaviorSignedRoundMessage; @@ -4592,11 +5561,21 @@ declare module '@polkadot/types/lookup' { readonly isInvalidXShare: boolean; readonly isInvalidDataSize: boolean; readonly isPaillierDec: boolean; - readonly type: 'InvalidDecommitment' | 'InvalidSchnorrProof' | 'InvalidModProof' | 'InvalidFacProof' | 'InvalidRingPedersenParameters' | 'InvalidX' | 'InvalidXShare' | 'InvalidDataSize' | 'PaillierDec'; - } - - /** @name TanglePrimitivesMisbehaviorDfnsCggmp21InvalidProofReason (468) */ - interface TanglePrimitivesMisbehaviorDfnsCggmp21InvalidProofReason extends Enum { + readonly type: + | "InvalidDecommitment" + | "InvalidSchnorrProof" + | "InvalidModProof" + | "InvalidFacProof" + | "InvalidRingPedersenParameters" + | "InvalidX" + | "InvalidXShare" + | "InvalidDataSize" + | "PaillierDec"; + } + + /** @name TanglePrimitivesMisbehaviorDfnsCggmp21InvalidProofReason (478) */ + interface TanglePrimitivesMisbehaviorDfnsCggmp21InvalidProofReason + extends Enum { readonly isEqualityCheck: boolean; readonly asEqualityCheck: u8; readonly isRangeCheck: boolean; @@ -4611,20 +5590,35 @@ declare module '@polkadot/types/lookup' { readonly asIncorrectNthRoot: u8; readonly isIncorrectFourthRoot: boolean; readonly asIncorrectFourthRoot: u8; - readonly type: 'EqualityCheck' | 'RangeCheck' | 'Encryption' | 'PaillierEnc' | 'PaillierOp' | 'ModPow' | 'ModulusIsPrime' | 'ModulusIsEven' | 'IncorrectNthRoot' | 'IncorrectFourthRoot'; - } - - /** @name TanglePrimitivesMisbehaviorDfnsCggmp21SigningAborted (469) */ + readonly type: + | "EqualityCheck" + | "RangeCheck" + | "Encryption" + | "PaillierEnc" + | "PaillierOp" + | "ModPow" + | "ModulusIsPrime" + | "ModulusIsEven" + | "IncorrectNthRoot" + | "IncorrectFourthRoot"; + } + + /** @name TanglePrimitivesMisbehaviorDfnsCggmp21SigningAborted (479) */ interface TanglePrimitivesMisbehaviorDfnsCggmp21SigningAborted extends Enum { readonly isEncProofOfK: boolean; readonly isInvalidPsi: boolean; readonly isInvalidPsiPrimePrime: boolean; readonly isMismatchedDelta: boolean; - readonly type: 'EncProofOfK' | 'InvalidPsi' | 'InvalidPsiPrimePrime' | 'MismatchedDelta'; + readonly type: + | "EncProofOfK" + | "InvalidPsi" + | "InvalidPsiPrimePrime" + | "MismatchedDelta"; } - /** @name TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification (470) */ - interface TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification extends Enum { + /** @name TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification (480) */ + interface TanglePrimitivesMisbehaviorZcashFrostZCashFrostJustification + extends Enum { readonly isKeygen: boolean; readonly asKeygen: { readonly participants: Vec; @@ -4637,10 +5631,10 @@ declare module '@polkadot/types/lookup' { readonly t: u16; readonly reason: TanglePrimitivesMisbehaviorZcashFrostSigningAborted; } & Struct; - readonly type: 'Keygen' | 'Signing'; + readonly type: "Keygen" | "Signing"; } - /** @name TanglePrimitivesMisbehaviorZcashFrostKeygenAborted (471) */ + /** @name TanglePrimitivesMisbehaviorZcashFrostKeygenAborted (481) */ interface TanglePrimitivesMisbehaviorZcashFrostKeygenAborted extends Enum { readonly isInvalidProofOfKnowledge: boolean; readonly asInvalidProofOfKnowledge: { @@ -4651,41 +5645,316 @@ declare module '@polkadot/types/lookup' { readonly round1: TanglePrimitivesMisbehaviorSignedRoundMessage; readonly round2: TanglePrimitivesMisbehaviorSignedRoundMessage; } & Struct; - readonly type: 'InvalidProofOfKnowledge' | 'InvalidSecretShare'; + readonly type: "InvalidProofOfKnowledge" | "InvalidSecretShare"; } - /** @name TanglePrimitivesMisbehaviorZcashFrostSigningAborted (472) */ + /** @name TanglePrimitivesMisbehaviorZcashFrostSigningAborted (482) */ interface TanglePrimitivesMisbehaviorZcashFrostSigningAborted extends Enum { readonly isInvalidSignatureShare: boolean; readonly asInvalidSignatureShare: { readonly round1: Vec; readonly round2: Vec; } & Struct; - readonly type: 'InvalidSignatureShare'; + readonly type: "InvalidSignatureShare"; } - /** @name TanglePrimitivesMisbehaviorZkSaaSJustification (473) */ + /** @name TanglePrimitivesMisbehaviorZkSaaSJustification (483) */ type TanglePrimitivesMisbehaviorZkSaaSJustification = Null; - /** @name PalletDkgCall (474) */ + /** @name PalletServicesModuleCall (484) */ + interface PalletServicesModuleCall extends Enum { + readonly isCreateBlueprint: boolean; + readonly asCreateBlueprint: { + readonly blueprint: TanglePrimitivesJobsV2ServiceBlueprint; + } & Struct; + readonly isRegister: boolean; + readonly asRegister: { + readonly blueprintId: Compact; + readonly preferences: TanglePrimitivesJobsV2OperatorPreferences; + readonly registrationArgs: Vec; + } & Struct; + readonly isUnregister: boolean; + readonly asUnregister: { + readonly blueprintId: Compact; + } & Struct; + readonly isUpdateApprovalPreference: boolean; + readonly asUpdateApprovalPreference: { + readonly blueprintId: Compact; + readonly approvalPreference: TanglePrimitivesJobsV2ApprovalPrefrence; + } & Struct; + readonly isRequest: boolean; + readonly asRequest: { + readonly blueprintId: Compact; + readonly permittedCallers: Vec; + readonly serviceProviders: Vec; + readonly ttl: Compact; + readonly requestArgs: Vec; + } & Struct; + readonly isApprove: boolean; + readonly asApprove: { + readonly requestId: Compact; + } & Struct; + readonly isReject: boolean; + readonly asReject: { + readonly requestId: Compact; + } & Struct; + readonly isTerminate: boolean; + readonly asTerminate: { + readonly serviceId: Compact; + } & Struct; + readonly isCall: boolean; + readonly asCall: { + readonly serviceId: Compact; + readonly job: Compact; + readonly args: Vec; + } & Struct; + readonly isSubmitResult: boolean; + readonly asSubmitResult: { + readonly serviceId: Compact; + readonly callId: Compact; + readonly result: Vec; + } & Struct; + readonly type: + | "CreateBlueprint" + | "Register" + | "Unregister" + | "UpdateApprovalPreference" + | "Request" + | "Approve" + | "Reject" + | "Terminate" + | "Call" + | "SubmitResult"; + } + + /** @name TanglePrimitivesJobsV2ServiceBlueprint (485) */ + interface TanglePrimitivesJobsV2ServiceBlueprint extends Struct { + readonly metadata: TanglePrimitivesJobsV2ServiceMetadata; + readonly jobs: Vec; + readonly registrationHook: TanglePrimitivesJobsV2ServiceRegistrationHook; + readonly registrationParams: Vec; + readonly requestHook: TanglePrimitivesJobsV2ServiceRequestHook; + readonly requestParams: Vec; + readonly gadget: TanglePrimitivesJobsV2Gadget; + } + + /** @name TanglePrimitivesJobsV2ServiceMetadata (486) */ + interface TanglePrimitivesJobsV2ServiceMetadata extends Struct { + readonly name: Bytes; + readonly description: Option; + readonly author: Option; + readonly category: Option; + readonly codeRepository: Option; + readonly logo: Option; + readonly website: Option; + readonly license: Option; + } + + /** @name TanglePrimitivesJobsV2JobDefinition (491) */ + interface TanglePrimitivesJobsV2JobDefinition extends Struct { + readonly metadata: TanglePrimitivesJobsV2JobMetadata; + readonly params: Vec; + readonly result: Vec; + readonly verifier: TanglePrimitivesJobsV2JobResultVerifier; + } + + /** @name TanglePrimitivesJobsV2JobMetadata (492) */ + interface TanglePrimitivesJobsV2JobMetadata extends Struct { + readonly name: Bytes; + readonly description: Option; + } + + /** @name TanglePrimitivesJobsV2FieldFieldType (494) */ + interface TanglePrimitivesJobsV2FieldFieldType extends Enum { + readonly isVoid: boolean; + readonly isBool: boolean; + readonly isUint8: boolean; + readonly isInt8: boolean; + readonly isUint16: boolean; + readonly isInt16: boolean; + readonly isUint32: boolean; + readonly isInt32: boolean; + readonly isUint64: boolean; + readonly isInt64: boolean; + readonly isString: boolean; + readonly isBytes: boolean; + readonly isOptional: boolean; + readonly asOptional: TanglePrimitivesJobsV2FieldFieldType; + readonly isArray: boolean; + readonly asArray: ITuple<[u64, TanglePrimitivesJobsV2FieldFieldType]>; + readonly isList: boolean; + readonly asList: TanglePrimitivesJobsV2FieldFieldType; + readonly isAccountId: boolean; + readonly type: + | "Void" + | "Bool" + | "Uint8" + | "Int8" + | "Uint16" + | "Int16" + | "Uint32" + | "Int32" + | "Uint64" + | "Int64" + | "String" + | "Bytes" + | "Optional" + | "Array" + | "List" + | "AccountId"; + } + + /** @name TanglePrimitivesJobsV2JobResultVerifier (496) */ + interface TanglePrimitivesJobsV2JobResultVerifier extends Enum { + readonly isNone: boolean; + readonly isEvm: boolean; + readonly asEvm: H160; + readonly type: "None" | "Evm"; + } + + /** @name TanglePrimitivesJobsV2ServiceRegistrationHook (498) */ + interface TanglePrimitivesJobsV2ServiceRegistrationHook extends Enum { + readonly isNone: boolean; + readonly isEvm: boolean; + readonly asEvm: H160; + readonly type: "None" | "Evm"; + } + + /** @name TanglePrimitivesJobsV2ServiceRequestHook (499) */ + interface TanglePrimitivesJobsV2ServiceRequestHook extends Enum { + readonly isNone: boolean; + readonly isEvm: boolean; + readonly asEvm: H160; + readonly type: "None" | "Evm"; + } + + /** @name TanglePrimitivesJobsV2Gadget (500) */ + interface TanglePrimitivesJobsV2Gadget extends Enum { + readonly isWasm: boolean; + readonly asWasm: TanglePrimitivesJobsV2WasmGadget; + readonly isNative: boolean; + readonly asNative: TanglePrimitivesJobsV2NativeGadget; + readonly isContainer: boolean; + readonly asContainer: TanglePrimitivesJobsV2ContainerGadget; + readonly type: "Wasm" | "Native" | "Container"; + } + + /** @name TanglePrimitivesJobsV2WasmGadget (501) */ + interface TanglePrimitivesJobsV2WasmGadget extends Struct { + readonly runtime: TanglePrimitivesJobsV2WasmRuntime; + readonly soruces: Vec; + } + + /** @name TanglePrimitivesJobsV2WasmRuntime (502) */ + interface TanglePrimitivesJobsV2WasmRuntime extends Enum { + readonly isWasmtime: boolean; + readonly isWasmer: boolean; + readonly type: "Wasmtime" | "Wasmer"; + } + + /** @name TanglePrimitivesJobsV2GadgetSource (504) */ + interface TanglePrimitivesJobsV2GadgetSource extends Struct { + readonly fetcher: TanglePrimitivesJobsV2GadgetSourceFetcher; + } + + /** @name TanglePrimitivesJobsV2GadgetSourceFetcher (505) */ + interface TanglePrimitivesJobsV2GadgetSourceFetcher extends Enum { + readonly isIpfs: boolean; + readonly asIpfs: Bytes; + readonly isGithub: boolean; + readonly asGithub: TanglePrimitivesJobsV2GithubFetcher; + readonly isContainerImage: boolean; + readonly asContainerImage: TanglePrimitivesJobsV2ImageRegistryFetcher; + readonly type: "Ipfs" | "Github" | "ContainerImage"; + } + + /** @name TanglePrimitivesJobsV2GithubFetcher (507) */ + interface TanglePrimitivesJobsV2GithubFetcher extends Struct { + readonly owner: Bytes; + readonly repo: Bytes; + readonly tag: Bytes; + readonly binaries: Vec; + } + + /** @name TanglePrimitivesJobsV2GadgetBinary (515) */ + interface TanglePrimitivesJobsV2GadgetBinary extends Struct { + readonly arch: TanglePrimitivesJobsV2Architecture; + readonly os: TanglePrimitivesJobsV2OperatingSystem; + readonly name: Bytes; + readonly sha256: U8aFixed; + } + + /** @name TanglePrimitivesJobsV2Architecture (516) */ + interface TanglePrimitivesJobsV2Architecture extends Enum { + readonly isWasm: boolean; + readonly isWasm64: boolean; + readonly isWasi: boolean; + readonly isWasi64: boolean; + readonly isAmd: boolean; + readonly isAmd64: boolean; + readonly isArm: boolean; + readonly isArm64: boolean; + readonly isRiscV: boolean; + readonly isRiscV64: boolean; + readonly type: + | "Wasm" + | "Wasm64" + | "Wasi" + | "Wasi64" + | "Amd" + | "Amd64" + | "Arm" + | "Arm64" + | "RiscV" + | "RiscV64"; + } + + /** @name TanglePrimitivesJobsV2OperatingSystem (517) */ + interface TanglePrimitivesJobsV2OperatingSystem extends Enum { + readonly isUnknown: boolean; + readonly isLinux: boolean; + readonly isWindows: boolean; + readonly isMacOS: boolean; + readonly isBsd: boolean; + readonly type: "Unknown" | "Linux" | "Windows" | "MacOS" | "Bsd"; + } + + /** @name TanglePrimitivesJobsV2ImageRegistryFetcher (521) */ + interface TanglePrimitivesJobsV2ImageRegistryFetcher extends Struct { + readonly registry_: Bytes; + readonly image: Bytes; + readonly tag: Bytes; + } + + /** @name TanglePrimitivesJobsV2NativeGadget (529) */ + interface TanglePrimitivesJobsV2NativeGadget extends Struct { + readonly soruces: Vec; + } + + /** @name TanglePrimitivesJobsV2ContainerGadget (530) */ + interface TanglePrimitivesJobsV2ContainerGadget extends Struct { + readonly soruces: Vec; + } + + /** @name PalletDkgCall (532) */ interface PalletDkgCall extends Enum { readonly isSetFee: boolean; readonly asSetFee: { readonly feeInfo: PalletDkgFeeInfo; } & Struct; - readonly type: 'SetFee'; + readonly type: "SetFee"; } - /** @name PalletZksaasCall (475) */ + /** @name PalletZksaasCall (533) */ interface PalletZksaasCall extends Enum { readonly isSetFee: boolean; readonly asSetFee: { readonly feeInfo: PalletZksaasFeeInfo; } & Struct; - readonly type: 'SetFee'; + readonly type: "SetFee"; } - /** @name PalletProxyCall (476) */ + /** @name PalletProxyCall (534) */ interface PalletProxyCall extends Enum { readonly isProxy: boolean; readonly asProxy: { @@ -4742,7 +6011,17 @@ declare module '@polkadot/types/lookup' { readonly forceProxyType: Option; readonly call: Call; } & Struct; - readonly type: 'Proxy' | 'AddProxy' | 'RemoveProxy' | 'RemoveProxies' | 'CreatePure' | 'KillPure' | 'Announce' | 'RemoveAnnouncement' | 'RejectAnnouncement' | 'ProxyAnnounced'; + readonly type: + | "Proxy" + | "AddProxy" + | "RemoveProxy" + | "RemoveProxies" + | "CreatePure" + | "KillPure" + | "Announce" + | "RemoveAnnouncement" + | "RejectAnnouncement" + | "ProxyAnnounced"; } /** @name PalletMultiAssetDelegationCall (478) */ @@ -4827,7 +6106,7 @@ declare module '@polkadot/types/lookup' { readonly extrinsicName: Bytes; readonly who: AccountId32; } & Struct; - readonly type: 'GrantAccess'; + readonly type: "GrantAccess"; } /** @name SygmaBasicFeehandlerCall (480) */ @@ -4838,7 +6117,7 @@ declare module '@polkadot/types/lookup' { readonly asset: StagingXcmV4AssetAssetId; readonly amount: u128; } & Struct; - readonly type: 'SetFee'; + readonly type: "SetFee"; } /** @name SygmaFeeHandlerRouterCall (481) */ @@ -4849,7 +6128,7 @@ declare module '@polkadot/types/lookup' { readonly asset: StagingXcmV4AssetAssetId; readonly handlerType: SygmaFeeHandlerRouterFeeHandlerType; } & Struct; - readonly type: 'SetFeeHandler'; + readonly type: "SetFeeHandler"; } /** @name SygmaPercentageFeehandlerCall (482) */ @@ -4862,7 +6141,7 @@ declare module '@polkadot/types/lookup' { readonly feeLowerBound: u128; readonly feeUpperBound: u128; } & Struct; - readonly type: 'SetFeeRate'; + readonly type: "SetFeeRate"; } /** @name SygmaBridgeCall (483) */ @@ -4906,7 +6185,17 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isPauseAllBridges: boolean; readonly isUnpauseAllBridges: boolean; - readonly type: 'PauseBridge' | 'UnpauseBridge' | 'SetMpcAddress' | 'RegisterDomain' | 'UnregisterDomain' | 'Deposit' | 'Retry' | 'ExecuteProposal' | 'PauseAllBridges' | 'UnpauseAllBridges'; + readonly type: + | "PauseBridge" + | "UnpauseBridge" + | "SetMpcAddress" + | "RegisterDomain" + | "UnregisterDomain" + | "Deposit" + | "Retry" + | "ExecuteProposal" + | "PauseAllBridges" + | "UnpauseAllBridges"; } /** @name SygmaTraitsMpcAddress (484) */ @@ -4924,7 +6213,7 @@ declare module '@polkadot/types/lookup' { readonly asFungible: Compact; readonly isNonFungible: boolean; readonly asNonFungible: StagingXcmV4AssetAssetInstance; - readonly type: 'Fungible' | 'NonFungible'; + readonly type: "Fungible" | "NonFungible"; } /** @name StagingXcmV4AssetAssetInstance (487) */ @@ -4940,7 +6229,13 @@ declare module '@polkadot/types/lookup' { readonly asArray16: U8aFixed; readonly isArray32: boolean; readonly asArray32: U8aFixed; - readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32'; + readonly type: + | "Undefined" + | "Index" + | "Array4" + | "Array8" + | "Array16" + | "Array32"; } /** @name SygmaBridgeProposal (489) */ @@ -4951,13 +6246,161 @@ declare module '@polkadot/types/lookup' { readonly data: Bytes; } - /** @name PalletSudoError (490) */ + /** @name SygmaAccessSegregatorCall (536) */ + interface SygmaAccessSegregatorCall extends Enum { + readonly isGrantAccess: boolean; + readonly asGrantAccess: { + readonly palletIndex: u8; + readonly extrinsicName: Bytes; + readonly who: AccountId32; + } & Struct; + readonly type: "GrantAccess"; + } + + /** @name SygmaBasicFeehandlerCall (537) */ + interface SygmaBasicFeehandlerCall extends Enum { + readonly isSetFee: boolean; + readonly asSetFee: { + readonly domain: u8; + readonly asset: StagingXcmV4AssetAssetId; + readonly amount: u128; + } & Struct; + readonly type: "SetFee"; + } + + /** @name SygmaFeeHandlerRouterCall (538) */ + interface SygmaFeeHandlerRouterCall extends Enum { + readonly isSetFeeHandler: boolean; + readonly asSetFeeHandler: { + readonly domain: u8; + readonly asset: StagingXcmV4AssetAssetId; + readonly handlerType: SygmaFeeHandlerRouterFeeHandlerType; + } & Struct; + readonly type: "SetFeeHandler"; + } + + /** @name SygmaPercentageFeehandlerCall (539) */ + interface SygmaPercentageFeehandlerCall extends Enum { + readonly isSetFeeRate: boolean; + readonly asSetFeeRate: { + readonly domain: u8; + readonly asset: StagingXcmV4AssetAssetId; + readonly feeRateBasisPoint: u32; + readonly feeLowerBound: u128; + readonly feeUpperBound: u128; + } & Struct; + readonly type: "SetFeeRate"; + } + + /** @name SygmaBridgeCall (540) */ + interface SygmaBridgeCall extends Enum { + readonly isPauseBridge: boolean; + readonly asPauseBridge: { + readonly destDomainId: u8; + } & Struct; + readonly isUnpauseBridge: boolean; + readonly asUnpauseBridge: { + readonly destDomainId: u8; + } & Struct; + readonly isSetMpcAddress: boolean; + readonly asSetMpcAddress: { + readonly addr: SygmaTraitsMpcAddress; + } & Struct; + readonly isRegisterDomain: boolean; + readonly asRegisterDomain: { + readonly destDomainId: u8; + readonly destChainId: U256; + } & Struct; + readonly isUnregisterDomain: boolean; + readonly asUnregisterDomain: { + readonly destDomainId: u8; + readonly destChainId: U256; + } & Struct; + readonly isDeposit: boolean; + readonly asDeposit: { + readonly asset: StagingXcmV4Asset; + readonly dest: StagingXcmV4Location; + } & Struct; + readonly isRetry: boolean; + readonly asRetry: { + readonly depositOnBlockHeight: u128; + readonly destDomainId: u8; + } & Struct; + readonly isExecuteProposal: boolean; + readonly asExecuteProposal: { + readonly proposals: Vec; + readonly signature: Bytes; + } & Struct; + readonly isPauseAllBridges: boolean; + readonly isUnpauseAllBridges: boolean; + readonly type: + | "PauseBridge" + | "UnpauseBridge" + | "SetMpcAddress" + | "RegisterDomain" + | "UnregisterDomain" + | "Deposit" + | "Retry" + | "ExecuteProposal" + | "PauseAllBridges" + | "UnpauseAllBridges"; + } + + /** @name SygmaTraitsMpcAddress (541) */ + interface SygmaTraitsMpcAddress extends U8aFixed {} + + /** @name StagingXcmV4Asset (542) */ + interface StagingXcmV4Asset extends Struct { + readonly id: StagingXcmV4AssetAssetId; + readonly fun: StagingXcmV4AssetFungibility; + } + + /** @name StagingXcmV4AssetFungibility (543) */ + interface StagingXcmV4AssetFungibility extends Enum { + readonly isFungible: boolean; + readonly asFungible: Compact; + readonly isNonFungible: boolean; + readonly asNonFungible: StagingXcmV4AssetAssetInstance; + readonly type: "Fungible" | "NonFungible"; + } + + /** @name StagingXcmV4AssetAssetInstance (544) */ + interface StagingXcmV4AssetAssetInstance extends Enum { + readonly isUndefined: boolean; + readonly isIndex: boolean; + readonly asIndex: Compact; + readonly isArray4: boolean; + readonly asArray4: U8aFixed; + readonly isArray8: boolean; + readonly asArray8: U8aFixed; + readonly isArray16: boolean; + readonly asArray16: U8aFixed; + readonly isArray32: boolean; + readonly asArray32: U8aFixed; + readonly type: + | "Undefined" + | "Index" + | "Array4" + | "Array8" + | "Array16" + | "Array32"; + } + + /** @name SygmaBridgeProposal (546) */ + interface SygmaBridgeProposal extends Struct { + readonly originDomainId: u8; + readonly depositNonce: u64; + readonly resourceId: U8aFixed; + readonly data: Bytes; + } + + /** @name PalletSudoError (547) */ interface PalletSudoError extends Enum { readonly isRequireSudo: boolean; - readonly type: 'RequireSudo'; + readonly type: "RequireSudo"; } - /** @name PalletAssetsAssetDetails (492) */ + /** @name PalletAssetsAssetDetails (549) */ interface PalletAssetsAssetDetails extends Struct { readonly owner: AccountId32; readonly issuer: AccountId32; @@ -4973,15 +6416,15 @@ declare module '@polkadot/types/lookup' { readonly status: PalletAssetsAssetStatus; } - /** @name PalletAssetsAssetStatus (493) */ + /** @name PalletAssetsAssetStatus (550) */ interface PalletAssetsAssetStatus extends Enum { readonly isLive: boolean; readonly isFrozen: boolean; readonly isDestroying: boolean; - readonly type: 'Live' | 'Frozen' | 'Destroying'; + readonly type: "Live" | "Frozen" | "Destroying"; } - /** @name PalletAssetsAssetAccount (495) */ + /** @name PalletAssetsAssetAccount (552) */ interface PalletAssetsAssetAccount extends Struct { readonly balance: u128; readonly status: PalletAssetsAccountStatus; @@ -4989,15 +6432,15 @@ declare module '@polkadot/types/lookup' { readonly extra: Null; } - /** @name PalletAssetsAccountStatus (496) */ + /** @name PalletAssetsAccountStatus (553) */ interface PalletAssetsAccountStatus extends Enum { readonly isLiquid: boolean; readonly isFrozen: boolean; readonly isBlocked: boolean; - readonly type: 'Liquid' | 'Frozen' | 'Blocked'; + readonly type: "Liquid" | "Frozen" | "Blocked"; } - /** @name PalletAssetsExistenceReason (497) */ + /** @name PalletAssetsExistenceReason (554) */ interface PalletAssetsExistenceReason extends Enum { readonly isConsumer: boolean; readonly isSufficient: boolean; @@ -5006,16 +6449,21 @@ declare module '@polkadot/types/lookup' { readonly isDepositRefunded: boolean; readonly isDepositFrom: boolean; readonly asDepositFrom: ITuple<[AccountId32, u128]>; - readonly type: 'Consumer' | 'Sufficient' | 'DepositHeld' | 'DepositRefunded' | 'DepositFrom'; + readonly type: + | "Consumer" + | "Sufficient" + | "DepositHeld" + | "DepositRefunded" + | "DepositFrom"; } - /** @name PalletAssetsApproval (499) */ + /** @name PalletAssetsApproval (556) */ interface PalletAssetsApproval extends Struct { readonly amount: u128; readonly deposit: u128; } - /** @name PalletAssetsAssetMetadata (500) */ + /** @name PalletAssetsAssetMetadata (557) */ interface PalletAssetsAssetMetadata extends Struct { readonly deposit: u128; readonly name: Bytes; @@ -5024,7 +6472,7 @@ declare module '@polkadot/types/lookup' { readonly isFrozen: bool; } - /** @name PalletAssetsError (502) */ + /** @name PalletAssetsError (559) */ interface PalletAssetsError extends Enum { readonly isBalanceLow: boolean; readonly isNoAccount: boolean; @@ -5046,69 +6494,89 @@ declare module '@polkadot/types/lookup' { readonly isIncorrectStatus: boolean; readonly isNotFrozen: boolean; readonly isCallbackFailed: boolean; - readonly type: 'BalanceLow' | 'NoAccount' | 'NoPermission' | 'Unknown' | 'Frozen' | 'InUse' | 'BadWitness' | 'MinBalanceZero' | 'UnavailableConsumer' | 'BadMetadata' | 'Unapproved' | 'WouldDie' | 'AlreadyExists' | 'NoDeposit' | 'WouldBurn' | 'LiveAsset' | 'AssetNotLive' | 'IncorrectStatus' | 'NotFrozen' | 'CallbackFailed'; - } - - /** @name PalletBalancesBalanceLock (504) */ + readonly type: + | "BalanceLow" + | "NoAccount" + | "NoPermission" + | "Unknown" + | "Frozen" + | "InUse" + | "BadWitness" + | "MinBalanceZero" + | "UnavailableConsumer" + | "BadMetadata" + | "Unapproved" + | "WouldDie" + | "AlreadyExists" + | "NoDeposit" + | "WouldBurn" + | "LiveAsset" + | "AssetNotLive" + | "IncorrectStatus" + | "NotFrozen" + | "CallbackFailed"; + } + + /** @name PalletBalancesBalanceLock (561) */ interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; readonly reasons: PalletBalancesReasons; } - /** @name PalletBalancesReasons (505) */ + /** @name PalletBalancesReasons (562) */ interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; readonly isAll: boolean; - readonly type: 'Fee' | 'Misc' | 'All'; + readonly type: "Fee" | "Misc" | "All"; } - /** @name PalletBalancesReserveData (508) */ + /** @name PalletBalancesReserveData (565) */ interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name PalletBalancesIdAmountRuntimeHoldReason (511) */ + /** @name PalletBalancesIdAmountRuntimeHoldReason (568) */ interface PalletBalancesIdAmountRuntimeHoldReason extends Struct { readonly id: TangleTestnetRuntimeRuntimeHoldReason; readonly amount: u128; } - /** @name TangleTestnetRuntimeRuntimeHoldReason (512) */ + /** @name TangleTestnetRuntimeRuntimeHoldReason (569) */ interface TangleTestnetRuntimeRuntimeHoldReason extends Enum { readonly isPreimage: boolean; readonly asPreimage: PalletPreimageHoldReason; - readonly type: 'Preimage'; + readonly type: "Preimage"; } - /** @name PalletPreimageHoldReason (513) */ + /** @name PalletPreimageHoldReason (570) */ interface PalletPreimageHoldReason extends Enum { readonly isPreimage: boolean; - readonly type: 'Preimage'; + readonly type: "Preimage"; } - /** @name PalletBalancesIdAmountRuntimeFreezeReason (516) */ + /** @name PalletBalancesIdAmountRuntimeFreezeReason (573) */ interface PalletBalancesIdAmountRuntimeFreezeReason extends Struct { readonly id: TangleTestnetRuntimeRuntimeFreezeReason; readonly amount: u128; } - /** @name TangleTestnetRuntimeRuntimeFreezeReason (517) */ + /** @name TangleTestnetRuntimeRuntimeFreezeReason (574) */ interface TangleTestnetRuntimeRuntimeFreezeReason extends Enum { readonly isNominationPools: boolean; readonly asNominationPools: PalletNominationPoolsFreezeReason; - readonly type: 'NominationPools'; + readonly type: "NominationPools"; } - /** @name PalletNominationPoolsFreezeReason (518) */ + /** @name PalletNominationPoolsFreezeReason (575) */ interface PalletNominationPoolsFreezeReason extends Enum { readonly isPoolMinBalance: boolean; - readonly type: 'PoolMinBalance'; + readonly type: "PoolMinBalance"; } - /** @name PalletBalancesError (520) */ + /** @name PalletBalancesError (577) */ interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; readonly isLiquidityRestrictions: boolean; @@ -5122,17 +6590,29 @@ declare module '@polkadot/types/lookup' { readonly isTooManyFreezes: boolean; readonly isIssuanceDeactivated: boolean; readonly isDeltaZero: boolean; - readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'Expendability' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves' | 'TooManyHolds' | 'TooManyFreezes' | 'IssuanceDeactivated' | 'DeltaZero'; - } - - /** @name PalletTransactionPaymentReleases (522) */ + readonly type: + | "VestingBalance" + | "LiquidityRestrictions" + | "InsufficientBalance" + | "ExistentialDeposit" + | "Expendability" + | "ExistingVestingSchedule" + | "DeadAccount" + | "TooManyReserves" + | "TooManyHolds" + | "TooManyFreezes" + | "IssuanceDeactivated" + | "DeltaZero"; + } + + /** @name PalletTransactionPaymentReleases (579) */ interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; - readonly type: 'V1Ancient' | 'V2'; + readonly type: "V1Ancient" | "V2"; } - /** @name SpConsensusBabeDigestsPreDigest (529) */ + /** @name SpConsensusBabeDigestsPreDigest (586) */ interface SpConsensusBabeDigestsPreDigest extends Enum { readonly isPrimary: boolean; readonly asPrimary: SpConsensusBabeDigestsPrimaryPreDigest; @@ -5140,51 +6620,55 @@ declare module '@polkadot/types/lookup' { readonly asSecondaryPlain: SpConsensusBabeDigestsSecondaryPlainPreDigest; readonly isSecondaryVRF: boolean; readonly asSecondaryVRF: SpConsensusBabeDigestsSecondaryVRFPreDigest; - readonly type: 'Primary' | 'SecondaryPlain' | 'SecondaryVRF'; + readonly type: "Primary" | "SecondaryPlain" | "SecondaryVRF"; } - /** @name SpConsensusBabeDigestsPrimaryPreDigest (530) */ + /** @name SpConsensusBabeDigestsPrimaryPreDigest (587) */ interface SpConsensusBabeDigestsPrimaryPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; readonly vrfSignature: SpCoreSr25519VrfVrfSignature; } - /** @name SpCoreSr25519VrfVrfSignature (531) */ + /** @name SpCoreSr25519VrfVrfSignature (588) */ interface SpCoreSr25519VrfVrfSignature extends Struct { readonly preOutput: U8aFixed; readonly proof: U8aFixed; } - /** @name SpConsensusBabeDigestsSecondaryPlainPreDigest (532) */ + /** @name SpConsensusBabeDigestsSecondaryPlainPreDigest (589) */ interface SpConsensusBabeDigestsSecondaryPlainPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; } - /** @name SpConsensusBabeDigestsSecondaryVRFPreDigest (533) */ + /** @name SpConsensusBabeDigestsSecondaryVRFPreDigest (590) */ interface SpConsensusBabeDigestsSecondaryVRFPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; readonly vrfSignature: SpCoreSr25519VrfVrfSignature; } - /** @name SpConsensusBabeBabeEpochConfiguration (534) */ + /** @name SpConsensusBabeBabeEpochConfiguration (591) */ interface SpConsensusBabeBabeEpochConfiguration extends Struct { readonly c: ITuple<[u64, u64]>; readonly allowedSlots: SpConsensusBabeAllowedSlots; } - /** @name PalletBabeError (536) */ + /** @name PalletBabeError (593) */ interface PalletBabeError extends Enum { readonly isInvalidEquivocationProof: boolean; readonly isInvalidKeyOwnershipProof: boolean; readonly isDuplicateOffenceReport: boolean; readonly isInvalidConfiguration: boolean; - readonly type: 'InvalidEquivocationProof' | 'InvalidKeyOwnershipProof' | 'DuplicateOffenceReport' | 'InvalidConfiguration'; + readonly type: + | "InvalidEquivocationProof" + | "InvalidKeyOwnershipProof" + | "DuplicateOffenceReport" + | "InvalidConfiguration"; } - /** @name PalletGrandpaStoredState (537) */ + /** @name PalletGrandpaStoredState (594) */ interface PalletGrandpaStoredState extends Enum { readonly isLive: boolean; readonly isPendingPause: boolean; @@ -5198,10 +6682,10 @@ declare module '@polkadot/types/lookup' { readonly scheduledAt: u64; readonly delay: u64; } & Struct; - readonly type: 'Live' | 'PendingPause' | 'Paused' | 'PendingResume'; + readonly type: "Live" | "PendingPause" | "Paused" | "PendingResume"; } - /** @name PalletGrandpaStoredPendingChange (538) */ + /** @name PalletGrandpaStoredPendingChange (595) */ interface PalletGrandpaStoredPendingChange extends Struct { readonly scheduledAt: u64; readonly delay: u64; @@ -5209,7 +6693,7 @@ declare module '@polkadot/types/lookup' { readonly forced: Option; } - /** @name PalletGrandpaError (540) */ + /** @name PalletGrandpaError (597) */ interface PalletGrandpaError extends Enum { readonly isPauseFailed: boolean; readonly isResumeFailed: boolean; @@ -5218,20 +6702,32 @@ declare module '@polkadot/types/lookup' { readonly isInvalidKeyOwnershipProof: boolean; readonly isInvalidEquivocationProof: boolean; readonly isDuplicateOffenceReport: boolean; - readonly type: 'PauseFailed' | 'ResumeFailed' | 'ChangePending' | 'TooSoon' | 'InvalidKeyOwnershipProof' | 'InvalidEquivocationProof' | 'DuplicateOffenceReport'; + readonly type: + | "PauseFailed" + | "ResumeFailed" + | "ChangePending" + | "TooSoon" + | "InvalidKeyOwnershipProof" + | "InvalidEquivocationProof" + | "DuplicateOffenceReport"; } - /** @name PalletIndicesError (542) */ + /** @name PalletIndicesError (599) */ interface PalletIndicesError extends Enum { readonly isNotAssigned: boolean; readonly isNotOwner: boolean; readonly isInUse: boolean; readonly isNotTransfer: boolean; readonly isPermanent: boolean; - readonly type: 'NotAssigned' | 'NotOwner' | 'InUse' | 'NotTransfer' | 'Permanent'; + readonly type: + | "NotAssigned" + | "NotOwner" + | "InUse" + | "NotTransfer" + | "Permanent"; } - /** @name PalletDemocracyReferendumInfo (547) */ + /** @name PalletDemocracyReferendumInfo (604) */ interface PalletDemocracyReferendumInfo extends Enum { readonly isOngoing: boolean; readonly asOngoing: PalletDemocracyReferendumStatus; @@ -5240,10 +6736,10 @@ declare module '@polkadot/types/lookup' { readonly approved: bool; readonly end: u64; } & Struct; - readonly type: 'Ongoing' | 'Finished'; + readonly type: "Ongoing" | "Finished"; } - /** @name PalletDemocracyReferendumStatus (548) */ + /** @name PalletDemocracyReferendumStatus (605) */ interface PalletDemocracyReferendumStatus extends Struct { readonly end: u64; readonly proposal: FrameSupportPreimagesBounded; @@ -5252,14 +6748,14 @@ declare module '@polkadot/types/lookup' { readonly tally: PalletDemocracyTally; } - /** @name PalletDemocracyTally (549) */ + /** @name PalletDemocracyTally (606) */ interface PalletDemocracyTally extends Struct { readonly ayes: u128; readonly nays: u128; readonly turnout: u128; } - /** @name PalletDemocracyVoteVoting (550) */ + /** @name PalletDemocracyVoteVoting (607) */ interface PalletDemocracyVoteVoting extends Enum { readonly isDirect: boolean; readonly asDirect: { @@ -5275,19 +6771,19 @@ declare module '@polkadot/types/lookup' { readonly delegations: PalletDemocracyDelegations; readonly prior: PalletDemocracyVotePriorLock; } & Struct; - readonly type: 'Direct' | 'Delegating'; + readonly type: "Direct" | "Delegating"; } - /** @name PalletDemocracyDelegations (554) */ + /** @name PalletDemocracyDelegations (611) */ interface PalletDemocracyDelegations extends Struct { readonly votes: u128; readonly capital: u128; } - /** @name PalletDemocracyVotePriorLock (555) */ + /** @name PalletDemocracyVotePriorLock (612) */ interface PalletDemocracyVotePriorLock extends ITuple<[u64, u128]> {} - /** @name PalletDemocracyError (558) */ + /** @name PalletDemocracyError (615) */ interface PalletDemocracyError extends Enum { readonly isValueLow: boolean; readonly isProposalMissing: boolean; @@ -5313,10 +6809,34 @@ declare module '@polkadot/types/lookup' { readonly isTooMany: boolean; readonly isVotingPeriodLow: boolean; readonly isPreimageNotExist: boolean; - readonly type: 'ValueLow' | 'ProposalMissing' | 'AlreadyCanceled' | 'DuplicateProposal' | 'ProposalBlacklisted' | 'NotSimpleMajority' | 'InvalidHash' | 'NoProposal' | 'AlreadyVetoed' | 'ReferendumInvalid' | 'NoneWaiting' | 'NotVoter' | 'NoPermission' | 'AlreadyDelegating' | 'InsufficientFunds' | 'NotDelegating' | 'VotesExist' | 'InstantNotAllowed' | 'Nonsense' | 'WrongUpperBound' | 'MaxVotesReached' | 'TooMany' | 'VotingPeriodLow' | 'PreimageNotExist'; - } - - /** @name PalletCollectiveVotes (560) */ + readonly type: + | "ValueLow" + | "ProposalMissing" + | "AlreadyCanceled" + | "DuplicateProposal" + | "ProposalBlacklisted" + | "NotSimpleMajority" + | "InvalidHash" + | "NoProposal" + | "AlreadyVetoed" + | "ReferendumInvalid" + | "NoneWaiting" + | "NotVoter" + | "NoPermission" + | "AlreadyDelegating" + | "InsufficientFunds" + | "NotDelegating" + | "VotesExist" + | "InstantNotAllowed" + | "Nonsense" + | "WrongUpperBound" + | "MaxVotesReached" + | "TooMany" + | "VotingPeriodLow" + | "PreimageNotExist"; + } + + /** @name PalletCollectiveVotes (617) */ interface PalletCollectiveVotes extends Struct { readonly index: u32; readonly threshold: u32; @@ -5325,7 +6845,7 @@ declare module '@polkadot/types/lookup' { readonly end: u64; } - /** @name PalletCollectiveError (561) */ + /** @name PalletCollectiveError (618) */ interface PalletCollectiveError extends Enum { readonly isNotMember: boolean; readonly isDuplicateProposal: boolean; @@ -5338,41 +6858,57 @@ declare module '@polkadot/types/lookup' { readonly isWrongProposalWeight: boolean; readonly isWrongProposalLength: boolean; readonly isPrimeAccountNotMember: boolean; - readonly type: 'NotMember' | 'DuplicateProposal' | 'ProposalMissing' | 'WrongIndex' | 'DuplicateVote' | 'AlreadyInitialized' | 'TooEarly' | 'TooManyProposals' | 'WrongProposalWeight' | 'WrongProposalLength' | 'PrimeAccountNotMember'; - } - - /** @name PalletVestingReleases (564) */ + readonly type: + | "NotMember" + | "DuplicateProposal" + | "ProposalMissing" + | "WrongIndex" + | "DuplicateVote" + | "AlreadyInitialized" + | "TooEarly" + | "TooManyProposals" + | "WrongProposalWeight" + | "WrongProposalLength" + | "PrimeAccountNotMember"; + } + + /** @name PalletVestingReleases (621) */ interface PalletVestingReleases extends Enum { readonly isV0: boolean; readonly isV1: boolean; - readonly type: 'V0' | 'V1'; + readonly type: "V0" | "V1"; } - /** @name PalletVestingError (565) */ + /** @name PalletVestingError (622) */ interface PalletVestingError extends Enum { readonly isNotVesting: boolean; readonly isAtMaxVestingSchedules: boolean; readonly isAmountLow: boolean; readonly isScheduleIndexOutOfBounds: boolean; readonly isInvalidScheduleParams: boolean; - readonly type: 'NotVesting' | 'AtMaxVestingSchedules' | 'AmountLow' | 'ScheduleIndexOutOfBounds' | 'InvalidScheduleParams'; + readonly type: + | "NotVesting" + | "AtMaxVestingSchedules" + | "AmountLow" + | "ScheduleIndexOutOfBounds" + | "InvalidScheduleParams"; } - /** @name PalletElectionsPhragmenSeatHolder (567) */ + /** @name PalletElectionsPhragmenSeatHolder (624) */ interface PalletElectionsPhragmenSeatHolder extends Struct { readonly who: AccountId32; readonly stake: u128; readonly deposit: u128; } - /** @name PalletElectionsPhragmenVoter (568) */ + /** @name PalletElectionsPhragmenVoter (625) */ interface PalletElectionsPhragmenVoter extends Struct { readonly votes: Vec; readonly stake: u128; readonly deposit: u128; } - /** @name PalletElectionsPhragmenError (569) */ + /** @name PalletElectionsPhragmenError (626) */ interface PalletElectionsPhragmenError extends Enum { readonly isUnableToVote: boolean; readonly isNoVotes: boolean; @@ -5391,31 +6927,49 @@ declare module '@polkadot/types/lookup' { readonly isInvalidVoteCount: boolean; readonly isInvalidRenouncing: boolean; readonly isInvalidReplacement: boolean; - readonly type: 'UnableToVote' | 'NoVotes' | 'TooManyVotes' | 'MaximumVotesExceeded' | 'LowBalance' | 'UnableToPayBond' | 'MustBeVoter' | 'DuplicatedCandidate' | 'TooManyCandidates' | 'MemberSubmit' | 'RunnerUpSubmit' | 'InsufficientCandidateFunds' | 'NotMember' | 'InvalidWitnessData' | 'InvalidVoteCount' | 'InvalidRenouncing' | 'InvalidReplacement'; - } - - /** @name PalletElectionProviderMultiPhaseReadySolution (570) */ + readonly type: + | "UnableToVote" + | "NoVotes" + | "TooManyVotes" + | "MaximumVotesExceeded" + | "LowBalance" + | "UnableToPayBond" + | "MustBeVoter" + | "DuplicatedCandidate" + | "TooManyCandidates" + | "MemberSubmit" + | "RunnerUpSubmit" + | "InsufficientCandidateFunds" + | "NotMember" + | "InvalidWitnessData" + | "InvalidVoteCount" + | "InvalidRenouncing" + | "InvalidReplacement"; + } + + /** @name PalletElectionProviderMultiPhaseReadySolution (627) */ interface PalletElectionProviderMultiPhaseReadySolution extends Struct { readonly supports: Vec>; readonly score: SpNposElectionsElectionScore; readonly compute: PalletElectionProviderMultiPhaseElectionCompute; } - /** @name PalletElectionProviderMultiPhaseRoundSnapshot (572) */ + /** @name PalletElectionProviderMultiPhaseRoundSnapshot (629) */ interface PalletElectionProviderMultiPhaseRoundSnapshot extends Struct { readonly voters: Vec]>>; readonly targets: Vec; } - /** @name PalletElectionProviderMultiPhaseSignedSignedSubmission (579) */ - interface PalletElectionProviderMultiPhaseSignedSignedSubmission extends Struct { + /** @name PalletElectionProviderMultiPhaseSignedSignedSubmission (636) */ + interface PalletElectionProviderMultiPhaseSignedSignedSubmission + extends Struct { readonly who: AccountId32; readonly deposit: u128; readonly rawSolution: PalletElectionProviderMultiPhaseRawSolution; readonly callFee: u128; } - /** @name PalletElectionProviderMultiPhaseError (580) */ + /** @name PalletElectionProviderMultiPhaseError (637) */ interface PalletElectionProviderMultiPhaseError extends Enum { readonly isPreDispatchEarlySubmission: boolean; readonly isPreDispatchWrongWinnerCount: boolean; @@ -5432,10 +6986,25 @@ declare module '@polkadot/types/lookup' { readonly isBoundNotMet: boolean; readonly isTooManyWinners: boolean; readonly isPreDispatchDifferentRound: boolean; - readonly type: 'PreDispatchEarlySubmission' | 'PreDispatchWrongWinnerCount' | 'PreDispatchWeakSubmission' | 'SignedQueueFull' | 'SignedCannotPayDeposit' | 'SignedInvalidWitness' | 'SignedTooMuchWeight' | 'OcwCallWrongEra' | 'MissingSnapshotMetadata' | 'InvalidSubmissionIndex' | 'CallNotAllowed' | 'FallbackFailed' | 'BoundNotMet' | 'TooManyWinners' | 'PreDispatchDifferentRound'; - } - - /** @name PalletStakingStakingLedger (581) */ + readonly type: + | "PreDispatchEarlySubmission" + | "PreDispatchWrongWinnerCount" + | "PreDispatchWeakSubmission" + | "SignedQueueFull" + | "SignedCannotPayDeposit" + | "SignedInvalidWitness" + | "SignedTooMuchWeight" + | "OcwCallWrongEra" + | "MissingSnapshotMetadata" + | "InvalidSubmissionIndex" + | "CallNotAllowed" + | "FallbackFailed" + | "BoundNotMet" + | "TooManyWinners" + | "PreDispatchDifferentRound"; + } + + /** @name PalletStakingStakingLedger (638) */ interface PalletStakingStakingLedger extends Struct { readonly stash: AccountId32; readonly total: Compact; @@ -5444,26 +7013,26 @@ declare module '@polkadot/types/lookup' { readonly legacyClaimedRewards: Vec; } - /** @name PalletStakingUnlockChunk (583) */ + /** @name PalletStakingUnlockChunk (640) */ interface PalletStakingUnlockChunk extends Struct { readonly value: Compact; readonly era: Compact; } - /** @name PalletStakingNominations (586) */ + /** @name PalletStakingNominations (643) */ interface PalletStakingNominations extends Struct { readonly targets: Vec; readonly submittedIn: u32; readonly suppressed: bool; } - /** @name PalletStakingActiveEraInfo (587) */ + /** @name PalletStakingActiveEraInfo (644) */ interface PalletStakingActiveEraInfo extends Struct { readonly index: u32; readonly start: Option; } - /** @name SpStakingPagedExposureMetadata (589) */ + /** @name SpStakingPagedExposureMetadata (645) */ interface SpStakingPagedExposureMetadata extends Struct { readonly total: Compact; readonly own: Compact; @@ -5471,19 +7040,19 @@ declare module '@polkadot/types/lookup' { readonly pageCount: u32; } - /** @name SpStakingExposurePage (591) */ + /** @name SpStakingExposurePage (647) */ interface SpStakingExposurePage extends Struct { readonly pageTotal: Compact; readonly others: Vec; } - /** @name PalletStakingEraRewardPoints (592) */ + /** @name PalletStakingEraRewardPoints (648) */ interface PalletStakingEraRewardPoints extends Struct { readonly total: u32; readonly individual: BTreeMap; } - /** @name PalletStakingUnappliedSlash (597) */ + /** @name PalletStakingUnappliedSlash (653) */ interface PalletStakingUnappliedSlash extends Struct { readonly validator: AccountId32; readonly own: u128; @@ -5492,7 +7061,7 @@ declare module '@polkadot/types/lookup' { readonly payout: u128; } - /** @name PalletStakingSlashingSlashingSpans (601) */ + /** @name PalletStakingSlashingSlashingSpans (657) */ interface PalletStakingSlashingSlashingSpans extends Struct { readonly spanIndex: u32; readonly lastStart: u32; @@ -5500,13 +7069,13 @@ declare module '@polkadot/types/lookup' { readonly prior: Vec; } - /** @name PalletStakingSlashingSpanRecord (602) */ + /** @name PalletStakingSlashingSpanRecord (658) */ interface PalletStakingSlashingSpanRecord extends Struct { readonly slashed: u128; readonly paidOut: u128; } - /** @name PalletStakingPalletError (605) */ + /** @name PalletStakingPalletError (661) */ interface PalletStakingPalletError extends Enum { readonly isNotController: boolean; readonly isNotStash: boolean; @@ -5536,23 +7105,56 @@ declare module '@polkadot/types/lookup' { readonly isBoundNotMet: boolean; readonly isControllerDeprecated: boolean; readonly isRestakeActive: boolean; - readonly type: 'NotController' | 'NotStash' | 'AlreadyBonded' | 'AlreadyPaired' | 'EmptyTargets' | 'DuplicateIndex' | 'InvalidSlashIndex' | 'InsufficientBond' | 'NoMoreChunks' | 'NoUnlockChunk' | 'FundedTarget' | 'InvalidEraToReward' | 'InvalidNumberOfNominations' | 'NotSortedAndUnique' | 'AlreadyClaimed' | 'InvalidPage' | 'IncorrectHistoryDepth' | 'IncorrectSlashingSpans' | 'BadState' | 'TooManyTargets' | 'BadTarget' | 'CannotChillOther' | 'TooManyNominators' | 'TooManyValidators' | 'CommissionTooLow' | 'BoundNotMet' | 'ControllerDeprecated' | 'RestakeActive'; - } - - /** @name SpCoreCryptoKeyTypeId (609) */ + readonly type: + | "NotController" + | "NotStash" + | "AlreadyBonded" + | "AlreadyPaired" + | "EmptyTargets" + | "DuplicateIndex" + | "InvalidSlashIndex" + | "InsufficientBond" + | "NoMoreChunks" + | "NoUnlockChunk" + | "FundedTarget" + | "InvalidEraToReward" + | "InvalidNumberOfNominations" + | "NotSortedAndUnique" + | "AlreadyClaimed" + | "InvalidPage" + | "IncorrectHistoryDepth" + | "IncorrectSlashingSpans" + | "BadState" + | "TooManyTargets" + | "BadTarget" + | "CannotChillOther" + | "TooManyNominators" + | "TooManyValidators" + | "CommissionTooLow" + | "BoundNotMet" + | "ControllerDeprecated" + | "RestakeActive"; + } + + /** @name SpCoreCryptoKeyTypeId (665) */ interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionError (610) */ + /** @name PalletSessionError (666) */ interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; readonly isDuplicatedKey: boolean; readonly isNoKeys: boolean; readonly isNoAccount: boolean; - readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; + readonly type: + | "InvalidProof" + | "NoAssociatedValidatorId" + | "DuplicatedKey" + | "NoKeys" + | "NoAccount"; } - /** @name PalletTreasuryProposal (612) */ + /** @name PalletTreasuryProposal (668) */ interface PalletTreasuryProposal extends Struct { readonly proposer: AccountId32; readonly value: u128; @@ -5560,7 +7162,7 @@ declare module '@polkadot/types/lookup' { readonly bond: u128; } - /** @name PalletTreasurySpendStatus (614) */ + /** @name PalletTreasurySpendStatus (670) */ interface PalletTreasurySpendStatus extends Struct { readonly assetKind: Null; readonly amount: u128; @@ -5570,7 +7172,7 @@ declare module '@polkadot/types/lookup' { readonly status: PalletTreasuryPaymentState; } - /** @name PalletTreasuryPaymentState (615) */ + /** @name PalletTreasuryPaymentState (671) */ interface PalletTreasuryPaymentState extends Enum { readonly isPending: boolean; readonly isAttempted: boolean; @@ -5578,13 +7180,13 @@ declare module '@polkadot/types/lookup' { readonly id: Null; } & Struct; readonly isFailed: boolean; - readonly type: 'Pending' | 'Attempted' | 'Failed'; + readonly type: "Pending" | "Attempted" | "Failed"; } - /** @name FrameSupportPalletId (616) */ + /** @name FrameSupportPalletId (672) */ interface FrameSupportPalletId extends U8aFixed {} - /** @name PalletTreasuryError (617) */ + /** @name PalletTreasuryError (673) */ interface PalletTreasuryError extends Enum { readonly isInsufficientProposersBalance: boolean; readonly isInvalidIndex: boolean; @@ -5598,10 +7200,22 @@ declare module '@polkadot/types/lookup' { readonly isPayoutError: boolean; readonly isNotAttempted: boolean; readonly isInconclusive: boolean; - readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'InsufficientPermission' | 'ProposalNotApproved' | 'FailedToConvertBalance' | 'SpendExpired' | 'EarlyPayout' | 'AlreadyAttempted' | 'PayoutError' | 'NotAttempted' | 'Inconclusive'; - } - - /** @name PalletBountiesBounty (618) */ + readonly type: + | "InsufficientProposersBalance" + | "InvalidIndex" + | "TooManyApprovals" + | "InsufficientPermission" + | "ProposalNotApproved" + | "FailedToConvertBalance" + | "SpendExpired" + | "EarlyPayout" + | "AlreadyAttempted" + | "PayoutError" + | "NotAttempted" + | "Inconclusive"; + } + + /** @name PalletBountiesBounty (674) */ interface PalletBountiesBounty extends Struct { readonly proposer: AccountId32; readonly value: u128; @@ -5611,7 +7225,7 @@ declare module '@polkadot/types/lookup' { readonly status: PalletBountiesBountyStatus; } - /** @name PalletBountiesBountyStatus (619) */ + /** @name PalletBountiesBountyStatus (675) */ interface PalletBountiesBountyStatus extends Enum { readonly isProposed: boolean; readonly isApproved: boolean; @@ -5631,10 +7245,16 @@ declare module '@polkadot/types/lookup' { readonly beneficiary: AccountId32; readonly unlockAt: u64; } & Struct; - readonly type: 'Proposed' | 'Approved' | 'Funded' | 'CuratorProposed' | 'Active' | 'PendingPayout'; + readonly type: + | "Proposed" + | "Approved" + | "Funded" + | "CuratorProposed" + | "Active" + | "PendingPayout"; } - /** @name PalletBountiesError (621) */ + /** @name PalletBountiesError (677) */ interface PalletBountiesError extends Enum { readonly isInsufficientProposersBalance: boolean; readonly isInvalidIndex: boolean; @@ -5647,10 +7267,21 @@ declare module '@polkadot/types/lookup' { readonly isPremature: boolean; readonly isHasActiveChildBounty: boolean; readonly isTooManyQueued: boolean; - readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'ReasonTooBig' | 'UnexpectedStatus' | 'RequireCurator' | 'InvalidValue' | 'InvalidFee' | 'PendingPayout' | 'Premature' | 'HasActiveChildBounty' | 'TooManyQueued'; - } - - /** @name PalletChildBountiesChildBounty (622) */ + readonly type: + | "InsufficientProposersBalance" + | "InvalidIndex" + | "ReasonTooBig" + | "UnexpectedStatus" + | "RequireCurator" + | "InvalidValue" + | "InvalidFee" + | "PendingPayout" + | "Premature" + | "HasActiveChildBounty" + | "TooManyQueued"; + } + + /** @name PalletChildBountiesChildBounty (678) */ interface PalletChildBountiesChildBounty extends Struct { readonly parentBounty: u32; readonly value: u128; @@ -5659,7 +7290,7 @@ declare module '@polkadot/types/lookup' { readonly status: PalletChildBountiesChildBountyStatus; } - /** @name PalletChildBountiesChildBountyStatus (623) */ + /** @name PalletChildBountiesChildBountyStatus (679) */ interface PalletChildBountiesChildBountyStatus extends Enum { readonly isAdded: boolean; readonly isCuratorProposed: boolean; @@ -5676,18 +7307,21 @@ declare module '@polkadot/types/lookup' { readonly beneficiary: AccountId32; readonly unlockAt: u64; } & Struct; - readonly type: 'Added' | 'CuratorProposed' | 'Active' | 'PendingPayout'; + readonly type: "Added" | "CuratorProposed" | "Active" | "PendingPayout"; } - /** @name PalletChildBountiesError (624) */ + /** @name PalletChildBountiesError (680) */ interface PalletChildBountiesError extends Enum { readonly isParentBountyNotActive: boolean; readonly isInsufficientBountyBalance: boolean; readonly isTooManyChildBounties: boolean; - readonly type: 'ParentBountyNotActive' | 'InsufficientBountyBalance' | 'TooManyChildBounties'; + readonly type: + | "ParentBountyNotActive" + | "InsufficientBountyBalance" + | "TooManyChildBounties"; } - /** @name PalletBagsListListNode (625) */ + /** @name PalletBagsListListNode (681) */ interface PalletBagsListListNode extends Struct { readonly id: AccountId32; readonly prev: Option; @@ -5696,29 +7330,29 @@ declare module '@polkadot/types/lookup' { readonly score: u64; } - /** @name PalletBagsListListBag (626) */ + /** @name PalletBagsListListBag (682) */ interface PalletBagsListListBag extends Struct { readonly head: Option; readonly tail: Option; } - /** @name PalletBagsListError (628) */ + /** @name PalletBagsListError (684) */ interface PalletBagsListError extends Enum { readonly isList: boolean; readonly asList: PalletBagsListListListError; - readonly type: 'List'; + readonly type: "List"; } - /** @name PalletBagsListListListError (629) */ + /** @name PalletBagsListListListError (685) */ interface PalletBagsListListListError extends Enum { readonly isDuplicate: boolean; readonly isNotHeavier: boolean; readonly isNotInSameBag: boolean; readonly isNodeNotFound: boolean; - readonly type: 'Duplicate' | 'NotHeavier' | 'NotInSameBag' | 'NodeNotFound'; + readonly type: "Duplicate" | "NotHeavier" | "NotInSameBag" | "NodeNotFound"; } - /** @name PalletNominationPoolsPoolMember (630) */ + /** @name PalletNominationPoolsPoolMember (686) */ interface PalletNominationPoolsPoolMember extends Struct { readonly poolId: u32; readonly points: u128; @@ -5726,7 +7360,7 @@ declare module '@polkadot/types/lookup' { readonly unbondingEras: BTreeMap; } - /** @name PalletNominationPoolsBondedPoolInner (635) */ + /** @name PalletNominationPoolsBondedPoolInner (691) */ interface PalletNominationPoolsBondedPoolInner extends Struct { readonly commission: PalletNominationPoolsCommission; readonly memberCounter: u32; @@ -5735,7 +7369,7 @@ declare module '@polkadot/types/lookup' { readonly state: PalletNominationPoolsPoolState; } - /** @name PalletNominationPoolsCommission (636) */ + /** @name PalletNominationPoolsCommission (692) */ interface PalletNominationPoolsCommission extends Struct { readonly current: Option>; readonly max: Option; @@ -5744,7 +7378,7 @@ declare module '@polkadot/types/lookup' { readonly claimPermission: Option; } - /** @name PalletNominationPoolsPoolRoles (639) */ + /** @name PalletNominationPoolsPoolRoles (695) */ interface PalletNominationPoolsPoolRoles extends Struct { readonly depositor: AccountId32; readonly root: Option; @@ -5752,7 +7386,7 @@ declare module '@polkadot/types/lookup' { readonly bouncer: Option; } - /** @name PalletNominationPoolsRewardPool (640) */ + /** @name PalletNominationPoolsRewardPool (696) */ interface PalletNominationPoolsRewardPool extends Struct { readonly lastRecordedRewardCounter: u128; readonly lastRecordedTotalPayouts: u128; @@ -5761,19 +7395,19 @@ declare module '@polkadot/types/lookup' { readonly totalCommissionClaimed: u128; } - /** @name PalletNominationPoolsSubPools (641) */ + /** @name PalletNominationPoolsSubPools (697) */ interface PalletNominationPoolsSubPools extends Struct { readonly noEra: PalletNominationPoolsUnbondPool; readonly withEra: BTreeMap; } - /** @name PalletNominationPoolsUnbondPool (642) */ + /** @name PalletNominationPoolsUnbondPool (698) */ interface PalletNominationPoolsUnbondPool extends Struct { readonly points: u128; readonly balance: u128; } - /** @name PalletNominationPoolsError (647) */ + /** @name PalletNominationPoolsError (703) */ interface PalletNominationPoolsError extends Enum { readonly isPoolNotFound: boolean; readonly isPoolMemberNotFound: boolean; @@ -5808,20 +7442,57 @@ declare module '@polkadot/types/lookup' { readonly isInvalidPoolId: boolean; readonly isBondExtraRestricted: boolean; readonly isNothingToAdjust: boolean; - readonly type: 'PoolNotFound' | 'PoolMemberNotFound' | 'RewardPoolNotFound' | 'SubPoolsNotFound' | 'AccountBelongsToOtherPool' | 'FullyUnbonding' | 'MaxUnbondingLimit' | 'CannotWithdrawAny' | 'MinimumBondNotMet' | 'OverflowRisk' | 'NotDestroying' | 'NotNominator' | 'NotKickerOrDestroying' | 'NotOpen' | 'MaxPools' | 'MaxPoolMembers' | 'CanNotChangeState' | 'DoesNotHavePermission' | 'MetadataExceedsMaxLen' | 'Defensive' | 'PartialUnbondNotAllowedPermissionlessly' | 'MaxCommissionRestricted' | 'CommissionExceedsMaximum' | 'CommissionExceedsGlobalMaximum' | 'CommissionChangeThrottled' | 'CommissionChangeRateNotAllowed' | 'NoPendingCommission' | 'NoCommissionCurrentSet' | 'PoolIdInUse' | 'InvalidPoolId' | 'BondExtraRestricted' | 'NothingToAdjust'; - } - - /** @name PalletNominationPoolsDefensiveError (648) */ + readonly type: + | "PoolNotFound" + | "PoolMemberNotFound" + | "RewardPoolNotFound" + | "SubPoolsNotFound" + | "AccountBelongsToOtherPool" + | "FullyUnbonding" + | "MaxUnbondingLimit" + | "CannotWithdrawAny" + | "MinimumBondNotMet" + | "OverflowRisk" + | "NotDestroying" + | "NotNominator" + | "NotKickerOrDestroying" + | "NotOpen" + | "MaxPools" + | "MaxPoolMembers" + | "CanNotChangeState" + | "DoesNotHavePermission" + | "MetadataExceedsMaxLen" + | "Defensive" + | "PartialUnbondNotAllowedPermissionlessly" + | "MaxCommissionRestricted" + | "CommissionExceedsMaximum" + | "CommissionExceedsGlobalMaximum" + | "CommissionChangeThrottled" + | "CommissionChangeRateNotAllowed" + | "NoPendingCommission" + | "NoCommissionCurrentSet" + | "PoolIdInUse" + | "InvalidPoolId" + | "BondExtraRestricted" + | "NothingToAdjust"; + } + + /** @name PalletNominationPoolsDefensiveError (704) */ interface PalletNominationPoolsDefensiveError extends Enum { readonly isNotEnoughSpaceInUnbondPool: boolean; readonly isPoolNotFound: boolean; readonly isRewardPoolNotFound: boolean; readonly isSubPoolsNotFound: boolean; readonly isBondedStashKilledPrematurely: boolean; - readonly type: 'NotEnoughSpaceInUnbondPool' | 'PoolNotFound' | 'RewardPoolNotFound' | 'SubPoolsNotFound' | 'BondedStashKilledPrematurely'; + readonly type: + | "NotEnoughSpaceInUnbondPool" + | "PoolNotFound" + | "RewardPoolNotFound" + | "SubPoolsNotFound" + | "BondedStashKilledPrematurely"; } - /** @name PalletSchedulerScheduled (651) */ + /** @name PalletSchedulerScheduled (707) */ interface PalletSchedulerScheduled extends Struct { readonly maybeId: Option; readonly priority: u8; @@ -5830,17 +7501,22 @@ declare module '@polkadot/types/lookup' { readonly origin: TangleTestnetRuntimeOriginCaller; } - /** @name PalletSchedulerError (653) */ + /** @name PalletSchedulerError (709) */ interface PalletSchedulerError extends Enum { readonly isFailedToSchedule: boolean; readonly isNotFound: boolean; readonly isTargetBlockNumberInPast: boolean; readonly isRescheduleNoChange: boolean; readonly isNamed: boolean; - readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange' | 'Named'; + readonly type: + | "FailedToSchedule" + | "NotFound" + | "TargetBlockNumberInPast" + | "RescheduleNoChange" + | "Named"; } - /** @name PalletPreimageOldRequestStatus (654) */ + /** @name PalletPreimageOldRequestStatus (710) */ interface PalletPreimageOldRequestStatus extends Enum { readonly isUnrequested: boolean; readonly asUnrequested: { @@ -5853,10 +7529,10 @@ declare module '@polkadot/types/lookup' { readonly count: u32; readonly len: Option; } & Struct; - readonly type: 'Unrequested' | 'Requested'; + readonly type: "Unrequested" | "Requested"; } - /** @name PalletPreimageRequestStatus (656) */ + /** @name PalletPreimageRequestStatus (712) */ interface PalletPreimageRequestStatus extends Enum { readonly isUnrequested: boolean; readonly asUnrequested: { @@ -5869,10 +7545,10 @@ declare module '@polkadot/types/lookup' { readonly count: u32; readonly maybeLen: Option; } & Struct; - readonly type: 'Unrequested' | 'Requested'; + readonly type: "Unrequested" | "Requested"; } - /** @name PalletPreimageError (660) */ + /** @name PalletPreimageError (716) */ interface PalletPreimageError extends Enum { readonly isTooBig: boolean; readonly isAlreadyNoted: boolean; @@ -5882,52 +7558,60 @@ declare module '@polkadot/types/lookup' { readonly isNotRequested: boolean; readonly isTooMany: boolean; readonly isTooFew: boolean; - readonly type: 'TooBig' | 'AlreadyNoted' | 'NotAuthorized' | 'NotNoted' | 'Requested' | 'NotRequested' | 'TooMany' | 'TooFew'; - } - - /** @name SpStakingOffenceOffenceDetails (661) */ + readonly type: + | "TooBig" + | "AlreadyNoted" + | "NotAuthorized" + | "NotNoted" + | "Requested" + | "NotRequested" + | "TooMany" + | "TooFew"; + } + + /** @name SpStakingOffenceOffenceDetails (717) */ interface SpStakingOffenceOffenceDetails extends Struct { readonly offender: ITuple<[AccountId32, SpStakingExposure]>; readonly reporters: Vec; } - /** @name PalletTxPauseError (663) */ + /** @name PalletTxPauseError (719) */ interface PalletTxPauseError extends Enum { readonly isIsPaused: boolean; readonly isIsUnpaused: boolean; readonly isUnpausable: boolean; readonly isNotFound: boolean; - readonly type: 'IsPaused' | 'IsUnpaused' | 'Unpausable' | 'NotFound'; + readonly type: "IsPaused" | "IsUnpaused" | "Unpausable" | "NotFound"; } - /** @name PalletImOnlineError (666) */ + /** @name PalletImOnlineError (722) */ interface PalletImOnlineError extends Enum { readonly isInvalidKey: boolean; readonly isDuplicatedHeartbeat: boolean; - readonly type: 'InvalidKey' | 'DuplicatedHeartbeat'; + readonly type: "InvalidKey" | "DuplicatedHeartbeat"; } - /** @name PalletIdentityRegistration (668) */ + /** @name PalletIdentityRegistration (724) */ interface PalletIdentityRegistration extends Struct { readonly judgements: Vec>; readonly deposit: u128; readonly info: PalletIdentityLegacyIdentityInfo; } - /** @name PalletIdentityRegistrarInfo (677) */ + /** @name PalletIdentityRegistrarInfo (733) */ interface PalletIdentityRegistrarInfo extends Struct { readonly account: AccountId32; readonly fee: u128; readonly fields: u64; } - /** @name PalletIdentityAuthorityProperties (679) */ + /** @name PalletIdentityAuthorityProperties (735) */ interface PalletIdentityAuthorityProperties extends Struct { readonly suffix: Bytes; readonly allocation: u32; } - /** @name PalletIdentityError (682) */ + /** @name PalletIdentityError (738) */ interface PalletIdentityError extends Enum { readonly isTooManySubAccounts: boolean; readonly isNotFound: boolean; @@ -5955,16 +7639,42 @@ declare module '@polkadot/types/lookup' { readonly isUsernameTaken: boolean; readonly isNoUsername: boolean; readonly isNotExpired: boolean; - readonly type: 'TooManySubAccounts' | 'NotFound' | 'NotNamed' | 'EmptyIndex' | 'FeeChanged' | 'NoIdentity' | 'StickyJudgement' | 'JudgementGiven' | 'InvalidJudgement' | 'InvalidIndex' | 'InvalidTarget' | 'TooManyRegistrars' | 'AlreadyClaimed' | 'NotSub' | 'NotOwned' | 'JudgementForDifferentIdentity' | 'JudgementPaymentFailed' | 'InvalidSuffix' | 'NotUsernameAuthority' | 'NoAllocation' | 'InvalidSignature' | 'RequiresSignature' | 'InvalidUsername' | 'UsernameTaken' | 'NoUsername' | 'NotExpired'; - } - - /** @name PalletUtilityError (683) */ + readonly type: + | "TooManySubAccounts" + | "NotFound" + | "NotNamed" + | "EmptyIndex" + | "FeeChanged" + | "NoIdentity" + | "StickyJudgement" + | "JudgementGiven" + | "InvalidJudgement" + | "InvalidIndex" + | "InvalidTarget" + | "TooManyRegistrars" + | "AlreadyClaimed" + | "NotSub" + | "NotOwned" + | "JudgementForDifferentIdentity" + | "JudgementPaymentFailed" + | "InvalidSuffix" + | "NotUsernameAuthority" + | "NoAllocation" + | "InvalidSignature" + | "RequiresSignature" + | "InvalidUsername" + | "UsernameTaken" + | "NoUsername" + | "NotExpired"; + } + + /** @name PalletUtilityError (739) */ interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; - readonly type: 'TooManyCalls'; + readonly type: "TooManyCalls"; } - /** @name PalletMultisigMultisig (685) */ + /** @name PalletMultisigMultisig (741) */ interface PalletMultisigMultisig extends Struct { readonly when: PalletMultisigTimepoint; readonly deposit: u128; @@ -5972,7 +7682,7 @@ declare module '@polkadot/types/lookup' { readonly approvals: Vec; } - /** @name PalletMultisigError (686) */ + /** @name PalletMultisigError (742) */ interface PalletMultisigError extends Enum { readonly isMinimumThreshold: boolean; readonly isAlreadyApproved: boolean; @@ -5988,10 +7698,24 @@ declare module '@polkadot/types/lookup' { readonly isUnexpectedTimepoint: boolean; readonly isMaxWeightTooLow: boolean; readonly isAlreadyStored: boolean; - readonly type: 'MinimumThreshold' | 'AlreadyApproved' | 'NoApprovalsNeeded' | 'TooFewSignatories' | 'TooManySignatories' | 'SignatoriesOutOfOrder' | 'SenderInSignatories' | 'NotFound' | 'NotOwner' | 'NoTimepoint' | 'WrongTimepoint' | 'UnexpectedTimepoint' | 'MaxWeightTooLow' | 'AlreadyStored'; - } - - /** @name FpRpcTransactionStatus (689) */ + readonly type: + | "MinimumThreshold" + | "AlreadyApproved" + | "NoApprovalsNeeded" + | "TooFewSignatories" + | "TooManySignatories" + | "SignatoriesOutOfOrder" + | "SenderInSignatories" + | "NotFound" + | "NotOwner" + | "NoTimepoint" + | "WrongTimepoint" + | "UnexpectedTimepoint" + | "MaxWeightTooLow" + | "AlreadyStored"; + } + + /** @name FpRpcTransactionStatus (745) */ interface FpRpcTransactionStatus extends Struct { readonly transactionHash: H256; readonly transactionIndex: u32; @@ -6002,10 +7726,10 @@ declare module '@polkadot/types/lookup' { readonly logsBloom: EthbloomBloom; } - /** @name EthbloomBloom (692) */ + /** @name EthbloomBloom (748) */ interface EthbloomBloom extends U8aFixed {} - /** @name EthereumReceiptReceiptV3 (694) */ + /** @name EthereumReceiptReceiptV3 (750) */ interface EthereumReceiptReceiptV3 extends Enum { readonly isLegacy: boolean; readonly asLegacy: EthereumReceiptEip658ReceiptData; @@ -6013,10 +7737,10 @@ declare module '@polkadot/types/lookup' { readonly asEip2930: EthereumReceiptEip658ReceiptData; readonly isEip1559: boolean; readonly asEip1559: EthereumReceiptEip658ReceiptData; - readonly type: 'Legacy' | 'Eip2930' | 'Eip1559'; + readonly type: "Legacy" | "Eip2930" | "Eip1559"; } - /** @name EthereumReceiptEip658ReceiptData (695) */ + /** @name EthereumReceiptEip658ReceiptData (751) */ interface EthereumReceiptEip658ReceiptData extends Struct { readonly statusCode: u8; readonly usedGas: U256; @@ -6024,14 +7748,14 @@ declare module '@polkadot/types/lookup' { readonly logs: Vec; } - /** @name EthereumBlock (696) */ + /** @name EthereumBlock (752) */ interface EthereumBlock extends Struct { readonly header: EthereumHeader; readonly transactions: Vec; readonly ommers: Vec; } - /** @name EthereumHeader (697) */ + /** @name EthereumHeader (753) */ interface EthereumHeader extends Struct { readonly parentHash: H256; readonly ommersHash: H256; @@ -6050,23 +7774,23 @@ declare module '@polkadot/types/lookup' { readonly nonce: EthereumTypesHashH64; } - /** @name EthereumTypesHashH64 (698) */ + /** @name EthereumTypesHashH64 (754) */ interface EthereumTypesHashH64 extends U8aFixed {} - /** @name PalletEthereumError (703) */ + /** @name PalletEthereumError (759) */ interface PalletEthereumError extends Enum { readonly isInvalidSignature: boolean; readonly isPreLogExists: boolean; - readonly type: 'InvalidSignature' | 'PreLogExists'; + readonly type: "InvalidSignature" | "PreLogExists"; } - /** @name PalletEvmCodeMetadata (704) */ + /** @name PalletEvmCodeMetadata (760) */ interface PalletEvmCodeMetadata extends Struct { readonly size_: u64; readonly hash_: H256; } - /** @name PalletEvmError (706) */ + /** @name PalletEvmError (762) */ interface PalletEvmError extends Enum { readonly isBalanceLow: boolean; readonly isFeeOverflow: boolean; @@ -6081,16 +7805,29 @@ declare module '@polkadot/types/lookup' { readonly isReentrancy: boolean; readonly isTransactionMustComeFromEOA: boolean; readonly isUndefined: boolean; - readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce' | 'GasLimitTooLow' | 'GasLimitTooHigh' | 'InvalidChainId' | 'InvalidSignature' | 'Reentrancy' | 'TransactionMustComeFromEOA' | 'Undefined'; - } - - /** @name PalletHotfixSufficientsError (707) */ + readonly type: + | "BalanceLow" + | "FeeOverflow" + | "PaymentOverflow" + | "WithdrawFailed" + | "GasPriceTooLow" + | "InvalidNonce" + | "GasLimitTooLow" + | "GasLimitTooHigh" + | "InvalidChainId" + | "InvalidSignature" + | "Reentrancy" + | "TransactionMustComeFromEOA" + | "Undefined"; + } + + /** @name PalletHotfixSufficientsError (763) */ interface PalletHotfixSufficientsError extends Enum { readonly isMaxAddressCountExceeded: boolean; - readonly type: 'MaxAddressCountExceeded'; + readonly type: "MaxAddressCountExceeded"; } - /** @name PalletAirdropClaimsError (709) */ + /** @name PalletAirdropClaimsError (765) */ interface PalletAirdropClaimsError extends Enum { readonly isInvalidEthereumSignature: boolean; readonly isInvalidNativeSignature: boolean; @@ -6100,28 +7837,39 @@ declare module '@polkadot/types/lookup' { readonly isPotUnderflow: boolean; readonly isInvalidStatement: boolean; readonly isVestedBalanceExists: boolean; - readonly type: 'InvalidEthereumSignature' | 'InvalidNativeSignature' | 'InvalidNativeAccount' | 'SignerHasNoClaim' | 'SenderHasNoClaim' | 'PotUnderflow' | 'InvalidStatement' | 'VestedBalanceExists'; - } - - /** @name PalletRolesRestakingLedger (710) */ + readonly type: + | "InvalidEthereumSignature" + | "InvalidNativeSignature" + | "InvalidNativeAccount" + | "SignerHasNoClaim" + | "SenderHasNoClaim" + | "PotUnderflow" + | "InvalidStatement" + | "VestedBalanceExists"; + } + + /** @name PalletRolesRestakingLedger (766) */ interface PalletRolesRestakingLedger extends Struct { readonly stash: AccountId32; readonly total: Compact; readonly profile: PalletRolesProfile; - readonly roles: BTreeMap; + readonly roles: BTreeMap< + TanglePrimitivesRolesRoleType, + PalletRolesProfileRecord + >; readonly roleKey: Bytes; readonly unlocking: Vec; readonly claimedRewards: Vec; readonly maxActiveServices: u32; } - /** @name PalletRolesUnlockChunk (716) */ + /** @name PalletRolesUnlockChunk (772) */ interface PalletRolesUnlockChunk extends Struct { readonly value: Compact; readonly era: Compact; } - /** @name PalletRolesError (720) */ + /** @name PalletRolesError (776) */ interface PalletRolesError extends Enum { readonly isNotValidator: boolean; readonly isHasRoleAssigned: boolean; @@ -6142,10 +7890,29 @@ declare module '@polkadot/types/lookup' { readonly isBoundNotMet: boolean; readonly isAlreadyClaimed: boolean; readonly isNoMoreChunks: boolean; - readonly type: 'NotValidator' | 'HasRoleAssigned' | 'RoleNotAssigned' | 'MaxRoles' | 'RoleCannotBeRemoved' | 'RestakingAmountCannotBeUpdated' | 'ExceedsMaxRestakeValue' | 'InsufficientRestakingBond' | 'ProfileUpdateFailed' | 'ProfileAlreadyExists' | 'NoProfileFound' | 'ProfileDeleteRequestFailed' | 'SessionKeysNotProvided' | 'KeySizeExceeded' | 'CannotGetCurrentEra' | 'InvalidEraToReward' | 'BoundNotMet' | 'AlreadyClaimed' | 'NoMoreChunks'; - } - - /** @name TanglePrimitivesJobsPhaseResult (721) */ + readonly type: + | "NotValidator" + | "HasRoleAssigned" + | "RoleNotAssigned" + | "MaxRoles" + | "RoleCannotBeRemoved" + | "RestakingAmountCannotBeUpdated" + | "ExceedsMaxRestakeValue" + | "InsufficientRestakingBond" + | "ProfileUpdateFailed" + | "ProfileAlreadyExists" + | "NoProfileFound" + | "ProfileDeleteRequestFailed" + | "SessionKeysNotProvided" + | "KeySizeExceeded" + | "CannotGetCurrentEra" + | "InvalidEraToReward" + | "BoundNotMet" + | "AlreadyClaimed" + | "NoMoreChunks"; + } + + /** @name TanglePrimitivesJobsPhaseResult (777) */ interface TanglePrimitivesJobsPhaseResult extends Struct { readonly owner: AccountId32; readonly result: TanglePrimitivesJobsJobResult; @@ -6154,7 +7921,7 @@ declare module '@polkadot/types/lookup' { readonly jobType: TanglePrimitivesJobsJobType; } - /** @name PalletJobsModuleError (723) */ + /** @name PalletJobsModuleError (779) */ interface PalletJobsModuleError extends Enum { readonly isInvalidJobPhase: boolean; readonly isInvalidValidator: boolean; @@ -6174,10 +7941,151 @@ declare module '@polkadot/types/lookup' { readonly isTooManyParticipants: boolean; readonly isExceedsMaxKeySize: boolean; readonly isTooManyJobsForValidator: boolean; - readonly type: 'InvalidJobPhase' | 'InvalidValidator' | 'InvalidJobParams' | 'PreviousResultNotFound' | 'ResultExpired' | 'JobAlreadyExpired' | 'JobNotFound' | 'PhaseOneResultNotFound' | 'NoRewards' | 'NotEnoughValidators' | 'EmptyResult' | 'EmptyJob' | 'ValidatorRoleKeyNotFound' | 'ResultNotExpectedType' | 'NoPermission' | 'TooManyParticipants' | 'ExceedsMaxKeySize' | 'TooManyJobsForValidator'; + readonly type: + | "InvalidJobPhase" + | "InvalidValidator" + | "InvalidJobParams" + | "PreviousResultNotFound" + | "ResultExpired" + | "JobAlreadyExpired" + | "JobNotFound" + | "PhaseOneResultNotFound" + | "NoRewards" + | "NotEnoughValidators" + | "EmptyResult" + | "EmptyJob" + | "ValidatorRoleKeyNotFound" + | "ResultNotExpectedType" + | "NoPermission" + | "TooManyParticipants" + | "ExceedsMaxKeySize" + | "TooManyJobsForValidator"; + } + + /** @name TanglePrimitivesJobsV2ServiceRequest (782) */ + interface TanglePrimitivesJobsV2ServiceRequest extends Struct { + readonly blueprint: u64; + readonly owner: AccountId32; + readonly permittedCallers: Vec; + readonly ttl: u64; + readonly args: Vec; + readonly operatorsWithApprovalState: Vec< + ITuple<[AccountId32, TanglePrimitivesJobsV2ApprovalState]> + >; + } + + /** @name TanglePrimitivesJobsV2ApprovalState (787) */ + interface TanglePrimitivesJobsV2ApprovalState extends Enum { + readonly isPending: boolean; + readonly isApproved: boolean; + readonly isRejected: boolean; + readonly type: "Pending" | "Approved" | "Rejected"; } - /** @name PalletDkgError (724) */ + /** @name TanglePrimitivesJobsV2Service (789) */ + interface TanglePrimitivesJobsV2Service extends Struct { + readonly id: u64; + readonly blueprint: u64; + readonly owner: AccountId32; + readonly permittedCallers: Vec; + readonly operators: Vec; + readonly ttl: u64; + } + + /** @name TanglePrimitivesJobsV2JobCall (793) */ + interface TanglePrimitivesJobsV2JobCall extends Struct { + readonly serviceId: u64; + readonly job: u8; + readonly args: Vec; + } + + /** @name TanglePrimitivesJobsV2JobCallResult (794) */ + interface TanglePrimitivesJobsV2JobCallResult extends Struct { + readonly serviceId: u64; + readonly callId: u64; + readonly result: Vec; + } + + /** @name TanglePrimitivesJobsV2OperatorProfile (795) */ + interface TanglePrimitivesJobsV2OperatorProfile extends Struct { + readonly services: BTreeSet; + readonly blueprints: BTreeSet; + } + + /** @name PalletServicesModuleError (798) */ + interface PalletServicesModuleError extends Enum { + readonly isBlueprintNotFound: boolean; + readonly isAlreadyRegistered: boolean; + readonly isInvalidRegistrationInput: boolean; + readonly isInvalidRequestInput: boolean; + readonly isInvalidJobCallInput: boolean; + readonly isInvalidJobResult: boolean; + readonly isNotRegistered: boolean; + readonly isServiceRequestNotFound: boolean; + readonly isServiceNotFound: boolean; + readonly isTypeCheck: boolean; + readonly asTypeCheck: TanglePrimitivesJobsV2TypeCheckError; + readonly isMaxPermittedCallersExceeded: boolean; + readonly isMaxServiceProvidersExceeded: boolean; + readonly isMaxServicesPerUserExceeded: boolean; + readonly isMaxFieldsExceeded: boolean; + readonly isApprovalNotRequested: boolean; + readonly isJobDefinitionNotFound: boolean; + readonly isServiceOrJobCallNotFound: boolean; + readonly isJobCallResultNotFound: boolean; + readonly isEvmAbiEncode: boolean; + readonly isOperatorProfileNotFound: boolean; + readonly isMaxServicesPerProviderExceeded: boolean; + readonly type: + | "BlueprintNotFound" + | "AlreadyRegistered" + | "InvalidRegistrationInput" + | "InvalidRequestInput" + | "InvalidJobCallInput" + | "InvalidJobResult" + | "NotRegistered" + | "ServiceRequestNotFound" + | "ServiceNotFound" + | "TypeCheck" + | "MaxPermittedCallersExceeded" + | "MaxServiceProvidersExceeded" + | "MaxServicesPerUserExceeded" + | "MaxFieldsExceeded" + | "ApprovalNotRequested" + | "JobDefinitionNotFound" + | "ServiceOrJobCallNotFound" + | "JobCallResultNotFound" + | "EvmAbiEncode" + | "OperatorProfileNotFound" + | "MaxServicesPerProviderExceeded"; + } + + /** @name TanglePrimitivesJobsV2TypeCheckError (799) */ + interface TanglePrimitivesJobsV2TypeCheckError extends Enum { + readonly isArgumentTypeMismatch: boolean; + readonly asArgumentTypeMismatch: { + readonly index: u8; + readonly expected: TanglePrimitivesJobsV2FieldFieldType; + readonly actual: TanglePrimitivesJobsV2FieldFieldType; + } & Struct; + readonly isNotEnoughArguments: boolean; + readonly asNotEnoughArguments: { + readonly expected: u8; + readonly actual: u8; + } & Struct; + readonly isResultTypeMismatch: boolean; + readonly asResultTypeMismatch: { + readonly index: u8; + readonly expected: TanglePrimitivesJobsV2FieldFieldType; + readonly actual: TanglePrimitivesJobsV2FieldFieldType; + } & Struct; + readonly type: + | "ArgumentTypeMismatch" + | "NotEnoughArguments" + | "ResultTypeMismatch"; + } + + /** @name PalletDkgError (800) */ interface PalletDkgError extends Enum { readonly isCannotRetreiveSigner: boolean; readonly isNotEnoughSigners: boolean; @@ -6227,32 +8135,80 @@ declare module '@polkadot/types/lookup' { readonly isInvalidPublicKey: boolean; readonly isInvalidMessage: boolean; readonly isMalformedStarkSignature: boolean; - readonly type: 'CannotRetreiveSigner' | 'NotEnoughSigners' | 'InvalidSignatureData' | 'NoParticipantsFound' | 'NoSignaturesFound' | 'InvalidJobType' | 'DuplicateSignature' | 'InvalidSignature' | 'InvalidSignatureScheme' | 'InvalidSignatureDeserialization' | 'InvalidVerifyingKey' | 'InvalidVerifyingKeyDeserialization' | 'SigningKeyMismatch' | 'InvalidParticipantPublicKey' | 'InvalidBlsPublicKey' | 'InvalidRoleType' | 'InvalidJustification' | 'MalformedRoundMessage' | 'NotSignedByOffender' | 'ValidDecommitment' | 'ValidDataSize' | 'ValidFeldmanVerification' | 'ValidSchnorrProof' | 'ValidRingPedersenParameters' | 'ValidModProof' | 'ValidFrostSignatureShare' | 'InvalidFrostMessageSerialization' | 'InvalidFrostMessageDeserialization' | 'InvalidIdentifierDeserialization' | 'ValidFrostSignature' | 'UnknownIdentifier' | 'DuplicateIdentifier' | 'IncorrectNumberOfIdentifiers' | 'IdentifierDerivationNotSupported' | 'MalformedFrostSignature' | 'InvalidFrostSignature' | 'InvalidFrostSignatureShare' | 'InvalidFrostSignatureScheme' | 'MalformedFrostVerifyingKey' | 'MalformedFrostSigningKey' | 'MissingFrostCommitment' | 'IdentityCommitment' | 'FrostFieldError' | 'FrostGroupError' | 'FieldElementError' | 'InvalidPublicKey' | 'InvalidMessage' | 'MalformedStarkSignature'; - } - - /** @name PalletZksaasError (725) */ + readonly type: + | "CannotRetreiveSigner" + | "NotEnoughSigners" + | "InvalidSignatureData" + | "NoParticipantsFound" + | "NoSignaturesFound" + | "InvalidJobType" + | "DuplicateSignature" + | "InvalidSignature" + | "InvalidSignatureScheme" + | "InvalidSignatureDeserialization" + | "InvalidVerifyingKey" + | "InvalidVerifyingKeyDeserialization" + | "SigningKeyMismatch" + | "InvalidParticipantPublicKey" + | "InvalidBlsPublicKey" + | "InvalidRoleType" + | "InvalidJustification" + | "MalformedRoundMessage" + | "NotSignedByOffender" + | "ValidDecommitment" + | "ValidDataSize" + | "ValidFeldmanVerification" + | "ValidSchnorrProof" + | "ValidRingPedersenParameters" + | "ValidModProof" + | "ValidFrostSignatureShare" + | "InvalidFrostMessageSerialization" + | "InvalidFrostMessageDeserialization" + | "InvalidIdentifierDeserialization" + | "ValidFrostSignature" + | "UnknownIdentifier" + | "DuplicateIdentifier" + | "IncorrectNumberOfIdentifiers" + | "IdentifierDerivationNotSupported" + | "MalformedFrostSignature" + | "InvalidFrostSignature" + | "InvalidFrostSignatureShare" + | "InvalidFrostSignatureScheme" + | "MalformedFrostVerifyingKey" + | "MalformedFrostSigningKey" + | "MissingFrostCommitment" + | "IdentityCommitment" + | "FrostFieldError" + | "FrostGroupError" + | "FieldElementError" + | "InvalidPublicKey" + | "InvalidMessage" + | "MalformedStarkSignature"; + } + + /** @name PalletZksaasError (801) */ interface PalletZksaasError extends Enum { readonly isInvalidJobType: boolean; readonly isInvalidProof: boolean; readonly isMalformedProof: boolean; - readonly type: 'InvalidJobType' | 'InvalidProof' | 'MalformedProof'; + readonly type: "InvalidJobType" | "InvalidProof" | "MalformedProof"; } - /** @name PalletProxyProxyDefinition (728) */ + /** @name PalletProxyProxyDefinition (804) */ interface PalletProxyProxyDefinition extends Struct { readonly delegate: AccountId32; readonly proxyType: TangleTestnetRuntimeProxyType; readonly delay: u64; } - /** @name PalletProxyAnnouncement (732) */ + /** @name PalletProxyAnnouncement (808) */ interface PalletProxyAnnouncement extends Struct { readonly real: AccountId32; readonly callHash: H256; readonly height: u64; } - /** @name PalletProxyError (734) */ + /** @name PalletProxyError (810) */ interface PalletProxyError extends Enum { readonly isTooMany: boolean; readonly isNotFound: boolean; @@ -6262,7 +8218,15 @@ declare module '@polkadot/types/lookup' { readonly isNoPermission: boolean; readonly isUnannounced: boolean; readonly isNoSelfProxy: boolean; - readonly type: 'TooMany' | 'NotFound' | 'NotProxy' | 'Unproxyable' | 'Duplicate' | 'NoPermission' | 'Unannounced' | 'NoSelfProxy'; + readonly type: + | "TooMany" + | "NotFound" + | "NotProxy" + | "Unproxyable" + | "Duplicate" + | "NoPermission" + | "Unannounced" + | "NoSelfProxy"; } /** @name PalletMultiAssetDelegationOperatorOperatorMetadata (735) */ @@ -6392,21 +8356,21 @@ declare module '@polkadot/types/lookup' { interface SygmaAccessSegregatorError extends Enum { readonly isUnimplemented: boolean; readonly isGrantAccessFailed: boolean; - readonly type: 'Unimplemented' | 'GrantAccessFailed'; + readonly type: "Unimplemented" | "GrantAccessFailed"; } /** @name SygmaBasicFeehandlerError (763) */ interface SygmaBasicFeehandlerError extends Enum { readonly isUnimplemented: boolean; readonly isAccessDenied: boolean; - readonly type: 'Unimplemented' | 'AccessDenied'; + readonly type: "Unimplemented" | "AccessDenied"; } /** @name SygmaFeeHandlerRouterError (764) */ interface SygmaFeeHandlerRouterError extends Enum { readonly isAccessDenied: boolean; readonly isUnimplemented: boolean; - readonly type: 'AccessDenied' | 'Unimplemented'; + readonly type: "AccessDenied" | "Unimplemented"; } /** @name SygmaPercentageFeehandlerError (766) */ @@ -6415,7 +8379,11 @@ declare module '@polkadot/types/lookup' { readonly isAccessDenied: boolean; readonly isFeeRateOutOfRange: boolean; readonly isInvalidFeeBound: boolean; - readonly type: 'Unimplemented' | 'AccessDenied' | 'FeeRateOutOfRange' | 'InvalidFeeBound'; + readonly type: + | "Unimplemented" + | "AccessDenied" + | "FeeRateOutOfRange" + | "InvalidFeeBound"; } /** @name SygmaBridgeError (773) */ @@ -6423,11 +8391,7 @@ declare module '@polkadot/types/lookup' { readonly isAccessDenied: boolean; readonly isBadMpcSignature: boolean; readonly isInsufficientBalance: boolean; - readonly isTransactFailedDeposit: boolean; - readonly isTransactFailedWithdraw: boolean; - readonly isTransactFailedFeeDeposit: boolean; - readonly isTransactFailedHoldInReserved: boolean; - readonly isTransactFailedReleaseFromReserved: boolean; + readonly isTransactFailed: boolean; readonly isFeeTooExpensive: boolean; readonly isMissingMpcAddress: boolean; readonly isMpcAddrNotUpdatable: boolean; @@ -6438,11 +8402,7 @@ declare module '@polkadot/types/lookup' { readonly isProposalAlreadyComplete: boolean; readonly isEmptyProposalList: boolean; readonly isTransactorFailed: boolean; - readonly isInvalidDepositDataInvalidLength: boolean; - readonly isInvalidDepositDataInvalidAmount: boolean; - readonly isInvalidDepositDataInvalidRecipientLength: boolean; - readonly isInvalidDepositDataRecipientLengthNotMatch: boolean; - readonly isInvalidDepositDataInvalidRecipient: boolean; + readonly isInvalidDepositData: boolean; readonly isDestDomainNotSupported: boolean; readonly isDestChainIDNotMatch: boolean; readonly isExtractDestDataFailed: boolean; @@ -6450,7 +8410,29 @@ declare module '@polkadot/types/lookup' { readonly isDepositNonceOverflow: boolean; readonly isNoLiquidityHolderAccountBound: boolean; readonly isUnimplemented: boolean; - readonly type: 'AccessDenied' | 'BadMpcSignature' | 'InsufficientBalance' | 'TransactFailedDeposit' | 'TransactFailedWithdraw' | 'TransactFailedFeeDeposit' | 'TransactFailedHoldInReserved' | 'TransactFailedReleaseFromReserved' | 'FeeTooExpensive' | 'MissingMpcAddress' | 'MpcAddrNotUpdatable' | 'BridgePaused' | 'BridgeUnpaused' | 'MissingFeeConfig' | 'AssetNotBound' | 'ProposalAlreadyComplete' | 'EmptyProposalList' | 'TransactorFailed' | 'InvalidDepositDataInvalidLength' | 'InvalidDepositDataInvalidAmount' | 'InvalidDepositDataInvalidRecipientLength' | 'InvalidDepositDataRecipientLengthNotMatch' | 'InvalidDepositDataInvalidRecipient' | 'DestDomainNotSupported' | 'DestChainIDNotMatch' | 'ExtractDestDataFailed' | 'DecimalConversionFail' | 'DepositNonceOverflow' | 'NoLiquidityHolderAccountBound' | 'Unimplemented'; + readonly type: + | "AccessDenied" + | "BadMpcSignature" + | "InsufficientBalance" + | "TransactFailed" + | "FeeTooExpensive" + | "MissingMpcAddress" + | "MpcAddrNotUpdatable" + | "BridgePaused" + | "BridgeUnpaused" + | "MissingFeeConfig" + | "AssetNotBound" + | "ProposalAlreadyComplete" + | "EmptyProposalList" + | "TransactorFailed" + | "InvalidDepositData" + | "DestDomainNotSupported" + | "DestChainIDNotMatch" + | "ExtractDestDataFailed" + | "DecimalConversionFail" + | "DepositNonceOverflow" + | "NoLiquidityHolderAccountBound" + | "Unimplemented"; } /** @name FrameSystemExtensionsCheckNonZeroSender (776) */ @@ -6488,5 +8470,4 @@ declare module '@polkadot/types/lookup' { /** @name TangleTestnetRuntimeRuntime (788) */ type TangleTestnetRuntimeRuntime = Null; - } // declare module diff --git a/types/src/metadata/metadata.json b/types/src/metadata/metadata.json index 8a952c854..1e12c697d 100644 --- a/types/src/metadata/metadata.json +++ b/types/src/metadata/metadata.json @@ -2,4 +2,4 @@ "jsonrpc": "2.0", "result": "0x6d6574610e550c000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c7536340000280000062c002c000005060030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c011470686173650103011450686173650001146576656e7450010445000118746f70696373c90101185665633c543e000050085874616e676c655f746573746e65745f72756e74696d653052756e74696d654576656e740001a81853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e000000105375646f04007c016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0002001841737365747304008c017470616c6c65745f6173736574733a3a4576656e743c52756e74696d653e0004002042616c616e636573040090017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009801a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0006001c4772616e64706104009c015470616c6c65745f6772616e6470613a3a4576656e740009001c496e64696365730400b0017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e000a002444656d6f63726163790400b4018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e000b001c436f756e63696c0400c801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e000c001c56657374696e670400cc017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e000d0024456c656374696f6e730400d001a470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4576656e743c52756e74696d653e000e0068456c656374696f6e50726f76696465724d756c746950686173650400dc01d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e000f001c5374616b696e670400f0017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e0010001c53657373696f6e04000901015470616c6c65745f73657373696f6e3a3a4576656e7400110020547265617375727904000d01017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e00130020426f756e7469657304001101017c70616c6c65745f626f756e746965733a3a4576656e743c52756e74696d653e001400344368696c64426f756e7469657304001501019470616c6c65745f6368696c645f626f756e746965733a3a4576656e743c52756e74696d653e00150020426167734c69737404001901018070616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d653e0016003c4e6f6d696e6174696f6e506f6f6c7304001d01019c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a4576656e743c52756e74696d653e001700245363686564756c657204003901018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e00180020507265696d61676504004501017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e001900204f6666656e63657304004901015870616c6c65745f6f6666656e6365733a3a4576656e74001a001c5478506175736504005101017c70616c6c65745f74785f70617573653a3a4576656e743c52756e74696d653e001b0020496d4f6e6c696e6504005d01018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e001c00204964656e7469747904008101017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e001d001c5574696c69747904008901015470616c6c65745f7574696c6974793a3a4576656e74001e00204d756c746973696704008d01017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e001f0020457468657265756d04009501015870616c6c65745f657468657265756d3a3a4576656e740020000c45564d0400c101016870616c6c65745f65766d3a3a4576656e743c52756e74696d653e0021001c426173654665650400cd01015870616c6c65745f626173655f6665653a3a4576656e7400240018436c61696d730400dd01019470616c6c65745f61697264726f705f636c61696d733a3a4576656e743c52756e74696d653e00260014526f6c65730400e901017070616c6c65745f726f6c65733a3a4576656e743c52756e74696d653e002700104a6f627304000502016c70616c6c65745f6a6f62733a3a4576656e743c52756e74696d653e0028000c446b6704007902016870616c6c65745f646b673a3a4576656e743c52756e74696d653e002900185a6b5361615304008102017470616c6c65745f7a6b736161733a3a4576656e743c52756e74696d653e002a001450726f787904008902017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b00504d756c7469417373657444656c65676174696f6e0400950201b470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e3a3a4576656e743c52756e74696d653e002c00545379676d6141636365737353656772656761746f720400a102019c7379676d615f6163636573735f73656772656761746f723a3a4576656e743c52756e74696d653e002d00505379676d61426173696346656548616e646c65720400a50201987379676d615f62617369635f66656568616e646c65723a3a4576656e743c52756e74696d653e002e00545379676d6146656548616e646c6572526f757465720400ed0201a07379676d615f6665655f68616e646c65725f726f757465723a3a4576656e743c52756e74696d653e002f00645379676d6150657263656e7461676546656548616e646c65720400f50201ac7379676d615f70657263656e746167655f66656568616e646c65723a3a4576656e743c52756e74696d653e0030002c5379676d614272696467650400f90201707379676d615f6272696467653a3a4576656e743c52756e74696d653e00310000540c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6e780110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007800000500007c0c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c748001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c648801504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c748001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574800418526573756c740804540184044501640108084f6b040084000000000c45727204006400000100008400000400008804184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100008c0c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964180128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964180128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964180128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964180128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964180128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964180128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964180128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964180128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964180128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964180128543a3a417373657449640001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964180128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964180128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964180128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964180128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000980c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749c0c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574a00134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a0000002a400a400000408a82c00a80c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400ac013c656432353531393a3a5075626c69630000ac0c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000b00c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b40c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657810013c5265666572656e64756d496e6465780001247468726573686f6c64b80134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657810013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114756e74696c2c0144426c6f636b4e756d626572466f723c543e00090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011c543a3a48617368000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657810013c5265666572656e64756d496e646578000110766f7465bc01644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657810012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657810012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572c401344d657461646174614f776e6572043c4d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572c401344d657461646174614f776e6572043c4d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572c401344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572c401344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b80c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000bc0c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465c00110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000c00c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000c40c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040010012450726f70496e646578000100285265666572656e64756d040010013c5265666572656e64756d496e64657800020000c80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564780110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c748001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c748001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d00c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144576656e7404045400011c1c4e65775465726d04012c6e65775f6d656d62657273d401ec5665633c283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c2042616c616e63654f663c543e293e000014450141206e6577207465726d2077697468206e65775f6d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e550174686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e65644501666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e645501736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f2c626567696e20776974682e24456d7074795465726d00010831014e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6dc8604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e34456c656374696f6e4572726f72000204e4496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e304d656d6265724b69636b65640401186d656d6265720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000308410141206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f723060456d7074795465726d602e2452656e6f756e63656404012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400040498536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e4043616e646964617465536c617368656408012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0005103901412063616e6469646174652077617320736c617368656420627920616d6f756e742064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722872756e6e65722d75702e00e44e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e4453656174486f6c646572536c617368656408012c736561745f686f6c6465720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000604350141207365617420686f6c6465722077617320736c617368656420627920616d6f756e74206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d4000002d800d800000408001800dc0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d70757465e0013c456c656374696f6e436f6d707574650001186f726967696e8801504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a6563746564780110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c55017468652073746f72656420736f6c7574696f6e20776173207375626d6974656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d70757465e0013c456c656374696f6e436f6d7075746500011473636f7265e40134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6de8016050686173653c426c6f636b4e756d626572466f723c543e3e000108746fe8016050686173653c426c6f636b4e756d626572466f723c543e3e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e0089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e637900040000e4084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e63650000e8089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e012c01100c4f6666000000185369676e656400010020556e7369676e65640400ec012828626f6f6c2c20426e2900020024456d657267656e637900030000ec00000408782c00f0103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e740404540001441c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640c01147374617368000130543a3a4163636f756e74496400011064657374f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000118616d6f756e7418013042616c616e63654f663c543e0001040d01546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e7420746f20746869732064657374696e6174696f6e2e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6ef8011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e7449640001147072656673fc013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e68536e617073686f74566f7465727353697a65457863656564656404011073697a6510010c753332000e0468566f746572732073697a65206c696d697420726561636865642e6c536e617073686f745461726765747353697a65457863656564656404011073697a6510010c753332000f046c546172676574732073697a65206c696d697420726561636865642e20466f7263654572610401106d6f64650501011c466f7263696e670010047441206e657720666f72636520657261206d6f646520776173207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f4083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e6500040000f80c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000fc083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e0101011c50657262696c6c00011c626c6f636b6564780110626f6f6c00000101000006f8000501083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c776179730003000009010c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d010c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001382050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e4841737365745370656e64417070726f766564180114696e6465781001285370656e64496e64657800012861737365745f6b696e64840130543a3a41737365744b696e64000118616d6f756e74180150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279000138543a3a42656e656669636961727900012876616c69645f66726f6d2c0144426c6f636b4e756d626572466f723c543e0001246578706972655f61742c0144426c6f636b4e756d626572466f723c543e000904b441206e6577206173736574207370656e642070726f706f73616c20686173206265656e20617070726f7665642e4041737365745370656e64566f69646564040114696e6465781001285370656e64496e646578000a0474416e20617070726f766564207370656e642077617320766f696465642e1050616964080114696e6465781001285370656e64496e6465780001287061796d656e745f69648401643c543a3a5061796d6173746572206173205061793e3a3a4964000b044c41207061796d656e742068617070656e65642e345061796d656e744661696c6564080114696e6465781001285370656e64496e6465780001287061796d656e745f69648401643c543a3a5061796d6173746572206173205061793e3a3a4964000c049041207061796d656e74206661696c656420616e642063616e20626520726574726965642e385370656e6450726f636573736564040114696e6465781001285370656e64496e646578000d084d0141207370656e64207761732070726f63657373656420616e642072656d6f7665642066726f6d207468652073746f726167652e204974206d696768742068617665206265656e207375636365737366756c6c797070616964206f72206974206d6179206861766520657870697265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657411010c3c70616c6c65745f626f756e746965731870616c6c6574144576656e7408045400044900012c38426f756e747950726f706f736564040114696e64657810012c426f756e7479496e646578000004504e657720626f756e74792070726f706f73616c2e38426f756e747952656a6563746564080114696e64657810012c426f756e7479496e646578000110626f6e6418013c42616c616e63654f663c542c20493e000104cc4120626f756e74792070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e48426f756e7479426563616d65416374697665040114696e64657810012c426f756e7479496e646578000204b84120626f756e74792070726f706f73616c2069732066756e64656420616e6420626563616d65206163746976652e34426f756e747941776172646564080114696e64657810012c426f756e7479496e64657800012c62656e6566696369617279000130543a3a4163636f756e744964000304944120626f756e7479206973206177617264656420746f20612062656e65666963696172792e34426f756e7479436c61696d65640c0114696e64657810012c426f756e7479496e6465780001187061796f757418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640004048c4120626f756e747920697320636c61696d65642062792062656e65666963696172792e38426f756e747943616e63656c6564040114696e64657810012c426f756e7479496e646578000504584120626f756e74792069732063616e63656c6c65642e38426f756e7479457874656e646564040114696e64657810012c426f756e7479496e646578000604704120626f756e74792065787069727920697320657874656e6465642e38426f756e7479417070726f766564040114696e64657810012c426f756e7479496e646578000704544120626f756e747920697320617070726f7665642e3c43757261746f7250726f706f736564080124626f756e74795f696410012c426f756e7479496e64657800011c63757261746f72000130543a3a4163636f756e744964000804744120626f756e74792063757261746f722069732070726f706f7365642e4443757261746f72556e61737369676e6564040124626f756e74795f696410012c426f756e7479496e6465780009047c4120626f756e74792063757261746f7220697320756e61737369676e65642e3c43757261746f724163636570746564080124626f756e74795f696410012c426f756e7479496e64657800011c63757261746f72000130543a3a4163636f756e744964000a04744120626f756e74792063757261746f722069732061636365707465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657415010c5470616c6c65745f6368696c645f626f756e746965731870616c6c6574144576656e74040454000110144164646564080114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780000046041206368696c642d626f756e74792069732061646465642e1c417761726465640c0114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e64657800012c62656e6566696369617279000130543a3a4163636f756e744964000104ac41206368696c642d626f756e7479206973206177617264656420746f20612062656e65666963696172792e1c436c61696d6564100114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780001187061796f757418013042616c616e63654f663c543e00012c62656e6566696369617279000130543a3a4163636f756e744964000204a441206368696c642d626f756e747920697320636c61696d65642062792062656e65666963696172792e2043616e63656c6564080114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780003047041206368696c642d626f756e74792069732063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d2c0120543a3a53636f7265000108746f2c0120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f72652c0120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65741d010c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144576656e740404540001481c437265617465640801246465706f7369746f72000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000004604120706f6f6c20686173206265656e20637265617465642e18426f6e6465641001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000118626f6e64656418013042616c616e63654f663c543e0001186a6f696e6564780110626f6f6c0001049441206d656d6265722068617320626563616d6520626f6e64656420696e206120706f6f6c2e1c506169644f75740c01186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c49640001187061796f757418013042616c616e63654f663c543e0002048c41207061796f757420686173206265656e206d61646520746f2061206d656d6265722e20556e626f6e6465641401186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e00010c657261100120457261496e64657800032c9841206d656d6265722068617320756e626f6e6465642066726f6d20746865697220706f6f6c2e0039012d206062616c616e6365602069732074686520636f72726573706f6e64696e672062616c616e6365206f6620746865206e756d626572206f6620706f696e7473207468617420686173206265656e5501202072657175657374656420746f20626520756e626f6e646564202874686520617267756d656e74206f66207468652060756e626f6e6460207472616e73616374696f6e292066726f6d2074686520626f6e6465641c2020706f6f6c2e45012d2060706f696e74736020697320746865206e756d626572206f6620706f696e747320746861742061726520697373756564206173206120726573756c74206f66206062616c616e636560206265696e67c0646973736f6c76656420696e746f2074686520636f72726573706f6e64696e6720756e626f6e64696e6720706f6f6c2ee42d206065726160206973207468652065726120696e207768696368207468652062616c616e63652077696c6c20626520756e626f6e6465642e5501496e2074686520616273656e6365206f6620736c617368696e672c2074686573652076616c7565732077696c6c206d617463682e20496e207468652070726573656e6365206f6620736c617368696e672c207468654d016e756d626572206f6620706f696e74732074686174206172652069737375656420696e2074686520756e626f6e64696e6720706f6f6c2077696c6c206265206c657373207468616e2074686520616d6f756e746472657175657374656420746f20626520756e626f6e6465642e2457697468647261776e1001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e0004189c41206d656d626572206861732077697468647261776e2066726f6d20746865697220706f6f6c2e00210154686520676976656e206e756d626572206f662060706f696e7473602068617665206265656e20646973736f6c76656420696e2072657475726e206f66206062616c616e6365602e00590153696d696c617220746f2060556e626f6e64656460206576656e742c20696e2074686520616273656e6365206f6620736c617368696e672c2074686520726174696f206f6620706f696e7420746f2062616c616e63652877696c6c20626520312e2444657374726f79656404011c706f6f6c5f6964100118506f6f6c4964000504684120706f6f6c20686173206265656e2064657374726f7965642e3053746174654368616e67656408011c706f6f6c5f6964100118506f6f6c49640001246e65775f737461746521010124506f6f6c53746174650006047c546865207374617465206f66206120706f6f6c20686173206368616e676564344d656d62657252656d6f76656408011c706f6f6c5f6964100118506f6f6c49640001186d656d626572000130543a3a4163636f756e74496400070c9841206d656d62657220686173206265656e2072656d6f7665642066726f6d206120706f6f6c2e0051015468652072656d6f76616c2063616e20626520766f6c756e74617279202877697468647261776e20616c6c20756e626f6e6465642066756e647329206f7220696e766f6c756e7461727920286b69636b6564292e30526f6c6573557064617465640c0110726f6f748801504f7074696f6e3c543a3a4163636f756e7449643e00011c626f756e6365728801504f7074696f6e3c543a3a4163636f756e7449643e0001246e6f6d696e61746f728801504f7074696f6e3c543a3a4163636f756e7449643e000808550154686520726f6c6573206f66206120706f6f6c2068617665206265656e207570646174656420746f2074686520676976656e206e657720726f6c65732e204e6f7465207468617420746865206465706f7369746f724463616e206e65766572206368616e67652e2c506f6f6c536c617368656408011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e0009040d01546865206163746976652062616c616e6365206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e50556e626f6e64696e67506f6f6c536c61736865640c011c706f6f6c5f6964100118506f6f6c496400010c657261100120457261496e64657800011c62616c616e636518013042616c616e63654f663c543e000a04250154686520756e626f6e6420706f6f6c206174206065726160206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e54506f6f6c436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c496400011c63757272656e742501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e000b04b44120706f6f6c277320636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e60506f6f6c4d6178436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6ef8011c50657262696c6c000c04d44120706f6f6c2773206d6178696d756d20636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e7c506f6f6c436f6d6d697373696f6e4368616e6765526174655570646174656408011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f726174652d01019c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e000d04cc4120706f6f6c277320636f6d6d697373696f6e20606368616e67655f726174656020686173206265656e206368616e6765642e90506f6f6c436f6d6d697373696f6e436c61696d5065726d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001287065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e000e04c8506f6f6c20636f6d6d697373696f6e20636c61696d207065726d697373696f6e20686173206265656e20757064617465642e54506f6f6c436f6d6d697373696f6e436c61696d656408011c706f6f6c5f6964100118506f6f6c4964000128636f6d6d697373696f6e18013042616c616e63654f663c543e000f0484506f6f6c20636f6d6d697373696f6e20686173206265656e20636c61696d65642e644d696e42616c616e63654465666963697441646a757374656408011c706f6f6c5f6964100118506f6f6c4964000118616d6f756e7418013042616c616e63654f663c543e001004c8546f70706564207570206465666963697420696e2066726f7a656e204544206f66207468652072657761726420706f6f6c2e604d696e42616c616e636545786365737341646a757374656408011c706f6f6c5f6964100118506f6f6c4964000118616d6f756e7418013042616c616e63654f663c543e001104bc436c61696d6564206578636573732066726f7a656e204544206f66206166207468652072657761726420706f6f6c2e04584576656e7473206f6620746869732070616c6c65742e2101085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c537461746500010c104f70656e0000001c426c6f636b65640001002844657374726f79696e6700020000250104184f7074696f6e0404540129010108104e6f6e6500000010536f6d65040029010000010000290100000408f800002d01085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7350436f6d6d697373696f6e4368616e676552617465042c426c6f636b4e756d626572012c000801306d61785f696e637265617365f8011c50657262696c6c0001246d696e5f64656c61792c012c426c6f636b4e756d6265720000310104184f7074696f6e0404540135010108104e6f6e6500000010536f6d650400350100000100003501085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7364436f6d6d697373696f6e436c61696d5065726d697373696f6e04244163636f756e74496401000108385065726d697373696f6e6c6573730000001c4163636f756e7404000001244163636f756e7449640001000039010c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e000118726573756c748001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652e3d01000004082c1000410104184f7074696f6e04045401040108104e6f6e6500000010536f6d65040004000001000045010c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657449010c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e644d0101104b696e6400012074696d65736c6f743401384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652e4d0100000310000000080051010c3c70616c6c65745f74785f70617573651870616c6c6574144576656e740404540001082843616c6c50617573656404012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e000004b8546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f77207061757365642e3043616c6c556e70617573656404012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e000104c0546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f7720756e7061757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574550100000408590159010059010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00005d010c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f696461010138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e656901016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e047c54686520604576656e746020656e756d206f6620746869732070616c6c65746101104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c6963000004006501013c737232353531393a3a5075626c6963000065010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d000069010000026d01006d0100000408007101007101082873705f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616c7501011c42616c616e636500010c6f776e7501011c42616c616e63650001186f7468657273790101ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e00007501000006180079010000027d01007d01082873705f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c75657501011c42616c616e6365000081010c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001442c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e38417574686f726974794164646564040124617574686f72697479000130543a3a4163636f756e744964000a047c4120757365726e616d6520617574686f72697479207761732061646465642e40417574686f7269747952656d6f766564040124617574686f72697479000130543a3a4163636f756e744964000b04844120757365726e616d6520617574686f72697479207761732072656d6f7665642e2c557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e000c04744120757365726e616d65207761732073657420666f72206077686f602e38557365726e616d655175657565640c010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e00012865787069726174696f6e2c0144426c6f636b4e756d626572466f723c543e000d0419014120757365726e616d6520776173207175657565642c20627574206077686f60206d75737420616363657074206974207072696f7220746f206065787069726174696f6e602e48507265617070726f76616c4578706972656404011477686f7365000130543a3a4163636f756e744964000e043901412071756575656420757365726e616d6520706173736564206974732065787069726174696f6e20776974686f7574206265696e6720636c61696d656420616e64207761732072656d6f7665642e485072696d617279557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e000f0401014120757365726e616d6520776173207365742061732061207072696d61727920616e642063616e206265206c6f6f6b65642075702066726f6d206077686f602e5c44616e676c696e67557365726e616d6552656d6f76656408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e0010085d01412064616e676c696e6720757365726e616d652028617320696e2c206120757365726e616d6520636f72726573706f6e64696e6720746f20616e206163636f756e742074686174206861732072656d6f766564206974736c6964656e746974792920686173206265656e2072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657485010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000089010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c748001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c748001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749101083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d626572012c000801186865696768742c012c426c6f636b4e756d626572000114696e64657810010c753332000095010c3c70616c6c65745f657468657265756d1870616c6c6574144576656e7400010420457865637574656414011066726f6d9901011048313630000108746f99010110483136300001407472616e73616374696f6e5f686173683001104832353600012c657869745f726561736f6ea101012845786974526561736f6e00012865787472615f6461746134011c5665633c75383e000004c8416e20657468657265756d207472616e73616374696f6e20776173207375636365737366756c6c792065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749901083c7072696d69746976655f74797065731048313630000004009d0101205b75383b2032305d00009d01000003140000000800a1010c2065766d5f636f7265146572726f722845786974526561736f6e0001101c537563636565640400a501012c4578697453756363656564000000144572726f720400a9010124457869744572726f72000100185265766572740400b90101284578697452657665727400020014466174616c0400bd01012445786974466174616c00030000a5010c2065766d5f636f7265146572726f722c457869745375636365656400010c1c53746f707065640000002052657475726e656400010020537569636964656400020000a9010c2065766d5f636f7265146572726f7224457869744572726f7200014038537461636b556e646572666c6f7700000034537461636b4f766572666c6f770001002c496e76616c69644a756d7000020030496e76616c696452616e67650003004444657369676e61746564496e76616c69640004002c43616c6c546f6f446565700005003c437265617465436f6c6c6973696f6e0006004c437265617465436f6e74726163744c696d69740007002c496e76616c6964436f64650400ad0101184f70636f6465000f002c4f75744f664f6666736574000800204f75744f66476173000900244f75744f6646756e64000a002c5043556e646572666c6f77000b002c437265617465456d707479000c00144f746865720400b1010144436f773c277374617469632c207374723e000d00204d61784e6f6e6365000e0000ad010c2065766d5f636f7265186f70636f6465184f70636f64650000040008010875380000b101040c436f7704045401b501000400b501000000b5010000050200b9010c2065766d5f636f7265146572726f72284578697452657665727400010420526576657274656400000000bd010c2065766d5f636f7265146572726f722445786974466174616c000110304e6f74537570706f7274656400000048556e68616e646c6564496e746572727570740001004043616c6c4572726f724173466174616c0400a9010124457869744572726f72000200144f746865720400b1010144436f773c277374617469632c207374723e00030000c1010c2870616c6c65745f65766d1870616c6c6574144576656e740404540001140c4c6f6704010c6c6f67c501010c4c6f670000047c457468657265756d206576656e74732066726f6d20636f6e7472616374732e1c4372656174656404011c616464726573739901011048313630000104b44120636f6e747261637420686173206265656e206372656174656420617420676976656e20616464726573732e34437265617465644661696c656404011c61646472657373990101104831363000020405014120636f6e74726163742077617320617474656d7074656420746f20626520637265617465642c206275742074686520657865637574696f6e206661696c65642e20457865637574656404011c616464726573739901011048313630000304f84120636f6e747261637420686173206265656e206578656375746564207375636365737366756c6c79207769746820737461746573206170706c6965642e3845786563757465644661696c656404011c61646472657373990101104831363000040465014120636f6e747261637420686173206265656e2065786563757465642077697468206572726f72732e20537461746573206172652072657665727465642077697468206f6e6c79206761732066656573206170706c6965642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c5010c20657468657265756d0c6c6f670c4c6f6700000c011c616464726573739901011048313630000118746f70696373c90101245665633c483235363e0001106461746134011442797465730000c9010000023000cd010c3c70616c6c65745f626173655f6665651870616c6c6574144576656e7400010c404e65774261736546656550657247617304010c666565d1010110553235360000003c426173654665654f766572666c6f77000100344e6577456c6173746963697479040128656c6173746963697479d901011c5065726d696c6c000200047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d101083c7072696d69746976655f7479706573105532353600000400d50101205b7536343b20345d0000d501000003040000002c00d9010c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000dd010c5470616c6c65745f61697264726f705f636c61696d731870616c6c6574144576656e740404540001041c436c61696d65640c0124726563697069656e74000130543a3a4163636f756e744964000118736f75726365e10101304d756c746941646472657373000118616d6f756e7418013042616c616e63654f663c543e0000048c536f6d656f6e6520636c61696d656420736f6d65206e617469766520746f6b656e732e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e1010c5470616c6c65745f61697264726f705f636c61696d73147574696c73304d756c7469416464726573730001080c45564d0400e501013c457468657265756d41646472657373000000184e6174697665040000012c4163636f756e744964333200010000e501105470616c6c65745f61697264726f705f636c61696d73147574696c7340657468657265756d5f616464726573733c457468657265756d41646472657373000004009d0101205b75383b2032305d0000e9010c3070616c6c65745f726f6c65731870616c6c6574144576656e7404045400012c30526f6c6541737369676e656408011c6163636f756e74000130543a3a4163636f756e744964000110726f6c65ed010120526f6c65547970650000047c526f6c652061737369676e656420746f207468652076616c696461746f722e2c526f6c6552656d6f76656408011c6163636f756e74000130543a3a4163636f756e744964000110726f6c65ed010120526f6c65547970650001047052656d6f7665642076616c696461746f722066726f6d20726f6c652e1c536c617368656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00020448536c61736865642076616c696461746f722e3850726f66696c65437265617465640c011c6163636f756e74000130543a3a4163636f756e744964000154746f74616c5f70726f66696c655f72657374616b6518013042616c616e63654f663c543e000114726f6c6573f90101345665633c526f6c65547970653e000304504e65772070726f66696c6520637265617465642e3850726f66696c65557064617465640c011c6163636f756e74000130543a3a4163636f756e744964000154746f74616c5f70726f66696c655f72657374616b6518013042616c616e63654f663c543e000114726f6c6573f90101345665633c526f6c65547970653e0004044050726f66696c6520757064617465642e3850726f66696c6544656c6574656404011c6163636f756e74000130543a3a4163636f756e7449640005044050726f66696c652064656c657465642e2c50656e64696e674a6f627304013070656e64696e675f6a6f6273fd0101585665633c28526f6c65547970652c204a6f624964293e000604d050656e64696e67206a6f62732c746861742063616e6e6f74206265206f70746564206f757420617420746865206d6f6d656e742e38526f6c6573526577617264536574040134746f74616c5f7265776172647318013042616c616e63654f663c543e0007048c526f6c657320696e666c6174696f6e20726577617264207061696420666f7220657261345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000804a45468652072652d7374616b657273272072657761726473206172652067657474696e6720706169642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000904bc5468652072652d7374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e5c4d696e52657374616b696e67426f6e645570646174656404011476616c756518013042616c616e63654f663c543e000a04b8546865206d696e2072657374616b696e6720626f6e6420616d6f756e7420686173206265656e2075706461746564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ed010c4474616e676c655f7072696d69746976657314726f6c657320526f6c655479706500010c0c5473730400f10101685468726573686f6c645369676e6174757265526f6c6554797065000000185a6b536161530400f50101545a65726f4b6e6f776c65646765526f6c65547970650001004c4c69676874436c69656e7452656c6179696e6700020000f101104474616e676c655f7072696d69746976657314726f6c65730c747373685468726573686f6c645369676e6174757265526f6c65547970650001305044666e734347474d503231536563703235366b310000005044666e734347474d5032315365637032353672310001004044666e734347474d503231537461726b0002006853696c656e745368617264444b4c533233536563703235366b31000300385a6361736846726f737450323536000400385a6361736846726f7374503338340005004c5a6361736846726f7374536563703235366b31000600585a6361736846726f737452697374726574746f323535000700445a6361736846726f7374456432353531390008003c5a6361736846726f737445643434380009004047656e6e61726f444b47426c73333831000a0018577374735632000b0000f501104474616e676c655f7072696d69746976657314726f6c6573187a6b73616173545a65726f4b6e6f776c65646765526f6c6554797065000108345a6b5361615347726f74683136000000305a6b536161534d61726c696e00010000f901000002ed0100fd01000002010200010200000408ed012c0005020c2c70616c6c65745f6a6f6273186d6f64756c65144576656e7404045400011c304a6f625375626d69747465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73090201484a6f625375626d697373696f6e4f663c543e0000047041206e6577206a6f6220686173206265656e207375626d6974746564484a6f62526573756c745375626d69747465640801186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c65547970650001048c41206e6577206a6f6220726573756c7420686173206265656e207375626d69747465644456616c696461746f7252657761726465640801086964000130543a3a4163636f756e74496400011872657761726418013042616c616e63654f663c543e0002046c76616c696461746f7220686173206561726e6564207265776172642c4a6f62526566756e6465640801186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c6554797065000304a0416e206578697374696e67206a6f62207761732072656d6f76656420616e6420726566756e646564584a6f625061727469636970616e7473557064617465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73750201304a6f62496e666f4f663c543e000404a8546865207061727469636970616e7473206f662061206a6f6220686173206265656e2075706461746564384a6f6252655375626d69747465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73750201304a6f62496e666f4f663c543e0005082d0141206a6f6220686173206265656e2072657375626d69747465642c2074686973206973207768656e20612070686173653120726573756c7420686173206265656e2064697363617264656484616e642061206e657720706861736531206a6f6220697320726571756573746564444a6f62526573756c74457874656e6465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c65547970650001286e65775f6578706972792c0144426c6f636b4e756d626572466f723c543e000604a841206a6f6220726573756c74206578706972792074696d6520686173206265656e20657874656e646564047c54686520604576656e746020656e756d206f6620746869732070616c6c657409020c4474616e676c655f7072696d697469766573106a6f6273344a6f625375626d697373696f6e14244163636f756e74496401002c426c6f636b4e756d626572012c3c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502001001186578706972792c012c426c6f636b4e756d62657200010c74746c2c012c426c6f636b4e756d6265720001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e00012066616c6c6261636b7102013c46616c6c6261636b4f7074696f6e7300000d02085874616e676c655f746573746e65745f72756e74696d653c4d61785061727469636970616e7473000000001102085874616e676c655f746573746e65745f72756e74696d65404d61785375626d697373696f6e4c656e000000001502085874616e676c655f746573746e65745f72756e74696d65584d61784164646974696f6e616c506172616d734c656e0000000019020c4474616e676c655f7072696d697469766573106a6f62731c4a6f625479706510244163636f756e74496401003c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502011838444b4754535350686173654f6e6504001d0201c4444b4754535350686173654f6e654a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74733e00000038444b47545353506861736554776f0400290201fc444b47545353506861736554776f4a6f62547970653c4d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e3e00010040444b475453535068617365546872656504003902015c444b47545353506861736554687265654a6f62547970650002003c444b475453535068617365466f757204003d020158444b475453535068617365466f75724a6f6254797065000300385a6b5361615350686173654f6e6504004102010d015a6b5361615350686173654f6e654a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e3e000400385a6b53616153506861736554776f04005102019c5a6b53616153506861736554776f4a6f62547970653c4d61785375626d697373696f6e4c656e3e000500001d02104474616e676c655f7072696d697469766573106a6f62730c74737354444b4754535350686173654f6e654a6f625479706508244163636f756e74496401003c4d61785061727469636970616e7473010d02001401307061727469636970616e747321020198426f756e6465645665633c4163636f756e7449642c204d61785061727469636970616e74733e0001247468726573686f6c6408010875380001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500012468645f77616c6c6574780110626f6f6c000021020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e0000250200000200002902104474616e676c655f7072696d697469766573106a6f62730c74737354444b47545353506861736554776f4a6f625479706508404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e0115020010013070686173655f6f6e655f69642c01144a6f6249640001287375626d697373696f6e2d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e00013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500002d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000310204184f7074696f6e0404540135020108104e6f6e6500000010536f6d6504003502000001000035020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00003902104474616e676c655f7072696d697469766573106a6f62730c7473735c444b47545353506861736554687265654a6f6254797065000008013070686173655f6f6e655f69642c01144a6f624964000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500003d02104474616e676c655f7072696d697469766573106a6f62730c74737358444b475453535068617365466f75724a6f625479706500000c013070686173655f6f6e655f69642c01144a6f6249640001406e65775f70686173655f6f6e655f69642c01144a6f624964000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500004102104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b5361615350686173654f6e654a6f62547970650c244163636f756e74496401003c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102001001307061727469636970616e747321020198426f756e6465645665633c4163636f756e7449642c204d61785061727469636970616e74733e0001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e00011873797374656d450201785a6b5361615353797374656d3c4d61785375626d697373696f6e4c656e3e000124726f6c655f74797065f50101545a65726f4b6e6f776c65646765526f6c655479706500004502104474616e676c655f7072696d697469766573106a6f6273187a6b73616173305a6b5361615353797374656d04404d61785375626d697373696f6e4c656e01110201041c47726f7468313604004902017c47726f7468313653797374656d3c4d61785375626d697373696f6e4c656e3e000000004902104474616e676c655f7072696d697469766573106a6f6273187a6b736161733447726f7468313653797374656d04404d61785375626d697373696f6e4c656e0111020018011c636972637569744d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e0001286e756d5f696e707574732c010c75363400013c6e756d5f636f6e73747261696e74732c010c75363400012c70726f76696e675f6b65794d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000134766572696679696e675f6b65792d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e0001107761736d4d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e00004d02104474616e676c655f7072696d697469766573106a6f6273187a6b736161732448797065724461746104404d61785375626d697373696f6e4c656e011102010c0c52617704002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000000104950465304002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000100104854545004002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000200005102104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b53616153506861736554776f4a6f625479706504404d61785375626d697373696f6e4c656e011102000c013070686173655f6f6e655f69642c01144a6f62496400011c726571756573745502019c5a6b53616153506861736554776f526571756573743c4d61785375626d697373696f6e4c656e3e000124726f6c655f74797065f50101545a65726f4b6e6f776c65646765526f6c655479706500005502104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b53616153506861736554776f5265717565737404404d61785375626d697373696f6e4c656e01110201041c47726f7468313604005902019447726f7468313650726f7665526571756573743c4d61785375626d697373696f6e4c656e3e000000005902104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c47726f7468313650726f76655265717565737404404d61785375626d697373696f6e4c656e011102001001307075626c69635f696e7075742d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000120615f7368617265735d0201e4426f756e6465645665633c4879706572446174613c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e00012461785f7368617265735d0201e4426f756e6465645665633c4879706572446174613c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e0001287161705f736861726573650201e0426f756e6465645665633c51415053686172653c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e00005d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400610201185665633c543e000061020000024d020065020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540169020453000004006d0201185665633c543e00006902104474616e676c655f7072696d697469766573106a6f6273187a6b7361617320514150536861726504404d61785375626d697373696f6e4c656e011102000c0104614d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000104624d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000104634d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e00006d0200000269020071020c4474616e676c655f7072696d697469766573106a6f62733c46616c6c6261636b4f7074696f6e730001081c44657374726f790000005c526567656e6572617465576974685468726573686f6c64040008010875380001000075020c4474616e676c655f7072696d697469766573106a6f62731c4a6f62496e666f18244163636f756e74496401002c426c6f636b4e756d626572012c1c42616c616e636501183c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502001801146f776e65720001244163636f756e7449640001186578706972792c012c426c6f636b4e756d62657200010c74746c2c012c426c6f636b4e756d6265720001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e00010c66656518011c42616c616e636500012066616c6c6261636b7102013c46616c6c6261636b4f7074696f6e73000079020c2870616c6c65745f646b671870616c6c6574144576656e74040454000108284665655570646174656404007d020130466565496e666f4f663c543e0000049446656520686173206265656e207570646174656420746f20746865206e65772076616c7565284b6579526f74617465640c012c66726f6d5f6a6f625f69642c01144a6f624964000124746f5f6a6f625f69642c01144a6f6249640001247369676e617475726534011c5665633c75383e0001045c4120444b4720686173206265656e20726f74617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747d020c2870616c6c65745f646b671474797065731c466565496e666f041c42616c616e6365011800180120626173655f66656518011c42616c616e6365000144646b675f76616c696461746f725f66656518011c42616c616e63650001447369675f76616c696461746f725f66656518011c42616c616e6365000154726566726573685f76616c696461746f725f66656518011c42616c616e636500015073746f726167655f6665655f7065725f6279746518011c42616c616e636500015473746f726167655f6665655f7065725f626c6f636b18011c42616c616e6365000081020c3470616c6c65745f7a6b736161731870616c6c6574144576656e740404540001042846656555706461746564040085020130466565496e666f4f663c543e0000049446656520686173206265656e207570646174656420746f20746865206e65772076616c7565047c54686520604576656e746020656e756d206f6620746869732070616c6c657485020c3470616c6c65745f7a6b736161731474797065731c466565496e666f041c42616c616e6365011800100120626173655f66656518011c42616c616e636500012c636972637569745f66656518011c42616c616e636500012470726f76655f66656518011c42616c616e636500015073746f726167655f6665655f7065725f6279746518011c42616c616e6365000089020c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c748001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789102010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736830013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d02085874616e676c655f746573746e65745f72756e74696d652450726f7879547970650001100c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002001c5374616b696e67000300009102000005040095020c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c6574144576656e74040454000154384f70657261746f724a6f696e656404010c77686f000130543a3a4163636f756e7449640000045c416e206f70657261746f7220686173206a6f696e65642e604f70657261746f724c656176696e675363686564756c656404010c77686f000130543a3a4163636f756e7449640001048c416e206f70657261746f7220686173207363686564756c656420746f206c656176652e584f70657261746f724c6561766543616e63656c6c656404010c77686f000130543a3a4163636f756e744964000204b8416e206f70657261746f72206861732063616e63656c6c6564207468656972206c6561766520726571756573742e544f70657261746f724c65617665457865637574656404010c77686f000130543a3a4163636f756e744964000304b4416e206f70657261746f7220686173206578656375746564207468656972206c6561766520726571756573742e404f70657261746f72426f6e644d6f726508010c77686f000130543a3a4163636f756e74496400013c6164646974696f6e616c5f626f6e6418013042616c616e63654f663c543e00040498416e206f70657261746f722068617320696e63726561736564207468656972207374616b652e644f70657261746f72426f6e644c6573735363686564756c656408010c77686f000130543a3a4163636f756e744964000138756e7374616b655f616d6f756e7418013042616c616e63654f663c543e000504c8416e206f70657261746f7220686173207363686564756c656420746f206465637265617365207468656972207374616b652e604f70657261746f72426f6e644c657373457865637574656404010c77686f000130543a3a4163636f756e744964000604b8416e206f70657261746f7220686173206578656375746564207468656972207374616b652064656372656173652e644f70657261746f72426f6e644c65737343616e63656c6c656404010c77686f000130543a3a4163636f756e744964000704dc416e206f70657261746f72206861732063616e63656c6c6564207468656972207374616b6520646563726561736520726571756573742e4c4f70657261746f7257656e744f66666c696e6504010c77686f000130543a3a4163636f756e74496400080474416e206f70657261746f722068617320676f6e65206f66666c696e652e484f70657261746f7257656e744f6e6c696e6504010c77686f000130543a3a4163636f756e74496400090470416e206f70657261746f722068617320676f6e65206f6e6c696e652e244465706f73697465640c010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000a046041206465706f73697420686173206265656e206d6164652e445363686564756c656477697468647261770c010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000b047c416e20776974686472617720686173206265656e207363686564756c65642e404578656375746564776974686472617704010c77686f000130543a3a4163636f756e744964000c0478416e20776974686472617720686173206265656e2065786563757465642e4443616e63656c6c6564776974686472617704010c77686f000130543a3a4163636f756e744964000d047c416e20776974686472617720686173206265656e2063616e63656c6c65642e2444656c65676174656410010c77686f000130543a3a4163636f756e7449640001206f70657261746f72000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000e046c412064656c65676174696f6e20686173206265656e206d6164652e685363686564756c656444656c656761746f72426f6e644c65737310010c77686f000130543a3a4163636f756e7449640001206f70657261746f72000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000f04bc412064656c656761746f7220756e7374616b65207265717565737420686173206265656e207363686564756c65642e64457865637574656444656c656761746f72426f6e644c65737304010c77686f000130543a3a4163636f756e744964001004b8412064656c656761746f7220756e7374616b65207265717565737420686173206265656e2065786563757465642e6843616e63656c6c656444656c656761746f72426f6e644c65737304010c77686f000130543a3a4163636f756e744964001104bc412064656c656761746f7220756e7374616b65207265717565737420686173206265656e2063616e63656c6c65642e54496e63656e74697665415059416e644361705365740c011c706f6f6c5f6964180124543a3a506f6f6c496400010c6170799902014c73705f72756e74696d653a3a50657263656e7400010c63617018013042616c616e63654f663c543e00120415014576656e7420656d6974746564207768656e20616e20696e63656e746976652041505920616e6420636170206172652073657420666f7220612072657761726420706f6f6c50426c75657072696e7457686974656c6973746564040130626c75657072696e745f696410010c753332001304e44576656e7420656d6974746564207768656e206120626c75657072696e742069732077686974656c697374656420666f72207265776172647348417373657455706461746564496e506f6f6c10010c77686f000130543a3a4163636f756e74496400011c706f6f6c5f6964180124543a3a506f6f6c496400012061737365745f6964180128543a3a41737365744964000118616374696f6e9d02012c4173736574416374696f6e00140494417373657420686173206265656e207570646174656420746f2072657761726420706f6f6c04744576656e747320656d6974746564206279207468652070616c6c65742e99020c3473705f61726974686d65746963287065725f7468696e67731c50657263656e7400000400080108753800009d02107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c726577617264732c4173736574416374696f6e0001080c4164640000001852656d6f766500010000a1020c5c7379676d615f6163636573735f73656772656761746f721870616c6c6574144576656e74040454000104344163636573734772616e7465640c013070616c6c65745f696e646578080108753800013865787472696e7369635f6e616d6534011c5665633c75383e00010c77686f000130543a3a4163636f756e7449640000088445787472696e73696320616363657373206772616e7420746f20736f6d656f6e65a4617267733a205b70616c6c65745f696e6465782c2065787472696e7369635f6e616d652c2077686f5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a5020c587379676d615f62617369635f66656568616e646c65721870616c6c6574144576656e74040454000104184665655365740c0118646f6d61696e080120446f6d61696e49440001146173736574a902011c41737365744964000118616d6f756e7418011075313238000008704665652073657420666f72206120737065636966696320617373657474617267733a205b646f6d61696e2c2061737365742c20616d6f756e745d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a902102c73746167696e675f78636d0876341461737365741c4173736574496400000400ad0201204c6f636174696f6e0000ad02102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72b10201244a756e6374696f6e730000b102102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400b50201484172633c5b4a756e6374696f6e3b20315d3e0001000858320400d10201484172633c5b4a756e6374696f6e3b20325d3e0002000858330400d50201484172633c5b4a756e6374696f6e3b20335d3e0003000858340400d90201484172633c5b4a756e6374696f6e3b20345d3e0004000858350400dd0201484172633c5b4a756e6374696f6e3b20355d3e0005000858360400e10201484172633c5b4a756e6374696f6e3b20365d3e0006000858370400e50201484172633c5b4a756e6374696f6e3b20375d3e0007000858380400e90201484172633c5b4a756e6374696f6e3b20385d3e00080000b50200000301000000b90200b902102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400bd02010c7533320000002c4163636f756e744964333208011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e00010c6b65799d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040075010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964c9020118426f6479496400011070617274cd020120426f6479506172740008003c476c6f62616c436f6e73656e7375730400c50201244e6574776f726b496400090000bd020000061000c10204184f7074696f6e04045401c5020108104e6f6e6500000010536f6d650400c5020000010000c502102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d6265722c010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f696428010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000c902100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400bd02010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000cd02100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74bd02010c753332000100204672616374696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c75333200040000d10200000302000000b90200d50200000303000000b90200d90200000304000000b90200dd0200000305000000b90200e10200000306000000b90200e50200000307000000b90200e90200000308000000b90200ed020c607379676d615f6665655f68616e646c65725f726f757465721870616c6c6574144576656e740404540001043446656548616e646c65725365740c0118646f6d61696e080120446f6d61696e49440001146173736574a902011c4173736574496400013068616e646c65725f74797065f102013846656548616e646c657254797065000008f05768656e206665652068616e646c6572207761732073657420666f7220612073706563696669632028646f6d61696e2c206173736574292070616972b8617267733a205b646573745f646f6d61696e5f69642c2061737365745f69642c2068616e646c65725f747970655d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f1020c607379676d615f6665655f68616e646c65725f726f757465721870616c6c65743846656548616e646c65725479706500010c3c426173696346656548616e646c65720000005050657263656e7461676546656548616e646c65720001004444796e616d696346656548616e646c657200020000f5020c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c6574144576656e740404540001042846656552617465536574140118646f6d61696e080120446f6d61696e49440001146173736574a902011c41737365744964000140726174655f62617369735f706f696e7410010c75333200013c6665655f6c6f7765725f626f756e641801107531323800013c6665655f75707065725f626f756e6418011075313238000008b046656520736574207261746520666f72206120737065636966696320617373657420616e6420646f6d61696e2501617267733a205b646f6d61696e2c2061737365742c20726174655f62617369735f706f696e742c206665655f6c6f7765725f626f756e642c206665655f75707065725f626f756e645d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f9020c307379676d615f6272696467651870616c6c6574144576656e7404045400012c1c4465706f7369741c0138646573745f646f6d61696e5f6964080120446f6d61696e494400012c7265736f757263655f69640401285265736f7572636549640001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e636500011873656e646572000130543a3a4163636f756e7449640001347472616e736665725f74797065fd0201305472616e73666572547970650001306465706f7369745f6461746134011c5665633c75383e00014068616e646c65725f726573706f6e736534011c5665633c75383e00000cc05768656e20696e697469616c20627269646765207472616e736665722073656e6420746f206465737420646f6d61696e2501617267733a205b646573745f646f6d61696e5f69642c207265736f757263655f69642c206465706f7369745f6e6f6e63652c2073656e6465722c207472616e736665725f747970652c846465706f7369745f646174612c2068616e646c65725f726573706f6e73652c205d4450726f706f73616c457865637574696f6e0c01406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e6365000124646174615f686173680401205b75383b2033325d0001049c5768656e2070726f706f73616c20776173206578656375746564207375636365737366756c6c79584661696c656448616e646c6572457865637574696f6e0c01146572726f7234011c5665633c75383e0001406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e6365000204885768656e2070726f706f73616c20776173206661696c6420746f20657865637574651452657472790c015c6465706f7369745f6f6e5f626c6f636b5f68656967687418011075313238000138646573745f646f6d61696e5f6964080120446f6d61696e494400011873656e646572000130543a3a4163636f756e744964000308b45768656e207573657220697320676f696e6720746f207265747279206120627269646765207472616e73666572dc617267733a205b6465706f7369745f6f6e5f626c6f636b5f6865696768742c20646573745f646f6d61696e5f69642c2073656e6465725d30427269646765506175736564040138646573745f646f6d61696e5f6964080120446f6d61696e4944000408545768656e206272696467652069732070617573656458617267733a205b646573745f646f6d61696e5f69645d38427269646765556e706175736564040138646573745f646f6d61696e5f6964080120446f6d61696e49440005085c5768656e2062726964676520697320756e70617573656458617267733a205b646573745f646f6d61696e5f69645d48526567697374657244657374446f6d61696e0c011873656e646572000130543a3a4163636f756e744964000124646f6d61696e5f6964080120446f6d61696e4944000120636861696e5f6964d101011c436861696e49440006040d015768656e207265676973746572696e672061206e6577206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e494450556e726567697374657244657374446f6d61696e0c011873656e646572000130543a3a4163636f756e744964000124646f6d61696e5f6964080120446f6d61696e4944000120636861696e5f6964d101011c436861696e494400070405015768656e20756e7265676973746572696e672061206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e494430466565436f6c6c65637465641401246665655f7061796572000130543a3a4163636f756e744964000138646573745f646f6d61696e5f6964080120446f6d61696e494400012c7265736f757263655f69640401285265736f7572636549640001286665655f616d6f756e74180110753132380001306665655f61737365745f6964a902011c41737365744964000804705768656e206272696467652066656520697320636f6c6c65637465643c416c6c42726964676550617573656404011873656e646572000130543a3a4163636f756e7449640009046c5768656e20616c6c2062726964676573206172652070617573656444416c6c427269646765556e70617573656404011873656e646572000130543a3a4163636f756e744964000a04745768656e20616c6c20627269646765732061726520756e706175736564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fd0208307379676d615f747261697473305472616e736665725479706500010c4046756e6769626c655472616e736665720000004c4e6f6e46756e6769626c655472616e736665720001003c47656e657269635472616e7366657200020000010308306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000005030000023d0100090308306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ebd02014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65b501016473705f72756e74696d653a3a52756e74696d65537472696e6700000d0308306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6e780110626f6f6c000011030c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b34011c5665633c75383e0000045c536565205b6050616c6c65743a3a72656d61726b605d2e387365745f686561705f706167657304011470616765732c010c7536340001047c536565205b6050616c6c65743a3a7365745f686561705f7061676573605d2e207365745f636f6465040110636f646534011c5665633c75383e00020464536565205b6050616c6c65743a3a7365745f636f6465605d2e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304a0536565205b6050616c6c65743a3a7365745f636f64655f776974686f75745f636865636b73605d2e2c7365745f73746f726167650401146974656d73150301345665633c4b657956616c75653e00040470536565205b6050616c6c65743a3a7365745f73746f72616765605d2e306b696c6c5f73746f726167650401106b6579731d0301205665633c4b65793e00050474536565205b6050616c6c65743a3a6b696c6c5f73746f72616765605d2e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797310010c75333200060470536565205b6050616c6c65743a3a6b696c6c5f707265666978605d2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e00070488536565205b6050616c6c65743a3a72656d61726b5f776974685f6576656e74605d2e44617574686f72697a655f75706772616465040124636f64655f6861736830011c543a3a4861736800090488536565205b6050616c6c65743a3a617574686f72697a655f75706772616465605d2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736830011c543a3a48617368000a04c4536565205b6050616c6c65743a3a617574686f72697a655f757067726164655f776974686f75745f636865636b73605d2e606170706c795f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000b04a4536565205b6050616c6c65743a3a6170706c795f617574686f72697a65645f75706772616465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15030000021903001903000004083434001d03000002340021030c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373250301845065724469737061746368436c6173733c57656967687473506572436c6173733e000025030c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454012903000c01186e6f726d616c290301045400012c6f7065726174696f6e616c29030104540001246d616e6461746f72792903010454000029030c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e7369632d0301384f7074696f6e3c5765696768743e0001246d61785f746f74616c2d0301384f7074696f6e3c5765696768743e00012072657365727665642d0301384f7074696f6e3c5765696768743e00002d0304184f7074696f6e04045401240108104e6f6e6500000010536f6d65040024000001000031030c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178350301545065724469737061746368436c6173733c7533323e000035030c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400003903082873705f776569676874733c52756e74696d6544625765696768740000080110726561642c010c75363400011477726974652c010c75363400003d03082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65b501013452756e74696d65537472696e67000124696d706c5f6e616d65b501013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069734103011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800004103040c436f77040454014503000400450300000045030000024903004903000004084d0310004d0300000308000000080051030c306672616d655f73797374656d1870616c6c6574144572726f720404540001203c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e444e6f7468696e67417574686f72697a6564000604584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400070494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c657455030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400000450536565205b6050616c6c65743a3a736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59030c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000454536565205b6050616c6c65743a3a7375646f605d2e547375646f5f756e636865636b65645f77656967687408011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687424011857656967687400010498536565205b6050616c6c65743a3a7375646f5f756e636865636b65645f776569676874605d2e1c7365745f6b657904010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e00020460536565205b6050616c6c65743a3a7365745f6b6579605d2e1c7375646f5f617308010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030460536565205b6050616c6c65743a3a7375646f5f6173605d2e2872656d6f76655f6b65790004046c536565205b6050616c6c65743a3a72656d6f76655f6b6579605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d03085874616e676c655f746573746e65745f72756e74696d652c52756e74696d6543616c6c0001b01853797374656d0400110301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400550301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e000100105375646f0400590301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000200184173736574730400610301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574732c2052756e74696d653e0004002042616c616e6365730400690301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e00050010426162650400710301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0008001c4772616e6470610400950301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0009001c496e64696365730400c90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e000a002444656d6f63726163790400cd0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e000b001c436f756e63696c0400e90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e000c001c56657374696e670400ed0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e000d0024456c656374696f6e730400f50301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e732c2052756e74696d653e000e0068456c656374696f6e50726f76696465724d756c746950686173650400fd0301fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e000f001c5374616b696e670400e50401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0010001c53657373696f6e0400050501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0011002054726561737572790400190501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e00130020426f756e746965730400210501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426f756e746965732c2052756e74696d653e001400344368696c64426f756e746965730400250501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4368696c64426f756e746965732c2052756e74696d653e00150020426167734c6973740400290501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426167734c6973742c2052756e74696d653e0016003c4e6f6d696e6174696f6e506f6f6c7304002d0501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f6d696e6174696f6e506f6f6c732c2052756e74696d653e001700245363686564756c65720400490501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e00180020507265696d6167650400510501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e0019001c547850617573650400550501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547850617573652c2052756e74696d653e001b0020496d4f6e6c696e650400590501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e001c00204964656e746974790400690501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e001d001c5574696c6974790400110601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e001e00204d756c74697369670400290601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e001f0020457468657265756d0400310601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d2c2052756e74696d653e0020000c45564d0400590601a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d2c2052756e74696d653e0021002844796e616d69634665650400690601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44796e616d69634665652c2052756e74696d653e0023001c4261736546656504006d0601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426173654665652c2052756e74696d653e00240044486f7466697853756666696369656e74730400710601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c486f7466697853756666696369656e74732c2052756e74696d653e00250018436c61696d730400790601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436c61696d732c2052756e74696d653e00260014526f6c65730400a50601a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526f6c65732c2052756e74696d653e002700104a6f62730400c50601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4a6f62732c2052756e74696d653e0028000c446b670400690701a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446b672c2052756e74696d653e002900185a6b5361615304006d0701ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5a6b536161532c2052756e74696d653e002a001450726f78790400710701a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b00504d756c7469417373657444656c65676174696f6e0400790701e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c7469417373657444656c65676174696f6e2c2052756e74696d653e002c00545379676d6141636365737353656772656761746f7204007d0701e90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6141636365737353656772656761746f722c2052756e74696d653e002d00505379676d61426173696346656548616e646c65720400810701e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d61426173696346656548616e646c65722c2052756e74696d653e002e00545379676d6146656548616e646c6572526f757465720400850701e90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6146656548616e646c6572526f757465722c2052756e74696d653e002f00645379676d6150657263656e7461676546656548616e646c65720400890701f90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6150657263656e7461676546656548616e646c65722c2052756e74696d653e0030002c5379676d6142726964676504008d0701c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d614272696467652c2052756e74696d653e0031000061030c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c010869647501014c543a3a41737365744964506172616d6574657200011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e63650000045c536565205b6050616c6c65743a3a637265617465605d2e30666f7263655f63726561746510010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74780110626f6f6c00012c6d696e5f62616c616e636575010128543a3a42616c616e636500010474536565205b6050616c6c65743a3a666f7263655f637265617465605d2e3473746172745f64657374726f7904010869647501014c543a3a41737365744964506172616d6574657200020478536565205b6050616c6c65743a3a73746172745f64657374726f79605d2e4064657374726f795f6163636f756e747304010869647501014c543a3a41737365744964506172616d6574657200030484536565205b6050616c6c65743a3a64657374726f795f6163636f756e7473605d2e4464657374726f795f617070726f76616c7304010869647501014c543a3a41737365744964506172616d6574657200040488536565205b6050616c6c65743a3a64657374726f795f617070726f76616c73605d2e3866696e6973685f64657374726f7904010869647501014c543a3a41737365744964506172616d657465720005047c536565205b6050616c6c65743a3a66696e6973685f64657374726f79605d2e106d696e740c010869647501014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500060454536565205b6050616c6c65743a3a6d696e74605d2e106275726e0c010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500070454536565205b6050616c6c65743a3a6275726e605d2e207472616e736665720c010869647501014c543a3a41737365744964506172616d65746572000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500080464536565205b6050616c6c65743a3a7472616e73666572605d2e4c7472616e736665725f6b6565705f616c6976650c010869647501014c543a3a41737365744964506172616d65746572000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500090490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e38666f7263655f7472616e7366657210010869647501014c543a3a41737365744964506172616d65746572000118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e00011064657374650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e6365000a047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a6508010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000b045c536565205b6050616c6c65743a3a667265657a65605d2e107468617708010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000c0454536565205b6050616c6c65743a3a74686177605d2e30667265657a655f617373657404010869647501014c543a3a41737365744964506172616d65746572000d0474536565205b6050616c6c65743a3a667265657a655f6173736574605d2e28746861775f617373657404010869647501014c543a3a41737365744964506172616d65746572000e046c536565205b6050616c6c65743a3a746861775f6173736574605d2e487472616e736665725f6f776e65727368697008010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e000f048c536565205b6050616c6c65743a3a7472616e736665725f6f776e657273686970605d2e207365745f7465616d10010869647501014c543a3a41737365744964506172616d65746572000118697373756572650301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572650301504163636f756e7449644c6f6f6b75704f663c543e00100464536565205b6050616c6c65743a3a7365745f7465616d605d2e307365745f6d6574616461746110010869647501014c543a3a41737365744964506172616d657465720001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800110474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e38636c6561725f6d6574616461746104010869647501014c543a3a41737365744964506172616d657465720012047c536565205b6050616c6c65743a3a636c6561725f6d65746164617461605d2e48666f7263655f7365745f6d6574616461746114010869647501014c543a3a41737365744964506172616d657465720001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c0013048c536565205b6050616c6c65743a3a666f7263655f7365745f6d65746164617461605d2e50666f7263655f636c6561725f6d6574616461746104010869647501014c543a3a41737365744964506172616d6574657200140494536565205b6050616c6c65743a3a666f7263655f636c6561725f6d65746164617461605d2e48666f7263655f61737365745f73746174757320010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572650301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572650301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e636575010128543a3a42616c616e636500013469735f73756666696369656e74780110626f6f6c00012469735f66726f7a656e780110626f6f6c0015048c536565205b6050616c6c65743a3a666f7263655f61737365745f737461747573605d2e40617070726f76655f7472616e736665720c010869647501014c543a3a41737365744964506172616d6574657200012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500160484536565205b6050616c6c65743a3a617070726f76655f7472616e73666572605d2e3c63616e63656c5f617070726f76616c08010869647501014c543a3a41737365744964506172616d6574657200012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00170480536565205b6050616c6c65743a3a63616e63656c5f617070726f76616c605d2e54666f7263655f63616e63656c5f617070726f76616c0c010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00180498536565205b6050616c6c65743a3a666f7263655f63616e63656c5f617070726f76616c605d2e447472616e736665725f617070726f76656410010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6e650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500190488536565205b6050616c6c65743a3a7472616e736665725f617070726f766564605d2e14746f75636804010869647501014c543a3a41737365744964506172616d65746572001a0458536565205b6050616c6c65743a3a746f756368605d2e18726566756e6408010869647501014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e780110626f6f6c001b045c536565205b6050616c6c65743a3a726566756e64605d2e3c7365745f6d696e5f62616c616e636508010869647501014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c0480536565205b6050616c6c65743a3a7365745f6d696e5f62616c616e6365605d2e2c746f7563685f6f7468657208010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001d0470536565205b6050616c6c65743a3a746f7563685f6f74686572605d2e30726566756e645f6f7468657208010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001e0474536565205b6050616c6c65743a3a726566756e645f6f74686572605d2e14626c6f636b08010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001f0458536565205b6050616c6c65743a3a626c6f636b605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e65030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780110011408496404000001244163636f756e74496400000014496e6465780400bd0201304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d0003002441646472657373323004009d0101205b75383b2032305d0004000069030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f646561746808011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e636500000494536565205b6050616c6c65743a3a7472616e736665725f616c6c6f775f6465617468605d2e38666f7263655f7472616e736665720c0118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e00011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e63650002047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e4c7472616e736665725f6b6565705f616c69766508011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e636500030490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e307472616e736665725f616c6c08011064657374650301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665780110626f6f6c00040474536565205b6050616c6c65743a3a7472616e736665725f616c6c605d2e3c666f7263655f756e7265736572766508010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050480536565205b6050616c6c65743a3a666f7263655f756e72657365727665605d2e40757067726164655f6163636f756e747304010c77686f250201445665633c543a3a4163636f756e7449643e00060484536565205b6050616c6c65743a3a757067726164655f6163636f756e7473605d2e44666f7263655f7365745f62616c616e636508010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656575010128543a3a42616c616e636500080488536565205b6050616c6c65743a3a666f7263655f7365745f62616c616e6365605d2e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e6d03014c41646a7573746d656e74446972656374696f6e00011464656c746175010128543a3a42616c616e6365000904b0536565205b6050616c6c65743a3a666f7263655f61646a7573745f746f74616c5f69737375616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d030c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e6372656173650000002044656372656173650001000071030c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6675030190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6685030140543a3a4b65794f776e657250726f6f6600000490536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e605d2e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6675030190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6685030140543a3a4b65794f776e657250726f6f66000104b4536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e5f756e7369676e6564605d2e48706c616e5f636f6e6669675f6368616e6765040118636f6e666967890301504e657874436f6e66696744657363726970746f720002048c536565205b6050616c6c65743a3a706c616e5f636f6e6669675f6368616e6765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7503084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572017903084964017d03001001206f6666656e6465727d0301084964000110736c6f7481030110536c6f7400013066697273745f686561646572790301184865616465720001347365636f6e645f6865616465727903011848656164657200007903102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d626572012c1048617368000014012c706172656e745f68617368300130486173683a3a4f75747075740001186e756d6265722801184e756d62657200012873746174655f726f6f74300130486173683a3a4f757470757400013c65787472696e736963735f726f6f74300130486173683a3a4f757470757400011864696765737438011844696765737400007d030c4473705f636f6e73656e7375735f626162650c617070185075626c6963000004006501013c737232353531393a3a5075626c696300008103084873705f636f6e73656e7375735f736c6f747310536c6f74000004002c010c75363400008503082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f6465731d0301305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e74000089030c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f72000104085631080104638d030128287536342c2075363429000134616c6c6f7765645f736c6f747391030130416c6c6f776564536c6f7473000100008d03000004082c2c009103084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000095030c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66990301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66c5030140543a3a4b65794f776e657250726f6f6600000490536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e605d2e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66990301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66c5030140543a3a4b65794f776e657250726f6f66000104b4536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e5f756e7369676e6564605d2e306e6f74655f7374616c6c656408011464656c61792c0144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d6265722c0144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a6e6f74655f7374616c6c6564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9903085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480130044e012c000801187365745f69642c0114536574496400013065717569766f636174696f6e9d03014845717569766f636174696f6e3c482c204e3e00009d03085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480130044e012c01081c507265766f74650400a1030139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d69740400b9030141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e00010000a103084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401a8045601a503045301a90300100130726f756e645f6e756d6265722c010c7536340001206964656e74697479a8010849640001146669727374b503011828562c2053290001187365636f6e64b503011828562c2053290000a503084066696e616c6974795f6772616e6470611c507265766f74650804480130044e012c0008012c7461726765745f68617368300104480001347461726765745f6e756d6265722c01044e0000a9030c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400ad030148656432353531393a3a5369676e61747572650000ad030c1c73705f636f72651c65643235353139245369676e617475726500000400b10301205b75383b2036345d0000b103000003400000000800b50300000408a503a90300b903084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401a8045601bd03045301a90300100130726f756e645f6e756d6265722c010c7536340001206964656e74697479a8010849640001146669727374c103011828562c2053290001187365636f6e64c103011828562c2053290000bd03084066696e616c6974795f6772616e64706124507265636f6d6d69740804480130044e012c0008012c7461726765745f68617368300104480001347461726765745f6e756d6265722c01044e0000c10300000408bd03a90300c503081c73705f636f726510566f696400010000c9030c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e64657800000458536565205b6050616c6c65743a3a636c61696d605d2e207472616e7366657208010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e64657800010464536565205b6050616c6c65743a3a7472616e73666572605d2e1066726565040114696e64657810013c543a3a4163636f756e74496e64657800020454536565205b6050616c6c65743a3a66726565605d2e38666f7263655f7472616e736665720c010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65780110626f6f6c0003047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004045c536565205b6050616c6c65743a3a667265657a65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e00011476616c75657501013042616c616e63654f663c543e00000460536565205b6050616c6c65743a3a70726f706f7365605d2e187365636f6e6404012070726f706f73616cbd02012450726f70496e6465780001045c536565205b6050616c6c65743a3a7365636f6e64605d2e10766f74650801247265665f696e646578bd02013c5265666572656e64756d496e646578000110766f7465bc01644163636f756e74566f74653c42616c616e63654f663c543e3e00020454536565205b6050616c6c65743a3a766f7465605d2e40656d657267656e63795f63616e63656c0401247265665f696e64657810013c5265666572656e64756d496e64657800030484536565205b6050616c6c65743a3a656d657267656e63795f63616e63656c605d2e4065787465726e616c5f70726f706f736504012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e00040484536565205b6050616c6c65743a3a65787465726e616c5f70726f706f7365605d2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e000504a8536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f6d616a6f72697479605d2e6065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e000604a4536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f64656661756c74605d2e28666173745f747261636b0c013470726f706f73616c5f6861736830011c543a3a48617368000134766f74696e675f706572696f642c0144426c6f636b4e756d626572466f723c543e00011464656c61792c0144426c6f636b4e756d626572466f723c543e0007046c536565205b6050616c6c65743a3a666173745f747261636b605d2e347665746f5f65787465726e616c04013470726f706f73616c5f6861736830011c543a3a4861736800080478536565205b6050616c6c65743a3a7665746f5f65787465726e616c605d2e4463616e63656c5f7265666572656e64756d0401247265665f696e646578bd02013c5265666572656e64756d496e64657800090488536565205b6050616c6c65743a3a63616e63656c5f7265666572656e64756d605d2e2064656c65676174650c0108746f650301504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6edd030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a0464536565205b6050616c6c65743a3a64656c6567617465605d2e28756e64656c6567617465000b046c536565205b6050616c6c65743a3a756e64656c6567617465605d2e58636c6561725f7075626c69635f70726f706f73616c73000c049c536565205b6050616c6c65743a3a636c6561725f7075626c69635f70726f706f73616c73605d2e18756e6c6f636b040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000d045c536565205b6050616c6c65743a3a756e6c6f636b605d2e2c72656d6f76655f766f7465040114696e64657810013c5265666572656e64756d496e646578000e0470536565205b6050616c6c65743a3a72656d6f76655f766f7465605d2e4472656d6f76655f6f746865725f766f7465080118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c5265666572656e64756d496e646578000f0488536565205b6050616c6c65743a3a72656d6f76655f6f746865725f766f7465605d2e24626c61636b6c69737408013470726f706f73616c5f6861736830011c543a3a4861736800013c6d617962655f7265665f696e646578e103015c4f7074696f6e3c5265666572656e64756d496e6465783e00100468536565205b6050616c6c65743a3a626c61636b6c697374605d2e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578bd02012450726f70496e64657800110480536565205b6050616c6c65743a3a63616e63656c5f70726f706f73616c605d2e307365745f6d657461646174610801146f776e6572c401344d657461646174614f776e65720001286d617962655f68617368e503013c4f7074696f6e3c543a3a486173683e00120474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564080454015d03044801d503010c184c656761637904011068617368300124483a3a4f757470757400000018496e6c696e650400d9030134426f756e646564496e6c696e65000100184c6f6f6b757008011068617368300124483a3a4f757470757400010c6c656e10010c75333200020000d5030c2873705f72756e74696d65187472616974732c426c616b6554776f32353600000000d9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000dd030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000e10304184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000e50304184f7074696f6e04045401300108104e6f6e6500000010536f6d650400300000010000e9030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273250201445665633c543a3a4163636f756e7449643e0001147072696d658801504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c5d03017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64bd02010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64bd02012c4d656d626572436f756e7400012070726f706f73616c5d03017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64bd02010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578bd02013450726f706f73616c496e64657800011c617070726f7665780110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578bd02013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64bd02010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eed030c3870616c6c65745f76657374696e671870616c6c65741043616c6c040454000118107665737400000454536565205b6050616c6c65743a3a76657374605d2e28766573745f6f74686572040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001046c536565205b6050616c6c65743a3a766573745f6f74686572605d2e3c7665737465645f7472616e73666572080118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65f10301b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00020480536565205b6050616c6c65743a3a7665737465645f7472616e73666572605d2e54666f7263655f7665737465645f7472616e736665720c0118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65f10301b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00030498536565205b6050616c6c65743a3a666f7263655f7665737465645f7472616e73666572605d2e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c75333200040480536565205b6050616c6c65743a3a6d657267655f7363686564756c6573605d2e74666f7263655f72656d6f76655f76657374696e675f7363686564756c650801187461726765746503018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001387363686564756c655f696e64657810010c753332000504b8536565205b6050616c6c65743a3a666f7263655f72656d6f76655f76657374696e675f7363686564756c65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef1030c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d626572012c000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b2c012c426c6f636b4e756d6265720000f5030c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c65741043616c6c04045400011810766f7465080114766f746573250201445665633c543a3a4163636f756e7449643e00011476616c75657501013042616c616e63654f663c543e00000454536565205b6050616c6c65743a3a766f7465605d2e3072656d6f76655f766f74657200010474536565205b6050616c6c65743a3a72656d6f76655f766f746572605d2e407375626d69745f63616e64696461637904013c63616e6469646174655f636f756e74bd02010c75333200020484536565205b6050616c6c65743a3a7375626d69745f63616e646964616379605d2e4872656e6f756e63655f63616e64696461637904012872656e6f756e63696e67f903012852656e6f756e63696e670003048c536565205b6050616c6c65743a3a72656e6f756e63655f63616e646964616379605d2e3472656d6f76655f6d656d6265720c010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000128736c6173685f626f6e64780110626f6f6c000138726572756e5f656c656374696f6e780110626f6f6c00040478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e50636c65616e5f646566756e63745f766f746572730801286e756d5f766f7465727310010c75333200012c6e756d5f646566756e637410010c75333200050494536565205b6050616c6c65743a3a636c65616e5f646566756e63745f766f74657273605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef903086470616c6c65745f656c656374696f6e735f70687261676d656e2852656e6f756e63696e6700010c184d656d6265720000002052756e6e657255700001002443616e6469646174650400bd02010c75333200020000fd030c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6e010401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e657373d1040158536f6c7574696f6e4f72536e617073686f7453697a6500000480536565205b6050616c6c65743a3a7375626d69745f756e7369676e6564605d2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265d50401544f7074696f6e3c456c656374696f6e53636f72653e000104b0536565205b6050616c6c65743a3a7365745f6d696e696d756d5f756e747275737465645f73636f7265605d2e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f727473d9040158537570706f7274733c543a3a4163636f756e7449643e000204b8536565205b6050616c6c65743a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e187375626d69740401307261775f736f6c7574696f6e010401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003045c536565205b6050616c6c65743a3a7375626d6974605d2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f74657273e103012c4f7074696f6e3c7533323e0001446d617962655f6d61785f74617267657473e103012c4f7074696f6e3c7533323e00040490536565205b6050616c6c65743a3a676f7665726e616e63655f66616c6c6261636b605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e040453010504000c0120736f6c7574696f6e050401045300011473636f7265e40134456c656374696f6e53636f7265000114726f756e6410010c75333200000504085874616e676c655f746573746e65745f72756e74696d65384e706f73536f6c7574696f6e31360000400118766f74657331090400000118766f74657332150400000118766f74657333290400000118766f74657334350400000118766f74657335410400000118766f746573364d0400000118766f74657337590400000118766f74657338650400000118766f7465733971040000011c766f74657331307d040000011c766f746573313189040000011c766f746573313295040000011c766f7465733133a1040000011c766f7465733134ad040000011c766f7465733135b9040000011c766f7465733136c50400000009040000020d04000d0400000408bd021104001104000006910200150400000219040019040000040cbd021d041104001d04000004081104210400210400000625040025040c3473705f61726974686d65746963287065725f7468696e677318506572553136000004009102010c753136000029040000022d04002d040000040cbd0231041104003104000003020000001d0400350400000239040039040000040cbd023d041104003d04000003030000001d0400410400000245040045040000040cbd0249041104004904000003040000001d04004d0400000251040051040000040cbd0255041104005504000003050000001d040059040000025d04005d040000040cbd0261041104006104000003060000001d0400650400000269040069040000040cbd026d041104006d04000003070000001d0400710400000275040075040000040cbd0279041104007904000003080000001d04007d0400000281040081040000040cbd0285041104008504000003090000001d040089040000028d04008d040000040cbd02910411040091040000030a0000001d0400950400000299040099040000040cbd029d041104009d040000030b0000001d0400a104000002a50400a5040000040cbd02a904110400a9040000030c0000001d0400ad04000002b10400b1040000040cbd02b504110400b5040000030d0000001d0400b904000002bd0400bd040000040cbd02c104110400c1040000030e0000001d0400c504000002c90400c9040000040cbd02cd04110400cd040000030f0000001d0400d104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f74657273bd02010c75333200011c74617267657473bd02010c7533320000d50404184f7074696f6e04045401e40108104e6f6e6500000010536f6d650400e40000010000d904000002dd0400dd040000040800e10400e104084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273d401845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e0000e504103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400017410626f6e6408011476616c75657501013042616c616e63654f663c543e0001147061796565f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00000454536565205b6050616c6c65743a3a626f6e64605d2e28626f6e645f65787472610401386d61785f6164646974696f6e616c7501013042616c616e63654f663c543e0001046c536565205b6050616c6c65743a3a626f6e645f6578747261605d2e18756e626f6e6404011476616c75657501013042616c616e63654f663c543e0002045c536565205b6050616c6c65743a3a756e626f6e64605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c75333200030488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e2076616c69646174650401147072656673fc013856616c696461746f72507265667300040464536565205b6050616c6c65743a3a76616c6964617465605d2e206e6f6d696e61746504011c74617267657473e90401645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00050464536565205b6050616c6c65743a3a6e6f6d696e617465605d2e146368696c6c00060458536565205b6050616c6c65743a3a6368696c6c605d2e247365745f70617965650401147061796565f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00070468536565205b6050616c6c65743a3a7365745f7061796565605d2e387365745f636f6e74726f6c6c65720008047c536565205b6050616c6c65743a3a7365745f636f6e74726f6c6c6572605d2e4c7365745f76616c696461746f725f636f756e7404010c6e6577bd02010c75333200090490536565205b6050616c6c65743a3a7365745f76616c696461746f725f636f756e74605d2e60696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616cbd02010c753332000a04a4536565205b6050616c6c65743a3a696e6372656173655f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f729902011c50657263656e74000b0498536565205b6050616c6c65743a3a7363616c655f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c0478536565205b6050616c6c65743a3a666f7263655f6e6f5f65726173605d2e34666f7263655f6e65775f657261000d0478536565205b6050616c6c65743a3a666f7263655f6e65775f657261605d2e447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573250201445665633c543a3a4163636f756e7449643e000e0488536565205b6050616c6c65743a3a7365745f696e76756c6e657261626c6573605d2e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0478536565205b6050616c6c65743a3a666f7263655f756e7374616b65605d2e50666f7263655f6e65775f6572615f616c7761797300100494536565205b6050616c6c65743a3a666f7263655f6e65775f6572615f616c77617973605d2e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573ed0401205665633c7533323e00110498536565205b6050616c6c65743a3a63616e63656c5f64656665727265645f736c617368605d2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780012047c536565205b6050616c6c65743a3a7061796f75745f7374616b657273605d2e187265626f6e6404011476616c75657501013042616c616e63654f663c543e0013045c536565205b6050616c6c65743a3a7265626f6e64605d2e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014046c536565205b6050616c6c65743a3a726561705f7374617368605d2e106b69636b04010c77686fe90401645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00150454536565205b6050616c6c65743a3a6b69636b605d2e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e64f1040158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e64f1040158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e74f5040134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e74f5040134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c64f9040144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6efd040144436f6e6669674f703c50657262696c6c3e00160490536565205b6050616c6c65743a3a7365745f7374616b696e675f636f6e66696773605d2e2c6368696c6c5f6f746865720401147374617368000130543a3a4163636f756e74496400170470536565205b6050616c6c65743a3a6368696c6c5f6f74686572605d2e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e744964001804ac536565205b6050616c6c65743a3a666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e605d2e487365745f6d696e5f636f6d6d697373696f6e04010c6e6577f8011c50657262696c6c0019048c536565205b6050616c6c65743a3a7365745f6d696e5f636f6d6d697373696f6e605d2e587061796f75745f7374616b6572735f62795f706167650c013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780001107061676510011050616765001a049c536565205b6050616c6c65743a3a7061796f75745f7374616b6572735f62795f70616765605d2e307570646174655f7061796565040128636f6e74726f6c6c6572000130543a3a4163636f756e744964001b0474536565205b6050616c6c65743a3a7570646174655f7061796565605d2e686465707265636174655f636f6e74726f6c6c65725f626174636804012c636f6e74726f6c6c657273010501f4426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d6178436f6e74726f6c6c657273496e4465707265636174696f6e42617463683e001c04ac536565205b6050616c6c65743a3a6465707265636174655f636f6e74726f6c6c65725f6261746368605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee904000002650300ed040000021000f104103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f766500020000f504103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f766500020000f904103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454019902010c104e6f6f700000000c536574040099020104540001001852656d6f766500020000fd04103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f7004045401f8010c104e6f6f700000000c5365740400f80104540001001852656d6f76650002000001050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e000005050c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579730905011c543a3a4b65797300011470726f6f6634011c5665633c75383e00000464536565205b6050616c6c65743a3a7365745f6b657973605d2e2870757267655f6b6579730001046c536565205b6050616c6c65743a3a70757267655f6b657973605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e09050c5874616e676c655f746573746e65745f72756e74696d65186f70617175652c53657373696f6e4b6579730000100110626162657d0301c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011c6772616e647061a801d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65610101d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000110726f6c650d0501c83c526f6c6573206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300000d050c6074616e676c655f63727970746f5f7072696d6974697665731863727970746f185075626c6963000004001105013465636473613a3a5075626c6963000011050c1c73705f636f7265146563647361185075626c696300000400150501805b75383b205055424c49435f4b45595f53455249414c495a45445f53495a455d0000150500000321000000080019050c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001243470726f706f73655f7370656e6408011476616c75657501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a70726f706f73655f7370656e64605d2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800010480536565205b6050616c6c65743a3a72656a6563745f70726f706f73616c605d2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800020484536565205b6050616c6c65743a3a617070726f76655f70726f706f73616c605d2e2c7370656e645f6c6f63616c080118616d6f756e747501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00030470536565205b6050616c6c65743a3a7370656e645f6c6f63616c605d2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800040480536565205b6050616c6c65743a3a72656d6f76655f617070726f76616c605d2e147370656e6410012861737365745f6b696e64840144426f783c543a3a41737365744b696e643e000118616d6f756e7475010150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279000178426f783c42656e65666963696172794c6f6f6b75704f663c542c20493e3e00012876616c69645f66726f6d1d0501644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e00050458536565205b6050616c6c65743a3a7370656e64605d2e187061796f7574040114696e6465781001285370656e64496e6465780006045c536565205b6050616c6c65743a3a7061796f7574605d2e30636865636b5f737461747573040114696e6465781001285370656e64496e64657800070474536565205b6050616c6c65743a3a636865636b5f737461747573605d2e28766f69645f7370656e64040114696e6465781001285370656e64496e6465780008046c536565205b6050616c6c65743a3a766f69645f7370656e64605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1d0504184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c000001000021050c3c70616c6c65745f626f756e746965731870616c6c65741043616c6c0804540004490001243870726f706f73655f626f756e747908011476616c75657501013c42616c616e63654f663c542c20493e00012c6465736372697074696f6e34011c5665633c75383e0000047c536565205b6050616c6c65743a3a70726f706f73655f626f756e7479605d2e38617070726f76655f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e6465780001047c536565205b6050616c6c65743a3a617070726f76655f626f756e7479605d2e3c70726f706f73655f63757261746f720c0124626f756e74795f6964bd02012c426f756e7479496e64657800011c63757261746f72650301504163636f756e7449644c6f6f6b75704f663c543e00010c6665657501013c42616c616e63654f663c542c20493e00020480536565205b6050616c6c65743a3a70726f706f73655f63757261746f72605d2e40756e61737369676e5f63757261746f72040124626f756e74795f6964bd02012c426f756e7479496e64657800030484536565205b6050616c6c65743a3a756e61737369676e5f63757261746f72605d2e386163636570745f63757261746f72040124626f756e74795f6964bd02012c426f756e7479496e6465780004047c536565205b6050616c6c65743a3a6163636570745f63757261746f72605d2e3061776172645f626f756e7479080124626f756e74795f6964bd02012c426f756e7479496e64657800012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00050474536565205b6050616c6c65743a3a61776172645f626f756e7479605d2e30636c61696d5f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e64657800060474536565205b6050616c6c65743a3a636c61696d5f626f756e7479605d2e30636c6f73655f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e64657800070474536565205b6050616c6c65743a3a636c6f73655f626f756e7479605d2e50657874656e645f626f756e74795f657870697279080124626f756e74795f6964bd02012c426f756e7479496e64657800011872656d61726b34011c5665633c75383e00080494536565205b6050616c6c65743a3a657874656e645f626f756e74795f657870697279605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e25050c5470616c6c65745f6368696c645f626f756e746965731870616c6c65741043616c6c04045400011c406164645f6368696c645f626f756e74790c0140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800011476616c75657501013042616c616e63654f663c543e00012c6465736372697074696f6e34011c5665633c75383e00000484536565205b6050616c6c65743a3a6164645f6368696c645f626f756e7479605d2e3c70726f706f73655f63757261746f72100140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800011c63757261746f72650301504163636f756e7449644c6f6f6b75704f663c543e00010c6665657501013042616c616e63654f663c543e00010480536565205b6050616c6c65743a3a70726f706f73655f63757261746f72605d2e386163636570745f63757261746f72080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780002047c536565205b6050616c6c65743a3a6163636570745f63757261746f72605d2e40756e61737369676e5f63757261746f72080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800030484536565205b6050616c6c65743a3a756e61737369676e5f63757261746f72605d2e4861776172645f6368696c645f626f756e74790c0140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e0004048c536565205b6050616c6c65743a3a61776172645f6368696c645f626f756e7479605d2e48636c61696d5f6368696c645f626f756e7479080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780005048c536565205b6050616c6c65743a3a636c61696d5f6368696c645f626f756e7479605d2e48636c6f73655f6368696c645f626f756e7479080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780006048c536565205b6050616c6c65743a3a636c6f73655f6368696c645f626f756e7479605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e29050c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c08045400044900010c1472656261670401286469736c6f6361746564650301504163636f756e7449644c6f6f6b75704f663c543e00000458536565205b6050616c6c65743a3a7265626167605d2e3c7075745f696e5f66726f6e745f6f6604011c6c696768746572650301504163636f756e7449644c6f6f6b75704f663c543e00010480536565205b6050616c6c65743a3a7075745f696e5f66726f6e745f6f66605d2e547075745f696e5f66726f6e745f6f665f6f7468657208011c68656176696572650301504163636f756e7449644c6f6f6b75704f663c543e00011c6c696768746572650301504163636f756e7449644c6f6f6b75704f663c543e00020498536565205b6050616c6c65743a3a7075745f696e5f66726f6e745f6f665f6f74686572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d050c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c65741043616c6c04045400015c106a6f696e080118616d6f756e747501013042616c616e63654f663c543e00011c706f6f6c5f6964100118506f6f6c496400000454536565205b6050616c6c65743a3a6a6f696e605d2e28626f6e645f657874726104011465787472613105015c426f6e6445787472613c42616c616e63654f663c543e3e0001046c536565205b6050616c6c65743a3a626f6e645f6578747261605d2e30636c61696d5f7061796f757400020474536565205b6050616c6c65743a3a636c61696d5f7061796f7574605d2e18756e626f6e640801386d656d6265725f6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e000140756e626f6e64696e675f706f696e74737501013042616c616e63654f663c543e0003045c536565205b6050616c6c65743a3a756e626f6e64605d2e58706f6f6c5f77697468647261775f756e626f6e64656408011c706f6f6c5f6964100118506f6f6c49640001486e756d5f736c617368696e675f7370616e7310010c7533320004049c536565205b6050616c6c65743a3a706f6f6c5f77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640801386d656d6265725f6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e0001486e756d5f736c617368696e675f7370616e7310010c75333200050488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e18637265617465100118616d6f756e747501013042616c616e63654f663c543e000110726f6f74650301504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72650301504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572650301504163636f756e7449644c6f6f6b75704f663c543e0006045c536565205b6050616c6c65743a3a637265617465605d2e4c6372656174655f776974685f706f6f6c5f6964140118616d6f756e747501013042616c616e63654f663c543e000110726f6f74650301504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72650301504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572650301504163636f756e7449644c6f6f6b75704f663c543e00011c706f6f6c5f6964100118506f6f6c496400070490536565205b6050616c6c65743a3a6372656174655f776974685f706f6f6c5f6964605d2e206e6f6d696e61746508011c706f6f6c5f6964100118506f6f6c496400012876616c696461746f7273250201445665633c543a3a4163636f756e7449643e00080464536565205b6050616c6c65743a3a6e6f6d696e617465605d2e247365745f737461746508011c706f6f6c5f6964100118506f6f6c4964000114737461746521010124506f6f6c537461746500090468536565205b6050616c6c65743a3a7365745f7374617465605d2e307365745f6d6574616461746108011c706f6f6c5f6964100118506f6f6c49640001206d6574616461746134011c5665633c75383e000a0474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e2c7365745f636f6e666967731801346d696e5f6a6f696e5f626f6e6435050158436f6e6669674f703c42616c616e63654f663c543e3e00013c6d696e5f6372656174655f626f6e6435050158436f6e6669674f703c42616c616e63654f663c543e3e0001246d61785f706f6f6c7339050134436f6e6669674f703c7533323e00012c6d61785f6d656d6265727339050134436f6e6669674f703c7533323e0001506d61785f6d656d626572735f7065725f706f6f6c39050134436f6e6669674f703c7533323e000154676c6f62616c5f6d61785f636f6d6d697373696f6e3d050144436f6e6669674f703c50657262696c6c3e000b0470536565205b6050616c6c65743a3a7365745f636f6e66696773605d2e307570646174655f726f6c657310011c706f6f6c5f6964100118506f6f6c49640001206e65775f726f6f7441050158436f6e6669674f703c543a3a4163636f756e7449643e0001346e65775f6e6f6d696e61746f7241050158436f6e6669674f703c543a3a4163636f756e7449643e00012c6e65775f626f756e63657241050158436f6e6669674f703c543a3a4163636f756e7449643e000c0474536565205b6050616c6c65743a3a7570646174655f726f6c6573605d2e146368696c6c04011c706f6f6c5f6964100118506f6f6c4964000d0458536565205b6050616c6c65743a3a6368696c6c605d2e40626f6e645f65787472615f6f746865720801186d656d626572650301504163636f756e7449644c6f6f6b75704f663c543e00011465787472613105015c426f6e6445787472613c42616c616e63654f663c543e3e000e0484536565205b6050616c6c65743a3a626f6e645f65787472615f6f74686572605d2e507365745f636c61696d5f7065726d697373696f6e0401287065726d697373696f6e4505013c436c61696d5065726d697373696f6e000f0494536565205b6050616c6c65743a3a7365745f636c61696d5f7065726d697373696f6e605d2e48636c61696d5f7061796f75745f6f746865720401146f74686572000130543a3a4163636f756e7449640010048c536565205b6050616c6c65743a3a636c61696d5f7061796f75745f6f74686572605d2e387365745f636f6d6d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001386e65775f636f6d6d697373696f6e2501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e0011047c536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e605d2e487365745f636f6d6d697373696f6e5f6d617808011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6ef8011c50657262696c6c0012048c536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f6d6178605d2e687365745f636f6d6d697373696f6e5f6368616e67655f7261746508011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f726174652d01019c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e001304ac536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f6368616e67655f72617465605d2e40636c61696d5f636f6d6d697373696f6e04011c706f6f6c5f6964100118506f6f6c496400140484536565205b6050616c6c65743a3a636c61696d5f636f6d6d697373696f6e605d2e4c61646a7573745f706f6f6c5f6465706f73697404011c706f6f6c5f6964100118506f6f6c496400150490536565205b6050616c6c65743a3a61646a7573745f706f6f6c5f6465706f736974605d2e7c7365745f636f6d6d697373696f6e5f636c61696d5f7065726d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001287065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e001604c0536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f636c61696d5f7065726d697373696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324426f6e644578747261041c42616c616e6365011801082c4672656542616c616e6365040018011c42616c616e63650000001c52657761726473000100003505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200003905085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200003d05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f7004045401f8010c104e6f6f700000000c5365740400f80104540001001852656d6f7665000200004105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540100010c104e6f6f700000000c5365740400000104540001001852656d6f7665000200004505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c436c61696d5065726d697373696f6e000110305065726d697373696f6e6564000000585065726d697373696f6e6c657373436f6d706f756e64000100585065726d697373696f6e6c6573735769746864726177000200445065726d697373696f6e6c657373416c6c0003000049050c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e2c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000464536565205b6050616c6c65743a3a7363686564756c65605d2e1863616e63656c0801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001045c536565205b6050616c6c65743a3a63616e63656c605d2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e2c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0002047c536565205b6050616c6c65743a3a7363686564756c655f6e616d6564605d2e3063616e63656c5f6e616d656404010869640401205461736b4e616d6500030474536565205b6050616c6c65743a3a63616e63656c5f6e616d6564605d2e387363686564756c655f616674657210011461667465722c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004047c536565205b6050616c6c65743a3a7363686564756c655f6166746572605d2e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d6500011461667465722c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050494536565205b6050616c6c65743a3a7363686564756c655f6e616d65645f6166746572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d0504184f7074696f6e040454013d010108104e6f6e6500000010536f6d6504003d01000001000051050c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000114346e6f74655f707265696d616765040114627974657334011c5665633c75383e00000478536565205b6050616c6c65743a3a6e6f74655f707265696d616765605d2e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a4861736800010480536565205b6050616c6c65743a3a756e6e6f74655f707265696d616765605d2e40726571756573745f707265696d6167650401106861736830011c543a3a4861736800020484536565205b6050616c6c65743a3a726571756573745f707265696d616765605d2e48756e726571756573745f707265696d6167650401106861736830011c543a3a486173680003048c536565205b6050616c6c65743a3a756e726571756573745f707265696d616765605d2e38656e737572655f75706461746564040118686173686573c90101305665633c543a3a486173683e0004047c536565205b6050616c6c65743a3a656e737572655f75706461746564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e55050c3c70616c6c65745f74785f70617573651870616c6c65741043616c6c04045400010814706175736504012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e00000458536565205b6050616c6c65743a3a7061757365605d2e1c756e70617573650401146964656e745501015052756e74696d6543616c6c4e616d654f663c543e00010460536565205b6050616c6c65743a3a756e7061757365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59050c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c040454000104246865617274626561740801246865617274626561745d0501704865617274626561743c426c6f636b4e756d626572466f723c543e3e0001247369676e6174757265610501bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500000468536565205b6050616c6c65743a3a686561727462656174605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d05084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572012c00100130626c6f636b5f6e756d6265722c012c426c6f636b4e756d62657200013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c75333200006105104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e61747572650000040065050148737232353531393a3a5369676e6174757265000065050c1c73705f636f72651c73723235353139245369676e617475726500000400b10301205b75383b2036345d000069050c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c040454000158346164645f72656769737472617204011c6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a6164645f726567697374726172605d2e307365745f6964656e74697479040110696e666f6d05016c426f783c543a3a4964656e74697479496e666f726d6174696f6e3e00010474536565205b6050616c6c65743a3a7365745f6964656e74697479605d2e207365745f7375627304011073756273f50501645665633c28543a3a4163636f756e7449642c2044617461293e00020464536565205b6050616c6c65743a3a7365745f73756273605d2e38636c6561725f6964656e746974790003047c536565205b6050616c6c65743a3a636c6561725f6964656e74697479605d2e44726571756573745f6a756467656d656e740801247265675f696e646578bd020138526567697374726172496e64657800011c6d61785f6665657501013042616c616e63654f663c543e00040488536565205b6050616c6c65743a3a726571756573745f6a756467656d656e74605d2e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e6465780005047c536565205b6050616c6c65743a3a63616e63656c5f72657175657374605d2e1c7365745f666565080114696e646578bd020138526567697374726172496e64657800010c6665657501013042616c616e63654f663c543e00060460536565205b6050616c6c65743a3a7365745f666565605d2e387365745f6163636f756e745f6964080114696e646578bd020138526567697374726172496e64657800010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e0007047c536565205b6050616c6c65743a3a7365745f6163636f756e745f6964605d2e287365745f6669656c6473080114696e646578bd020138526567697374726172496e6465780001186669656c64732c0129013c543a3a4964656e74697479496e666f726d6174696f6e206173204964656e74697479496e666f726d6174696f6e50726f76696465723e3a3a0a4669656c64734964656e7469666965720008046c536565205b6050616c6c65743a3a7365745f6669656c6473605d2e4470726f766964655f6a756467656d656e741001247265675f696e646578bd020138526567697374726172496e646578000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e74fd05015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e7469747930011c543a3a4861736800090488536565205b6050616c6c65743a3a70726f766964655f6a756467656d656e74605d2e346b696c6c5f6964656e74697479040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000a0478536565205b6050616c6c65743a3a6b696c6c5f6964656e74697479605d2e1c6164645f73756208010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000110646174617905011044617461000b0460536565205b6050616c6c65743a3a6164645f737562605d2e2872656e616d655f73756208010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000110646174617905011044617461000c046c536565205b6050616c6c65743a3a72656e616d655f737562605d2e2872656d6f76655f73756204010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000d046c536565205b6050616c6c65743a3a72656d6f76655f737562605d2e20717569745f737562000e0464536565205b6050616c6c65743a3a717569745f737562605d2e586164645f757365726e616d655f617574686f726974790c0124617574686f72697479650301504163636f756e7449644c6f6f6b75704f663c543e00011873756666697834011c5665633c75383e000128616c6c6f636174696f6e10010c753332000f049c536565205b6050616c6c65743a3a6164645f757365726e616d655f617574686f72697479605d2e6472656d6f76655f757365726e616d655f617574686f72697479040124617574686f72697479650301504163636f756e7449644c6f6f6b75704f663c543e001004a8536565205b6050616c6c65743a3a72656d6f76655f757365726e616d655f617574686f72697479605d2e407365745f757365726e616d655f666f720c010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000120757365726e616d6534011c5665633c75383e0001247369676e6174757265010601704f7074696f6e3c543a3a4f6666636861696e5369676e61747572653e00110484536565205b6050616c6c65743a3a7365745f757365726e616d655f666f72605d2e3c6163636570745f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e00120480536565205b6050616c6c65743a3a6163636570745f757365726e616d65605d2e5c72656d6f76655f657870697265645f617070726f76616c040120757365726e616d658501012c557365726e616d653c543e001304a0536565205b6050616c6c65743a3a72656d6f76655f657870697265645f617070726f76616c605d2e507365745f7072696d6172795f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e00140494536565205b6050616c6c65743a3a7365745f7072696d6172795f757365726e616d65605d2e6072656d6f76655f64616e676c696e675f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e001504a4536565205b6050616c6c65743a3a72656d6f76655f64616e676c696e675f757365726e616d65605d2e04704964656e746974792070616c6c6574206465636c61726174696f6e2e6d050c3c70616c6c65745f6964656e74697479186c6567616379304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c71050190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617979050110446174610001146c6567616c790501104461746100010c776562790501104461746100011072696f747905011044617461000114656d61696c790501104461746100013c7067705f66696e6765727072696e74f10501404f7074696f6e3c5b75383b2032305d3e000114696d616765790501104461746100011c747769747465727905011044617461000071050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017505045300000400ed0501185665633c543e0000750500000408790579050079050c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e65000000105261773004007d0500000100105261773104008105000002001052617732040085050000030010526177330400890500000400105261773404004400000500105261773504008d05000006001052617736040091050000070010526177370400950500000800105261773804004d030000090010526177390400990500000a0014526177313004009d0500000b001452617731310400a10500000c001452617731320400a50500000d001452617731330400a90500000e001452617731340400ad0500000f001452617731350400b1050000100014526177313604004d01000011001452617731370400b505000012001452617731380400b905000013001452617731390400bd050000140014526177323004009d01000015001452617732310400c105000016001452617732320400c505000017001452617732330400c905000018001452617732340400cd05000019001452617732350400d10500001a001452617732360400d50500001b001452617732370400d90500001c001452617732380400dd0500001d001452617732390400e10500001e001452617733300400e50500001f001452617733310400e90500002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c536861546872656532353604000400002500007d050000030000000008008105000003010000000800850500000302000000080089050000030300000008008d050000030500000008009105000003060000000800950500000307000000080099050000030900000008009d050000030a0000000800a1050000030b0000000800a5050000030c0000000800a9050000030d0000000800ad050000030e0000000800b1050000030f0000000800b505000003110000000800b905000003120000000800bd05000003130000000800c105000003150000000800c505000003160000000800c905000003170000000800cd05000003180000000800d105000003190000000800d5050000031a0000000800d9050000031b0000000800dd050000031c0000000800e1050000031d0000000800e5050000031e0000000800e9050000031f0000000800ed05000002750500f10504184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d010000010000f505000002f90500f9050000040800790500fd050c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000010604184f7074696f6e0404540105060108104e6f6e6500000010536f6d650400050600000100000506082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400ad030148656432353531393a3a5369676e61747572650000001c53723235353139040065050148737232353531393a3a5369676e617475726500010014456364736104000906014065636473613a3a5369676e61747572650002000009060c1c73705f636f7265146563647361245369676e6174757265000004000d06017c5b75383b205349474e41545552455f53455249414c495a45445f53495a455d00000d0600000341000000080011060c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a6261746368605d2e3461735f64657269766174697665080114696e6465789102010c75313600011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00010478536565205b6050616c6c65743a3a61735f64657269766174697665605d2e2462617463685f616c6c04011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00020468536565205b6050616c6c65743a3a62617463685f616c6c605d2e2c64697370617463685f617308012461735f6f726967696e19060154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030470536565205b6050616c6c65743a3a64697370617463685f6173605d2e2c666f7263655f626174636804011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00040470536565205b6050616c6c65743a3a666f7263655f6261746368605d2e2c776974685f77656967687408011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687424011857656967687400050470536565205b6050616c6c65743a3a776974685f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15060000025d03001906085874616e676c655f746573746e65745f72756e74696d65304f726967696e43616c6c65720001101873797374656d04001d0601746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400210601010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e000c0020457468657265756d04002506015c70616c6c65745f657468657265756d3a3a4f726967696e00200010566f69640400c50301410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f6964000300001d060c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200002106084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200002506083c70616c6c65745f657468657265756d245261774f726967696e0001044c457468657265756d5472616e73616374696f6e040099010110483136300000000029060c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000494536565205b6050616c6c65743a3a61735f6d756c74695f7468726573686f6c645f31605d2e2061735f6d756c74691401247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e742d0601904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687424011857656967687400010464536565205b6050616c6c65743a3a61735f6d756c7469605d2e40617070726f76655f61735f6d756c74691401247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e742d0601904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687424011857656967687400020484536565205b6050616c6c65743a3a617070726f76655f61735f6d756c7469605d2e3c63616e63656c5f61735f6d756c74691001247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d00030480536565205b6050616c6c65743a3a63616e63656c5f61735f6d756c7469605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d0604184f7074696f6e0404540191010108104e6f6e6500000010536f6d6504009101000001000031060c3c70616c6c65745f657468657265756d1870616c6c65741043616c6c040454000104207472616e7361637404012c7472616e73616374696f6e3506012c5472616e73616374696f6e00000464536565205b6050616c6c65743a3a7472616e73616374605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e35060c20657468657265756d2c7472616e73616374696f6e345472616e73616374696f6e563200010c184c65676163790400390601444c65676163795472616e73616374696f6e0000001c45495032393330040049060148454950323933305472616e73616374696f6e0001001c45495031353539040055060148454950313535395472616e73616374696f6e0002000039060c20657468657265756d2c7472616e73616374696f6e444c65676163795472616e73616374696f6e00001c01146e6f6e6365d1010110553235360001246761735f7072696365d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e70757434011442797465730001247369676e6174757265410601505472616e73616374696f6e5369676e617475726500003d060c20657468657265756d2c7472616e73616374696f6e445472616e73616374696f6e416374696f6e0001081043616c6c04009901011048313630000000184372656174650001000041060c20657468657265756d2c7472616e73616374696f6e505472616e73616374696f6e5369676e617475726500000c010476450601545472616e73616374696f6e5265636f76657279496400010472300110483235360001047330011048323536000045060c20657468657265756d2c7472616e73616374696f6e545472616e73616374696f6e5265636f766572794964000004002c010c753634000049060c20657468657265756d2c7472616e73616374696f6e48454950323933305472616e73616374696f6e00002c0120636861696e5f69642c010c7536340001146e6f6e6365d1010110553235360001246761735f7072696365d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e707574340114427974657300012c6163636573735f6c6973744d0601284163636573734c6973740001306f64645f795f706172697479780110626f6f6c0001047230011048323536000104733001104832353600004d0600000251060051060c20657468657265756d2c7472616e73616374696f6e384163636573734c6973744974656d000008011c616464726573739901011c4164647265737300013073746f726167655f6b657973c90101245665633c483235363e000055060c20657468657265756d2c7472616e73616374696f6e48454950313535395472616e73616374696f6e0000300120636861696e5f69642c010c7536340001146e6f6e6365d1010110553235360001606d61785f7072696f726974795f6665655f7065725f676173d10101105532353600013c6d61785f6665655f7065725f676173d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e707574340114427974657300012c6163636573735f6c6973744d0601284163636573734c6973740001306f64645f795f706172697479780110626f6f6c00010472300110483235360001047330011048323536000059060c2870616c6c65745f65766d1870616c6c65741043616c6c04045400011020776974686472617708011c61646472657373990101104831363000011476616c756518013042616c616e63654f663c543e00000464536565205b6050616c6c65743a3a7769746864726177605d2e1063616c6c240118736f7572636599010110483136300001187461726765749901011048313630000114696e70757434011c5665633c75383e00011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e00010454536565205b6050616c6c65743a3a63616c6c605d2e18637265617465200118736f757263659901011048313630000110696e697434011c5665633c75383e00011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e0002045c536565205b6050616c6c65743a3a637265617465605d2e1c63726561746532240118736f757263659901011048313630000110696e697434011c5665633c75383e00011073616c743001104832353600011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e00030460536565205b6050616c6c65743a3a63726561746532605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d0604184f7074696f6e04045401d1010108104e6f6e6500000010536f6d650400d101000001000061060000026506006506000004089901c9010069060c4870616c6c65745f64796e616d69635f6665651870616c6c65741043616c6c040454000104646e6f74655f6d696e5f6761735f70726963655f746172676574040118746172676574d101011055323536000004a8536565205b6050616c6c65743a3a6e6f74655f6d696e5f6761735f70726963655f746172676574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d060c3c70616c6c65745f626173655f6665651870616c6c65741043616c6c040454000108507365745f626173655f6665655f7065725f67617304010c666565d10101105532353600000494536565205b6050616c6c65743a3a7365745f626173655f6665655f7065725f676173605d2e387365745f656c6173746963697479040128656c6173746963697479d901011c5065726d696c6c0001047c536565205b6050616c6c65743a3a7365745f656c6173746963697479605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71060c6470616c6c65745f686f746669785f73756666696369656e74731870616c6c65741043616c6c04045400010478686f746669785f696e635f6163636f756e745f73756666696369656e7473040124616464726573736573750601245665633c483136303e000004bc536565205b6050616c6c65743a3a686f746669785f696e635f6163636f756e745f73756666696369656e7473605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750600000299010079060c5470616c6c65745f61697264726f705f636c61696d731870616c6c65741043616c6c04045400011814636c61696d0c0110646573747d0601504f7074696f6e3c4d756c7469416464726573733e0001187369676e65727d0601504f7074696f6e3c4d756c7469416464726573733e0001247369676e6174757265810601544d756c7469416464726573735369676e617475726500000458536565205b6050616c6c65743a3a636c61696d605d2e286d696e745f636c61696d10010c77686fe10101304d756c74694164647265737300011476616c756518013042616c616e63654f663c543e00014076657374696e675f7363686564756c658d060179014f7074696f6e3c426f756e6465645665633c0a2842616c616e63654f663c543e2c2042616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e292c20543a3a0a4d617856657374696e675363686564756c65733e2c3e00012473746174656d656e749d0601544f7074696f6e3c53746174656d656e744b696e643e0001046c536565205b6050616c6c65743a3a6d696e745f636c61696d605d2e30636c61696d5f617474657374100110646573747d0601504f7074696f6e3c4d756c7469416464726573733e0001187369676e65727d0601504f7074696f6e3c4d756c7469416464726573733e0001247369676e6174757265810601544d756c7469416464726573735369676e617475726500012473746174656d656e7434011c5665633c75383e00020474536565205b6050616c6c65743a3a636c61696d5f617474657374605d2e286d6f76655f636c61696d08010c6f6c64e10101304d756c74694164647265737300010c6e6577e10101304d756c7469416464726573730004046c536565205b6050616c6c65743a3a6d6f76655f636c61696d605d2e5c666f7263655f7365745f6578706972795f636f6e6669670801306578706972795f626c6f636b2c0144426c6f636b4e756d626572466f723c543e00011064657374e10101304d756c746941646472657373000504a0536565205b6050616c6c65743a3a666f7263655f7365745f6578706972795f636f6e666967605d2e30636c61696d5f7369676e6564040110646573747d0601504f7074696f6e3c4d756c7469416464726573733e00060474536565205b6050616c6c65743a3a636c61696d5f7369676e6564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7d0604184f7074696f6e04045401e1010108104e6f6e6500000010536f6d650400e101000001000081060c5470616c6c65745f61697264726f705f636c61696d73147574696c73544d756c7469416464726573735369676e61747572650001080c45564d04008506013845636473615369676e6174757265000000184e6174697665040089060140537232353531395369676e6174757265000100008506105470616c6c65745f61697264726f705f636c61696d73147574696c7340657468657265756d5f616464726573733845636473615369676e6174757265000004000d0601205b75383b2036355d000089060c5470616c6c65745f61697264726f705f636c61696d73147574696c7340537232353531395369676e617475726500000400650501245369676e617475726500008d0604184f7074696f6e0404540191060108104e6f6e6500000010536f6d6504009106000001000091060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019506045300000400990601185665633c543e000095060000040c18182c0099060000029506009d0604184f7074696f6e04045401a1060108104e6f6e6500000010536f6d650400a1060000010000a106085470616c6c65745f61697264726f705f636c61696d733453746174656d656e744b696e640001081c526567756c6172000000105361666500010000a5060c3070616c6c65745f726f6c65731870616c6c65741043616c6c040454000120386372656174655f70726f66696c6508011c70726f66696c65a906012850726f66696c653c543e00014c6d61785f6163746976655f7365727669636573e103012c4f7074696f6e3c7533323e0000047c536565205b6050616c6c65743a3a6372656174655f70726f66696c65605d2e387570646174655f70726f66696c6504013c757064617465645f70726f66696c65a906012850726f66696c653c543e0001047c536565205b6050616c6c65743a3a7570646174655f70726f66696c65605d2e3864656c6574655f70726f66696c650002047c536565205b6050616c6c65743a3a64656c6574655f70726f66696c65605d2e146368696c6c00030458536565205b6050616c6c65743a3a6368696c6c605d2e30756e626f6e645f66756e6473040118616d6f756e747501013042616c616e63654f663c543e00040474536565205b6050616c6c65743a3a756e626f6e645f66756e6473605d2e4477697468647261775f756e626f6e64656400050488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780006047c536565205b6050616c6c65743a3a7061796f75745f7374616b657273605d2e587365745f6d696e5f72657374616b696e675f626f6e640401486d696e5f72657374616b696e675f626f6e6418013042616c616e63654f663c543e0007049c536565205b6050616c6c65743a3a7365745f6d696e5f72657374616b696e675f626f6e64605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea9060c3070616c6c65745f726f6c65731c70726f66696c651c50726f66696c650404540001082c496e646570656e64656e740400ad060170496e646570656e64656e7452657374616b6550726f66696c653c543e000000185368617265640400c106015c53686172656452657374616b6550726f66696c653c543e00010000ad060c3070616c6c65745f726f6c65731c70726f66696c6564496e646570656e64656e7452657374616b6550726f66696c65040454000004011c7265636f726473b10601b0426f756e6465645665633c5265636f72643c543e2c20543a3a4d6178526f6c65735065724163636f756e743e0000b1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b506045300000400bd0601185665633c543e0000b5060c3070616c6c65745f726f6c65731c70726f66696c65185265636f72640404540000080110726f6c65ed010120526f6c6554797065000118616d6f756e74b90601504f7074696f6e3c42616c616e63654f663c543e3e0000b90604184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000bd06000002b50600c1060c3070616c6c65745f726f6c65731c70726f66696c655053686172656452657374616b6550726f66696c65040454000008011c7265636f726473b10601b0426f756e6465645665633c5265636f72643c543e2c20543a3a4d6178526f6c65735065724163636f756e743e000118616d6f756e7418013042616c616e63654f663c543e0000c5060c2c70616c6c65745f6a6f6273186d6f64756c651043616c6c040454000120287375626d69745f6a6f6204010c6a6f62090201484a6f625375626d697373696f6e4f663c543e0000046c536565205b6050616c6c65743a3a7375626d69745f6a6f62605d2e447375626d69745f6a6f625f726573756c740c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f624964000118726573756c74c90601384a6f62526573756c744f663c543e00010488536565205b6050616c6c65743a3a7375626d69745f6a6f625f726573756c74605d2e4077697468647261775f7265776172647300020484536565205b6050616c6c65743a3a77697468647261775f72657761726473605d2e647265706f72745f696e6163746976655f76616c696461746f72140124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f62496400012476616c696461746f72000130543a3a4163636f756e74496400011c6f6666656e63652907015056616c696461746f724f6666656e6365547970650001287369676e6174757265731d0301305665633c5665633c75383e3e000304a8536565205b6050616c6c65743a3a7265706f72745f696e6163746976655f76616c696461746f72605d2e507365745f7065726d69747465645f63616c6c65720c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f6249640001506e65775f7065726d69747465645f63616c6c6572000130543a3a4163636f756e74496400040494536565205b6050616c6c65743a3a7365745f7065726d69747465645f63616c6c6572605d2e307365745f74696d655f66656504011c6e65775f66656518013042616c616e63654f663c543e00050474536565205b6050616c6c65743a3a7365745f74696d655f666565605d2e487375626d69745f6d69736265686176696f7204012c6d69736265686176696f722d0701544d69736265686176696f725375626d697373696f6e0006048c536565205b6050616c6c65743a3a7375626d69745f6d69736265686176696f72605d2e54657874656e645f6a6f625f726573756c745f74746c0c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f624964000124657874656e645f62792c0144426c6f636b4e756d626572466f723c543e00070498536565205b6050616c6c65743a3a657874656e645f6a6f625f726573756c745f74746c605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9060c4474616e676c655f7072696d697469766573106a6f6273244a6f62526573756c74183c4d61785061727469636970616e7473010d02244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106284d6178446174614c656e01d5062c4d617850726f6f664c656e01d906584d61784164646974696f6e616c506172616d734c656e01150201182c444b4750686173654f6e650400dd06011901444b475453534b65795375626d697373696f6e526573756c743c4d61784b65794c656e2c204d61785061727469636970616e74732c204d61785369676e61747572654c656e3e0000002c444b47506861736554776f0400fd06015501444b475453535369676e6174757265526573756c743c4d6178446174614c656e2c204d61784b65794c656e2c204d61785369676e61747572654c656e2c0a4d61784164646974696f6e616c506172616d734c656e3e00010034444b4750686173655468726565040005070158444b475453534b657952656672657368526573756c7400020030444b475068617365466f757204000907012d01444b475453534b6579526f746174696f6e526573756c743c4d61784b65794c656e2c204d61785369676e61747572654c656e2c204d61784164646974696f6e616c506172616d734c656e3e000300385a6b5361615350686173654f6e6504000d0701905a6b5361615343697263756974526573756c743c4d61785061727469636970616e74733e000400385a6b53616153506861736554776f0400190701785a6b5361615350726f6f66526573756c743c4d617850726f6f664c656e3e00050000cd06085874616e676c655f746573746e65745f72756e74696d65244d61784b65794c656e00000000d106085874616e676c655f746573746e65745f72756e74696d653c4d61785369676e61747572654c656e00000000d506085874616e676c655f746573746e65745f72756e74696d65284d6178446174614c656e00000000d906085874616e676c655f746573746e65745f72756e74696d652c4d617850726f6f664c656e00000000dd06104474616e676c655f7072696d697469766573106a6f62730c74737364444b475453534b65795375626d697373696f6e526573756c740c244d61784b65794c656e01cd063c4d61785061727469636970616e7473010d023c4d61785369676e61747572654c656e01d106001801407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500010c6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e0001307061727469636970616e7473e90601d8426f756e6465645665633c426f756e6465645665633c75382c204d61784b65794c656e3e2c204d61785061727469636970616e74733e0001287369676e617475726573f10601f0426f756e6465645665633c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e2c204d61785061727469636970616e74733e0001247468726573686f6c6408010875380000e106104474616e676c655f7072696d697469766573106a6f62730c747373584469676974616c5369676e6174757265536368656d65000130384563647361536563703235366b31000000384563647361536563703235367231000100284563647361537461726b0002002c5363686e6f7272503235360003002c5363686e6f727250333834000400405363686e6f7272536563703235366b31000500385363686e6f7272537232353531390006004c5363686e6f727252697374726574746f323535000700385363686e6f727245643235353139000800305363686e6f72724564343438000900385363686e6f7272546170726f6f74000a0018426c73333831000b0000e5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000e9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e506045300000400ed0601185665633c543e0000ed06000002e50600f1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f506045300000400f90601185665633c543e0000f5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000f906000002f50600fd06104474616e676c655f7072696d697469766573106a6f62730c74737354444b475453535369676e6174757265526573756c7410284d6178446174614c656e01d506244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106584d61784164646974696f6e616c506172616d734c656e011502001801407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d650001106461746101070168426f756e6465645665633c75382c204d6178446174614c656e3e0001247369676e6174757265f506017c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e000134766572696679696e675f6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e00013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e000001070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00000507104474616e676c655f7072696d697469766573106a6f62730c74737358444b475453534b657952656672657368526573756c7400000401407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500000907104474616e676c655f7072696d697469766573106a6f62730c7473735c444b475453534b6579526f746174696f6e526573756c740c244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106584d61784164646974696f6e616c506172616d734c656e0115020020013070686173655f6f6e655f69642c01144a6f6249640001406e65775f70686173655f6f6e655f69642c01144a6f62496400011c6e65775f6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e00010c6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e0001247369676e6174757265f506017c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e0001407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e00000d07104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c5a6b5361615343697263756974526573756c74043c4d61785061727469636970616e7473010d02000801186a6f625f69642c01144a6f6249640001307061727469636970616e7473110701a8426f756e6465645665633c65636473613a3a5075626c69632c204d61785061727469636970616e74733e000011070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011105045300000400150701185665633c543e000015070000021105001907104474616e676c655f7072696d697469766573106a6f6273187a6b73616173445a6b5361615350726f6f66526573756c74042c4d617850726f6f664c656e01d90601082041726b776f726b7304001d07018041726b776f726b7350726f6f66526573756c743c4d617850726f6f664c656e3e00000018436972636f6d040025070178436972636f6d50726f6f66526573756c743c4d617850726f6f664c656e3e000100001d07104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c41726b776f726b7350726f6f66526573756c74042c4d617850726f6f664c656e01d9060004011470726f6f662107016c426f756e6465645665633c75382c204d617850726f6f664c656e3e000021070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00002507104474616e676c655f7072696d697469766573106a6f6273187a6b7361617344436972636f6d50726f6f66526573756c74042c4d617850726f6f664c656e01d9060004011470726f6f662107016c426f756e6465645665633c75382c204d617850726f6f664c656e3e000029070c4474616e676c655f7072696d697469766573106a6f62735056616c696461746f724f6666656e63655479706500011028496e616374697669747900000064496e76616c69645369676e61747572655375626d69747465640001004c52656a656374656456616c6964416374696f6e00020054417070726f766564496e76616c6964416374696f6e000300002d070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72544d69736265686176696f725375626d697373696f6e0000100124726f6c655f74797065ed010120526f6c65547970650001206f6666656e646572150501205b75383b2033335d0001186a6f625f69642c01144a6f6249640001346a757374696669636174696f6e310701604d69736265686176696f724a757374696669636174696f6e000031070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72604d69736265686176696f724a757374696669636174696f6e00010818444b4754535304003507014c444b475453534a757374696669636174696f6e000000185a6b5361615304006507014c5a6b536161534a757374696669636174696f6e0001000035070c4474616e676c655f7072696d6974697665732c6d69736265686176696f724c444b475453534a757374696669636174696f6e0001082c44666e734347474d50323104003907019864666e735f6367676d7032313a3a44666e734347474d5032314a757374696669636174696f6e000000285a4361736846726f73740400590701907a636173685f66726f73743a3a5a4361736846726f73744a757374696669636174696f6e000100003907104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d7032316044666e734347474d5032314a757374696669636174696f6e00010c184b657967656e0c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e410701344b657967656e41626f72746564000000284b6579526566726573680c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e4d0701444b65795265667265736841626f727465640001001c5369676e696e670c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e550701385369676e696e6741626f72746564000200003d070000021505004107104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231344b657967656e41626f727465640001104c496e76616c69644465636f6d6d69746d656e74080118726f756e6431450701485369676e6564526f756e644d65737361676500011c726f756e643261450701485369676e6564526f756e644d6573736167650000004c496e76616c69645363686e6f727250726f6f6608011c726f756e6432614907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e6433450701485369676e6564526f756e644d6573736167650001006446656c646d616e566572696669636174696f6e4661696c656408011c726f756e643261450701485369676e6564526f756e644d65737361676500011c726f756e643262450701485369676e6564526f756e644d6573736167650002003c496e76616c69644461746153697a6504011c726f756e643261450701485369676e6564526f756e644d6573736167650003000045070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72485369676e6564526f756e644d65737361676500000c011873656e6465729102010c75313600011c6d65737361676534011c5665633c75383e0001247369676e617475726534011c5665633c75383e000049070000024507004d07104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231444b65795265667265736841626f727465640001244c496e76616c69644465636f6d6d69746d656e74080118726f756e6431450701485369676e6564526f756e644d657373616765000118726f756e6432450701485369676e6564526f756e644d6573736167650000004c496e76616c69645363686e6f727250726f6f660001003c496e76616c69644d6f6450726f6f660c0118726561736f6e51070148496e76616c696450726f6f66526561736f6e000118726f756e64324907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e6433450701485369676e6564526f756e644d6573736167650002003c496e76616c696446616350726f6f6600030074496e76616c696452696e67506564657273656e506172616d6574657273040118726f756e6432450701485369676e6564526f756e644d65737361676500040020496e76616c69645800050034496e76616c69645853686172650006003c496e76616c69644461746153697a650007002c5061696c6c696572446563000800005107104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d70323148496e76616c696450726f6f66526561736f6e00012834457175616c697479436865636b040008010875380000002852616e6765436865636b0400080108753800010028456e6372797074696f6e0002002c5061696c6c696572456e63000300285061696c6c6965724f70000400184d6f64506f77000500384d6f64756c757349735072696d65000600344d6f64756c757349734576656e00070040496e636f72726563744e7468526f6f74040008010875380008004c496e636f7272656374466f75727468526f6f7404000801087538000900005507104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231385369676e696e6741626f727465640001102c456e6350726f6f664f664b00000028496e76616c696450736900010050496e76616c69645073695072696d655072696d650002003c4d69736d61746368656444656c7461000300005907104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f73745c5a4361736846726f73744a757374696669636174696f6e000108184b657967656e0c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e5d0701344b657967656e41626f727465640000001c5369676e696e670c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e610701385369676e696e6741626f72746564000100005d07104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f7374344b657967656e41626f727465640001085c496e76616c696450726f6f664f664b6e6f776c65646765040118726f756e6431450701485369676e6564526f756e644d65737361676500000048496e76616c69645365637265745368617265080118726f756e6431450701485369676e6564526f756e644d657373616765000118726f756e6432450701485369676e6564526f756e644d657373616765000100006107104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f7374385369676e696e6741626f7274656400010454496e76616c69645369676e61747572655368617265080118726f756e64314907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e64324907015c5665633c5369676e6564526f756e644d6573736167653e0000000065070c4474616e676c655f7072696d6974697665732c6d69736265686176696f724c5a6b536161534a757374696669636174696f6e0001000069070c2870616c6c65745f646b671870616c6c65741043616c6c0404540001041c7365745f6665650401206665655f696e666f7d020130466565496e666f4f663c543e00000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d070c3470616c6c65745f7a6b736161731870616c6c65741043616c6c0404540001041c7365745f6665650401206665655f696e666f85020130466565496e666f4f663c543e00000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71070c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c650301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065750701504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a70726f7879605d2e246164645f70726f78790c012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00010468536565205b6050616c6c65743a3a6164645f70726f7879605d2e3072656d6f76655f70726f78790c012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a72656d6f76655f70726f7879605d2e3872656d6f76655f70726f786965730003047c536565205b6050616c6c65743a3a72656d6f76655f70726f78696573605d2e2c6372656174655f707572650c012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e000114696e6465789102010c75313600040470536565205b6050616c6c65743a3a6372656174655f70757265605d2e246b696c6c5f7075726514011c737061776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f787954797065000114696e6465789102010c753136000118686569676874280144426c6f636b4e756d626572466f723c543e0001246578745f696e646578bd02010c75333200050468536565205b6050616c6c65743a3a6b696c6c5f70757265605d2e20616e6e6f756e63650801107265616c650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00060464536565205b6050616c6c65743a3a616e6e6f756e6365605d2e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00070490536565205b6050616c6c65743a3a72656d6f76655f616e6e6f756e63656d656e74605d2e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00080490536565205b6050616c6c65743a3a72656a6563745f616e6e6f756e63656d656e74605d2e3c70726f78795f616e6e6f756e63656410012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e0001107265616c650301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065750701504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00090480536565205b6050616c6c65743a3a70726f78795f616e6e6f756e636564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750704184f7074696f6e040454018d020108104e6f6e6500000010536f6d6504008d02000001000079070c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c65741043616c6c040454000154386a6f696e5f6f70657261746f727304012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0000047c536565205b6050616c6c65743a3a6a6f696e5f6f70657261746f7273605d2e607363686564756c655f6c656176655f6f70657261746f7273000104a4536565205b6050616c6c65743a3a7363686564756c655f6c656176655f6f70657261746f7273605d2e5863616e63656c5f6c656176655f6f70657261746f72730002049c536565205b6050616c6c65743a3a63616e63656c5f6c656176655f6f70657261746f7273605d2e5c657865637574655f6c656176655f6f70657261746f7273000304a0536565205b6050616c6c65743a3a657865637574655f6c656176655f6f70657261746f7273605d2e486f70657261746f725f626f6e645f6d6f726504013c6164646974696f6e616c5f626f6e6418013042616c616e63654f663c543e0004048c536565205b6050616c6c65743a3a6f70657261746f725f626f6e645f6d6f7265605d2e647363686564756c655f6f70657261746f725f756e7374616b65040138756e7374616b655f616d6f756e7418013042616c616e63654f663c543e000504a8536565205b6050616c6c65743a3a7363686564756c655f6f70657261746f725f756e7374616b65605d2e60657865637574655f6f70657261746f725f756e7374616b65000604a4536565205b6050616c6c65743a3a657865637574655f6f70657261746f725f756e7374616b65605d2e5c63616e63656c5f6f70657261746f725f756e7374616b65000704a0536565205b6050616c6c65743a3a63616e63656c5f6f70657261746f725f756e7374616b65605d2e28676f5f6f66666c696e650008046c536565205b6050616c6c65743a3a676f5f6f66666c696e65605d2e24676f5f6f6e6c696e6500090468536565205b6050616c6c65743a3a676f5f6f6e6c696e65605d2e1c6465706f73697408012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000a0460536565205b6050616c6c65743a3a6465706f736974605d2e447363686564756c655f776974686472617708012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000b0488536565205b6050616c6c65743a3a7363686564756c655f7769746864726177605d2e40657865637574655f7769746864726177000c0484536565205b6050616c6c65743a3a657865637574655f7769746864726177605d2e3c63616e63656c5f776974686472617708012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000d0480536565205b6050616c6c65743a3a63616e63656c5f7769746864726177605d2e2064656c65676174650c01206f70657261746f72000130543a3a4163636f756e74496400012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000e0464536565205b6050616c6c65743a3a64656c6567617465605d2e687363686564756c655f64656c656761746f725f756e7374616b650c01206f70657261746f72000130543a3a4163636f756e74496400012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000f04ac536565205b6050616c6c65743a3a7363686564756c655f64656c656761746f725f756e7374616b65605d2e64657865637574655f64656c656761746f725f756e7374616b65001004a8536565205b6050616c6c65743a3a657865637574655f64656c656761746f725f756e7374616b65605d2e6063616e63656c5f64656c656761746f725f756e7374616b6508012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e001104a4536565205b6050616c6c65743a3a63616e63656c5f64656c656761746f725f756e7374616b65605d2e647365745f696e63656e746976655f6170795f616e645f6361700c011c706f6f6c5f6964180124543a3a506f6f6c496400010c6170799902014c73705f72756e74696d653a3a50657263656e7400010c63617018013042616c616e63654f663c543e001304a8536565205b6050616c6c65743a3a7365745f696e63656e746976655f6170795f616e645f636170605d2e7c77686974656c6973745f626c75657072696e745f666f725f72657761726473040130626c75657072696e745f696410010c753332001404c0536565205b6050616c6c65743a3a77686974656c6973745f626c75657072696e745f666f725f72657761726473605d2e506d616e6167655f61737365745f696e5f706f6f6c0c011c706f6f6c5f6964180124543a3a506f6f6c496400012061737365745f6964180128543a3a41737365744964000118616374696f6e9d02012c4173736574416374696f6e00150494536565205b6050616c6c65743a3a6d616e6167655f61737365745f696e5f706f6f6c605d2e04c85468652063616c6c61626c652066756e6374696f6e73202865787472696e7369637329206f66207468652070616c6c65742e7d070c5c7379676d615f6163636573735f73656772656761746f721870616c6c65741043616c6c040454000104306772616e745f6163636573730c013070616c6c65745f696e646578080108753800013865787472696e7369635f6e616d6534011c5665633c75383e00010c77686f000130543a3a4163636f756e74496400000474536565205b6050616c6c65743a3a6772616e745f616363657373605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81070c587379676d615f62617369635f66656568616e646c65721870616c6c65741043616c6c0404540001041c7365745f6665650c0118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e000118616d6f756e741801107531323800000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e85070c607379676d615f6665655f68616e646c65725f726f757465721870616c6c65741043616c6c0404540001043c7365745f6665655f68616e646c65720c0118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e00013068616e646c65725f74797065f102013846656548616e646c65725479706500000480536565205b6050616c6c65743a3a7365745f6665655f68616e646c6572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89070c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c65741043616c6c040454000104307365745f6665655f72617465140118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e0001506665655f726174655f62617369735f706f696e7410010c75333200013c6665655f6c6f7765725f626f756e641801107531323800013c6665655f75707065725f626f756e641801107531323800000474536565205b6050616c6c65743a3a7365745f6665655f72617465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d070c307379676d615f6272696467651870616c6c65741043616c6c0404540001283070617573655f627269646765040138646573745f646f6d61696e5f6964080120446f6d61696e494400000474536565205b6050616c6c65743a3a70617573655f627269646765605d2e38756e70617573655f627269646765040138646573745f646f6d61696e5f6964080120446f6d61696e49440001047c536565205b6050616c6c65743a3a756e70617573655f627269646765605d2e3c7365745f6d70635f6164647265737304011061646472910701284d70634164647265737300020480536565205b6050616c6c65743a3a7365745f6d70635f61646472657373605d2e3c72656769737465725f646f6d61696e080138646573745f646f6d61696e5f6964080120446f6d61696e4944000134646573745f636861696e5f6964d101011c436861696e494400030480536565205b6050616c6c65743a3a72656769737465725f646f6d61696e605d2e44756e72656769737465725f646f6d61696e080138646573745f646f6d61696e5f6964080120446f6d61696e4944000134646573745f636861696e5f6964d101011c436861696e494400040488536565205b6050616c6c65743a3a756e72656769737465725f646f6d61696e605d2e1c6465706f736974080114617373657495070128426f783c41737365743e00011064657374ad020134426f783c4c6f636174696f6e3e00050460536565205b6050616c6c65743a3a6465706f736974605d2e14726574727908015c6465706f7369745f6f6e5f626c6f636b5f68656967687418011075313238000138646573745f646f6d61696e5f6964080120446f6d61696e494400060458536565205b6050616c6c65743a3a7265747279605d2e40657865637574655f70726f706f73616c08012470726f706f73616c73a10701345665633c50726f706f73616c3e0001247369676e617475726534011c5665633c75383e00070484536565205b6050616c6c65743a3a657865637574655f70726f706f73616c605d2e4470617573655f616c6c5f6272696467657300080488536565205b6050616c6c65743a3a70617573655f616c6c5f62726964676573605d2e4c756e70617573655f616c6c5f6272696467657300090490536565205b6050616c6c65743a3a756e70617573655f616c6c5f62726964676573605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e910708307379676d615f747261697473284d706341646472657373000004009d0101205b75383b2032305d00009507102c73746167696e675f78636d08763414617373657414417373657400000801086964a902011c4173736574496400010c66756e9907012c46756e676962696c69747900009907102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c65040075010110753132380000002c4e6f6e46756e6769626c6504009d0701344173736574496e7374616e6365000100009d07102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400750101107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804004d03011c5b75383b20385d0003001c4172726179313604004d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000a107000002a50700a5070c307379676d615f6272696467651870616c6c65742050726f706f73616c00001001406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e636500012c7265736f757263655f69640401285265736f7572636549640001106461746134011c5665633c75383e0000a9070c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742ead070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400c90101185665633c543e0000b1070c3470616c6c65745f61737365747314747970657330417373657444657461696c730c1c42616c616e63650118244163636f756e7449640100384465706f73697442616c616e63650118003001146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000118737570706c7918011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e636500012c6d696e5f62616c616e636518011c42616c616e636500013469735f73756666696369656e74780110626f6f6c0001206163636f756e747310010c75333200012c73756666696369656e747310010c753332000124617070726f76616c7310010c753332000118737461747573b507012c41737365745374617475730000b5070c3470616c6c65745f6173736574731474797065732c417373657453746174757300010c104c6976650000001846726f7a656e0001002844657374726f79696e6700020000b90700000408180000bd070c3470616c6c65745f6173736574731474797065733041737365744163636f756e74101c42616c616e63650118384465706f73697442616c616e636501181445787472610184244163636f756e74496401000010011c62616c616e636518011c42616c616e6365000118737461747573c10701344163636f756e74537461747573000118726561736f6ec50701a84578697374656e6365526561736f6e3c4465706f73697442616c616e63652c204163636f756e7449643e000114657874726184011445787472610000c1070c3470616c6c65745f617373657473147479706573344163636f756e7453746174757300010c184c69717569640000001846726f7a656e0001001c426c6f636b656400020000c5070c3470616c6c65745f6173736574731474797065733c4578697374656e6365526561736f6e081c42616c616e63650118244163636f756e7449640100011420436f6e73756d65720000002853756666696369656e740001002c4465706f73697448656c64040018011c42616c616e63650002003c4465706f736974526566756e6465640003002c4465706f73697446726f6d08000001244163636f756e744964000018011c42616c616e636500040000c9070000040c18000000cd070c3470616c6c65745f61737365747314747970657320417070726f76616c081c42616c616e63650118384465706f73697442616c616e6365011800080118616d6f756e7418011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e63650000d1070c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e6701d5070014011c6465706f7369741801384465706f73697442616c616e63650001106e616d65d5070134426f756e646564537472696e6700011873796d626f6cd5070134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c0000d5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000d9070c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742edd070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401e107045300000400e90701185665633c543e0000e1070c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c010869644d0301384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73e507011c526561736f6e730000e5070c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000e907000002e10700ed070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f107045300000400f50701185665633c543e0000f1070c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e746966696572014d031c42616c616e636501180008010869644d030144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000f507000002f10700f9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401fd07045300000400090801185665633c543e0000fd070c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640101081c42616c616e63650118000801086964010801084964000118616d6f756e7418011c42616c616e636500000108085874616e676c655f746573746e65745f72756e74696d654452756e74696d65486f6c64526561736f6e00010420507265696d61676504000508016c70616c6c65745f707265696d6167653a3a486f6c64526561736f6e0019000005080c3c70616c6c65745f707265696d6167651870616c6c657428486f6c64526561736f6e00010420507265696d616765000000000908000002fd07000d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540111080453000004001d0801185665633c543e000011080c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640115081c42616c616e63650118000801086964150801084964000118616d6f756e7418011c42616c616e636500001508085874616e676c655f746573746e65745f72756e74696d654c52756e74696d65467265657a65526561736f6e0001043c4e6f6d696e6174696f6e506f6f6c7304001908019470616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a467265657a65526561736f6e0017000019080c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657430467265657a65526561736f6e00010438506f6f6c4d696e42616c616e6365000000001d0800000211080021080c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e25080c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800002908086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100002d080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013108045300000400350801185665633c543e00003108000004087d032c00350800000231080039080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401040453000004003d0801185665633c543e00003d080000020400410804184f7074696f6e0404540145080108104e6f6e6500000010536f6d6504004508000001000045080c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400490801405072696d617279507265446967657374000100385365636f6e64617279506c61696e04005108015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400550801545365636f6e646172795652465072654469676573740003000049080c4473705f636f6e73656e7375735f626162651c64696765737473405072696d61727950726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f740001347672665f7369676e61747572654d0801305672665369676e617475726500004d08101c73705f636f72651c737232353531390c767266305672665369676e617475726500000801287072655f6f75747075740401305672665072654f757470757400011470726f6f66b103012056726650726f6f66000051080c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f74000055080c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e6461727956524650726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f740001347672665f7369676e61747572654d0801305672665369676e617475726500005908084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e0000080104638d030128287536342c2075363429000134616c6c6f7765645f736c6f747391030130416c6c6f776564536c6f747300005d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013d01045300000400050301185665633c543e000061080c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6508083870616c6c65745f6772616e6470612c53746f726564537461746504044e012c0110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61742c01044e00011464656c61792c01044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61742c01044e00011464656c61792c01044e000300006908083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e012c144c696d697400001001307363686564756c65645f61742c01044e00011464656c61792c01044e0001406e6578745f617574686f7269746965736d08016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f726365641d0501244f7074696f6e3c4e3e00006d080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a4045300000400a001185665633c543e000071080c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e75080000040c0018780079080c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018108045300000400850801185665633c543e000081080000040c10d10300008508000002810800890800000408010518008d080c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d626572012c2050726f706f73616c01d1031c42616c616e6365011801081c4f6e676f696e670400910801c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564780110626f6f6c00010c656e642c012c426c6f636b4e756d6265720001000091080c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d626572012c2050726f706f73616c01d1031c42616c616e636501180014010c656e642c012c426c6f636b4e756d62657200012070726f706f73616cd103012050726f706f73616c0001247468726573686f6c64b80134566f74655468726573686f6c6400011464656c61792c012c426c6f636b4e756d62657200011474616c6c799508013854616c6c793c42616c616e63653e000095080c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e6365000099080c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d626572012c204d6178566f746573000108184469726563740c0114766f7465739d0801f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e73a908015044656c65676174696f6e733c42616c616e63653e0001147072696f72ad08017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6edd030128436f6e76696374696f6e00012c64656c65676174696f6e73a908015044656c65676174696f6e733c42616c616e63653e0001147072696f72ad08017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e000100009d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a108045300000400a50801185665633c543e0000a1080000040810bc00a508000002a10800a9080c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000ad080c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d626572012c1c42616c616e636501180008002c012c426c6f636b4e756d626572000018011c42616c616e63650000b10800000408d103b800b508000004082c010500b9080c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400c90101185665633c543e0000c108084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572012c00140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e7400011061796573250201385665633c4163636f756e7449643e0001106e617973250201385665633c4163636f756e7449643e00010c656e642c012c426c6f636b4e756d6265720000c5080c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f7208045400044900012c244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e545072696d654163636f756e744e6f744d656d626572000a04745072696d65206163636f756e74206973206e6f742061206d656d626572048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f103045300000400cd0801185665633c543e0000cd08000002f10300d108083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000d5080c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742ed908000002dd0800dd08086470616c6c65745f656c656374696f6e735f70687261676d656e2853656174486f6c64657208244163636f756e74496401001c42616c616e63650118000c010c77686f0001244163636f756e7449640001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e63650000e108086470616c6c65745f656c656374696f6e735f70687261676d656e14566f74657208244163636f756e74496401001c42616c616e63650118000c0114766f746573250201385665633c4163636f756e7449643e0001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e63650000e5080c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144572726f7204045400014430556e61626c65546f566f7465000004c043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e1c4e6f566f746573000104944d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e30546f6f4d616e79566f7465730002048443616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e504d6178696d756d566f74657345786365656465640003049843616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e284c6f7742616c616e6365000404c443616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e3c556e61626c65546f506179426f6e6400050478566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2c4d7573744265566f746572000604404d757374206265206120766f7465722e4c4475706c69636174656443616e646964617465000704804475706c6963617465642063616e646964617465207375626d697373696f6e2e44546f6f4d616e7943616e6469646174657300080498546f6f206d616e792063616e646964617465732068617665206265656e20637265617465642e304d656d6265725375626d6974000904884d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e3852756e6e657255705375626d6974000a048852756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e68496e73756666696369656e7443616e64696461746546756e6473000b049443616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e244e6f744d656d626572000c04344e6f742061206d656d6265722e48496e76616c69645769746e65737344617461000d04e05468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e40496e76616c6964566f7465436f756e74000e04cc5468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e44496e76616c696452656e6f756e63696e67000f04fc5468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e48496e76616c69645265706c6163656d656e74001004fc50726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee908089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e08244163636f756e74496400284d617857696e6e65727300000c0120737570706f727473ed080198426f756e646564537570706f7274733c4163636f756e7449642c204d617857696e6e6572733e00011473636f7265e40134456c656374696f6e53636f726500011c636f6d70757465e0013c456c656374696f6e436f6d707574650000ed080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401dd04045300000400d90401185665633c543e0000f108089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f7408244163636f756e7449640100304461746150726f766964657201f50800080118766f74657273fd0801445665633c4461746150726f76696465723e00011c74617267657473250201385665633c4163636f756e7449643e0000f5080000040c002cf90800f9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e0000fd08000002f5080001090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010509045300000400090901185665633c543e000005090000040ce42c100009090000020509000d090c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e0105040010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6e01040154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e6365000011090c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f7204045400013c6850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273645072654469737061746368446966666572656e74526f756e64000e04b453756d697373696f6e2077617320707265706172656420666f72206120646966666572656e7420726f756e642e040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732e1509083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616c7501013042616c616e63654f663c543e0001186163746976657501013042616c616e63654f663c543e000124756e6c6f636b696e67190901f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e0001586c65676163795f636c61696d65645f7265776172647325090194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e000019090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d09045300000400210901185665633c543e00001d09083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c75657501011c42616c616e636500010c657261bd020120457261496e646578000021090000021d090025090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400ed0401185665633c543e00002909083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473f90801b4426f756e6465645665633c543a3a4163636f756e7449642c204d61784e6f6d696e6174696f6e734f663c543e3e0001307375626d69747465645f696e100120457261496e64657800012873757070726573736564780110626f6f6c00002d09083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172741d05012c4f7074696f6e3c7536343e00003109000004081000003509082873705f7374616b696e675450616765644578706f737572654d65746164617461041c42616c616e6365011800100114746f74616c7501011c42616c616e636500010c6f776e7501011c42616c616e636500013c6e6f6d696e61746f725f636f756e7410010c753332000128706167655f636f756e7410011050616765000039090000040c100010003d09082873705f7374616b696e67304578706f737572655061676508244163636f756e74496401001c42616c616e6365011800080128706167655f746f74616c7501011c42616c616e63650001186f7468657273790101ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e00004109083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c4509018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00004509042042547265654d617008044b010004560110000400490900000049090000024d09004d090000040800100051090000025509005509083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273d401645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273250201385665633c4163636f756e7449643e0001187061796f757418011c42616c616e6365000059090000025d09005d0900000408101000610900000408f8180065090c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72ed0401345665633c457261496e6465783e000069090c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e636500006d090000027109007109000004081078007509103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000170344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e2c496e76616c696450616765000f04844e6f206e6f6d696e61746f7273206578697374206f6e207468697320706167652e54496e636f7272656374486973746f72794465707468001004c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001104b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650012043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300130494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740014043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001504550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730016084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001708550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001804e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400190458536f6d6520626f756e64206973206e6f74206d65742e50436f6e74726f6c6c657244657072656361746564001a04010155736564207768656e20617474656d7074696e6720746f20757365206465707265636174656420636f6e74726f6c6c6572206163636f756e74206c6f6769632e3452657374616b65416374697665001b046c546865207573657220686173206163746976652072657374616b65048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79090000027d09007d0900000408000905008109000004088509340085090c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d000089090c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e8d09000004083010009109083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e6365000095090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400ed0401185665633c543e00009909083c70616c6c65745f74726561737572792c5370656e64537461747573142441737365744b696e64018430417373657442616c616e636501182c42656e656669636961727901002c426c6f636b4e756d626572012c245061796d656e74496401840018012861737365745f6b696e6484012441737365744b696e64000118616d6f756e74180130417373657442616c616e636500012c62656e656669636961727900012c42656e656669636961727900012876616c69645f66726f6d2c012c426c6f636b4e756d6265720001246578706972655f61742c012c426c6f636b4e756d6265720001187374617475739d09015c5061796d656e7453746174653c5061796d656e7449643e00009d09083c70616c6c65745f7472656173757279305061796d656e745374617465040849640184010c1c50656e64696e6700000024417474656d7074656404010869648401084964000100184661696c656400020000a10908346672616d655f737570706f72742050616c6c65744964000004004d03011c5b75383b20385d0000a5090c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900013070496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104ac4e6f2070726f706f73616c2c20626f756e7479206f72207370656e64206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e584661696c6564546f436f6e7665727442616c616e636500050451015468652062616c616e6365206f6620746865206173736574206b696e64206973206e6f7420636f6e7665727469626c6520746f207468652062616c616e6365206f6620746865206e61746976652061737365742e305370656e6445787069726564000604b0546865207370656e6420686173206578706972656420616e642063616e6e6f7420626520636c61696d65642e2c4561726c795061796f7574000704a4546865207370656e64206973206e6f742079657420656c696769626c6520666f72207061796f75742e40416c7265616479417474656d707465640008049c546865207061796d656e742068617320616c7265616479206265656e20617474656d707465642e2c5061796f75744572726f72000904cc54686572652077617320736f6d65206973737565207769746820746865206d656368616e69736d206f66207061796d656e742e304e6f74417474656d70746564000a04a4546865207061796f757420776173206e6f742079657420617474656d707465642f636c61696d65642e30496e636f6e636c7573697665000b04c4546865207061796d656e7420686173206e656974686572206661696c6564206e6f7220737563636565646564207965742e04784572726f7220666f72207468652074726561737572792070616c6c65742ea909083c70616c6c65745f626f756e7469657318426f756e74790c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572012c0018012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500010c66656518011c42616c616e636500013c63757261746f725f6465706f73697418011c42616c616e6365000110626f6e6418011c42616c616e6365000118737461747573ad090190426f756e74795374617475733c4163636f756e7449642c20426c6f636b4e756d6265723e0000ad09083c70616c6c65745f626f756e7469657330426f756e747953746174757308244163636f756e74496401002c426c6f636b4e756d626572012c01182050726f706f73656400000020417070726f7665640001001846756e6465640002003c43757261746f7250726f706f73656404011c63757261746f720001244163636f756e7449640003001841637469766508011c63757261746f720001244163636f756e7449640001287570646174655f6475652c012c426c6f636b4e756d6265720004003450656e64696e675061796f75740c011c63757261746f720001244163636f756e74496400012c62656e65666963696172790001244163636f756e744964000124756e6c6f636b5f61742c012c426c6f636b4e756d62657200050000b1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b5090c3c70616c6c65745f626f756e746965731870616c6c6574144572726f7208045400044900012c70496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e30526561736f6e546f6f4269670002048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e40556e65787065637465645374617475730003048054686520626f756e74792073746174757320697320756e65787065637465642e385265717569726543757261746f720004045c5265717569726520626f756e74792063757261746f722e30496e76616c696456616c756500050454496e76616c696420626f756e74792076616c75652e28496e76616c69644665650006044c496e76616c696420626f756e7479206665652e3450656e64696e675061796f75740007086c4120626f756e7479207061796f75742069732070656e64696e672ef8546f2063616e63656c2074686520626f756e74792c20796f75206d75737420756e61737369676e20616e6420736c617368207468652063757261746f722e245072656d6174757265000804450154686520626f756e746965732063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e504861734163746976654368696c64426f756e7479000904050154686520626f756e74792063616e6e6f7420626520636c6f73656420626563617573652069742068617320616374697665206368696c6420626f756e746965732e34546f6f4d616e79517565756564000a0498546f6f206d616e7920617070726f76616c732061726520616c7265616479207175657565642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb909085470616c6c65745f6368696c645f626f756e746965732c4368696c64426f756e74790c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572012c00140134706172656e745f626f756e747910012c426f756e7479496e64657800011476616c756518011c42616c616e636500010c66656518011c42616c616e636500013c63757261746f725f6465706f73697418011c42616c616e6365000118737461747573bd0901a44368696c64426f756e74795374617475733c4163636f756e7449642c20426c6f636b4e756d6265723e0000bd09085470616c6c65745f6368696c645f626f756e74696573444368696c64426f756e747953746174757308244163636f756e74496401002c426c6f636b4e756d626572012c01101441646465640000003c43757261746f7250726f706f73656404011c63757261746f720001244163636f756e7449640001001841637469766504011c63757261746f720001244163636f756e7449640002003450656e64696e675061796f75740c011c63757261746f720001244163636f756e74496400012c62656e65666963696172790001244163636f756e744964000124756e6c6f636b5f61742c012c426c6f636b4e756d62657200030000c1090c5470616c6c65745f6368696c645f626f756e746965731870616c6c6574144572726f7204045400010c54506172656e74426f756e74794e6f74416374697665000004a454686520706172656e7420626f756e7479206973206e6f7420696e206163746976652073746174652e64496e73756666696369656e74426f756e747942616c616e6365000104e454686520626f756e74792062616c616e6365206973206e6f7420656e6f75676820746f20616464206e6577206368696c642d626f756e74792e50546f6f4d616e794368696c64426f756e746965730002040d014e756d626572206f66206368696c6420626f756e746965732065786365656473206c696d697420604d61784163746976654368696c64426f756e7479436f756e74602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec5090c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e744964000110707265768801504f7074696f6e3c543a3a4163636f756e7449643e0001106e6578748801504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f75707065722c0120543a3a53636f726500011473636f72652c0120543a3a53636f72650000c9090c4070616c6c65745f626167735f6c697374106c6973740c4261670804540004490000080110686561648801504f7074696f6e3c543a3a4163636f756e7449643e0001107461696c8801504f7074696f6e3c543a3a4163636f756e7449643e0000cd090000022c00d1090c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400d50901244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed5090c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e6400030000d909085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328506f6f6c4d656d626572040454000010011c706f6f6c5f6964100118506f6f6c4964000118706f696e747318013042616c616e63654f663c543e0001706c6173745f7265636f726465645f7265776172645f636f756e74657225080140543a3a526577617264436f756e746572000138756e626f6e64696e675f65726173dd0901e0426f756e64656442547265654d61703c457261496e6465782c2042616c616e63654f663c543e2c20543a3a4d6178556e626f6e64696e673e0000dd090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560118045300000400e109013842547265654d61703c4b2c20563e0000e109042042547265654d617008044b011004560118000400e509000000e509000002e90900e90900000408101800ed09085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c426f6e646564506f6f6c496e6e65720404540000140128636f6d6d697373696f6ef1090134436f6d6d697373696f6e3c543e0001386d656d6265725f636f756e74657210010c753332000118706f696e747318013042616c616e63654f663c543e000114726f6c6573fd09015c506f6f6c526f6c65733c543a3a4163636f756e7449643e000114737461746521010124506f6f6c53746174650000f109085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328436f6d6d697373696f6e040454000014011c63757272656e742501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e00010c6d6178f509013c4f7074696f6e3c50657262696c6c3e00012c6368616e67655f72617465f90901bc4f7074696f6e3c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e3e0001347468726f74746c655f66726f6d1d0501644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000140636c61696d5f7065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e0000f50904184f7074696f6e04045401f80108104e6f6e6500000010536f6d650400f80000010000f90904184f7074696f6e040454012d010108104e6f6e6500000010536f6d6504002d010000010000fd09085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c526f6c657304244163636f756e7449640100001001246465706f7369746f720001244163636f756e744964000110726f6f748801444f7074696f6e3c4163636f756e7449643e0001246e6f6d696e61746f728801444f7074696f6e3c4163636f756e7449643e00011c626f756e6365728801444f7074696f6e3c4163636f756e7449643e0000010a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328526577617264506f6f6c04045400001401706c6173745f7265636f726465645f7265776172645f636f756e74657225080140543a3a526577617264436f756e74657200016c6c6173745f7265636f726465645f746f74616c5f7061796f75747318013042616c616e63654f663c543e000154746f74616c5f726577617264735f636c61696d656418013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f70656e64696e6718013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f636c61696d656418013042616c616e63654f663c543e0000050a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320537562506f6f6c7304045400000801186e6f5f657261090a0134556e626f6e64506f6f6c3c543e000120776974685f6572610d0a010101426f756e64656442547265654d61703c457261496e6465782c20556e626f6e64506f6f6c3c543e2c20546f74616c556e626f6e64696e67506f6f6c733c543e3e0000090a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328556e626f6e64506f6f6c0404540000080118706f696e747318013042616c616e63654f663c543e00011c62616c616e636518013042616c616e63654f663c543e00000d0a0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601090a045300000400110a013842547265654d61703c4b2c20563e0000110a042042547265654d617008044b0110045601090a000400150a000000150a000002190a00190a0000040810090a001d0a0c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144572726f7204045400018030506f6f6c4e6f74466f756e6400000488412028626f6e6465642920706f6f6c20696420646f6573206e6f742065786973742e48506f6f6c4d656d6265724e6f74466f756e640001046c416e206163636f756e74206973206e6f742061206d656d6265722e48526577617264506f6f6c4e6f74466f756e640002042101412072657761726420706f6f6c20646f6573206e6f742065786973742e20496e20616c6c206361736573207468697320697320612073797374656d206c6f676963206572726f722e40537562506f6f6c734e6f74466f756e6400030468412073756220706f6f6c20646f6573206e6f742065786973742e644163636f756e7442656c6f6e6773546f4f74686572506f6f6c0004084d01416e206163636f756e7420697320616c72656164792064656c65676174696e6720696e20616e6f7468657220706f6f6c2e20416e206163636f756e74206d6179206f6e6c792062656c6f6e6720746f206f6e653c706f6f6c20617420612074696d652e3846756c6c79556e626f6e64696e670005083d01546865206d656d6265722069732066756c6c7920756e626f6e6465642028616e6420746875732063616e6e6f74206163636573732074686520626f6e64656420616e642072657761726420706f6f6ca8616e796d6f726520746f2c20666f72206578616d706c652c20636f6c6c6563742072657761726473292e444d6178556e626f6e64696e674c696d69740006040901546865206d656d6265722063616e6e6f7420756e626f6e642066757274686572206368756e6b732064756520746f207265616368696e6720746865206c696d69742e4443616e6e6f745769746864726177416e790007044d014e6f6e65206f66207468652066756e64732063616e2062652077697468647261776e2079657420626563617573652074686520626f6e64696e67206475726174696f6e20686173206e6f74207061737365642e444d696e696d756d426f6e644e6f744d6574000814290154686520616d6f756e7420646f6573206e6f74206d65657420746865206d696e696d756d20626f6e6420746f20656974686572206a6f696e206f7220637265617465206120706f6f6c2e005501546865206465706f7369746f722063616e206e6576657220756e626f6e6420746f20612076616c7565206c657373207468616e206050616c6c65743a3a6465706f7369746f725f6d696e5f626f6e64602e205468655d0163616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e204d656d626572732063616e206e6576657220756e626f6e6420746f20616876616c75652062656c6f7720604d696e4a6f696e426f6e64602e304f766572666c6f775269736b0009042101546865207472616e73616374696f6e20636f756c64206e6f742062652065786563757465642064756520746f206f766572666c6f77207269736b20666f722074686520706f6f6c2e344e6f7444657374726f79696e67000a085d014120706f6f6c206d75737420626520696e205b60506f6f6c53746174653a3a44657374726f79696e67605d20696e206f7264657220666f7220746865206465706f7369746f7220746f20756e626f6e64206f7220666f72b86f74686572206d656d6265727320746f206265207065726d697373696f6e6c6573736c7920756e626f6e6465642e304e6f744e6f6d696e61746f72000b04f45468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e544e6f744b69636b65724f7244657374726f79696e67000c043d01456974686572206129207468652063616c6c65722063616e6e6f74206d616b6520612076616c6964206b69636b206f722062292074686520706f6f6c206973206e6f742064657374726f79696e672e1c4e6f744f70656e000d047054686520706f6f6c206973206e6f74206f70656e20746f206a6f696e204d6178506f6f6c73000e04845468652073797374656d206973206d61786564206f7574206f6e20706f6f6c732e384d6178506f6f6c4d656d62657273000f049c546f6f206d616e79206d656d6265727320696e2074686520706f6f6c206f722073797374656d2e4443616e4e6f744368616e676553746174650010048854686520706f6f6c732073746174652063616e6e6f74206265206368616e6765642e54446f65734e6f74486176655065726d697373696f6e001104b85468652063616c6c657220646f6573206e6f742068617665206164657175617465207065726d697373696f6e732e544d65746164617461457863656564734d61784c656e001204ac4d657461646174612065786365656473205b60436f6e6669673a3a4d61784d657461646174614c656e605d24446566656e736976650400210a0138446566656e736976654572726f720013083101536f6d65206572726f72206f6363757272656420746861742073686f756c64206e657665722068617070656e2e20546869732073686f756c64206265207265706f7274656420746f20746865306d61696e7461696e6572732e9c5061727469616c556e626f6e644e6f74416c6c6f7765645065726d697373696f6e6c6573736c79001404bc5061727469616c20756e626f6e64696e67206e6f7720616c6c6f776564207065726d697373696f6e6c6573736c792e5c4d6178436f6d6d697373696f6e526573747269637465640015041d0154686520706f6f6c2773206d617820636f6d6d697373696f6e2063616e6e6f742062652073657420686967686572207468616e20746865206578697374696e672076616c75652e60436f6d6d697373696f6e457863656564734d6178696d756d001604ec54686520737570706c69656420636f6d6d697373696f6e206578636565647320746865206d617820616c6c6f77656420636f6d6d697373696f6e2e78436f6d6d697373696f6e45786365656473476c6f62616c4d6178696d756d001704e854686520737570706c69656420636f6d6d697373696f6e206578636565647320676c6f62616c206d6178696d756d20636f6d6d697373696f6e2e64436f6d6d697373696f6e4368616e67655468726f74746c656400180409014e6f7420656e6f75676820626c6f636b732068617665207375727061737365642073696e636520746865206c61737420636f6d6d697373696f6e207570646174652e78436f6d6d697373696f6e4368616e6765526174654e6f74416c6c6f7765640019040101546865207375626d6974746564206368616e67657320746f20636f6d6d697373696f6e206368616e6765207261746520617265206e6f7420616c6c6f7765642e4c4e6f50656e64696e67436f6d6d697373696f6e001a04a05468657265206973206e6f2070656e64696e6720636f6d6d697373696f6e20746f20636c61696d2e584e6f436f6d6d697373696f6e43757272656e74536574001b048c4e6f20636f6d6d697373696f6e2063757272656e7420686173206265656e207365742e2c506f6f6c4964496e557365001c0464506f6f6c2069642063757272656e746c7920696e207573652e34496e76616c6964506f6f6c4964001d049c506f6f6c2069642070726f7669646564206973206e6f7420636f72726563742f757361626c652e4c426f6e64457874726152657374726963746564001e04fc426f6e64696e67206578747261206973207265737472696374656420746f207468652065786163742070656e64696e672072657761726420616d6f756e742e3c4e6f7468696e67546f41646a757374001f04b04e6f20696d62616c616e636520696e20746865204544206465706f73697420666f722074686520706f6f6c2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e210a0c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657438446566656e736976654572726f72000114684e6f74456e6f7567685370616365496e556e626f6e64506f6f6c00000030506f6f6c4e6f74466f756e6400010048526577617264506f6f6c4e6f74466f756e6400020040537562506f6f6c734e6f74466f756e6400030070426f6e64656453746173684b696c6c65645072656d61747572656c7900040000250a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401290a045300000400310a01185665633c543e0000290a04184f7074696f6e040454012d0a0108104e6f6e6500000010536f6d6504002d0a00000100002d0a084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01d1032c426c6f636b4e756d626572012c3450616c6c6574734f726967696e011906244163636f756e7449640100001401206d617962655f6964410101304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cd103011043616c6c0001386d617962655f706572696f6469634d0501944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e1906013450616c6c6574734f726967696e0000310a000002290a00350a0c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e390a083c70616c6c65745f707265696d616765404f6c645265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974d80150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f7369743d0a01704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656ee103012c4f7074696f6e3c7533323e000100003d0a04184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d80000010000410a083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e7449640100185469636b6574018401082c556e7265717565737465640801187469636b6574450a014c284163636f756e7449642c205469636b65742900010c6c656e10010c753332000000245265717565737465640c01306d617962655f7469636b6574490a016c4f7074696f6e3c284163636f756e7449642c205469636b6574293e000114636f756e7410010c7533320001246d617962655f6c656ee103012c4f7074696f6e3c7533323e00010000450a00000408008400490a04184f7074696f6e04045401450a0108104e6f6e6500000010536f6d650400450a00000100004d0a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000510a0c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400012018546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e1c546f6f4d616e7900060455014d6f7265207468616e20604d41585f484153485f555047524144455f42554c4b5f434f554e54602068617368657320776572652072657175657374656420746f206265207570677261646564206174206f6e63652e18546f6f466577000704e4546f6f206665772068617368657320776572652072657175657374656420746f2062652075706772616465642028692e652e207a65726f292e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e550a0c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e646572016d01000801206f6666656e6465726d0101204f6666656e6465720001247265706f7274657273250201345665633c5265706f727465723e0000590a000004084d0134005d0a0c3c70616c6c65745f74785f70617573651870616c6c6574144572726f720404540001102049735061757365640000044c5468652063616c6c206973207061757365642e284973556e706175736564000104545468652063616c6c20697320756e7061757365642e28556e7061757361626c65000204b45468652063616c6c2069732077686974656c697374656420616e642063616e6e6f74206265207061757365642e204e6f74466f756e64000300048054686520604572726f726020656e756d206f6620746869732070616c6c65742e610a0c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454016101045300000400650a01185665633c543e0000650a000002610100690a0c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6d0a00000408710a810a00710a0c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e747300304964656e74697479496e666f016d05000c01286a756467656d656e7473750a01fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f6d0501304964656e74697479496e666f0000750a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401790a0453000004007d0a01185665633c543e0000790a0000040810fd05007d0a000002790a00810a04184f7074696f6e0404540185010108104e6f6e6500000010536f6d65040085010000010000850a0000040818890a00890a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e00008d0a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401910a045300000400990a01185665633c543e0000910a04184f7074696f6e04045401950a0108104e6f6e6500000010536f6d650400950a0000010000950a0c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f0c1c42616c616e63650118244163636f756e74496401001c49644669656c64012c000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c64732c011c49644669656c640000990a000002910a009d0a0c3c70616c6c65745f6964656e746974791474797065734c417574686f7269747950726f70657274696573041853756666697801a10a00080118737566666978a10a0118537566666978000128616c6c6f636174696f6e100128416c6c6f636174696f6e0000a10a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000a50a00000408002c00a90a0c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400016848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e44546f6f4d616e7952656769737472617273000b04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000c04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000d047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000e04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479000f04d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001004f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e34496e76616c6964537566666978001104805468652070726f76696465642073756666697820697320746f6f206c6f6e672e504e6f74557365726e616d65417574686f72697479001204e05468652073656e64657220646f6573206e6f742068617665207065726d697373696f6e20746f206973737565206120757365726e616d652e304e6f416c6c6f636174696f6e001304c454686520617574686f726974792063616e6e6f7420616c6c6f6361746520616e79206d6f726520757365726e616d65732e40496e76616c69645369676e6174757265001404a8546865207369676e6174757265206f6e206120757365726e616d6520776173206e6f742076616c69642e4452657175697265735369676e6174757265001504090153657474696e67207468697320757365726e616d652072657175697265732061207369676e61747572652c20627574206e6f6e65207761732070726f76696465642e3c496e76616c6964557365726e616d65001604b054686520757365726e616d6520646f6573206e6f74206d6565742074686520726571756972656d656e74732e34557365726e616d6554616b656e0017047854686520757365726e616d6520697320616c72656164792074616b656e2e284e6f557365726e616d65001804985468652072657175657374656420757365726e616d6520646f6573206e6f742065786973742e284e6f74457870697265640019042d0154686520757365726e616d652063616e6e6f7420626520666f72636566756c6c792072656d6f76656420626563617573652069742063616e207374696c6c2062652061636365707465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ead0a0c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb10a00000408000400b50a083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d626572012c1c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e9101015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c730105018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000b90a0c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd0a000002c10a00c10a0000040c3506c50ad90a00c50a081866705f727063445472616e73616374696f6e53746174757300001c01407472616e73616374696f6e5f68617368300110483235360001447472616e73616374696f6e5f696e64657810010c75333200011066726f6d9901011048313630000108746fc90a01304f7074696f6e3c483136303e000140636f6e74726163745f61646472657373c90a01304f7074696f6e3c483136303e0001106c6f6773cd0a01205665633c4c6f673e0001286c6f67735f626c6f6f6dd10a0114426c6f6f6d0000c90a04184f7074696f6e0404540199010108104e6f6e6500000010536f6d65040099010000010000cd0a000002c50100d10a0820657468626c6f6f6d14426c6f6f6d00000400d50a01405b75383b20424c4f4f4d5f53495a455d0000d50a000003000100000800d90a0c20657468657265756d1c726563656970742452656365697074563300010c184c65676163790400dd0a014445495036353852656365697074446174610000001c454950323933300400dd0a01484549503239333052656365697074446174610001001c454950313535390400dd0a014845495031353539526563656970744461746100020000dd0a0c20657468657265756d1c72656365697074444549503635385265636569707444617461000010012c7374617475735f636f64650801087538000120757365645f676173d1010110553235360001286c6f67735f626c6f6f6dd10a0114426c6f6f6d0001106c6f6773cd0a01205665633c4c6f673e0000e10a0c20657468657265756d14626c6f636b14426c6f636b040454013506000c0118686561646572e50a01184865616465720001307472616e73616374696f6e73ed0a01185665633c543e0001186f6d6d657273f10a012c5665633c4865616465723e0000e50a0c20657468657265756d186865616465721848656164657200003c012c706172656e745f686173683001104832353600012c6f6d6d6572735f686173683001104832353600012c62656e6566696369617279990101104831363000012873746174655f726f6f74300110483235360001447472616e73616374696f6e735f726f6f743001104832353600013472656365697074735f726f6f74300110483235360001286c6f67735f626c6f6f6dd10a0114426c6f6f6d000128646966666963756c7479d1010110553235360001186e756d626572d1010110553235360001246761735f6c696d6974d1010110553235360001206761735f75736564d10101105532353600012474696d657374616d702c010c75363400012865787472615f6461746134011442797465730001206d69785f68617368300110483235360001146e6f6e6365e90a010c4836340000e90a0c38657468657265756d5f747970657310686173680c483634000004004d03011c5b75383b20385d0000ed0a000002350600f10a000002e50a00f50a000002d90a00f90a000002c50a00fd0a0c3c70616c6c65745f657468657265756d1870616c6c6574144572726f7204045400010840496e76616c69645369676e6174757265000004545369676e617475726520697320696e76616c69642e305072654c6f67457869737473000104d85072652d6c6f672069732070726573656e742c207468657265666f7265207472616e73616374206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e010b082870616c6c65745f65766d30436f64654d65746164617461000008011073697a652c010c75363400011068617368300110483235360000050b0000040899013000090b0c2870616c6c65745f65766d1870616c6c6574144572726f720404540001342842616c616e63654c6f77000004904e6f7420656e6f7567682062616c616e636520746f20706572666f726d20616374696f6e2c4665654f766572666c6f770001048043616c63756c6174696e6720746f74616c20666565206f766572666c6f7765643c5061796d656e744f766572666c6f770002049043616c63756c6174696e6720746f74616c207061796d656e74206f766572666c6f7765643857697468647261774661696c65640003044c576974686472617720666565206661696c6564384761735072696365546f6f4c6f770004045447617320707269636520697320746f6f206c6f772e30496e76616c69644e6f6e6365000504404e6f6e636520697320696e76616c6964384761734c696d6974546f6f4c6f7700060454476173206c696d697420697320746f6f206c6f772e3c4761734c696d6974546f6f4869676800070458476173206c696d697420697320746f6f20686967682e38496e76616c6964436861696e49640008046054686520636861696e20696420697320696e76616c69642e40496e76616c69645369676e617475726500090464746865207369676e617475726520697320696e76616c69642e285265656e7472616e6379000a043845564d207265656e7472616e6379685472616e73616374696f6e4d757374436f6d6546726f6d454f41000b04244549502d333630372c24556e646566696e6564000c0440556e646566696e6564206572726f722e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0d0b0c6470616c6c65745f686f746669785f73756666696369656e74731870616c6c6574144572726f720404540001045c4d617841646472657373436f756e744578636565646564000004784d6178696d756d206164647265737320636f756e74206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e110b000004082ce10100150b0c5470616c6c65745f61697264726f705f636c61696d731870616c6c6574144572726f7204045400012060496e76616c6964457468657265756d5369676e61747572650000046c496e76616c696420457468657265756d207369676e61747572652e58496e76616c69644e61746976655369676e617475726500010488496e76616c6964204e617469766520287372323535313929207369676e617475726550496e76616c69644e61746976654163636f756e740002047c496e76616c6964204e6174697665206163636f756e74206465636f64696e67405369676e65724861734e6f436c61696d00030478457468657265756d206164647265737320686173206e6f20636c61696d2e4053656e6465724861734e6f436c61696d000404b04163636f756e742049442073656e64696e67207472616e73616374696f6e20686173206e6f20636c61696d2e30506f74556e646572666c6f77000508490154686572652773206e6f7420656e6f75676820696e2074686520706f7420746f20706179206f757420736f6d6520756e76657374656420616d6f756e742e2047656e6572616c6c7920696d706c6965732061306c6f676963206572726f722e40496e76616c696453746174656d656e740006049041206e65656465642073746174656d656e7420776173206e6f7420696e636c756465642e4c56657374656442616c616e6365457869737473000704a4546865206163636f756e7420616c7265616479206861732061207665737465642062616c616e63652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e190b0c3070616c6c65745f726f6c65731474797065733c52657374616b696e674c656467657204045400002001147374617368000130543a3a4163636f756e744964000114746f74616c7501013042616c616e63654f663c543e00011c70726f66696c65a906012850726f66696c653c543e000114726f6c65731d0b01f4426f756e64656442547265654d61703c526f6c65547970652c205265636f72643c543e2c20543a3a4d6178526f6c657350657256616c696461746f723e000120726f6c655f6b6579e5060170426f756e6465645665633c75382c20543a3a4d61784b65794c656e3e000124756e6c6f636b696e672d0b01f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f7265776172647325090194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e00014c6d61785f6163746976655f736572766963657310010c75333200001d0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01ed01045601b506045300000400210b013842547265654d61703c4b2c20563e0000210b042042547265654d617008044b01ed01045601b506000400250b000000250b000002290b00290b00000408ed01b506002d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401310b045300000400350b01185665633c543e0000310b0c3070616c6c65745f726f6c65731474797065732c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c75657501011c42616c616e636500010c657261bd020120457261496e6465780000350b000002310b00390b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ed01045300000400f90101185665633c543e00003d0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0100045601100453000004004509013842547265654d61703c4b2c20563e0000410b0c3070616c6c65745f726f6c65731870616c6c6574144572726f7204045400014c304e6f7456616c696461746f72000004404e6f7420612076616c696461746f722e3c486173526f6c6541737369676e65640001048c56616c696461746f72206861732061637469766520726f6c652061737369676e65642e3c526f6c654e6f7441737369676e6564000204b0476976656e20726f6c65206973206e6f742061737369676e656420746f207468652076616c696461746f722e204d6178526f6c65730003049c4d617820726f6c65206c696d6974207265616368656420666f7220746865206163636f756e742e4c526f6c6543616e6e6f74426552656d6f7665640004042101526f6c652063616e6e6f742064756520746f2070656e64696e67206a6f62732c2077686963682063616e2774206265206f70746564206f757420617420746865206d6f6d656e742e7852657374616b696e67416d6f756e7443616e6e6f744265557064617465640005045d0152657374616b696e6720616d6f756e742063616e6e6f74206265206c6f77657265642069662074686572652061726520616e792070656e64696e67206a6f62732e20596f752063616e206f6e6c7920616464206d6f726558457863656564734d617852657374616b6556616c75650006040101496e76616c69642052657374616b696e6720616d6f756e742c2073686f756c64206e6f742065786365656420746f74616c207374616b656420616d6f756e742e64496e73756666696369656e7452657374616b696e67426f6e6400070431015265207374616b696e6720616d6f756e742073686f756c642062652067726561746572207468616e206d696e696d756d2052657374616b696e6720626f6e6420726571756972656d656e742e4c50726f66696c655570646174654661696c65640008045850726f66696c6520557064617465206661696c65642e5050726f66696c65416c7265616479457869737473000904cc50726f66696c6520616c72656164792065786973747320666f7220676976656e2076616c696461746f72206163636f756e742e384e6f50726f66696c65466f756e64000a04cc537461736820636f6e74726f6c6c6572206163636f756e74206e6f7420666f756e6420696e20526f6c6573204c65646765722e6850726f66696c6544656c657465526571756573744661696c6564000b08490150726f66696c652064656c6574652072657175657374206661696c65642064756520746f2070656e64696e67206a6f62732c2077686963682063616e2774206265206f70746564206f7574206174207468651c6d6f6d656e742e5853657373696f6e4b6579734e6f7450726f7669646564000c046053657373696f6e4b657973206e6f742070726f76696465643c4b657953697a654578636565646564000d04444b65792073697a652065786365656465644c43616e6e6f7447657443757272656e74457261000e045c43616e6e6f742066696e642043757272656e742065726148496e76616c6964457261546f526577617264000f0440496e76616c69642065726120696e666f2c426f756e644e6f744d65740010044c4f7574206f6620626f756e647320696e70757438416c7265616479436c61696d65640011045c5265776172647320616c726561647920636c61696d6564304e6f4d6f72654368756e6b7300120470556e6c6f636b206368756e6b7320616c72656164792066696c6c6564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e450b0c4474616e676c655f7072696d697469766573106a6f62732c5068617365526573756c7424244163636f756e74496401002c426c6f636b4e756d626572012c3c4d61785061727469636970616e7473010d02244d61784b65794c656e01cd06284d6178446174614c656e01d5063c4d61785369676e61747572654c656e01d106404d61785375626d697373696f6e4c656e0111022c4d617850726f6f664c656e01d906584d61784164646974696f6e616c506172616d734c656e011502001401146f776e65720001244163636f756e744964000118726573756c74c90601a1014a6f62526573756c743c4d61785061727469636970616e74732c204d61784b65794c656e2c204d61785369676e61747572654c656e2c204d6178446174614c656e2c0a4d617850726f6f664c656e2c204d61784164646974696f6e616c506172616d734c656e2c3e00010c74746c2c012c426c6f636b4e756d6265720001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e0001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e0000490b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010102045300000400fd0101185665633c543e00004d0b0c2c70616c6c65745f6a6f6273186d6f64756c65144572726f720404540001483c496e76616c69644a6f62506861736500000458696e76616c69642070686173652070726f766964656440496e76616c696456616c696461746f7200010498476976656e2076616c696461746f72206e6f742076616c696420666f72206a6f62207479706540496e76616c69644a6f62506172616d730002048c696e76616c696420706172616d732c2063616e6e6f742065786563757465206a6f62735850726576696f7573526573756c744e6f74466f756e640003046863616e6e6f742066696e64207068617365203120726573756c7434526573756c74457870697265640004046c5468652070726576696f757320726573756c742065787069726564444a6f62416c72656164794578706972656400050460496e76616c6964206a6f622065787069727920696e7075742c4a6f624e6f74466f756e640006047c54686520726571756573746564206a6f6220776173206e6f7420666f756e645850686173654f6e65526573756c744e6f74466f756e640007044c503120726573756c74206e6f7420666f756e64244e6f52657761726473000804786e6f207265776172647320666f756e6420666f722076616c696461746f724c4e6f74456e6f75676856616c696461746f7273000904744e6f7420656e6f7567682076616c696461746f727320746f20657869742c456d707479526573756c74000a0430656d70747920726573756c7420456d7074794a6f62000b0424656d707479206a6f626056616c696461746f72526f6c654b65794e6f74466f756e64000c047456616c696461746f7220726f6c65206b6579206e6f7420666f756e642e54526573756c744e6f74457870656374656454797065000d0468556e657870656374656420726573756c742070726f7669646564304e6f5065726d697373696f6e000e04a04e6f207065726d697373696f6e20746f206368616e6765207065726d69747465642063616c6c65724c546f6f4d616e795061727469636970616e7473000f047845786365656473206d6178207061727469636970616e74206c696d69747344457863656564734d61784b657953697a6500100440496e76616c6964204b65792073697a655c546f6f4d616e794a6f6273466f7256616c696461746f72001104a856616c696461746f722065786365656473206c696d6974206f66206d617820616374697665206a6f6273048054686520604572726f726020656e756d206f6620746869732070616c6c65742e510b0c2870616c6c65745f646b671870616c6c6574144572726f720404540001c05043616e6e6f7452657472656976655369676e6572000004a843616e6e6f74207265747265697665207369676e6572732066726f6d20746865207369676e6174757265404e6f74456e6f7567685369676e657273000104804e6f7420656e6f756768207369676e65727320666f72207468726573686f6c6450496e76616c69645369676e61747572654461746100020498546865207369676e6572732068617665207369676e656420646966666572656e7420646174614c4e6f5061727469636970616e7473466f756e64000304544e6f207061727469636970616e747320666f756e64444e6f5369676e617475726573466f756e640004044c4e6f207369676e61747572657320666f756e6438496e76616c69644a6f62547970650005044c556e6578706563746564206a6f622074797065484475706c69636174655369676e61747572650006049c4475706c6963617465207369676e617475726520666f756e6420696e207375626d697373696f6e40496e76616c69645369676e61747572650007046c496e76616c6964207369676e6174757265207375626d697474656458496e76616c69645369676e6174757265536368656d6500080460496e76616c6964207369676e617475726520736368656d657c496e76616c69645369676e6174757265446573657269616c697a6174696f6e00090484496e76616c6964207369676e617475726520646573657269616c697a6174696f6e4c496e76616c6964566572696679696e674b6579000a047c496e76616c696420766572696679696e67206b6579207375626d697474656488496e76616c6964566572696679696e674b6579446573657269616c697a6174696f6e000b0494496e76616c696420766572696679696e67206b657920646573657269616c697a6174696f6e485369676e696e674b65794d69736d61746368000c046c5369676e65642077697468206120646966666572656e74206b65796c496e76616c69645061727469636970616e745075626c69634b6579000d0478496e76616c6964207061727469636970616e74207075626c6963206b65794c496e76616c6964426c735075626c69634b6579000e0458496e76616c696420424c53207075626c6963206b65793c496e76616c6964526f6c6554797065000f0478496e76616c6964204d69736265686176696f7220526f6c6520747970652e50496e76616c69644a757374696669636174696f6e0010046c496e76616c6964204a757374696669636174696f6e20747970652e544d616c666f726d6564526f756e644d657373616765001104a0436f756c64206e6f7420646573657269616c697a652074686520726f756e64206d6573736167652e4c4e6f745369676e656442794f6666656e646572001204c05369676e656420526f756e64204d657373616765206e6f74207369676e656420627920746865206f6666656e6465722e4456616c69644465636f6d6d69746d656e7400131090546865207375626d6974746564206465636f6d6d69746d656e742069732076616c69642e00d454686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e742069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964213456616c69644461746153697a65001410b8546865207375626d6974746564206465636f6d6d69746d656e7420646174612073697a652069732076616c69642e00fc54686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e7420646174612073697a652069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964216056616c696446656c646d616e566572696669636174696f6e001510cc546865207375626d6974746564206d65737361676573207061737365642046656c646d616e20766572696669636174696f6e2e00110154686973206572726f722069732072657475726e6564207768656e20746865206d65737361676573207061737365642046656c646d616e20766572696669636174696f6e90627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964214456616c69645363686e6f727250726f6f6600161494546865207375626d6974746564205363686e6f72722050726f6f662069732076616c69642e00d054686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e7420616e6420697473845363686e6f7272206172652076616c69642e20627574207468652063616c6c657254636c61696d7320697420697320696e76616c69642e6c56616c696452696e67506564657273656e506172616d6574657273001710c4546865207375626d69747465642072696e6720706564657273656e20706172616d6574657273206172652076616c69642e00090154686973206572726f722069732072657475726e6564207768656e207468652072696e6720706564657273656e20706172616d6574657273206172652076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c69642e3456616c69644d6f6450726f6f6600181084546865207375626d6974746564204d6f642050726f6f662069732076616c69642e00c854686973206572726f722069732072657475726e6564207768656e20746865204d6f642050726f6f662069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c69642e6056616c696446726f73745369676e6174757265536861726500191001012d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202f2f2f010120202020202020202020202020202020202020202020202046524f5354204552524f5253202020202020202020202020202020202020202020202020202f2f2f01012d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202f2f2f6c56616c69642046524f5354207369676e617475726520736861726580496e76616c696446726f73744d65737361676553657269616c697a6174696f6e001a048c496e76616c69642046524f5354206d6573736167652073657269616c697a6174696f6e88496e76616c696446726f73744d657373616765446573657269616c697a6174696f6e001b0494496e76616c69642046524f5354206d65737361676520646573657269616c697a6174696f6e80496e76616c69644964656e746966696572446573657269616c697a6174696f6e001c0488496e76616c6964206964656e74696669657220646573657269616c697a6174696f6e4c56616c696446726f73745369676e6174757265001d04d056616c69642046524f5354207369676e6174757265206572726f7220666f722061206d69736265686176696f72207265706f727444556e6b6e6f776e4964656e746966696572001e0448556e6b6e6f776e206964656e7469666965724c4475706c69636174654964656e746966696572001f04504475706c6963617465206964656e74696669657270496e636f72726563744e756d6265724f664964656e746966696572730020047c496e636f7272656374206e756d626572206f66206964656e74696669657273804964656e74696669657244657269766174696f6e4e6f74537570706f727465640021048c4964656e7469666965722064657269766174696f6e206e6f7420737570706f727465645c4d616c666f726d656446726f73745369676e61747572650022044c4d616c666f726d6564207369676e617475726554496e76616c696446726f73745369676e61747572650023045c496e76616c69642046524f5354207369676e617475726568496e76616c696446726f73745369676e6174757265536861726500240474496e76616c69642046524f5354207369676e61747572652073686172656c496e76616c696446726f73745369676e6174757265536368656d6500250478496e76616c69642046524f5354207369676e617475726520736368656d65684d616c666f726d656446726f7374566572696679696e674b6579002604744d616c666f726d65642046524f535420766572696679696e67206b6579604d616c666f726d656446726f73745369676e696e674b65790027046c4d616c666f726d65642046524f5354207369676e696e67206b6579584d697373696e6746726f7374436f6d6d69746d656e74002804604d697373696e672046524f535420636f6d6d69746d656e74484964656e74697479436f6d6d69746d656e7400290460496e76616c69642046524f535420636f6d6d69746d656e743c46726f73744669656c644572726f72002a046046524f5354204669656c64207363616c6172206572726f723c46726f737447726f75704572726f72002b046446524f53542047726f757020656c656d656e74206572726f72444669656c64456c656d656e744572726f72002c044c4669656c6420656c656d656e74206572726f7240496e76616c69645075626c69634b6579002d0460496e76616c6964207075626c6963206b6579206572726f7238496e76616c69644d657373616765002e043c496e76616c6964206d6573736167655c4d616c666f726d6564537461726b5369676e6174757265002f04644d616c666f726d656420537461726b207369676e6174757265048054686520604572726f726020656e756d206f6620746869732070616c6c65742e550b0c3470616c6c65745f7a6b736161731870616c6c6574144572726f7204045400010c38496e76616c69644a6f62547970650000044c556e6578706563746564206a6f62207479706530496e76616c696450726f6f6600010434496e76616c69642070726f6f66384d616c666f726d656450726f6f660002083c4d616c666f726d65642050726f6f66886966207468652070726f6f66206279746573206973206e6f7420636f72726563742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e590b000004085d0b18005d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401610b045300000400650b01185665633c543e0000610b083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f787954797065018d022c426c6f636b4e756d626572012c000c012064656c65676174650001244163636f756e74496400012870726f78795f747970658d02012450726f78795479706500011464656c61792c012c426c6f636b4e756d6265720000650b000002610b00690b000004086d0b18006d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401710b045300000400750b01185665633c543e0000710b083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801302c426c6f636b4e756d626572012c000c01107265616c0001244163636f756e74496400012463616c6c5f68617368300110486173680001186865696768742c012c426c6f636b4e756d6265720000750b000002710b00790b0c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72404f70657261746f724d657461646174610c244163636f756e74496401001c42616c616e636501181c417373657449640118001401147374616b6518011c42616c616e636500014064656c65676174696f6e5f636f756e7410010c75333200011c72657175657374810b01a04f7074696f6e3c4f70657261746f72426f6e644c657373526571756573743c42616c616e63653e3e00012c64656c65676174696f6e73890b01bc5665633c44656c656761746f72426f6e643c4163636f756e7449642c2042616c616e63652c20417373657449643e3e000118737461747573910b01384f70657261746f725374617475730000810b04184f7074696f6e04045401850b0108104e6f6e6500000010536f6d650400850b0000010000850b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f725c4f70657261746f72426f6e644c65737352657175657374041c42616c616e6365011800080118616d6f756e7418011c42616c616e6365000130726571756573745f74696d65100128526f756e64496e6465780000890b0000028d0b008d0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f723444656c656761746f72426f6e640c244163636f756e74496401001c42616c616e636501181c417373657449640118000c012464656c656761746f720001244163636f756e744964000118616d6f756e7418011c42616c616e636500012061737365745f696418011c417373657449640000910b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72384f70657261746f7253746174757300010c1841637469766500000020496e6163746976650001001c4c656176696e670400100128526f756e64496e64657800020000950b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72404f70657261746f72536e617073686f740c244163636f756e74496401001c42616c616e636501181c417373657449640118000801147374616b6518011c42616c616e636500012c64656c65676174696f6e73890b01bc5665633c44656c656761746f72426f6e643c4163636f756e7449642c2042616c616e63652c20417373657449643e3e0000990b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f724444656c656761746f724d657461646174610c244163636f756e74496401001c42616c616e636501181c417373657449640118001401206465706f736974739d0b016842547265654d61703c417373657449642c2042616c616e63653e00014477697468647261775f7265717565737473a90b01985665633c5769746864726177526571756573743c417373657449642c2042616c616e63653e3e00012c64656c65676174696f6e73b10b01cc5665633c426f6e64496e666f44656c656761746f723c4163636f756e7449642c2042616c616e63652c20417373657449643e3e00016864656c656761746f725f756e7374616b655f7265717565737473b90b01c45665633c426f6e644c657373526571756573743c4163636f756e7449642c20417373657449642c2042616c616e63653e3e000118737461747573c10b013c44656c656761746f7253746174757300009d0b042042547265654d617008044b011804560118000400a10b000000a10b000002a50b00a50b00000408181800a90b000002ad0b00ad0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c576974686472617752657175657374081c4173736574496401181c42616c616e63650118000c012061737365745f696418011c41737365744964000118616d6f756e7418011c42616c616e636500013c7265717565737465645f726f756e64100128526f756e64496e6465780000b10b000002b50b00b50b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f7244426f6e64496e666f44656c656761746f720c244163636f756e74496401001c42616c616e636501181c417373657449640118000c01206f70657261746f720001244163636f756e744964000118616d6f756e7418011c42616c616e636500012061737365745f696418011c417373657449640000b90b000002bd0b00bd0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c426f6e644c657373526571756573740c244163636f756e74496401001c4173736574496401181c42616c616e63650118001001206f70657261746f720001244163636f756e74496400012061737365745f696418011c41737365744964000118616d6f756e7418011c42616c616e636500013c7265717565737465645f726f756e64100128526f756e64496e6465780000c10b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c44656c656761746f7253746174757300010818416374697665000000404c656176696e675363686564756c65640400100128526f756e64496e64657800010000c50b0000021800c90b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c7265776172647330526577617264436f6e6669670818506f6f6c496401181c42616c616e636501180008011c636f6e66696773cd0b01cc42547265654d61703c506f6f6c49642c20526577617264436f6e666967466f724173736574506f6f6c3c42616c616e63653e3e00016477686974656c69737465645f626c75657072696e745f696473ed0401205665633c7533323e0000cd0b042042547265654d617008044b0118045601d10b000400d50b000000d10b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c7265776172647360526577617264436f6e666967466f724173736574506f6f6c041c42616c616e636501180008010c6170799902011c50657263656e7400010c63617018011c42616c616e63650000d50b000002d90b00d90b0000040818d10b00dd0b0c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c6574144572726f720404540001783c416c72656164794f70657261746f720000048c546865206163636f756e7420697320616c726561647920616e206f70657261746f722e28426f6e64546f6f4c6f7700010470546865207374616b6520616d6f756e7420697320746f6f206c6f772e344e6f74416e4f70657261746f720002047c546865206163636f756e74206973206e6f7420616e206f70657261746f722e2843616e6e6f744578697400030460546865206163636f756e742063616e6e6f7420657869742e38416c72656164794c656176696e6700040480546865206f70657261746f7220697320616c7265616479206c656176696e672e484e6f744c656176696e674f70657261746f72000504a8546865206163636f756e74206973206e6f74206c656176696e6720617320616e206f70657261746f722e3c4e6f744c656176696e67526f756e64000604cc54686520726f756e6420646f6573206e6f74206d6174636820746865207363686564756c6564206c6561766520726f756e642e4c4e6f5363686564756c6564426f6e644c657373000704985468657265206973206e6f207363686564756c656420756e7374616b6520726571756573742e6c426f6e644c657373526571756573744e6f745361746973666965640008049454686520756e7374616b652072657175657374206973206e6f74207361746973666965642e444e6f744163746976654f70657261746f720009046c546865206f70657261746f72206973206e6f74206163746976652e484e6f744f66666c696e654f70657261746f72000a0470546865206f70657261746f72206973206e6f74206f66666c696e652e40416c726561647944656c656761746f72000b048c546865206163636f756e7420697320616c726561647920612064656c656761746f722e304e6f7444656c656761746f72000c047c546865206163636f756e74206973206e6f7420612064656c656761746f722e70576974686472617752657175657374416c7265616479457869737473000d048841207769746864726177207265717565737420616c7265616479206578697374732e4c496e73756666696369656e7442616c616e6365000e0494546865206163636f756e742068617320696e73756666696369656e742062616c616e63652e444e6f576974686472617752657175657374000f04745468657265206973206e6f20776974686472617720726571756573742e444e6f426f6e644c65737352657175657374001004705468657265206973206e6f20756e7374616b6520726571756573742e40426f6e644c6573734e6f7452656164790011048454686520756e7374616b652072657175657374206973206e6f742072656164792e70426f6e644c65737352657175657374416c7265616479457869737473001204844120756e7374616b65207265717565737420616c7265616479206578697374732e6041637469766553657276696365735573696e674173736574001304a854686572652061726520616374697665207365727669636573207573696e67207468652061737365742e484e6f41637469766544656c65676174696f6e001404785468657265206973206e6f74206163746976652064656c65676174696f6e4c41737365744e6f7457686974656c697374656400150470546865206173736574206973206e6f742077686974656c6973746564344e6f74417574686f72697a6564001604cc546865206f726967696e206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e3441737365744e6f74466f756e6400170464546865206173736574204944206973206e6f7420666f756e646c426c75657072696e74416c726561647957686974656c69737465640018049c54686520626c75657072696e7420494420697320616c72656164792077686974656c6973746564484e6f77697468647261775265717565737473001904684e6f20776974686472617720726571756573747320666f756e64644e6f4d61746368696e67776974686472617752657175657374001a04884e6f206d61746368696e67207769746864726177207265716573747320666f756e64484173736574416c7265616479496e506f6f6c001b0494417373657420616c72656164792065786973747320696e20612072657761726420706f6f6c3841737365744e6f74496e506f6f6c001c04784173736574206e6f7420666f756e6420696e2072657761726420706f6f6c30506f6f6c4e6f74466f756e64001d04785468652072657761726420706f6f6c20646f6573206e6f7420657869737404744572726f727320656d6974746564206279207468652070616c6c65742ee10b00000408083400e50b0c5c7379676d615f6163636573735f73656772656761746f721870616c6c6574144572726f7204045400010834556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e746564444772616e744163636573734661696c6564000104e44661696c656420746f206772616e742065787472696e73696320616363657373207065726d697373696f6e20746f20616e206163636f756e74048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee90b0000040808a90200ed0b0c587379676d615f62617369635f66656568616e646c65721870616c6c6574144572726f7204045400010834556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e7465643041636365737344656e696564000104a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef10b0c607379676d615f6665655f68616e646c65725f726f757465721870616c6c6574144572726f720404540001083041636365737344656e696564000004a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e34556e696d706c656d656e7465640001045846756e6374696f6e20756e696d706c656d656e746564048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef50b0000040c10181800f90b0c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c6574144572726f7204045400011034556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e7465643041636365737344656e696564000104a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e44466565526174654f75744f6652616e67650002048c4665652072617465206973206f7574206f662072616e6765205b302c203130303030293c496e76616c6964466565426f756e640003047c50657263656e746167652066656520626f756e6420697320696e76616c6964048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd0b00000408082c00010c042042547265654d617008044b01a90204560100000400050c000000050c000002090c00090c00000408a90200000d0c000002110c00110c00000408a9020400150c0c307379676d615f6272696467651870616c6c6574144572726f720404540001783041636365737344656e696564000004a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e3c4261644d70635369676e6174757265000104c450726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792072656c617965724c496e73756666696369656e7442616c616e636500020498496e73756666696369656e742062616c616e6365206f6e2073656e646572206163636f756e74545472616e736163744661696c65644465706f736974000304844173736574207472616e736163746f7220657865637574696f6e206661696c6564585472616e736163744661696c65645769746864726177000400605472616e736163744661696c65644665654465706f736974000500705472616e736163744661696c6564486f6c64496e5265736572766564000600845472616e736163744661696c656452656c6561736546726f6d52657365727665640007003c466565546f6f457870656e73697665000804c85468652077697468647261776e20616d6f756e742063616e206e6f7420636f7665722074686520666565207061796d656e74444d697373696e674d7063416464726573730009044c4d50432061646472657373206e6f74207365744c4d7063416464724e6f74557064617461626c65000a04784d504320616464726573732063616e206e6f74206265207570646174656430427269646765506175736564000b04404272696467652069732070617573656438427269646765556e706175736564000c044842726964676520697320756e706175736564404d697373696e67466565436f6e666967000d046446656520636f6e666967206f7074696f6e206d697373696e673441737365744e6f74426f756e64000e04804173736574206e6f7420626f756e6420746f2061207265736f757263652069645c50726f706f73616c416c7265616479436f6d706c657465000f049c50726f706f73616c2068617320656974686572206661696c6564206f722073756363656564656444456d70747950726f706f73616c4c6973740010044c50726f706f73616c206c69737420656d707479405472616e736163746f724661696c65640011046c5472616e736163746f72206f7065726174696f6e206661696c65647c496e76616c69644465706f73697444617461496e76616c69644c656e677468001204604465706f7369742064617461206e6f7420636f72726563747c496e76616c69644465706f73697444617461496e76616c6964416d6f756e74001300a0496e76616c69644465706f73697444617461496e76616c6964526563697069656e744c656e677468001400a4496e76616c69644465706f73697444617461526563697069656e744c656e6774684e6f744d6174636800150088496e76616c69644465706f73697444617461496e76616c6964526563697069656e740016005844657374446f6d61696e4e6f74537570706f72746564001704644465737420646f6d61696e206e6f7420737570706f727465644c44657374436861696e49444e6f744d617463680018045c4465737420636861696e206964206e6f74206d61746368544578747261637444657374446174614661696c6564001904884661696c656420746f20657874726163742064657374696e6174696f6e206461746154446563696d616c436f6e76657273696f6e4661696c001a047c4661696c6564206f6e2074686520646563696d616c20636f6e766572746572504465706f7369744e6f6e63654f766572666c6f77001b04ac4465706f736974206e6f6e6365206861732072656163686564206d617820696e74656765722076616c7565744e6f4c6971756964697479486f6c6465724163636f756e74426f756e64001c04b44173736574206e6f7420626f756e6420746f2061206c697175696469747920686f6c646572206163636f756e7434556e696d706c656d656e746564001d045846756e6374696f6e20756e696d706c656d656e746564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e190c0c4466705f73656c665f636f6e7461696e65644c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730165031043616c6c015d03245369676e6174757265010506144578747261011d0c0004004d0c01250173705f72756e74696d653a3a67656e657269633a3a556e636865636b656445787472696e7369633c416464726573732c2043616c6c2c205369676e61747572652c2045787472610a3e00001d0c00000424210c250c290c2d0c310c390c3d0c410c450c00210c10306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000250c10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000290c10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000002d0c10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000310c10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400350c010c4572610000350c102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000390c10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400bd020120543a3a4e6f6e636500003d0c10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000410c086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e74040454000004007501013042616c616e63654f663c543e0000450c08746672616d655f6d657461646174615f686173685f657874656e73696f6e44436865636b4d657461646174614861736804045400000401106d6f6465490c01104d6f64650000490c08746672616d655f6d657461646174615f686173685f657874656e73696f6e104d6f64650001082044697361626c65640000001c456e61626c6564000100004d0c102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730165031043616c6c015d03245369676e6174757265010506144578747261011d0c00040034000000510c085874616e676c655f746573746e65745f72756e74696d651c52756e74696d6500000000c81853797374656d011853797374656d441c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b48617368010104052c308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d62657201002c200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023005030400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000090304000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100780400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100780400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500000103040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500000d03040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01110301541830426c6f636b576569676874732103f901025b1f5d000b00204aa9d10113ffffffffffffffffc2a0a91d00010bd05f9fa62e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf010000c2a0a91d00010bd0e7f110a3011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a74130000000000000040c2a0a91d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746831033000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e742c200001000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687439034040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e3d03c1033874616e676c652d746573746e65743874616e676c652d746573746e6574010000004c0400000100000040df6acb689907609b0400000037e397fc7c91f5e40200000040fe3ad401f8959a060000007ee4fdd3f4b9d4d001000000b18f582993e030f401000000582211f65bb14b8905000000e65b00e46cedd0aa02000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000cbca25e39f14238702000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000ed99c5acb25eedf503000000bd78255d4feeea1f04000000a33d43f58731ad840200000001000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669789102082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e015103002454696d657374616d70012454696d657374616d70080c4e6f7701002c20000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010078040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e0155030004344d696e696d756d506572696f642c20b80b000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e0001105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e015903017c0001a907026052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100ad0704000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e0000000003184173736574730118417373657473101441737365740001040218b107040004542044657461696c73206f6620616e2061737365742e1c4163636f756e740001080202b907bd07040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c020202c907cd0704000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d657461646174610101040218d1075000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e016103018c1c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f73697418400000e8890423c78a000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f73697418400000e8890423c78a00000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f736974426173651840000054129336377505000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f7369745065724279746518400000c16ff2862300000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f736974184000e40b540200000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e01d907042042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200dd07040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200ed07040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c64730101040200f9070400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a657301010402000d080400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e016903019010484578697374656e7469616c4465706f736974184000e40b5402000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e284d6178467265657a657310103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01210805485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100250840000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100290804000000019804604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000628417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000071042616265011042616265442845706f6368496e64657801002c20000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f72697469657301002d080400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100810320000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100810320000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e67650000890304000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f72697469657301002d0804000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510390804000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a65640000410804000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100410104001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f6368537461727401008d034000000000000000000000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e65737301002c20000000000000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000590804000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e666967000059080400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f63687301005d0804002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e01710300103445706f63684475726174696f6e2c20b0040000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652c20701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010e80300000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f776564344d61784e6f6d696e61746f727310100001000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e016108081c4772616e647061011c4772616e6470611c1453746174650100650804000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006908040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f7263656400002c040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c656400008d030400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e74536574496401002c200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e000104052c1004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e2c417574686f72697469657301006d0804000484205468652063757272656e74206c697374206f6620617574686f7269746965732e019503019c0c384d6178417574686f7269746965731010e8030000045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310100001000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e74726965732c20000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e017108091c496e6469636573011c496e646963657304204163636f756e7473000104021075080400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01c90301b0041c4465706f7369741840000064a7b3b6e00d000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e0179080a2444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010010100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301007d08040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040510890804000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010010100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f6600010405108d0804000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405009908e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100780400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000b108040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630b50804000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040630780400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402c430040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e490120546865206048617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01cd0301b4303c456e6163746d656e74506572696f642c20c0a800000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f642c20201c00000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f642c20c08901000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f642c20c0a8000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400000a0dec5adc935360000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f7765647804010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f642c20807000000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f642c20c0a800000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657310106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73101064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473101064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656410106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01b9080b1c436f756e63696c011c436f756e63696c182450726f706f73616c730100bd08040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406305d03040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001040630c108040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010025020400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01e90301c804444d617850726f706f73616c576569676874243c070010a5d4e813ffffffffffffff7f04250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e01c5080c1c56657374696e67011c56657374696e67081c56657374696e670001040200c908040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100d10804000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01ed0301cc08444d696e5665737465645472616e736665721840000010632d5ec76b050000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c0000000001d5080d24456c656374696f6e730124456c656374696f6e73141c4d656d626572730100d90804000c74205468652063757272656e7420656c6563746564206d656d626572732e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100d90804001084205468652063757272656e742072657365727665642072756e6e6572732d75702e00590120496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865bc206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e2843616e646964617465730100d40400185901205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f72d020616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e007c205365636f6e6420656c656d656e7420697320746865206465706f7369742e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e38456c656374696f6e526f756e647301001010000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e18566f74696e670101040500e108840000000000000000000000000000000000000000000000000000000000000000000cb820566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e00c42054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e01f50301d0282050616c6c657449644d0320706872656c65637404d0204964656e74696669657220666f722074686520656c656374696f6e732d70687261676d656e2070616c6c65742773206c6f636b3443616e646964616379426f6e6418400000a0dec5adc935360000000000000004050120486f77206d7563682073686f756c64206265206c6f636b656420757020696e206f7264657220746f207375626d6974206f6e6527732063616e6469646163792e38566f74696e67426f6e6442617365184000005053c91aa974050000000000000010942042617365206465706f736974206173736f636961746564207769746820766f74696e672e00550120546869732073686f756c642062652073656e7369626c79206869676820746f2065636f6e6f6d6963616c6c7920656e73757265207468652070616c6c65742063616e6e6f742062652061747461636b656420627994206372656174696e67206120676967616e746963206e756d626572206f6620766f7465732e40566f74696e67426f6e64466163746f721840000020f84dde700400000000000000000411012054686520616d6f756e74206f6620626f6e642074686174206e65656420746f206265206c6f636b656420666f72206561636820766f746520283332206279746573292e38446573697265644d656d626572731010050000000470204e756d626572206f66206d656d6265727320746f20656c6563742e404465736972656452756e6e65727355701010030000000478204e756d626572206f662072756e6e6572735f757020746f206b6565702e305465726d4475726174696f6e2c20c0890100000000000c510120486f77206c6f6e6720656163682073656174206973206b6570742e205468697320646566696e657320746865206e65787420626c6f636b206e756d62657220617420776869636820616e20656c656374696f6e5d0120726f756e642077696c6c2068617070656e2e2049662073657420746f207a65726f2c206e6f20656c656374696f6e732061726520657665722074726967676572656420616e6420746865206d6f64756c652077696c6c5020626520696e2070617373697665206d6f64652e344d617843616e6469646174657310104000000018e420546865206d6178696d756d206e756d626572206f662063616e6469646174657320696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e003101205768656e2074686973206c696d69742069732072656163686564206e6f206d6f72652063616e646964617465732061726520616363657074656420696e2074686520656c656374696f6e2e244d6178566f7465727310100002000018f820546865206d6178696d756d206e756d626572206f6620766f7465727320746f20616c6c6f7720696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e00d8205768656e20746865206c696d6974206973207265616368656420746865206e657720766f74657273206172652069676e6f7265642e404d6178566f746573506572566f7465721010640000001090204d6178696d756d206e756d62657273206f6620766f7465732070657220766f7465722e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e01e5080e68456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e7450686173650100e80400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e0000e90804000c3d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e006020416c7761797320736f727465642062792073636f72652e20536e617073686f740000f1080400107020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e384465736972656454617267657473000010040010cc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e40536e617073686f744d657461646174610000d1040400109820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e6469636573010001090400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d617000010405100d0904001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f72650000e40400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e01fd0301dc4034556e7369676e656450686173652c2058020000000000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173652c2058020000000000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c64f81000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e384f6666636861696e5265706561742c20050000000000000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792c20feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e7310100a0000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d617857656967687424400b1089578f2e011366666666666666a61494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100300000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e6564526577617264426173651840000064a7b3b6e00d0000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f73697442797465184000008a5d78456301000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e284d617857696e6e6572731010e803000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e67746810100000360000384d696e65724d617857656967687424400b1089578f2e011366666666666666a600544d696e65724d6178566f746573506572566f746572101010000000003c4d696e65724d617857696e6e6572731010e8030000000111090f1c5374616b696e67011c5374616b696e67a03856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100250204000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e0100f810000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c6564676572000104020015090400104501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e007501204e6f74653a20416c6c2074686520726561647320616e64206d75746174696f6e7320746f20746869732073746f72616765202a4d5553542a20626520646f6e65207468726f75676820746865206d6574686f6473206578706f736564e8206279205b605374616b696e674c6564676572605d20746f20656e73757265206461746120616e64206c6f636b20636f6e73697374656e63792e1450617965650001040500f404000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f72730101040500fc0800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f72730001040500290904004c750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468652d01206163636f756e742773205b604e6f6d696e6174696f6e7351756f74613a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e9020496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e2441637469766545726100002d09040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400105501205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b6572730101080505310971010c0000002078204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e002901204e6f74653a20446570726563617465642073696e6365207631342e205573652060457261496e666f6020696e737465616420746f20776f726b2077697468206578706f73757265732e4c457261735374616b6572734f76657276696577000108050531093509040030b82053756d6d617279206f662076616c696461746f72206578706f73757265206174206120676976656e206572612e007101205468697320636f6e7461696e732074686520746f74616c207374616b6520696e20737570706f7274206f66207468652076616c696461746f7220616e64207468656972206f776e207374616b652e20496e206164646974696f6e2c75012069742063616e20616c736f206265207573656420746f2067657420746865206e756d626572206f66206e6f6d696e61746f7273206261636b696e6720746869732076616c696461746f7220616e6420746865206e756d626572206f666901206578706f73757265207061676573207468657920617265206469766964656420696e746f2e20546865207061676520636f756e742069732075736566756c20746f2064657465726d696e6520746865206e756d626572206f66ac207061676573206f6620726577617264732074686174206e6565647320746f20626520636c61696d65642e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742eac2053686f756c64206f6e6c79206265206163636573736564207468726f7567682060457261496e666f602e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206f766572766965772069732072657475726e65642e48457261735374616b657273436c69707065640101080505310971010c000000409820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e006501204e6f74653a205468697320697320646570726563617465642c2073686f756c64206265207573656420617320726561642d6f6e6c7920616e642077696c6c2062652072656d6f76656420696e20746865206675747572652e3101204e657720604578706f737572656073206172652073746f72656420696e2061207061676564206d616e6e657220696e2060457261735374616b65727350616765646020696e73746561642e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865a82060543a3a4d61784578706f737572655061676553697a65602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049742069732072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e002901204e6f74653a20446570726563617465642073696e6365207631342e205573652060457261496e666f6020696e737465616420746f20776f726b2077697468206578706f73757265732e40457261735374616b657273506167656400010c05050539093d09040018c020506167696e61746564206578706f73757265206f6620612076616c696461746f7220617420676976656e206572612e0071012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e2c207468656e207374617368206163636f756e7420616e642066696e616c6c79d42074686520706167652e2053686f756c64206f6e6c79206265206163636573736564207468726f7567682060457261496e666f602e00d4205468697320697320636c6561726564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e38436c61696d65645265776172647301010805053109ed04040018dc20486973746f7279206f6620636c61696d656420706167656420726577617264732062792065726120616e642076616c696461746f722e0069012054686973206973206b657965642062792065726120616e642076616c696461746f72207374617368207768696368206d61707320746f2074686520736574206f66207061676520696e6465786573207768696368206861766538206265656e20636c61696d65642e00cc2049742069732072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e484572617356616c696461746f72507265667301010805053109fc0800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4c4572617356616c696461746f7252657761726400010405101804000c2d012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510410914000000000008d0205265776172647320666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b6501010405101840000000000000000000000000000000000811012054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100050104000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e0100f810000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405105109040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100590904001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e457261000108050531096109040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505310918040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e73000104050065090400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c617368010104054d096909800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301006d09040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c640000990204000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e01e50401f01830486973746f72794465707468101050000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602c4501206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c2060436c61696d656452657761726473602c2060457261735374616b6572735061676564602c5c2060457261735374616b6572734f76657276696577602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563602d01206974656d20605374616b696e674c65646765722e6c65676163795f636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010030000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10100e00000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e10100a000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e4c4d61784578706f737572655061676553697a651010400000002cb020546865206d6178696d756d2073697a65206f6620656163682060543a3a4578706f7375726550616765602e00290120416e20604578706f737572655061676560206973207765616b6c7920626f756e64656420746f2061206d6178696d756d206f6620604d61784578706f737572655061676553697a656030206e6f6d696e61746f72732e00210120466f72206f6c646572206e6f6e2d7061676564206578706f737572652c206120726577617264207061796f757420776173207265737472696374656420746f2074686520746f70210120604d61784578706f737572655061676553697a6560206e6f6d696e61746f72732e205468697320697320746f206c696d69742074686520692f6f20636f737420666f722074686548206e6f6d696e61746f72207061796f75742e005901204e6f74653a20604d61784578706f737572655061676553697a6560206973207573656420746f20626f756e642060436c61696d6564526577617264736020616e6420697320756e7361666520746f207265647563659020776974686f75742068616e646c696e6720697420696e2061206d6967726174696f6e2e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e017509101c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010025020400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010078040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010079090400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100ed040400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050009050400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405810900040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e010505010901000189091128486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e7300010405108d090400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e676500005d09040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c61737429000000001220547265617375727901205472656173757279183450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051091090400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301009509040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e285370656e64436f756e74010010100000000004a42054686520636f756e74206f66207370656e647320746861742068617665206265656e206d6164652e185370656e647300010405109909040004d0205370656e647320746861742068617665206265656e20617070726f76656420616e64206265696e672070726f6365737365642e011905010d01203050726f706f73616c426f6e64d9011050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d18400000a0dec5adc9353600000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756db9060400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f642c204038000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726ed90110000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964a1092070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e305061796f7574506572696f642c200a000000000000000419012054686520706572696f6420647572696e6720776869636820616e20617070726f766564207472656173757279207370656e642068617320746f20626520636c61696d65642e01a5091320426f756e746965730120426f756e74696573102c426f756e7479436f756e74010010100000000004c0204e756d626572206f6620626f756e74792070726f706f73616c7320746861742068617665206265656e206d6164652e20426f756e746965730001040510a9090400047820426f756e7469657320746861742068617665206265656e206d6164652e48426f756e74794465736372697074696f6e730001040510b1090400048020546865206465736372697074696f6e206f66206561636820626f756e74792e3c426f756e7479417070726f76616c7301009509040004ec20426f756e747920696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f74207965742066756e6465642e0121050111012444426f756e74794465706f736974426173651840000064a7b3b6e00d000000000000000004e82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120626f756e74792070726f706f73616c2e60426f756e74794465706f7369745061796f757444656c61792c204038000000000000045901205468652064656c617920706572696f6420666f72207768696368206120626f756e74792062656e6566696369617279206e65656420746f2077616974206265666f726520636c61696d20746865207061796f75742e48426f756e7479557064617465506572696f642c208013030000000000046c20426f756e7479206475726174696f6e20696e20626c6f636b732e6043757261746f724465706f7369744d756c7469706c696572d9011020a10700101901205468652063757261746f72206465706f7369742069732063616c63756c6174656420617320612070657263656e74616765206f66207468652063757261746f72206665652e0039012054686973206465706f73697420686173206f7074696f6e616c20757070657220616e64206c6f77657220626f756e64732077697468206043757261746f724465706f7369744d61786020616e6454206043757261746f724465706f7369744d696e602e4443757261746f724465706f7369744d6178b9064401000010632d5ec76b0500000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4443757261746f724465706f7369744d696eb9064401000064a7b3b6e00d0000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e48426f756e747956616c75654d696e696d756d18400000f4448291634500000000000000000470204d696e696d756d2076616c756520666f72206120626f756e74792e48446174614465706f73697450657242797465184000008a5d7845630100000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e4c4d6178696d756d526561736f6e4c656e67746810102c0100000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756501b50914344368696c64426f756e7469657301344368696c64426f756e7469657314404368696c64426f756e7479436f756e7401001010000000000480204e756d626572206f6620746f74616c206368696c6420626f756e746965732e4c506172656e744368696c64426f756e74696573010104051010100000000008b0204e756d626572206f66206368696c6420626f756e746965732070657220706172656e7420626f756e74792ee0204d6170206f6620706172656e7420626f756e747920696e64657820746f206e756d626572206f66206368696c6420626f756e746965732e344368696c64426f756e7469657300010805055d09b90904000494204368696c6420626f756e7469657320746861742068617665206265656e2061646465642e5c4368696c64426f756e74794465736372697074696f6e730001040510b1090400049820546865206465736372697074696f6e206f662065616368206368696c642d626f756e74792e4c4368696c6472656e43757261746f72466565730101040510184000000000000000000000000000000000040101205468652063756d756c6174697665206368696c642d626f756e74792063757261746f722066656520666f72206561636820706172656e7420626f756e74792e01250501150108644d61784163746976654368696c64426f756e7479436f756e74101005000000041d01204d6178696d756d206e756d626572206f66206368696c6420626f756e7469657320746861742063616e20626520616464656420746f206120706172656e7420626f756e74792e5c4368696c64426f756e747956616c75654d696e696d756d1840000064a7b3b6e00d00000000000000000488204d696e696d756d2076616c756520666f722061206368696c642d626f756e74792e01c1091520426167734c6973740120426167734c6973740c244c6973744e6f6465730001040500c50904000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c69737442616773000104052cc90904000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01290501190104344261675468726573686f6c6473cd090919210300407a10f35a00006a70ccd4a96000009ef3397fbc660000a907ccd5306d00003d9a67fb0c740000a9bfa275577b0000a6fdf73217830000034f5d91538b0000132445651494000078081001629d00000302f63c45a70000392e6f7fc7b10000f59c23c6f2bc00004ae76aafd1c80000598a64846fd50000129fb243d8e200003f22e1ac18f1000033a4844c3e000100e2e51b895710010076a2c0b0732101006789b407a3330100793ed8d7f646010078131b81815b01000c1cf38a567101004437eeb68a8801009eb56d1434a10100335e9f156abb010067c3c7a545d701003218f340e1f40100de0b230d59140200699c11f5ca350200ad50a2c4565902009ae41c471e7f0200d0244e6745a70200f984ad51f2d10200ace7a7984dff0200a118325b822f0300ffa4c76dbe620300580bfd8532990300a9afce6812d30300109ad81b95100400d9caa519f551040038df488970970400bee1727949e10400cc73401fc62f0500b304f91831830500828bffb4d9db05001235383d143a0600a5b42a473a9e060036662d09ab080700f73aeab4cb790700b87e93d707f20700ffec23c0d1710800b84b0beca2f90800c9dcae7afc89090091752ba867230a0064f1cd4f76c60a003609be76c3730b0078655fdff32b0c00a407f5a5b6ef0c0052f61be7c5bf0d00da71bb70e79c0e000de9127eed870f001477987fb7811000ebee65ef328b11001269fe325ca5120033f8428b3fd113008ba57a13fa0f15001b2b60d0ba6216000d1d37d0c3ca17006c64fa5c6b4919002622c7411de01a00045bb9245c901c00233d83f6c25b1e00c8771c79064420003013fddef64a2200aa8b6e848172240082c096c4b2bc260016a3faebb72b29008296524ae1c12b00a636a865a4812e00d0e2d4509e6d31009c0a9a2796883400e4faafb27fd53700e6e64d367e573b000e4bd66de7113f0088b17db746084300b07def72603e470034de249635b84b00d48bd57b077a5000d0bd20ef5b885500b8f0467801e85a0010f88aee139e60003892925301b066009c95e4fc8e236d00b4126d10dffe730028b43e5976487b00a08a1c7a42078300b09ab083a0428b002846b2f463029400c861a42ade4e9d0050d23d4ae630a700805101a7e1b1b10038e501b2ccdbbc002016527844b9c800388924ba9055d50070ca35a4aebce200805fb1355cfbf0008035685d241f0001a0c3dcd96b361001d07862e87e50210160e852d09f7d330190662c5816cf460110274c3340575b01804be277a22971013082b92dfc5a880180d276075a01a101b0f511592b34bb014031745f580cd701802f6cee59a4f40140ff799b521814026075607d2986350260fde999a60d590200e5e71c91d07e02c0df2575cff2a602a07fd975899ad102a067009d4cf0fe0220dc29a1321f2f0320ff526b0a5562038088caa383c29803e05683fb5c9bd203401dd75d9516100400317e39a06e5104c0b071129de1960480b48c9192b1e00480e8124aad242f05c007ca7082858205007c13c45623db0540836fe869523906c0700f81466c9d0640f09c5017d00707c0e624b301e37807c0332ac78510f10780074ca1e4ca700800d5a9eb8c8bf80800a849588ed3880900804254142c220a80a25170e826c50a00e8d5fafc5e720b801df64e00792a0c80d4fe64f923ee0c006dd038ee19be0d001e90a494209b0e0010bf570e0a860f00da6a9db0b57f1000bf64afd810891100bb5b60cd17a31200f963f3aed6ce1300d5f004766a0d1500e099770202601600103d663bdfc71700de3e2d4158461900ecdbadb2d8dc1a0045c70007e38c1c00b8bde0fc11581e00ba5c2a211a402000407de46dcb462200dea55b03136e2400aaf1f3fcfcb7260014226f63b62629006492803e8fbc2b008486a6c7fc7b2e002cf05fc09b673100da63f7ed32823400f0b13fbdb5ce3700f291c41047503b00422a1a3c3c0a3f002c24212f20004300ac9342d4b6354700cc6ed7a400af4b00c4d022773e70500020017d89f57d5500f86387cef3dc5a008c4c7f7e54926000206207f284a36600cc1e05cb49166d00b42a7a70c4f07300d43a90e278397b0038f461ec53f78200a07264b9b1318b0048c9b3d464f09300007fe998bd3b9d0010058f17921ca70000dfaf7f469cb100e80c880bd6c4bc0058bdcb7ddca0c80038d18d37a03bd50030d55bf01ca1e200704ac01a0fdef0ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01d109163c4e6f6d696e6174696f6e506f6f6c73013c4e6f6d696e6174696f6e506f6f6c735440546f74616c56616c75654c6f636b65640100184000000000000000000000000000000000148c205468652073756d206f662066756e6473206163726f737320616c6c20706f6f6c732e0071012054686973206d69676874206265206c6f77657220627574206e6576657220686967686572207468616e207468652073756d206f662060746f74616c5f62616c616e636560206f6620616c6c205b60506f6f6c4d656d62657273605d590120626563617573652063616c6c696e672060706f6f6c5f77697468647261775f756e626f6e64656460206d696768742064656372656173652074686520746f74616c207374616b65206f662074686520706f6f6c277329012060626f6e6465645f6163636f756e746020776974686f75742061646a757374696e67207468652070616c6c65742d696e7465726e616c2060556e626f6e64696e67506f6f6c6027732e2c4d696e4a6f696e426f6e640100184000000000000000000000000000000000049c204d696e696d756d20616d6f756e7420746f20626f6e6420746f206a6f696e206120706f6f6c2e344d696e437265617465426f6e6401001840000000000000000000000000000000001ca0204d696e696d756d20626f6e6420726571756972656420746f20637265617465206120706f6f6c2e00650120546869732069732074686520616d6f756e74207468617420746865206465706f7369746f72206d7573742070757420617320746865697220696e697469616c207374616b6520696e2074686520706f6f6c2c20617320616e8820696e6469636174696f6e206f662022736b696e20696e207468652067616d65222e0069012054686973206973207468652076616c756520746861742077696c6c20616c7761797320657869737420696e20746865207374616b696e67206c6564676572206f662074686520706f6f6c20626f6e646564206163636f756e7480207768696c6520616c6c206f74686572206163636f756e7473206c656176652e204d6178506f6f6c730000100400086901204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e20706f6f6c7320746861742063616e2065786973742e20496620604e6f6e65602c207468656e20616e20756e626f756e646564206e756d626572206f664420706f6f6c732063616e2065786973742e384d6178506f6f6c4d656d626572730000100400084901204d6178696d756d206e756d626572206f66206d656d6265727320746861742063616e20657869737420696e207468652073797374656d2e20496620604e6f6e65602c207468656e2074686520636f756e74b8206d656d6265727320617265206e6f7420626f756e64206f6e20612073797374656d20776964652062617369732e544d6178506f6f6c4d656d62657273506572506f6f6c0000100400084101204d6178696d756d206e756d626572206f66206d656d626572732074686174206d61792062656c6f6e6720746f20706f6f6c2e20496620604e6f6e65602c207468656e2074686520636f756e74206f66a8206d656d62657273206973206e6f7420626f756e64206f6e20612070657220706f6f6c2062617369732e4c476c6f62616c4d6178436f6d6d697373696f6e0000f804000c690120546865206d6178696d756d20636f6d6d697373696f6e20746861742063616e2062652063686172676564206279206120706f6f6c2e2055736564206f6e20636f6d6d697373696f6e207061796f75747320746f20626f756e64250120706f6f6c20636f6d6d697373696f6e73207468617420617265203e2060476c6f62616c4d6178436f6d6d697373696f6e602c206e65636573736172792069662061206675747572650d012060476c6f62616c4d6178436f6d6d697373696f6e60206973206c6f776572207468616e20736f6d652063757272656e7420706f6f6c20636f6d6d697373696f6e732e2c506f6f6c4d656d626572730001040500d90904000c4020416374697665206d656d626572732e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e54436f756e746572466f72506f6f6c4d656d62657273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c426f6e646564506f6f6c730001040510ed09040004682053746f7261676520666f7220626f6e64656420706f6f6c732e54436f756e746572466f72426f6e646564506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c526577617264506f6f6c730001040510010a04000875012052657761726420706f6f6c732e2054686973206973207768657265207468657265207265776172647320666f72206561636820706f6f6c20616363756d756c6174652e205768656e2061206d656d62657273207061796f7574206973590120636c61696d65642c207468652062616c616e636520636f6d6573206f757420666f207468652072657761726420706f6f6c2e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e54436f756e746572466f72526577617264506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c537562506f6f6c7353746f726167650001040510050a04000819012047726f757073206f6620756e626f6e64696e6720706f6f6c732e20456163682067726f7570206f6620756e626f6e64696e6720706f6f6c732062656c6f6e677320746f2061290120626f6e64656420706f6f6c2c2068656e636520746865206e616d65207375622d706f6f6c732e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e64436f756e746572466f72537562506f6f6c7353746f72616765010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204d65746164617461010104051059010400045c204d6574616461746120666f722074686520706f6f6c2e48436f756e746572466f724d65746164617461010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170284c617374506f6f6c4964010010100000000004d0204576657220696e6372656173696e67206e756d626572206f6620616c6c20706f6f6c73206372656174656420736f206661722e4c52657665727365506f6f6c49644c6f6f6b7570000104050010040010dc20412072657665727365206c6f6f6b75702066726f6d2074686520706f6f6c2773206163636f756e7420696420746f206974732069642e0055012054686973206973206f6e6c79207573656420666f7220736c617368696e672e20496e20616c6c206f7468657220696e7374616e6365732c2074686520706f6f6c20696420697320757365642c20616e6420746865c0206163636f756e7473206172652064657465726d696e6973746963616c6c7920646572697665642066726f6d2069742e74436f756e746572466f7252657665727365506f6f6c49644c6f6f6b7570010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617040436c61696d5065726d697373696f6e73010104050045050400040101204d61702066726f6d206120706f6f6c206d656d626572206163636f756e7420746f207468656972206f7074656420636c61696d207065726d697373696f6e2e012d05011d010c2050616c6c65744964a1092070792f6e6f706c73048420546865206e6f6d696e6174696f6e20706f6f6c27732070616c6c65742069642e484d6178506f696e7473546f42616c616e636508040a301d0120546865206d6178696d756d20706f6f6c20706f696e74732d746f2d62616c616e636520726174696f207468617420616e20606f70656e6020706f6f6c2063616e20686176652e005501205468697320697320696d706f7274616e7420696e20746865206576656e7420736c617368696e672074616b657320706c61636520616e642074686520706f6f6c277320706f696e74732d746f2d62616c616e63657c20726174696f206265636f6d65732064697370726f706f7274696f6e616c2e006501204d6f72656f7665722c20746869732072656c6174657320746f207468652060526577617264436f756e7465726020747970652061732077656c6c2c206173207468652061726974686d65746963206f7065726174696f6e7355012061726520612066756e6374696f6e206f66206e756d626572206f6620706f696e74732c20616e642062792073657474696e6720746869732076616c756520746f20652e672e2031302c20796f7520656e73757265650120746861742074686520746f74616c206e756d626572206f6620706f696e747320696e207468652073797374656d20617265206174206d6f73742031302074696d65732074686520746f74616c5f69737375616e6365206f669c2074686520636861696e2c20696e20746865206162736f6c75746520776f72736520636173652e00490120466f7220612076616c7565206f662031302c20746865207468726573686f6c6420776f756c64206265206120706f6f6c20706f696e74732d746f2d62616c616e636520726174696f206f662031303a312e310120537563682061207363656e6172696f20776f756c6420616c736f20626520746865206571756976616c656e74206f662074686520706f6f6c206265696e672039302520736c61736865642e304d6178556e626f6e64696e67101008000000043d0120546865206d6178696d756d206e756d626572206f662073696d756c74616e656f757320756e626f6e64696e67206368756e6b7320746861742063616e20657869737420706572206d656d6265722e011d0a17245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e636500002c040000184167656e6461010104052c250a0400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b757000010405043d01040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01490501390108344d6178696d756d57656967687424400b00806e87740113cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101000020000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e01350a1820507265696d6167650120507265696d6167650c24537461747573466f720001040630390a0400049020546865207265717565737420737461747573206f66206120676976656e20686173682e4052657175657374537461747573466f720001040630410a0400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104068d094d0a0400000151050145010001510a19204f6666656e63657301204f6666656e636573081c5265706f7274730001040530550a040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e6465780101080505590ac9010400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e0001490100001a1c54785061757365011c54785061757365042c50617573656443616c6c7300010402550184040004b42054686520736574206f662063616c6c73207468617420617265206578706c696369746c79207061757365642e01550501510104284d61784e616d654c656e1010000100000c2501204d6178696d756d206c656e67746820666f722070616c6c6574206e616d6520616e642063616c6c206e616d65205343414c4520656e636f64656420737472696e67206e616d65732e00a820544f4f204c4f4e47204e414d45532057494c4c2042452054524541544544204153205041555345442e015d0a1b20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201002c2000000000000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b6579730100610a040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e4852656365697665644865617274626561747300010805055d0978040004350120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e646578602e38417574686f726564426c6f636b730101080505310910100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e015905015d010440556e7369676e65645072696f726974792c20ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01690a1c204964656e7469747901204964656e746974791c284964656e746974794f6600010405006d0a040010690120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e204669727374206974656d20697320746865e020726567697374726174696f6e2c207365636f6e6420697320746865206163636f756e742773207072696d61727920757365726e616d652e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f660001040200f9050400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500850a44000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e285265676973747261727301008d0a0400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e4c557365726e616d65417574686f72697469657300010405009d0a040004f42041206d6170206f6620746865206163636f756e74732077686f2061726520617574686f72697a656420746f206772616e7420757365726e616d65732e444163636f756e744f66557365726e616d65000104028501000400146d012052657665727365206c6f6f6b75702066726f6d2060757365726e616d656020746f2074686520604163636f756e7449646020746861742068617320726567697374657265642069742e205468652076616c75652073686f756c6465012062652061206b657920696e2074686520604964656e746974794f6660206d61702c20627574206974206d6179206e6f742069662074686520757365722068617320636c6561726564207468656972206964656e746974792e006901204d756c7469706c6520757365726e616d6573206d6179206d617020746f207468652073616d6520604163636f756e744964602c2062757420604964656e746974794f66602077696c6c206f6e6c79206d617020746f206f6e6548207072696d61727920757365726e616d652e4050656e64696e67557365726e616d6573000104028501a50a0400186d0120557365726e616d6573207468617420616e20617574686f7269747920686173206772616e7465642c20627574207468617420746865206163636f756e7420636f6e74726f6c6c657220686173206e6f7420636f6e6669726d65647101207468617420746865792077616e742069742e2055736564207072696d6172696c7920696e2063617365732077686572652074686520604163636f756e744964602063616e6e6f742070726f766964652061207369676e61747572655d012062656361757365207468657920617265206120707572652070726f78792c206d756c74697369672c206574632e20496e206f7264657220746f20636f6e6669726d2069742c20746865792073686f756c642063616c6c6c205b6043616c6c3a3a6163636570745f757365726e616d65605d2e001d01204669727374207475706c65206974656d20697320746865206163636f756e7420616e64207365636f6e642069732074686520616363657074616e636520646561646c696e652e016905018101203042617369634465706f7369741840000064a7b3b6e00d000000000000000004d82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e746974792e2c427974654465706f7369741840000064a7b3b6e00d0000000000000000041d012054686520616d6f756e742068656c64206f6e206465706f7369742070657220656e636f646564206279746520666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f73697418400000d1d21fe5ea6b05000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e344d617852656769737472617273101014000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e6450656e64696e67557365726e616d6545787069726174696f6e2c20c08901000000000004150120546865206e756d626572206f6620626c6f636b732077697468696e207768696368206120757365726e616d65206772616e74206d7573742062652061636365707465642e3c4d61785375666669784c656e677468101007000000048020546865206d6178696d756d206c656e677468206f662061207375666669782e444d6178557365726e616d654c656e67746810102000000004610120546865206d6178696d756d206c656e677468206f66206120757365726e616d652c20696e636c7564696e67206974732073756666697820616e6420616e792073797374656d2d61646465642064656c696d69746572732e01a90a1d1c5574696c69747900011106018901044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01ad0a1e204d756c746973696701204d756c746973696704244d756c7469736967730001080502b10ab50a040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e012906018d010c2c4465706f736974426173651840000068cd83c1fd77050000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f721840000020f84dde700400000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01b90a1f20457468657265756d0120457468657265756d141c50656e64696e670100bd0a040004d02043757272656e74206275696c64696e6720626c6f636b2773207472616e73616374696f6e7320616e642072656365697074732e3043757272656e74426c6f636b0000e10a04000470205468652063757272656e7420457468657265756d20626c6f636b2e3c43757272656e7452656365697074730000f50a0400047c205468652063757272656e7420457468657265756d2072656365697074732e6843757272656e745472616e73616374696f6e53746174757365730000f90a04000488205468652063757272656e74207472616e73616374696f6e2073746174757365732e24426c6f636b4861736801010405d10130800000000000000000000000000000000000000000000000000000000000000000000131060195010001fd0a200c45564d010c45564d10304163636f756e74436f64657301010402990134040000504163636f756e74436f6465734d65746164617461000104029901010b0400003c4163636f756e7453746f72616765730101080202050b30800000000000000000000000000000000000000000000000000000000000000000002053756963696465640001040299018404000001590601c1010001090b212845564d436861696e4964012845564d436861696e4964041c436861696e496401002c2000000000000000000448205468652045564d20636861696e2049442e00000000222844796e616d6963466565012844796e616d6963466565082c4d696e47617350726963650100d10180000000000000000000000000000000000000000000000000000000000000000000445461726765744d696e47617350726963650000d101040000016906000000231c42617365466565011c426173654665650834426173654665655065724761730100d1018040420f00000000000000000000000000000000000000000000000000000000000028456c61737469636974790100d9011048e8010000016d0601cd0100002444486f7466697853756666696369656e7473000171060000010d0b2518436c61696d730118436c61696d731418436c61696d7300010406e1011804000014546f74616c01001840000000000000000000000000000000000030457870697279436f6e6669670000110b040004c82045787069727920626c6f636b20616e64206163636f756e7420746f206465706f73697420657870697265642066756e64731c56657374696e6700010406e1019106040010782056657374696e67207363686564756c6520666f72206120636c61696d2e0d012046697273742062616c616e63652069732074686520746f74616c20616d6f756e7420746861742073686f756c642062652068656c6420666f722076657374696e672ee4205365636f6e642062616c616e636520697320686f77206d7563682073686f756c6420626520756e6c6f636b65642070657220626c6f636b2ecc2054686520626c6f636b206e756d626572206973207768656e207468652076657374696e672073686f756c642073746172742e1c5369676e696e6700010406e101a106040004c0205468652073746174656d656e74206b696e642074686174206d757374206265207369676e65642c20696620616e792e01790601dd010418507265666978346c68436c61696d20544e547320746f20746865206163636f756e743a0001150b2614526f6c65730114526f6c65731c184c65646765720001040200190b0400041901204d61702066726f6d20616c6c2022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e4c4163636f756e74526f6c65734d617070696e670101040200390b04000490204d617070696e67206f66207265736f7572636520746f2062726964676520696e646578404d696e52657374616b696e67426f6e6401001840e803000000000000000000000000000004f420546865206d696e696d756d207265207374616b696e6720626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c652e30546f74616c52657374616b650100184000000000000000000000000000000000049c2054686520746f74616c2072657374616b6520616d6f756e7420696e207468652073797374656d4856616c696461746f724a6f6273496e45726101003d0b040004cc20546865206e756d626572206f66206a6f627320636f6d706c6574656420627920612076616c696461746f7220696e206572615c4572617352657374616b65526577617264506f696e74730101040510410914000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e4441637469766552657374616b657245726100002d0904000cd820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e00d02054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e01a50601e90104484d6178526f6c65735065724163636f756e74101002000000045c204d617820726f6c657320706572206163636f756e742e01410b27104a6f627301104a6f62731c345375626d69747465644a6f6273000108050201027502040000445375626d69747465644a6f6273526f6c65000104052ced01040000304b6e6f776e526573756c747300010805020102450b0400005056616c696461746f724a6f6249644c6f6f6b75700001040500490b0400004056616c696461746f7252657761726473000104050018040000244e6578744a6f62496401002c200000000000000000044c20546865206a6f622d69642073746f726167653c54696d65466565506572426c6f636b01001840000000000000000000000000000000000001c506010502042050616c6c65744964a1092070792f6a6f6273730480206050616c6c657449646020666f7220746865206a6f62732070616c6c65742e014d0b280c446b67010c446b67041c466565496e666f01007d028101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000169070179020001510b29185a6b5361615301185a6b53616153041c466565496e666f0100850201010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016d070181020001550b2a1450726f7879011450726f7879081c50726f786965730101040500590b4400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500690b44000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e017107018902184050726f78794465706f736974426173651840000018e1c095e36c050000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f7218400000e16740659404000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840000018e1c095e36c050000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f7218400000c2cf80ca2809000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e01790b2b504d756c7469417373657444656c65676174696f6e01504d756c7469417373657444656c65676174696f6e1c244f70657261746f727300010405007d0b040004882053746f7261676520666f72206f70657261746f7220696e666f726d6174696f6e2e3043757272656e74526f756e640100101000000000047c2053746f7261676520666f72207468652063757272656e7420726f756e642e1c41745374616b6500010805053109950b040004050120536e617073686f74206f6620636f6c6c61746f722064656c65676174696f6e207374616b6520617420746865207374617274206f662074686520726f756e642e2844656c656761746f72730001040500990b0400048c2053746f7261676520666f722064656c656761746f7220696e666f726d6174696f6e2e2c526577617264506f6f6c730001040518c50b040004742053746f7261676520666f72207468652072657761726420706f6f6c735841737365744c6f6f6b7570526577617264506f6f6c73000104051818040004742053746f7261676520666f72207468652072657761726420706f6f6c734c526577617264436f6e66696753746f726167650000c90b04000499012053746f7261676520666f72207468652072657761726420636f6e66696775726174696f6e2c20776869636820696e636c75646573204150592c2063617020666f72206173736574732c20616e642077686974656c697374656420626c75657072696e74732e0179070195021c544d696e4f70657261746f72426f6e64416d6f756e7418401027000000000000000000000000000004d820546865206d696e696d756d20616d6f756e74206f66207374616b6520726571756972656420666f7220616e206f70657261746f722e444d696e44656c6567617465416d6f756e741840e803000000000000000000000000000004d420546865206d696e696d756d20616d6f756e74206f66207374616b6520726571756972656420666f7220612064656c65676174652e30426f6e644475726174696f6e10100a00000004b020546865206475726174696f6e20666f7220776869636820746865207374616b65206973206c6f636b65642e4c4c656176654f70657261746f727344656c617910100a000000045501204e756d626572206f6620726f756e64732074686174206f70657261746f72732072656d61696e20626f6e646564206265666f726520746865206578697420726571756573742069732065786563757461626c652e544f70657261746f72426f6e644c65737344656c6179101001000000045901204e756d626572206f6620726f756e6473206f70657261746f7220726571756573747320746f2064656372656173652073656c662d7374616b65206d757374207761697420746f2062652065786563757461626c652e504c6561766544656c656761746f727344656c6179101001000000045901204e756d626572206f6620726f756e647320746861742064656c656761746f72732072656d61696e20626f6e646564206265666f726520746865206578697420726571756573742069732065786563757461626c652e5c44656c65676174696f6e426f6e644c65737344656c6179101005000000045501204e756d626572206f6620726f756e647320746861742064656c65676174696f6e20756e7374616b65207265717565737473206d7573742077616974206265666f7265206265696e672065786563757461626c652e01dd0b2c545379676d6141636365737353656772656761746f7201545379676d6141636365737353656772656761746f72043c45787472696e73696341636365737300010405e10b00040008d4204d617070696e67207369676e6174757265206f662065787472696e73696320746f206163636f756e742068617320616363657373a8202870616c6c65745f696e6465782c2065787472696e7369635f6e616d6529203d3e206163636f756e74017d0701a1020001e50b2d505379676d61426173696346656548616e646c657201505379676d61426173696346656548616e646c6572042441737365744665657300010405e90b18040004d8204d617070696e672066756e6769626c6520617373657420696420746f20636f72726573706f6e64696e672066656520616d6f756e7401810701a5020001ed0b2e545379676d6146656548616e646c6572526f7574657201545379676d6146656548616e646c6572526f75746572042c48616e646c65725479706500010405e90bf102040004e82052657475726e20746865204665652068616e646c65722074797065206261736564206f6e20646f6d61696e494420616e64206173736574494401850701ed020001f10b2f645379676d6150657263656e7461676546656548616e646c657201645379676d6150657263656e7461676546656548616e646c6572043041737365744665655261746500010405e90bf50b0400045501204d617070696e672066756e6769626c65206173736574206964207769746820646f6d61696e20696420746f20666565207261746520616e6420697473206c6f77657220626f756e642c207570706572626f756e6401890701f5020001f90b302c5379676d61427269646765012c5379676d6142726964676518344465706f736974436f756e747301010405082c200000000000000000047c204465706f73697420636f756e746572206f66206465737420646f6d61696e20497350617573656401010405087804000c5c2042726964676520506175736520696e64696361746f72a82042726964676520697320756e70617573656420696e697469616c6c792c20756e74696c2070617573652101204166746572206d706320616464726573732073657475702c206272696467652073686f756c642062652070617573656420756e74696c20726561647920746f20756e70617573651c4d706341646472010091075000000000000000000000000000000000000000000450205072652d736574204d5043206164647265737328557365644e6f6e6365730101080505fd0b2c200000000000000000045101204d61726b20776865746865722061206465706f736974206e6f6e63652077617320757365642e205573656420746f206d61726b20657865637574696f6e20737461747573206f6620612070726f706f73616c2e3444657374446f6d61696e49647301010405087804000474204d61726b20737570706f72746564206465737420646f6d61696e49443044657374436861696e4964730001040508d10104000c2901204d61726b2074686520706169727320666f7220737570706f72746564206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e49446d012054686520636861696e4944206973206e6f74206469726563746c79207573656420696e2070616c6c65742c2074686973206d61702069732064657369676e6564206d6f72652061626f7574207265636865636b696e67207468652420646f6d61696e4944018d0701f902145c5472616e73666572526573657276654163636f756e7473010cd5030c00006d6f646c7379676d612f30310000000000000000000000000000000000000000010300a10f06057379676d61000000000000000000000000000000000000000000000000000000060673796775736400000000000000000000000000000000000000000000000000006d6f646c7379676d612f30310100000000000000000000000000000000000000010300511f06057379676d61000000000000000000000000000000000000000000000000000000060370686100000000000000000000000000000000000000000000000000000000006d6f646c7379676d612f3031010000000000000000000000000000000000000004010120427269646765207472616e736665722072657365727665206163636f756e7473206d617070696e6720776974682064657369676e61746564206173736574737044657374566572696679696e67436f6e7472616374416464726573739901506cde2cd82a4f8b74693ff5e194c19ca08c2d1c6808882045495037313220566572696679696e6720636f6e74726163742061646472657373a42054686973206973207573656420696e20454950373132207479706564206461746120646f6d61696e34454950373132436861696e4944d10180d70e000000000000000000000000000000000000000000000000000000000000083c2050616c6c657420436861696e4944a42054686973206973207573656420696e20454950373132207479706564206461746120646f6d61696e44466565526573657276654163636f756e74008064646464646464646464646464646464646464646464646464646464646464640450204665652072657365727665206163636f756e74345265736f7572636550616972730d0cd5030c00000000000000000000000000000000000000000000000000000000000000002000010300a10f06057379676d61000000000000000000000000000000000000000000000000000000060673796775736400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010300511f06057379676d610000000000000000000000000000000000000000000000000000000603706861000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000474204173736574496420616e64205265736f75726365496420706169727301150c31190c042448436865636b4e6f6e5a65726f53656e646572210c8440436865636b5370656356657273696f6e250c1038436865636b547856657273696f6e290c1030436865636b47656e657369732d0c3038436865636b4d6f7274616c697479310c3028436865636b4e6f6e6365390c842c436865636b5765696768743d0c84604368617267655472616e73616374696f6e5061796d656e74410c8444436865636b4d6574616461746148617368450c4101510c", "id": "1" -} \ No newline at end of file +} diff --git a/types/src/metadata/static-latest.ts b/types/src/metadata/static-latest.ts index 72f20f83a..74233d85b 100644 --- a/types/src/metadata/static-latest.ts +++ b/types/src/metadata/static-latest.ts @@ -1 +1 @@ -export default '0x6d6574610e550c000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c7536340000280000062c002c000005060030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c011470686173650103011450686173650001146576656e7450010445000118746f70696373c90101185665633c543e000050085874616e676c655f746573746e65745f72756e74696d653052756e74696d654576656e740001a81853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e000000105375646f04007c016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0002001841737365747304008c017470616c6c65745f6173736574733a3a4576656e743c52756e74696d653e0004002042616c616e636573040090017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009801a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0006001c4772616e64706104009c015470616c6c65745f6772616e6470613a3a4576656e740009001c496e64696365730400b0017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e000a002444656d6f63726163790400b4018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e000b001c436f756e63696c0400c801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e000c001c56657374696e670400cc017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e000d0024456c656374696f6e730400d001a470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4576656e743c52756e74696d653e000e0068456c656374696f6e50726f76696465724d756c746950686173650400dc01d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e000f001c5374616b696e670400f0017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e0010001c53657373696f6e04000901015470616c6c65745f73657373696f6e3a3a4576656e7400110020547265617375727904000d01017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e00130020426f756e7469657304001101017c70616c6c65745f626f756e746965733a3a4576656e743c52756e74696d653e001400344368696c64426f756e7469657304001501019470616c6c65745f6368696c645f626f756e746965733a3a4576656e743c52756e74696d653e00150020426167734c69737404001901018070616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d653e0016003c4e6f6d696e6174696f6e506f6f6c7304001d01019c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a4576656e743c52756e74696d653e001700245363686564756c657204003901018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e00180020507265696d61676504004501017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e001900204f6666656e63657304004901015870616c6c65745f6f6666656e6365733a3a4576656e74001a001c5478506175736504005101017c70616c6c65745f74785f70617573653a3a4576656e743c52756e74696d653e001b0020496d4f6e6c696e6504005d01018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e001c00204964656e7469747904008101017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e001d001c5574696c69747904008901015470616c6c65745f7574696c6974793a3a4576656e74001e00204d756c746973696704008d01017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e001f0020457468657265756d04009501015870616c6c65745f657468657265756d3a3a4576656e740020000c45564d0400c101016870616c6c65745f65766d3a3a4576656e743c52756e74696d653e0021001c426173654665650400cd01015870616c6c65745f626173655f6665653a3a4576656e7400240018436c61696d730400dd01019470616c6c65745f61697264726f705f636c61696d733a3a4576656e743c52756e74696d653e00260014526f6c65730400e901017070616c6c65745f726f6c65733a3a4576656e743c52756e74696d653e002700104a6f627304000502016c70616c6c65745f6a6f62733a3a4576656e743c52756e74696d653e0028000c446b6704007902016870616c6c65745f646b673a3a4576656e743c52756e74696d653e002900185a6b5361615304008102017470616c6c65745f7a6b736161733a3a4576656e743c52756e74696d653e002a001450726f787904008902017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b00504d756c7469417373657444656c65676174696f6e0400950201b470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e3a3a4576656e743c52756e74696d653e002c00545379676d6141636365737353656772656761746f720400a102019c7379676d615f6163636573735f73656772656761746f723a3a4576656e743c52756e74696d653e002d00505379676d61426173696346656548616e646c65720400a50201987379676d615f62617369635f66656568616e646c65723a3a4576656e743c52756e74696d653e002e00545379676d6146656548616e646c6572526f757465720400ed0201a07379676d615f6665655f68616e646c65725f726f757465723a3a4576656e743c52756e74696d653e002f00645379676d6150657263656e7461676546656548616e646c65720400f50201ac7379676d615f70657263656e746167655f66656568616e646c65723a3a4576656e743c52756e74696d653e0030002c5379676d614272696467650400f90201707379676d615f6272696467653a3a4576656e743c52756e74696d653e00310000540c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6e780110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007800000500007c0c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c748001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c648801504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c748001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574800418526573756c740804540184044501640108084f6b040084000000000c45727204006400000100008400000400008804184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100008c0c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964180128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964180128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964180128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964180128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964180128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964180128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964180128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964180128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964180128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964180128543a3a417373657449640001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964180128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964180128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964180128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964180128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000980c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749c0c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574a00134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a0000002a400a400000408a82c00a80c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400ac013c656432353531393a3a5075626c69630000ac0c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000b00c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b40c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657810013c5265666572656e64756d496e6465780001247468726573686f6c64b80134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657810013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114756e74696c2c0144426c6f636b4e756d626572466f723c543e00090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011c543a3a48617368000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657810013c5265666572656e64756d496e646578000110766f7465bc01644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657810012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657810012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572c401344d657461646174614f776e6572043c4d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572c401344d657461646174614f776e6572043c4d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572c401344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572c401344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b80c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000bc0c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465c00110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000c00c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000c40c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040010012450726f70496e646578000100285265666572656e64756d040010013c5265666572656e64756d496e64657800020000c80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564780110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c748001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c748001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d00c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144576656e7404045400011c1c4e65775465726d04012c6e65775f6d656d62657273d401ec5665633c283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c2042616c616e63654f663c543e293e000014450141206e6577207465726d2077697468206e65775f6d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e550174686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e65644501666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e645501736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f2c626567696e20776974682e24456d7074795465726d00010831014e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6dc8604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e34456c656374696f6e4572726f72000204e4496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e304d656d6265724b69636b65640401186d656d6265720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000308410141206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f723060456d7074795465726d602e2452656e6f756e63656404012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400040498536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e4043616e646964617465536c617368656408012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0005103901412063616e6469646174652077617320736c617368656420627920616d6f756e742064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722872756e6e65722d75702e00e44e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e4453656174486f6c646572536c617368656408012c736561745f686f6c6465720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000604350141207365617420686f6c6465722077617320736c617368656420627920616d6f756e74206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d4000002d800d800000408001800dc0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d70757465e0013c456c656374696f6e436f6d707574650001186f726967696e8801504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a6563746564780110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c55017468652073746f72656420736f6c7574696f6e20776173207375626d6974656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d70757465e0013c456c656374696f6e436f6d7075746500011473636f7265e40134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6de8016050686173653c426c6f636b4e756d626572466f723c543e3e000108746fe8016050686173653c426c6f636b4e756d626572466f723c543e3e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e0089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e637900040000e4084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e63650000e8089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e012c01100c4f6666000000185369676e656400010020556e7369676e65640400ec012828626f6f6c2c20426e2900020024456d657267656e637900030000ec00000408782c00f0103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e740404540001441c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640c01147374617368000130543a3a4163636f756e74496400011064657374f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000118616d6f756e7418013042616c616e63654f663c543e0001040d01546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e7420746f20746869732064657374696e6174696f6e2e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6ef8011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e7449640001147072656673fc013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e68536e617073686f74566f7465727353697a65457863656564656404011073697a6510010c753332000e0468566f746572732073697a65206c696d697420726561636865642e6c536e617073686f745461726765747353697a65457863656564656404011073697a6510010c753332000f046c546172676574732073697a65206c696d697420726561636865642e20466f7263654572610401106d6f64650501011c466f7263696e670010047441206e657720666f72636520657261206d6f646520776173207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f4083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e6500040000f80c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000fc083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e0101011c50657262696c6c00011c626c6f636b6564780110626f6f6c00000101000006f8000501083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c776179730003000009010c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d010c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001382050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e4841737365745370656e64417070726f766564180114696e6465781001285370656e64496e64657800012861737365745f6b696e64840130543a3a41737365744b696e64000118616d6f756e74180150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279000138543a3a42656e656669636961727900012876616c69645f66726f6d2c0144426c6f636b4e756d626572466f723c543e0001246578706972655f61742c0144426c6f636b4e756d626572466f723c543e000904b441206e6577206173736574207370656e642070726f706f73616c20686173206265656e20617070726f7665642e4041737365745370656e64566f69646564040114696e6465781001285370656e64496e646578000a0474416e20617070726f766564207370656e642077617320766f696465642e1050616964080114696e6465781001285370656e64496e6465780001287061796d656e745f69648401643c543a3a5061796d6173746572206173205061793e3a3a4964000b044c41207061796d656e742068617070656e65642e345061796d656e744661696c6564080114696e6465781001285370656e64496e6465780001287061796d656e745f69648401643c543a3a5061796d6173746572206173205061793e3a3a4964000c049041207061796d656e74206661696c656420616e642063616e20626520726574726965642e385370656e6450726f636573736564040114696e6465781001285370656e64496e646578000d084d0141207370656e64207761732070726f63657373656420616e642072656d6f7665642066726f6d207468652073746f726167652e204974206d696768742068617665206265656e207375636365737366756c6c797070616964206f72206974206d6179206861766520657870697265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657411010c3c70616c6c65745f626f756e746965731870616c6c6574144576656e7408045400044900012c38426f756e747950726f706f736564040114696e64657810012c426f756e7479496e646578000004504e657720626f756e74792070726f706f73616c2e38426f756e747952656a6563746564080114696e64657810012c426f756e7479496e646578000110626f6e6418013c42616c616e63654f663c542c20493e000104cc4120626f756e74792070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e48426f756e7479426563616d65416374697665040114696e64657810012c426f756e7479496e646578000204b84120626f756e74792070726f706f73616c2069732066756e64656420616e6420626563616d65206163746976652e34426f756e747941776172646564080114696e64657810012c426f756e7479496e64657800012c62656e6566696369617279000130543a3a4163636f756e744964000304944120626f756e7479206973206177617264656420746f20612062656e65666963696172792e34426f756e7479436c61696d65640c0114696e64657810012c426f756e7479496e6465780001187061796f757418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640004048c4120626f756e747920697320636c61696d65642062792062656e65666963696172792e38426f756e747943616e63656c6564040114696e64657810012c426f756e7479496e646578000504584120626f756e74792069732063616e63656c6c65642e38426f756e7479457874656e646564040114696e64657810012c426f756e7479496e646578000604704120626f756e74792065787069727920697320657874656e6465642e38426f756e7479417070726f766564040114696e64657810012c426f756e7479496e646578000704544120626f756e747920697320617070726f7665642e3c43757261746f7250726f706f736564080124626f756e74795f696410012c426f756e7479496e64657800011c63757261746f72000130543a3a4163636f756e744964000804744120626f756e74792063757261746f722069732070726f706f7365642e4443757261746f72556e61737369676e6564040124626f756e74795f696410012c426f756e7479496e6465780009047c4120626f756e74792063757261746f7220697320756e61737369676e65642e3c43757261746f724163636570746564080124626f756e74795f696410012c426f756e7479496e64657800011c63757261746f72000130543a3a4163636f756e744964000a04744120626f756e74792063757261746f722069732061636365707465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657415010c5470616c6c65745f6368696c645f626f756e746965731870616c6c6574144576656e74040454000110144164646564080114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780000046041206368696c642d626f756e74792069732061646465642e1c417761726465640c0114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e64657800012c62656e6566696369617279000130543a3a4163636f756e744964000104ac41206368696c642d626f756e7479206973206177617264656420746f20612062656e65666963696172792e1c436c61696d6564100114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780001187061796f757418013042616c616e63654f663c543e00012c62656e6566696369617279000130543a3a4163636f756e744964000204a441206368696c642d626f756e747920697320636c61696d65642062792062656e65666963696172792e2043616e63656c6564080114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780003047041206368696c642d626f756e74792069732063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d2c0120543a3a53636f7265000108746f2c0120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f72652c0120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65741d010c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144576656e740404540001481c437265617465640801246465706f7369746f72000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000004604120706f6f6c20686173206265656e20637265617465642e18426f6e6465641001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000118626f6e64656418013042616c616e63654f663c543e0001186a6f696e6564780110626f6f6c0001049441206d656d6265722068617320626563616d6520626f6e64656420696e206120706f6f6c2e1c506169644f75740c01186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c49640001187061796f757418013042616c616e63654f663c543e0002048c41207061796f757420686173206265656e206d61646520746f2061206d656d6265722e20556e626f6e6465641401186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e00010c657261100120457261496e64657800032c9841206d656d6265722068617320756e626f6e6465642066726f6d20746865697220706f6f6c2e0039012d206062616c616e6365602069732074686520636f72726573706f6e64696e672062616c616e6365206f6620746865206e756d626572206f6620706f696e7473207468617420686173206265656e5501202072657175657374656420746f20626520756e626f6e646564202874686520617267756d656e74206f66207468652060756e626f6e6460207472616e73616374696f6e292066726f6d2074686520626f6e6465641c2020706f6f6c2e45012d2060706f696e74736020697320746865206e756d626572206f6620706f696e747320746861742061726520697373756564206173206120726573756c74206f66206062616c616e636560206265696e67c0646973736f6c76656420696e746f2074686520636f72726573706f6e64696e6720756e626f6e64696e6720706f6f6c2ee42d206065726160206973207468652065726120696e207768696368207468652062616c616e63652077696c6c20626520756e626f6e6465642e5501496e2074686520616273656e6365206f6620736c617368696e672c2074686573652076616c7565732077696c6c206d617463682e20496e207468652070726573656e6365206f6620736c617368696e672c207468654d016e756d626572206f6620706f696e74732074686174206172652069737375656420696e2074686520756e626f6e64696e6720706f6f6c2077696c6c206265206c657373207468616e2074686520616d6f756e746472657175657374656420746f20626520756e626f6e6465642e2457697468647261776e1001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e0004189c41206d656d626572206861732077697468647261776e2066726f6d20746865697220706f6f6c2e00210154686520676976656e206e756d626572206f662060706f696e7473602068617665206265656e20646973736f6c76656420696e2072657475726e206f66206062616c616e6365602e00590153696d696c617220746f2060556e626f6e64656460206576656e742c20696e2074686520616273656e6365206f6620736c617368696e672c2074686520726174696f206f6620706f696e7420746f2062616c616e63652877696c6c20626520312e2444657374726f79656404011c706f6f6c5f6964100118506f6f6c4964000504684120706f6f6c20686173206265656e2064657374726f7965642e3053746174654368616e67656408011c706f6f6c5f6964100118506f6f6c49640001246e65775f737461746521010124506f6f6c53746174650006047c546865207374617465206f66206120706f6f6c20686173206368616e676564344d656d62657252656d6f76656408011c706f6f6c5f6964100118506f6f6c49640001186d656d626572000130543a3a4163636f756e74496400070c9841206d656d62657220686173206265656e2072656d6f7665642066726f6d206120706f6f6c2e0051015468652072656d6f76616c2063616e20626520766f6c756e74617279202877697468647261776e20616c6c20756e626f6e6465642066756e647329206f7220696e766f6c756e7461727920286b69636b6564292e30526f6c6573557064617465640c0110726f6f748801504f7074696f6e3c543a3a4163636f756e7449643e00011c626f756e6365728801504f7074696f6e3c543a3a4163636f756e7449643e0001246e6f6d696e61746f728801504f7074696f6e3c543a3a4163636f756e7449643e000808550154686520726f6c6573206f66206120706f6f6c2068617665206265656e207570646174656420746f2074686520676976656e206e657720726f6c65732e204e6f7465207468617420746865206465706f7369746f724463616e206e65766572206368616e67652e2c506f6f6c536c617368656408011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e0009040d01546865206163746976652062616c616e6365206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e50556e626f6e64696e67506f6f6c536c61736865640c011c706f6f6c5f6964100118506f6f6c496400010c657261100120457261496e64657800011c62616c616e636518013042616c616e63654f663c543e000a04250154686520756e626f6e6420706f6f6c206174206065726160206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e54506f6f6c436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c496400011c63757272656e742501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e000b04b44120706f6f6c277320636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e60506f6f6c4d6178436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6ef8011c50657262696c6c000c04d44120706f6f6c2773206d6178696d756d20636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e7c506f6f6c436f6d6d697373696f6e4368616e6765526174655570646174656408011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f726174652d01019c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e000d04cc4120706f6f6c277320636f6d6d697373696f6e20606368616e67655f726174656020686173206265656e206368616e6765642e90506f6f6c436f6d6d697373696f6e436c61696d5065726d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001287065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e000e04c8506f6f6c20636f6d6d697373696f6e20636c61696d207065726d697373696f6e20686173206265656e20757064617465642e54506f6f6c436f6d6d697373696f6e436c61696d656408011c706f6f6c5f6964100118506f6f6c4964000128636f6d6d697373696f6e18013042616c616e63654f663c543e000f0484506f6f6c20636f6d6d697373696f6e20686173206265656e20636c61696d65642e644d696e42616c616e63654465666963697441646a757374656408011c706f6f6c5f6964100118506f6f6c4964000118616d6f756e7418013042616c616e63654f663c543e001004c8546f70706564207570206465666963697420696e2066726f7a656e204544206f66207468652072657761726420706f6f6c2e604d696e42616c616e636545786365737341646a757374656408011c706f6f6c5f6964100118506f6f6c4964000118616d6f756e7418013042616c616e63654f663c543e001104bc436c61696d6564206578636573732066726f7a656e204544206f66206166207468652072657761726420706f6f6c2e04584576656e7473206f6620746869732070616c6c65742e2101085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c537461746500010c104f70656e0000001c426c6f636b65640001002844657374726f79696e6700020000250104184f7074696f6e0404540129010108104e6f6e6500000010536f6d65040029010000010000290100000408f800002d01085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7350436f6d6d697373696f6e4368616e676552617465042c426c6f636b4e756d626572012c000801306d61785f696e637265617365f8011c50657262696c6c0001246d696e5f64656c61792c012c426c6f636b4e756d6265720000310104184f7074696f6e0404540135010108104e6f6e6500000010536f6d650400350100000100003501085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7364436f6d6d697373696f6e436c61696d5065726d697373696f6e04244163636f756e74496401000108385065726d697373696f6e6c6573730000001c4163636f756e7404000001244163636f756e7449640001000039010c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e000118726573756c748001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652e3d01000004082c1000410104184f7074696f6e04045401040108104e6f6e6500000010536f6d65040004000001000045010c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657449010c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e644d0101104b696e6400012074696d65736c6f743401384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652e4d0100000310000000080051010c3c70616c6c65745f74785f70617573651870616c6c6574144576656e740404540001082843616c6c50617573656404012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e000004b8546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f77207061757365642e3043616c6c556e70617573656404012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e000104c0546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f7720756e7061757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574550100000408590159010059010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00005d010c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f696461010138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e656901016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e047c54686520604576656e746020656e756d206f6620746869732070616c6c65746101104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c6963000004006501013c737232353531393a3a5075626c6963000065010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d000069010000026d01006d0100000408007101007101082873705f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616c7501011c42616c616e636500010c6f776e7501011c42616c616e63650001186f7468657273790101ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e00007501000006180079010000027d01007d01082873705f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c75657501011c42616c616e6365000081010c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001442c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e38417574686f726974794164646564040124617574686f72697479000130543a3a4163636f756e744964000a047c4120757365726e616d6520617574686f72697479207761732061646465642e40417574686f7269747952656d6f766564040124617574686f72697479000130543a3a4163636f756e744964000b04844120757365726e616d6520617574686f72697479207761732072656d6f7665642e2c557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e000c04744120757365726e616d65207761732073657420666f72206077686f602e38557365726e616d655175657565640c010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e00012865787069726174696f6e2c0144426c6f636b4e756d626572466f723c543e000d0419014120757365726e616d6520776173207175657565642c20627574206077686f60206d75737420616363657074206974207072696f7220746f206065787069726174696f6e602e48507265617070726f76616c4578706972656404011477686f7365000130543a3a4163636f756e744964000e043901412071756575656420757365726e616d6520706173736564206974732065787069726174696f6e20776974686f7574206265696e6720636c61696d656420616e64207761732072656d6f7665642e485072696d617279557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e000f0401014120757365726e616d6520776173207365742061732061207072696d61727920616e642063616e206265206c6f6f6b65642075702066726f6d206077686f602e5c44616e676c696e67557365726e616d6552656d6f76656408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e0010085d01412064616e676c696e6720757365726e616d652028617320696e2c206120757365726e616d6520636f72726573706f6e64696e6720746f20616e206163636f756e742074686174206861732072656d6f766564206974736c6964656e746974792920686173206265656e2072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657485010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000089010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c748001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c748001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749101083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d626572012c000801186865696768742c012c426c6f636b4e756d626572000114696e64657810010c753332000095010c3c70616c6c65745f657468657265756d1870616c6c6574144576656e7400010420457865637574656414011066726f6d9901011048313630000108746f99010110483136300001407472616e73616374696f6e5f686173683001104832353600012c657869745f726561736f6ea101012845786974526561736f6e00012865787472615f6461746134011c5665633c75383e000004c8416e20657468657265756d207472616e73616374696f6e20776173207375636365737366756c6c792065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749901083c7072696d69746976655f74797065731048313630000004009d0101205b75383b2032305d00009d01000003140000000800a1010c2065766d5f636f7265146572726f722845786974526561736f6e0001101c537563636565640400a501012c4578697453756363656564000000144572726f720400a9010124457869744572726f72000100185265766572740400b90101284578697452657665727400020014466174616c0400bd01012445786974466174616c00030000a5010c2065766d5f636f7265146572726f722c457869745375636365656400010c1c53746f707065640000002052657475726e656400010020537569636964656400020000a9010c2065766d5f636f7265146572726f7224457869744572726f7200014038537461636b556e646572666c6f7700000034537461636b4f766572666c6f770001002c496e76616c69644a756d7000020030496e76616c696452616e67650003004444657369676e61746564496e76616c69640004002c43616c6c546f6f446565700005003c437265617465436f6c6c6973696f6e0006004c437265617465436f6e74726163744c696d69740007002c496e76616c6964436f64650400ad0101184f70636f6465000f002c4f75744f664f6666736574000800204f75744f66476173000900244f75744f6646756e64000a002c5043556e646572666c6f77000b002c437265617465456d707479000c00144f746865720400b1010144436f773c277374617469632c207374723e000d00204d61784e6f6e6365000e0000ad010c2065766d5f636f7265186f70636f6465184f70636f64650000040008010875380000b101040c436f7704045401b501000400b501000000b5010000050200b9010c2065766d5f636f7265146572726f72284578697452657665727400010420526576657274656400000000bd010c2065766d5f636f7265146572726f722445786974466174616c000110304e6f74537570706f7274656400000048556e68616e646c6564496e746572727570740001004043616c6c4572726f724173466174616c0400a9010124457869744572726f72000200144f746865720400b1010144436f773c277374617469632c207374723e00030000c1010c2870616c6c65745f65766d1870616c6c6574144576656e740404540001140c4c6f6704010c6c6f67c501010c4c6f670000047c457468657265756d206576656e74732066726f6d20636f6e7472616374732e1c4372656174656404011c616464726573739901011048313630000104b44120636f6e747261637420686173206265656e206372656174656420617420676976656e20616464726573732e34437265617465644661696c656404011c61646472657373990101104831363000020405014120636f6e74726163742077617320617474656d7074656420746f20626520637265617465642c206275742074686520657865637574696f6e206661696c65642e20457865637574656404011c616464726573739901011048313630000304f84120636f6e747261637420686173206265656e206578656375746564207375636365737366756c6c79207769746820737461746573206170706c6965642e3845786563757465644661696c656404011c61646472657373990101104831363000040465014120636f6e747261637420686173206265656e2065786563757465642077697468206572726f72732e20537461746573206172652072657665727465642077697468206f6e6c79206761732066656573206170706c6965642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c5010c20657468657265756d0c6c6f670c4c6f6700000c011c616464726573739901011048313630000118746f70696373c90101245665633c483235363e0001106461746134011442797465730000c9010000023000cd010c3c70616c6c65745f626173655f6665651870616c6c6574144576656e7400010c404e65774261736546656550657247617304010c666565d1010110553235360000003c426173654665654f766572666c6f77000100344e6577456c6173746963697479040128656c6173746963697479d901011c5065726d696c6c000200047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d101083c7072696d69746976655f7479706573105532353600000400d50101205b7536343b20345d0000d501000003040000002c00d9010c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000dd010c5470616c6c65745f61697264726f705f636c61696d731870616c6c6574144576656e740404540001041c436c61696d65640c0124726563697069656e74000130543a3a4163636f756e744964000118736f75726365e10101304d756c746941646472657373000118616d6f756e7418013042616c616e63654f663c543e0000048c536f6d656f6e6520636c61696d656420736f6d65206e617469766520746f6b656e732e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e1010c5470616c6c65745f61697264726f705f636c61696d73147574696c73304d756c7469416464726573730001080c45564d0400e501013c457468657265756d41646472657373000000184e6174697665040000012c4163636f756e744964333200010000e501105470616c6c65745f61697264726f705f636c61696d73147574696c7340657468657265756d5f616464726573733c457468657265756d41646472657373000004009d0101205b75383b2032305d0000e9010c3070616c6c65745f726f6c65731870616c6c6574144576656e7404045400012c30526f6c6541737369676e656408011c6163636f756e74000130543a3a4163636f756e744964000110726f6c65ed010120526f6c65547970650000047c526f6c652061737369676e656420746f207468652076616c696461746f722e2c526f6c6552656d6f76656408011c6163636f756e74000130543a3a4163636f756e744964000110726f6c65ed010120526f6c65547970650001047052656d6f7665642076616c696461746f722066726f6d20726f6c652e1c536c617368656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00020448536c61736865642076616c696461746f722e3850726f66696c65437265617465640c011c6163636f756e74000130543a3a4163636f756e744964000154746f74616c5f70726f66696c655f72657374616b6518013042616c616e63654f663c543e000114726f6c6573f90101345665633c526f6c65547970653e000304504e65772070726f66696c6520637265617465642e3850726f66696c65557064617465640c011c6163636f756e74000130543a3a4163636f756e744964000154746f74616c5f70726f66696c655f72657374616b6518013042616c616e63654f663c543e000114726f6c6573f90101345665633c526f6c65547970653e0004044050726f66696c6520757064617465642e3850726f66696c6544656c6574656404011c6163636f756e74000130543a3a4163636f756e7449640005044050726f66696c652064656c657465642e2c50656e64696e674a6f627304013070656e64696e675f6a6f6273fd0101585665633c28526f6c65547970652c204a6f624964293e000604d050656e64696e67206a6f62732c746861742063616e6e6f74206265206f70746564206f757420617420746865206d6f6d656e742e38526f6c6573526577617264536574040134746f74616c5f7265776172647318013042616c616e63654f663c543e0007048c526f6c657320696e666c6174696f6e20726577617264207061696420666f7220657261345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000804a45468652072652d7374616b657273272072657761726473206172652067657474696e6720706169642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000904bc5468652072652d7374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e5c4d696e52657374616b696e67426f6e645570646174656404011476616c756518013042616c616e63654f663c543e000a04b8546865206d696e2072657374616b696e6720626f6e6420616d6f756e7420686173206265656e2075706461746564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ed010c4474616e676c655f7072696d69746976657314726f6c657320526f6c655479706500010c0c5473730400f10101685468726573686f6c645369676e6174757265526f6c6554797065000000185a6b536161530400f50101545a65726f4b6e6f776c65646765526f6c65547970650001004c4c69676874436c69656e7452656c6179696e6700020000f101104474616e676c655f7072696d69746976657314726f6c65730c747373685468726573686f6c645369676e6174757265526f6c65547970650001305044666e734347474d503231536563703235366b310000005044666e734347474d5032315365637032353672310001004044666e734347474d503231537461726b0002006853696c656e745368617264444b4c533233536563703235366b31000300385a6361736846726f737450323536000400385a6361736846726f7374503338340005004c5a6361736846726f7374536563703235366b31000600585a6361736846726f737452697374726574746f323535000700445a6361736846726f7374456432353531390008003c5a6361736846726f737445643434380009004047656e6e61726f444b47426c73333831000a0018577374735632000b0000f501104474616e676c655f7072696d69746976657314726f6c6573187a6b73616173545a65726f4b6e6f776c65646765526f6c6554797065000108345a6b5361615347726f74683136000000305a6b536161534d61726c696e00010000f901000002ed0100fd01000002010200010200000408ed012c0005020c2c70616c6c65745f6a6f6273186d6f64756c65144576656e7404045400011c304a6f625375626d69747465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73090201484a6f625375626d697373696f6e4f663c543e0000047041206e6577206a6f6220686173206265656e207375626d6974746564484a6f62526573756c745375626d69747465640801186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c65547970650001048c41206e6577206a6f6220726573756c7420686173206265656e207375626d69747465644456616c696461746f7252657761726465640801086964000130543a3a4163636f756e74496400011872657761726418013042616c616e63654f663c543e0002046c76616c696461746f7220686173206561726e6564207265776172642c4a6f62526566756e6465640801186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c6554797065000304a0416e206578697374696e67206a6f62207761732072656d6f76656420616e6420726566756e646564584a6f625061727469636970616e7473557064617465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73750201304a6f62496e666f4f663c543e000404a8546865207061727469636970616e7473206f662061206a6f6220686173206265656e2075706461746564384a6f6252655375626d69747465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73750201304a6f62496e666f4f663c543e0005082d0141206a6f6220686173206265656e2072657375626d69747465642c2074686973206973207768656e20612070686173653120726573756c7420686173206265656e2064697363617264656484616e642061206e657720706861736531206a6f6220697320726571756573746564444a6f62526573756c74457874656e6465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c65547970650001286e65775f6578706972792c0144426c6f636b4e756d626572466f723c543e000604a841206a6f6220726573756c74206578706972792074696d6520686173206265656e20657874656e646564047c54686520604576656e746020656e756d206f6620746869732070616c6c657409020c4474616e676c655f7072696d697469766573106a6f6273344a6f625375626d697373696f6e14244163636f756e74496401002c426c6f636b4e756d626572012c3c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502001001186578706972792c012c426c6f636b4e756d62657200010c74746c2c012c426c6f636b4e756d6265720001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e00012066616c6c6261636b7102013c46616c6c6261636b4f7074696f6e7300000d02085874616e676c655f746573746e65745f72756e74696d653c4d61785061727469636970616e7473000000001102085874616e676c655f746573746e65745f72756e74696d65404d61785375626d697373696f6e4c656e000000001502085874616e676c655f746573746e65745f72756e74696d65584d61784164646974696f6e616c506172616d734c656e0000000019020c4474616e676c655f7072696d697469766573106a6f62731c4a6f625479706510244163636f756e74496401003c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502011838444b4754535350686173654f6e6504001d0201c4444b4754535350686173654f6e654a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74733e00000038444b47545353506861736554776f0400290201fc444b47545353506861736554776f4a6f62547970653c4d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e3e00010040444b475453535068617365546872656504003902015c444b47545353506861736554687265654a6f62547970650002003c444b475453535068617365466f757204003d020158444b475453535068617365466f75724a6f6254797065000300385a6b5361615350686173654f6e6504004102010d015a6b5361615350686173654f6e654a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e3e000400385a6b53616153506861736554776f04005102019c5a6b53616153506861736554776f4a6f62547970653c4d61785375626d697373696f6e4c656e3e000500001d02104474616e676c655f7072696d697469766573106a6f62730c74737354444b4754535350686173654f6e654a6f625479706508244163636f756e74496401003c4d61785061727469636970616e7473010d02001401307061727469636970616e747321020198426f756e6465645665633c4163636f756e7449642c204d61785061727469636970616e74733e0001247468726573686f6c6408010875380001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500012468645f77616c6c6574780110626f6f6c000021020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e0000250200000200002902104474616e676c655f7072696d697469766573106a6f62730c74737354444b47545353506861736554776f4a6f625479706508404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e0115020010013070686173655f6f6e655f69642c01144a6f6249640001287375626d697373696f6e2d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e00013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500002d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000310204184f7074696f6e0404540135020108104e6f6e6500000010536f6d6504003502000001000035020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00003902104474616e676c655f7072696d697469766573106a6f62730c7473735c444b47545353506861736554687265654a6f6254797065000008013070686173655f6f6e655f69642c01144a6f624964000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500003d02104474616e676c655f7072696d697469766573106a6f62730c74737358444b475453535068617365466f75724a6f625479706500000c013070686173655f6f6e655f69642c01144a6f6249640001406e65775f70686173655f6f6e655f69642c01144a6f624964000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500004102104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b5361615350686173654f6e654a6f62547970650c244163636f756e74496401003c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102001001307061727469636970616e747321020198426f756e6465645665633c4163636f756e7449642c204d61785061727469636970616e74733e0001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e00011873797374656d450201785a6b5361615353797374656d3c4d61785375626d697373696f6e4c656e3e000124726f6c655f74797065f50101545a65726f4b6e6f776c65646765526f6c655479706500004502104474616e676c655f7072696d697469766573106a6f6273187a6b73616173305a6b5361615353797374656d04404d61785375626d697373696f6e4c656e01110201041c47726f7468313604004902017c47726f7468313653797374656d3c4d61785375626d697373696f6e4c656e3e000000004902104474616e676c655f7072696d697469766573106a6f6273187a6b736161733447726f7468313653797374656d04404d61785375626d697373696f6e4c656e0111020018011c636972637569744d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e0001286e756d5f696e707574732c010c75363400013c6e756d5f636f6e73747261696e74732c010c75363400012c70726f76696e675f6b65794d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000134766572696679696e675f6b65792d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e0001107761736d4d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e00004d02104474616e676c655f7072696d697469766573106a6f6273187a6b736161732448797065724461746104404d61785375626d697373696f6e4c656e011102010c0c52617704002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000000104950465304002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000100104854545004002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000200005102104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b53616153506861736554776f4a6f625479706504404d61785375626d697373696f6e4c656e011102000c013070686173655f6f6e655f69642c01144a6f62496400011c726571756573745502019c5a6b53616153506861736554776f526571756573743c4d61785375626d697373696f6e4c656e3e000124726f6c655f74797065f50101545a65726f4b6e6f776c65646765526f6c655479706500005502104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b53616153506861736554776f5265717565737404404d61785375626d697373696f6e4c656e01110201041c47726f7468313604005902019447726f7468313650726f7665526571756573743c4d61785375626d697373696f6e4c656e3e000000005902104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c47726f7468313650726f76655265717565737404404d61785375626d697373696f6e4c656e011102001001307075626c69635f696e7075742d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000120615f7368617265735d0201e4426f756e6465645665633c4879706572446174613c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e00012461785f7368617265735d0201e4426f756e6465645665633c4879706572446174613c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e0001287161705f736861726573650201e0426f756e6465645665633c51415053686172653c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e00005d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400610201185665633c543e000061020000024d020065020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540169020453000004006d0201185665633c543e00006902104474616e676c655f7072696d697469766573106a6f6273187a6b7361617320514150536861726504404d61785375626d697373696f6e4c656e011102000c0104614d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000104624d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000104634d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e00006d0200000269020071020c4474616e676c655f7072696d697469766573106a6f62733c46616c6c6261636b4f7074696f6e730001081c44657374726f790000005c526567656e6572617465576974685468726573686f6c64040008010875380001000075020c4474616e676c655f7072696d697469766573106a6f62731c4a6f62496e666f18244163636f756e74496401002c426c6f636b4e756d626572012c1c42616c616e636501183c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502001801146f776e65720001244163636f756e7449640001186578706972792c012c426c6f636b4e756d62657200010c74746c2c012c426c6f636b4e756d6265720001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e00010c66656518011c42616c616e636500012066616c6c6261636b7102013c46616c6c6261636b4f7074696f6e73000079020c2870616c6c65745f646b671870616c6c6574144576656e74040454000108284665655570646174656404007d020130466565496e666f4f663c543e0000049446656520686173206265656e207570646174656420746f20746865206e65772076616c7565284b6579526f74617465640c012c66726f6d5f6a6f625f69642c01144a6f624964000124746f5f6a6f625f69642c01144a6f6249640001247369676e617475726534011c5665633c75383e0001045c4120444b4720686173206265656e20726f74617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747d020c2870616c6c65745f646b671474797065731c466565496e666f041c42616c616e6365011800180120626173655f66656518011c42616c616e6365000144646b675f76616c696461746f725f66656518011c42616c616e63650001447369675f76616c696461746f725f66656518011c42616c616e6365000154726566726573685f76616c696461746f725f66656518011c42616c616e636500015073746f726167655f6665655f7065725f6279746518011c42616c616e636500015473746f726167655f6665655f7065725f626c6f636b18011c42616c616e6365000081020c3470616c6c65745f7a6b736161731870616c6c6574144576656e740404540001042846656555706461746564040085020130466565496e666f4f663c543e0000049446656520686173206265656e207570646174656420746f20746865206e65772076616c7565047c54686520604576656e746020656e756d206f6620746869732070616c6c657485020c3470616c6c65745f7a6b736161731474797065731c466565496e666f041c42616c616e6365011800100120626173655f66656518011c42616c616e636500012c636972637569745f66656518011c42616c616e636500012470726f76655f66656518011c42616c616e636500015073746f726167655f6665655f7065725f6279746518011c42616c616e6365000089020c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c748001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789102010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736830013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d02085874616e676c655f746573746e65745f72756e74696d652450726f7879547970650001100c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002001c5374616b696e67000300009102000005040095020c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c6574144576656e74040454000154384f70657261746f724a6f696e656404010c77686f000130543a3a4163636f756e7449640000045c416e206f70657261746f7220686173206a6f696e65642e604f70657261746f724c656176696e675363686564756c656404010c77686f000130543a3a4163636f756e7449640001048c416e206f70657261746f7220686173207363686564756c656420746f206c656176652e584f70657261746f724c6561766543616e63656c6c656404010c77686f000130543a3a4163636f756e744964000204b8416e206f70657261746f72206861732063616e63656c6c6564207468656972206c6561766520726571756573742e544f70657261746f724c65617665457865637574656404010c77686f000130543a3a4163636f756e744964000304b4416e206f70657261746f7220686173206578656375746564207468656972206c6561766520726571756573742e404f70657261746f72426f6e644d6f726508010c77686f000130543a3a4163636f756e74496400013c6164646974696f6e616c5f626f6e6418013042616c616e63654f663c543e00040498416e206f70657261746f722068617320696e63726561736564207468656972207374616b652e644f70657261746f72426f6e644c6573735363686564756c656408010c77686f000130543a3a4163636f756e744964000138756e7374616b655f616d6f756e7418013042616c616e63654f663c543e000504c8416e206f70657261746f7220686173207363686564756c656420746f206465637265617365207468656972207374616b652e604f70657261746f72426f6e644c657373457865637574656404010c77686f000130543a3a4163636f756e744964000604b8416e206f70657261746f7220686173206578656375746564207468656972207374616b652064656372656173652e644f70657261746f72426f6e644c65737343616e63656c6c656404010c77686f000130543a3a4163636f756e744964000704dc416e206f70657261746f72206861732063616e63656c6c6564207468656972207374616b6520646563726561736520726571756573742e4c4f70657261746f7257656e744f66666c696e6504010c77686f000130543a3a4163636f756e74496400080474416e206f70657261746f722068617320676f6e65206f66666c696e652e484f70657261746f7257656e744f6e6c696e6504010c77686f000130543a3a4163636f756e74496400090470416e206f70657261746f722068617320676f6e65206f6e6c696e652e244465706f73697465640c010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000a046041206465706f73697420686173206265656e206d6164652e445363686564756c656477697468647261770c010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000b047c416e20776974686472617720686173206265656e207363686564756c65642e404578656375746564776974686472617704010c77686f000130543a3a4163636f756e744964000c0478416e20776974686472617720686173206265656e2065786563757465642e4443616e63656c6c6564776974686472617704010c77686f000130543a3a4163636f756e744964000d047c416e20776974686472617720686173206265656e2063616e63656c6c65642e2444656c65676174656410010c77686f000130543a3a4163636f756e7449640001206f70657261746f72000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000e046c412064656c65676174696f6e20686173206265656e206d6164652e685363686564756c656444656c656761746f72426f6e644c65737310010c77686f000130543a3a4163636f756e7449640001206f70657261746f72000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000f04bc412064656c656761746f7220756e7374616b65207265717565737420686173206265656e207363686564756c65642e64457865637574656444656c656761746f72426f6e644c65737304010c77686f000130543a3a4163636f756e744964001004b8412064656c656761746f7220756e7374616b65207265717565737420686173206265656e2065786563757465642e6843616e63656c6c656444656c656761746f72426f6e644c65737304010c77686f000130543a3a4163636f756e744964001104bc412064656c656761746f7220756e7374616b65207265717565737420686173206265656e2063616e63656c6c65642e54496e63656e74697665415059416e644361705365740c011c706f6f6c5f6964180124543a3a506f6f6c496400010c6170799902014c73705f72756e74696d653a3a50657263656e7400010c63617018013042616c616e63654f663c543e00120415014576656e7420656d6974746564207768656e20616e20696e63656e746976652041505920616e6420636170206172652073657420666f7220612072657761726420706f6f6c50426c75657072696e7457686974656c6973746564040130626c75657072696e745f696410010c753332001304e44576656e7420656d6974746564207768656e206120626c75657072696e742069732077686974656c697374656420666f72207265776172647348417373657455706461746564496e506f6f6c10010c77686f000130543a3a4163636f756e74496400011c706f6f6c5f6964180124543a3a506f6f6c496400012061737365745f6964180128543a3a41737365744964000118616374696f6e9d02012c4173736574416374696f6e00140494417373657420686173206265656e207570646174656420746f2072657761726420706f6f6c04744576656e747320656d6974746564206279207468652070616c6c65742e99020c3473705f61726974686d65746963287065725f7468696e67731c50657263656e7400000400080108753800009d02107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c726577617264732c4173736574416374696f6e0001080c4164640000001852656d6f766500010000a1020c5c7379676d615f6163636573735f73656772656761746f721870616c6c6574144576656e74040454000104344163636573734772616e7465640c013070616c6c65745f696e646578080108753800013865787472696e7369635f6e616d6534011c5665633c75383e00010c77686f000130543a3a4163636f756e7449640000088445787472696e73696320616363657373206772616e7420746f20736f6d656f6e65a4617267733a205b70616c6c65745f696e6465782c2065787472696e7369635f6e616d652c2077686f5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a5020c587379676d615f62617369635f66656568616e646c65721870616c6c6574144576656e74040454000104184665655365740c0118646f6d61696e080120446f6d61696e49440001146173736574a902011c41737365744964000118616d6f756e7418011075313238000008704665652073657420666f72206120737065636966696320617373657474617267733a205b646f6d61696e2c2061737365742c20616d6f756e745d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a902102c73746167696e675f78636d0876341461737365741c4173736574496400000400ad0201204c6f636174696f6e0000ad02102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72b10201244a756e6374696f6e730000b102102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400b50201484172633c5b4a756e6374696f6e3b20315d3e0001000858320400d10201484172633c5b4a756e6374696f6e3b20325d3e0002000858330400d50201484172633c5b4a756e6374696f6e3b20335d3e0003000858340400d90201484172633c5b4a756e6374696f6e3b20345d3e0004000858350400dd0201484172633c5b4a756e6374696f6e3b20355d3e0005000858360400e10201484172633c5b4a756e6374696f6e3b20365d3e0006000858370400e50201484172633c5b4a756e6374696f6e3b20375d3e0007000858380400e90201484172633c5b4a756e6374696f6e3b20385d3e00080000b50200000301000000b90200b902102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400bd02010c7533320000002c4163636f756e744964333208011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e00010c6b65799d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040075010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964c9020118426f6479496400011070617274cd020120426f6479506172740008003c476c6f62616c436f6e73656e7375730400c50201244e6574776f726b496400090000bd020000061000c10204184f7074696f6e04045401c5020108104e6f6e6500000010536f6d650400c5020000010000c502102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d6265722c010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f696428010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000c902100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400bd02010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000cd02100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74bd02010c753332000100204672616374696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c75333200040000d10200000302000000b90200d50200000303000000b90200d90200000304000000b90200dd0200000305000000b90200e10200000306000000b90200e50200000307000000b90200e90200000308000000b90200ed020c607379676d615f6665655f68616e646c65725f726f757465721870616c6c6574144576656e740404540001043446656548616e646c65725365740c0118646f6d61696e080120446f6d61696e49440001146173736574a902011c4173736574496400013068616e646c65725f74797065f102013846656548616e646c657254797065000008f05768656e206665652068616e646c6572207761732073657420666f7220612073706563696669632028646f6d61696e2c206173736574292070616972b8617267733a205b646573745f646f6d61696e5f69642c2061737365745f69642c2068616e646c65725f747970655d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f1020c607379676d615f6665655f68616e646c65725f726f757465721870616c6c65743846656548616e646c65725479706500010c3c426173696346656548616e646c65720000005050657263656e7461676546656548616e646c65720001004444796e616d696346656548616e646c657200020000f5020c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c6574144576656e740404540001042846656552617465536574140118646f6d61696e080120446f6d61696e49440001146173736574a902011c41737365744964000140726174655f62617369735f706f696e7410010c75333200013c6665655f6c6f7765725f626f756e641801107531323800013c6665655f75707065725f626f756e6418011075313238000008b046656520736574207261746520666f72206120737065636966696320617373657420616e6420646f6d61696e2501617267733a205b646f6d61696e2c2061737365742c20726174655f62617369735f706f696e742c206665655f6c6f7765725f626f756e642c206665655f75707065725f626f756e645d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f9020c307379676d615f6272696467651870616c6c6574144576656e7404045400012c1c4465706f7369741c0138646573745f646f6d61696e5f6964080120446f6d61696e494400012c7265736f757263655f69640401285265736f7572636549640001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e636500011873656e646572000130543a3a4163636f756e7449640001347472616e736665725f74797065fd0201305472616e73666572547970650001306465706f7369745f6461746134011c5665633c75383e00014068616e646c65725f726573706f6e736534011c5665633c75383e00000cc05768656e20696e697469616c20627269646765207472616e736665722073656e6420746f206465737420646f6d61696e2501617267733a205b646573745f646f6d61696e5f69642c207265736f757263655f69642c206465706f7369745f6e6f6e63652c2073656e6465722c207472616e736665725f747970652c846465706f7369745f646174612c2068616e646c65725f726573706f6e73652c205d4450726f706f73616c457865637574696f6e0c01406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e6365000124646174615f686173680401205b75383b2033325d0001049c5768656e2070726f706f73616c20776173206578656375746564207375636365737366756c6c79584661696c656448616e646c6572457865637574696f6e0c01146572726f7234011c5665633c75383e0001406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e6365000204885768656e2070726f706f73616c20776173206661696c6420746f20657865637574651452657472790c015c6465706f7369745f6f6e5f626c6f636b5f68656967687418011075313238000138646573745f646f6d61696e5f6964080120446f6d61696e494400011873656e646572000130543a3a4163636f756e744964000308b45768656e207573657220697320676f696e6720746f207265747279206120627269646765207472616e73666572dc617267733a205b6465706f7369745f6f6e5f626c6f636b5f6865696768742c20646573745f646f6d61696e5f69642c2073656e6465725d30427269646765506175736564040138646573745f646f6d61696e5f6964080120446f6d61696e4944000408545768656e206272696467652069732070617573656458617267733a205b646573745f646f6d61696e5f69645d38427269646765556e706175736564040138646573745f646f6d61696e5f6964080120446f6d61696e49440005085c5768656e2062726964676520697320756e70617573656458617267733a205b646573745f646f6d61696e5f69645d48526567697374657244657374446f6d61696e0c011873656e646572000130543a3a4163636f756e744964000124646f6d61696e5f6964080120446f6d61696e4944000120636861696e5f6964d101011c436861696e49440006040d015768656e207265676973746572696e672061206e6577206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e494450556e726567697374657244657374446f6d61696e0c011873656e646572000130543a3a4163636f756e744964000124646f6d61696e5f6964080120446f6d61696e4944000120636861696e5f6964d101011c436861696e494400070405015768656e20756e7265676973746572696e672061206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e494430466565436f6c6c65637465641401246665655f7061796572000130543a3a4163636f756e744964000138646573745f646f6d61696e5f6964080120446f6d61696e494400012c7265736f757263655f69640401285265736f7572636549640001286665655f616d6f756e74180110753132380001306665655f61737365745f6964a902011c41737365744964000804705768656e206272696467652066656520697320636f6c6c65637465643c416c6c42726964676550617573656404011873656e646572000130543a3a4163636f756e7449640009046c5768656e20616c6c2062726964676573206172652070617573656444416c6c427269646765556e70617573656404011873656e646572000130543a3a4163636f756e744964000a04745768656e20616c6c20627269646765732061726520756e706175736564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fd0208307379676d615f747261697473305472616e736665725479706500010c4046756e6769626c655472616e736665720000004c4e6f6e46756e6769626c655472616e736665720001003c47656e657269635472616e7366657200020000010308306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000005030000023d0100090308306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ebd02014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65b501016473705f72756e74696d653a3a52756e74696d65537472696e6700000d0308306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6e780110626f6f6c000011030c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b34011c5665633c75383e0000045c536565205b6050616c6c65743a3a72656d61726b605d2e387365745f686561705f706167657304011470616765732c010c7536340001047c536565205b6050616c6c65743a3a7365745f686561705f7061676573605d2e207365745f636f6465040110636f646534011c5665633c75383e00020464536565205b6050616c6c65743a3a7365745f636f6465605d2e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304a0536565205b6050616c6c65743a3a7365745f636f64655f776974686f75745f636865636b73605d2e2c7365745f73746f726167650401146974656d73150301345665633c4b657956616c75653e00040470536565205b6050616c6c65743a3a7365745f73746f72616765605d2e306b696c6c5f73746f726167650401106b6579731d0301205665633c4b65793e00050474536565205b6050616c6c65743a3a6b696c6c5f73746f72616765605d2e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797310010c75333200060470536565205b6050616c6c65743a3a6b696c6c5f707265666978605d2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e00070488536565205b6050616c6c65743a3a72656d61726b5f776974685f6576656e74605d2e44617574686f72697a655f75706772616465040124636f64655f6861736830011c543a3a4861736800090488536565205b6050616c6c65743a3a617574686f72697a655f75706772616465605d2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736830011c543a3a48617368000a04c4536565205b6050616c6c65743a3a617574686f72697a655f757067726164655f776974686f75745f636865636b73605d2e606170706c795f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000b04a4536565205b6050616c6c65743a3a6170706c795f617574686f72697a65645f75706772616465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15030000021903001903000004083434001d03000002340021030c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373250301845065724469737061746368436c6173733c57656967687473506572436c6173733e000025030c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454012903000c01186e6f726d616c290301045400012c6f7065726174696f6e616c29030104540001246d616e6461746f72792903010454000029030c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e7369632d0301384f7074696f6e3c5765696768743e0001246d61785f746f74616c2d0301384f7074696f6e3c5765696768743e00012072657365727665642d0301384f7074696f6e3c5765696768743e00002d0304184f7074696f6e04045401240108104e6f6e6500000010536f6d65040024000001000031030c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178350301545065724469737061746368436c6173733c7533323e000035030c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400003903082873705f776569676874733c52756e74696d6544625765696768740000080110726561642c010c75363400011477726974652c010c75363400003d03082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65b501013452756e74696d65537472696e67000124696d706c5f6e616d65b501013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069734103011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800004103040c436f77040454014503000400450300000045030000024903004903000004084d0310004d0300000308000000080051030c306672616d655f73797374656d1870616c6c6574144572726f720404540001203c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e444e6f7468696e67417574686f72697a6564000604584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400070494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c657455030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400000450536565205b6050616c6c65743a3a736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59030c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000454536565205b6050616c6c65743a3a7375646f605d2e547375646f5f756e636865636b65645f77656967687408011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687424011857656967687400010498536565205b6050616c6c65743a3a7375646f5f756e636865636b65645f776569676874605d2e1c7365745f6b657904010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e00020460536565205b6050616c6c65743a3a7365745f6b6579605d2e1c7375646f5f617308010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030460536565205b6050616c6c65743a3a7375646f5f6173605d2e2872656d6f76655f6b65790004046c536565205b6050616c6c65743a3a72656d6f76655f6b6579605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d03085874616e676c655f746573746e65745f72756e74696d652c52756e74696d6543616c6c0001b01853797374656d0400110301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400550301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e000100105375646f0400590301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000200184173736574730400610301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574732c2052756e74696d653e0004002042616c616e6365730400690301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e00050010426162650400710301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0008001c4772616e6470610400950301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0009001c496e64696365730400c90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e000a002444656d6f63726163790400cd0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e000b001c436f756e63696c0400e90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e000c001c56657374696e670400ed0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e000d0024456c656374696f6e730400f50301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e732c2052756e74696d653e000e0068456c656374696f6e50726f76696465724d756c746950686173650400fd0301fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e000f001c5374616b696e670400e50401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0010001c53657373696f6e0400050501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0011002054726561737572790400190501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e00130020426f756e746965730400210501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426f756e746965732c2052756e74696d653e001400344368696c64426f756e746965730400250501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4368696c64426f756e746965732c2052756e74696d653e00150020426167734c6973740400290501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426167734c6973742c2052756e74696d653e0016003c4e6f6d696e6174696f6e506f6f6c7304002d0501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f6d696e6174696f6e506f6f6c732c2052756e74696d653e001700245363686564756c65720400490501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e00180020507265696d6167650400510501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e0019001c547850617573650400550501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547850617573652c2052756e74696d653e001b0020496d4f6e6c696e650400590501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e001c00204964656e746974790400690501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e001d001c5574696c6974790400110601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e001e00204d756c74697369670400290601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e001f0020457468657265756d0400310601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d2c2052756e74696d653e0020000c45564d0400590601a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d2c2052756e74696d653e0021002844796e616d69634665650400690601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44796e616d69634665652c2052756e74696d653e0023001c4261736546656504006d0601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426173654665652c2052756e74696d653e00240044486f7466697853756666696369656e74730400710601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c486f7466697853756666696369656e74732c2052756e74696d653e00250018436c61696d730400790601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436c61696d732c2052756e74696d653e00260014526f6c65730400a50601a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526f6c65732c2052756e74696d653e002700104a6f62730400c50601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4a6f62732c2052756e74696d653e0028000c446b670400690701a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446b672c2052756e74696d653e002900185a6b5361615304006d0701ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5a6b536161532c2052756e74696d653e002a001450726f78790400710701a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b00504d756c7469417373657444656c65676174696f6e0400790701e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c7469417373657444656c65676174696f6e2c2052756e74696d653e002c00545379676d6141636365737353656772656761746f7204007d0701e90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6141636365737353656772656761746f722c2052756e74696d653e002d00505379676d61426173696346656548616e646c65720400810701e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d61426173696346656548616e646c65722c2052756e74696d653e002e00545379676d6146656548616e646c6572526f757465720400850701e90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6146656548616e646c6572526f757465722c2052756e74696d653e002f00645379676d6150657263656e7461676546656548616e646c65720400890701f90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6150657263656e7461676546656548616e646c65722c2052756e74696d653e0030002c5379676d6142726964676504008d0701c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d614272696467652c2052756e74696d653e0031000061030c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c010869647501014c543a3a41737365744964506172616d6574657200011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e63650000045c536565205b6050616c6c65743a3a637265617465605d2e30666f7263655f63726561746510010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74780110626f6f6c00012c6d696e5f62616c616e636575010128543a3a42616c616e636500010474536565205b6050616c6c65743a3a666f7263655f637265617465605d2e3473746172745f64657374726f7904010869647501014c543a3a41737365744964506172616d6574657200020478536565205b6050616c6c65743a3a73746172745f64657374726f79605d2e4064657374726f795f6163636f756e747304010869647501014c543a3a41737365744964506172616d6574657200030484536565205b6050616c6c65743a3a64657374726f795f6163636f756e7473605d2e4464657374726f795f617070726f76616c7304010869647501014c543a3a41737365744964506172616d6574657200040488536565205b6050616c6c65743a3a64657374726f795f617070726f76616c73605d2e3866696e6973685f64657374726f7904010869647501014c543a3a41737365744964506172616d657465720005047c536565205b6050616c6c65743a3a66696e6973685f64657374726f79605d2e106d696e740c010869647501014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500060454536565205b6050616c6c65743a3a6d696e74605d2e106275726e0c010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500070454536565205b6050616c6c65743a3a6275726e605d2e207472616e736665720c010869647501014c543a3a41737365744964506172616d65746572000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500080464536565205b6050616c6c65743a3a7472616e73666572605d2e4c7472616e736665725f6b6565705f616c6976650c010869647501014c543a3a41737365744964506172616d65746572000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500090490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e38666f7263655f7472616e7366657210010869647501014c543a3a41737365744964506172616d65746572000118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e00011064657374650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e6365000a047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a6508010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000b045c536565205b6050616c6c65743a3a667265657a65605d2e107468617708010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000c0454536565205b6050616c6c65743a3a74686177605d2e30667265657a655f617373657404010869647501014c543a3a41737365744964506172616d65746572000d0474536565205b6050616c6c65743a3a667265657a655f6173736574605d2e28746861775f617373657404010869647501014c543a3a41737365744964506172616d65746572000e046c536565205b6050616c6c65743a3a746861775f6173736574605d2e487472616e736665725f6f776e65727368697008010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e000f048c536565205b6050616c6c65743a3a7472616e736665725f6f776e657273686970605d2e207365745f7465616d10010869647501014c543a3a41737365744964506172616d65746572000118697373756572650301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572650301504163636f756e7449644c6f6f6b75704f663c543e00100464536565205b6050616c6c65743a3a7365745f7465616d605d2e307365745f6d6574616461746110010869647501014c543a3a41737365744964506172616d657465720001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800110474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e38636c6561725f6d6574616461746104010869647501014c543a3a41737365744964506172616d657465720012047c536565205b6050616c6c65743a3a636c6561725f6d65746164617461605d2e48666f7263655f7365745f6d6574616461746114010869647501014c543a3a41737365744964506172616d657465720001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c0013048c536565205b6050616c6c65743a3a666f7263655f7365745f6d65746164617461605d2e50666f7263655f636c6561725f6d6574616461746104010869647501014c543a3a41737365744964506172616d6574657200140494536565205b6050616c6c65743a3a666f7263655f636c6561725f6d65746164617461605d2e48666f7263655f61737365745f73746174757320010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572650301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572650301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e636575010128543a3a42616c616e636500013469735f73756666696369656e74780110626f6f6c00012469735f66726f7a656e780110626f6f6c0015048c536565205b6050616c6c65743a3a666f7263655f61737365745f737461747573605d2e40617070726f76655f7472616e736665720c010869647501014c543a3a41737365744964506172616d6574657200012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500160484536565205b6050616c6c65743a3a617070726f76655f7472616e73666572605d2e3c63616e63656c5f617070726f76616c08010869647501014c543a3a41737365744964506172616d6574657200012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00170480536565205b6050616c6c65743a3a63616e63656c5f617070726f76616c605d2e54666f7263655f63616e63656c5f617070726f76616c0c010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00180498536565205b6050616c6c65743a3a666f7263655f63616e63656c5f617070726f76616c605d2e447472616e736665725f617070726f76656410010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6e650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500190488536565205b6050616c6c65743a3a7472616e736665725f617070726f766564605d2e14746f75636804010869647501014c543a3a41737365744964506172616d65746572001a0458536565205b6050616c6c65743a3a746f756368605d2e18726566756e6408010869647501014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e780110626f6f6c001b045c536565205b6050616c6c65743a3a726566756e64605d2e3c7365745f6d696e5f62616c616e636508010869647501014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c0480536565205b6050616c6c65743a3a7365745f6d696e5f62616c616e6365605d2e2c746f7563685f6f7468657208010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001d0470536565205b6050616c6c65743a3a746f7563685f6f74686572605d2e30726566756e645f6f7468657208010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001e0474536565205b6050616c6c65743a3a726566756e645f6f74686572605d2e14626c6f636b08010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001f0458536565205b6050616c6c65743a3a626c6f636b605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e65030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780110011408496404000001244163636f756e74496400000014496e6465780400bd0201304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d0003002441646472657373323004009d0101205b75383b2032305d0004000069030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f646561746808011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e636500000494536565205b6050616c6c65743a3a7472616e736665725f616c6c6f775f6465617468605d2e38666f7263655f7472616e736665720c0118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e00011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e63650002047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e4c7472616e736665725f6b6565705f616c69766508011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e636500030490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e307472616e736665725f616c6c08011064657374650301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665780110626f6f6c00040474536565205b6050616c6c65743a3a7472616e736665725f616c6c605d2e3c666f7263655f756e7265736572766508010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050480536565205b6050616c6c65743a3a666f7263655f756e72657365727665605d2e40757067726164655f6163636f756e747304010c77686f250201445665633c543a3a4163636f756e7449643e00060484536565205b6050616c6c65743a3a757067726164655f6163636f756e7473605d2e44666f7263655f7365745f62616c616e636508010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656575010128543a3a42616c616e636500080488536565205b6050616c6c65743a3a666f7263655f7365745f62616c616e6365605d2e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e6d03014c41646a7573746d656e74446972656374696f6e00011464656c746175010128543a3a42616c616e6365000904b0536565205b6050616c6c65743a3a666f7263655f61646a7573745f746f74616c5f69737375616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d030c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e6372656173650000002044656372656173650001000071030c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6675030190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6685030140543a3a4b65794f776e657250726f6f6600000490536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e605d2e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6675030190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6685030140543a3a4b65794f776e657250726f6f66000104b4536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e5f756e7369676e6564605d2e48706c616e5f636f6e6669675f6368616e6765040118636f6e666967890301504e657874436f6e66696744657363726970746f720002048c536565205b6050616c6c65743a3a706c616e5f636f6e6669675f6368616e6765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7503084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572017903084964017d03001001206f6666656e6465727d0301084964000110736c6f7481030110536c6f7400013066697273745f686561646572790301184865616465720001347365636f6e645f6865616465727903011848656164657200007903102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d626572012c1048617368000014012c706172656e745f68617368300130486173683a3a4f75747075740001186e756d6265722801184e756d62657200012873746174655f726f6f74300130486173683a3a4f757470757400013c65787472696e736963735f726f6f74300130486173683a3a4f757470757400011864696765737438011844696765737400007d030c4473705f636f6e73656e7375735f626162650c617070185075626c6963000004006501013c737232353531393a3a5075626c696300008103084873705f636f6e73656e7375735f736c6f747310536c6f74000004002c010c75363400008503082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f6465731d0301305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e74000089030c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f72000104085631080104638d030128287536342c2075363429000134616c6c6f7765645f736c6f747391030130416c6c6f776564536c6f7473000100008d03000004082c2c009103084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000095030c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66990301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66c5030140543a3a4b65794f776e657250726f6f6600000490536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e605d2e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66990301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66c5030140543a3a4b65794f776e657250726f6f66000104b4536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e5f756e7369676e6564605d2e306e6f74655f7374616c6c656408011464656c61792c0144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d6265722c0144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a6e6f74655f7374616c6c6564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9903085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480130044e012c000801187365745f69642c0114536574496400013065717569766f636174696f6e9d03014845717569766f636174696f6e3c482c204e3e00009d03085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480130044e012c01081c507265766f74650400a1030139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d69740400b9030141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e00010000a103084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401a8045601a503045301a90300100130726f756e645f6e756d6265722c010c7536340001206964656e74697479a8010849640001146669727374b503011828562c2053290001187365636f6e64b503011828562c2053290000a503084066696e616c6974795f6772616e6470611c507265766f74650804480130044e012c0008012c7461726765745f68617368300104480001347461726765745f6e756d6265722c01044e0000a9030c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400ad030148656432353531393a3a5369676e61747572650000ad030c1c73705f636f72651c65643235353139245369676e617475726500000400b10301205b75383b2036345d0000b103000003400000000800b50300000408a503a90300b903084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401a8045601bd03045301a90300100130726f756e645f6e756d6265722c010c7536340001206964656e74697479a8010849640001146669727374c103011828562c2053290001187365636f6e64c103011828562c2053290000bd03084066696e616c6974795f6772616e64706124507265636f6d6d69740804480130044e012c0008012c7461726765745f68617368300104480001347461726765745f6e756d6265722c01044e0000c10300000408bd03a90300c503081c73705f636f726510566f696400010000c9030c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e64657800000458536565205b6050616c6c65743a3a636c61696d605d2e207472616e7366657208010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e64657800010464536565205b6050616c6c65743a3a7472616e73666572605d2e1066726565040114696e64657810013c543a3a4163636f756e74496e64657800020454536565205b6050616c6c65743a3a66726565605d2e38666f7263655f7472616e736665720c010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65780110626f6f6c0003047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004045c536565205b6050616c6c65743a3a667265657a65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e00011476616c75657501013042616c616e63654f663c543e00000460536565205b6050616c6c65743a3a70726f706f7365605d2e187365636f6e6404012070726f706f73616cbd02012450726f70496e6465780001045c536565205b6050616c6c65743a3a7365636f6e64605d2e10766f74650801247265665f696e646578bd02013c5265666572656e64756d496e646578000110766f7465bc01644163636f756e74566f74653c42616c616e63654f663c543e3e00020454536565205b6050616c6c65743a3a766f7465605d2e40656d657267656e63795f63616e63656c0401247265665f696e64657810013c5265666572656e64756d496e64657800030484536565205b6050616c6c65743a3a656d657267656e63795f63616e63656c605d2e4065787465726e616c5f70726f706f736504012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e00040484536565205b6050616c6c65743a3a65787465726e616c5f70726f706f7365605d2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e000504a8536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f6d616a6f72697479605d2e6065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e000604a4536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f64656661756c74605d2e28666173745f747261636b0c013470726f706f73616c5f6861736830011c543a3a48617368000134766f74696e675f706572696f642c0144426c6f636b4e756d626572466f723c543e00011464656c61792c0144426c6f636b4e756d626572466f723c543e0007046c536565205b6050616c6c65743a3a666173745f747261636b605d2e347665746f5f65787465726e616c04013470726f706f73616c5f6861736830011c543a3a4861736800080478536565205b6050616c6c65743a3a7665746f5f65787465726e616c605d2e4463616e63656c5f7265666572656e64756d0401247265665f696e646578bd02013c5265666572656e64756d496e64657800090488536565205b6050616c6c65743a3a63616e63656c5f7265666572656e64756d605d2e2064656c65676174650c0108746f650301504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6edd030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a0464536565205b6050616c6c65743a3a64656c6567617465605d2e28756e64656c6567617465000b046c536565205b6050616c6c65743a3a756e64656c6567617465605d2e58636c6561725f7075626c69635f70726f706f73616c73000c049c536565205b6050616c6c65743a3a636c6561725f7075626c69635f70726f706f73616c73605d2e18756e6c6f636b040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000d045c536565205b6050616c6c65743a3a756e6c6f636b605d2e2c72656d6f76655f766f7465040114696e64657810013c5265666572656e64756d496e646578000e0470536565205b6050616c6c65743a3a72656d6f76655f766f7465605d2e4472656d6f76655f6f746865725f766f7465080118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c5265666572656e64756d496e646578000f0488536565205b6050616c6c65743a3a72656d6f76655f6f746865725f766f7465605d2e24626c61636b6c69737408013470726f706f73616c5f6861736830011c543a3a4861736800013c6d617962655f7265665f696e646578e103015c4f7074696f6e3c5265666572656e64756d496e6465783e00100468536565205b6050616c6c65743a3a626c61636b6c697374605d2e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578bd02012450726f70496e64657800110480536565205b6050616c6c65743a3a63616e63656c5f70726f706f73616c605d2e307365745f6d657461646174610801146f776e6572c401344d657461646174614f776e65720001286d617962655f68617368e503013c4f7074696f6e3c543a3a486173683e00120474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564080454015d03044801d503010c184c656761637904011068617368300124483a3a4f757470757400000018496e6c696e650400d9030134426f756e646564496e6c696e65000100184c6f6f6b757008011068617368300124483a3a4f757470757400010c6c656e10010c75333200020000d5030c2873705f72756e74696d65187472616974732c426c616b6554776f32353600000000d9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000dd030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000e10304184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000e50304184f7074696f6e04045401300108104e6f6e6500000010536f6d650400300000010000e9030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273250201445665633c543a3a4163636f756e7449643e0001147072696d658801504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c5d03017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64bd02010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64bd02012c4d656d626572436f756e7400012070726f706f73616c5d03017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64bd02010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578bd02013450726f706f73616c496e64657800011c617070726f7665780110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578bd02013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64bd02010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eed030c3870616c6c65745f76657374696e671870616c6c65741043616c6c040454000118107665737400000454536565205b6050616c6c65743a3a76657374605d2e28766573745f6f74686572040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001046c536565205b6050616c6c65743a3a766573745f6f74686572605d2e3c7665737465645f7472616e73666572080118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65f10301b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00020480536565205b6050616c6c65743a3a7665737465645f7472616e73666572605d2e54666f7263655f7665737465645f7472616e736665720c0118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65f10301b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00030498536565205b6050616c6c65743a3a666f7263655f7665737465645f7472616e73666572605d2e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c75333200040480536565205b6050616c6c65743a3a6d657267655f7363686564756c6573605d2e74666f7263655f72656d6f76655f76657374696e675f7363686564756c650801187461726765746503018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001387363686564756c655f696e64657810010c753332000504b8536565205b6050616c6c65743a3a666f7263655f72656d6f76655f76657374696e675f7363686564756c65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef1030c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d626572012c000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b2c012c426c6f636b4e756d6265720000f5030c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c65741043616c6c04045400011810766f7465080114766f746573250201445665633c543a3a4163636f756e7449643e00011476616c75657501013042616c616e63654f663c543e00000454536565205b6050616c6c65743a3a766f7465605d2e3072656d6f76655f766f74657200010474536565205b6050616c6c65743a3a72656d6f76655f766f746572605d2e407375626d69745f63616e64696461637904013c63616e6469646174655f636f756e74bd02010c75333200020484536565205b6050616c6c65743a3a7375626d69745f63616e646964616379605d2e4872656e6f756e63655f63616e64696461637904012872656e6f756e63696e67f903012852656e6f756e63696e670003048c536565205b6050616c6c65743a3a72656e6f756e63655f63616e646964616379605d2e3472656d6f76655f6d656d6265720c010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000128736c6173685f626f6e64780110626f6f6c000138726572756e5f656c656374696f6e780110626f6f6c00040478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e50636c65616e5f646566756e63745f766f746572730801286e756d5f766f7465727310010c75333200012c6e756d5f646566756e637410010c75333200050494536565205b6050616c6c65743a3a636c65616e5f646566756e63745f766f74657273605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef903086470616c6c65745f656c656374696f6e735f70687261676d656e2852656e6f756e63696e6700010c184d656d6265720000002052756e6e657255700001002443616e6469646174650400bd02010c75333200020000fd030c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6e010401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e657373d1040158536f6c7574696f6e4f72536e617073686f7453697a6500000480536565205b6050616c6c65743a3a7375626d69745f756e7369676e6564605d2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265d50401544f7074696f6e3c456c656374696f6e53636f72653e000104b0536565205b6050616c6c65743a3a7365745f6d696e696d756d5f756e747275737465645f73636f7265605d2e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f727473d9040158537570706f7274733c543a3a4163636f756e7449643e000204b8536565205b6050616c6c65743a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e187375626d69740401307261775f736f6c7574696f6e010401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003045c536565205b6050616c6c65743a3a7375626d6974605d2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f74657273e103012c4f7074696f6e3c7533323e0001446d617962655f6d61785f74617267657473e103012c4f7074696f6e3c7533323e00040490536565205b6050616c6c65743a3a676f7665726e616e63655f66616c6c6261636b605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e040453010504000c0120736f6c7574696f6e050401045300011473636f7265e40134456c656374696f6e53636f7265000114726f756e6410010c75333200000504085874616e676c655f746573746e65745f72756e74696d65384e706f73536f6c7574696f6e31360000400118766f74657331090400000118766f74657332150400000118766f74657333290400000118766f74657334350400000118766f74657335410400000118766f746573364d0400000118766f74657337590400000118766f74657338650400000118766f7465733971040000011c766f74657331307d040000011c766f746573313189040000011c766f746573313295040000011c766f7465733133a1040000011c766f7465733134ad040000011c766f7465733135b9040000011c766f7465733136c50400000009040000020d04000d0400000408bd021104001104000006910200150400000219040019040000040cbd021d041104001d04000004081104210400210400000625040025040c3473705f61726974686d65746963287065725f7468696e677318506572553136000004009102010c753136000029040000022d04002d040000040cbd0231041104003104000003020000001d0400350400000239040039040000040cbd023d041104003d04000003030000001d0400410400000245040045040000040cbd0249041104004904000003040000001d04004d0400000251040051040000040cbd0255041104005504000003050000001d040059040000025d04005d040000040cbd0261041104006104000003060000001d0400650400000269040069040000040cbd026d041104006d04000003070000001d0400710400000275040075040000040cbd0279041104007904000003080000001d04007d0400000281040081040000040cbd0285041104008504000003090000001d040089040000028d04008d040000040cbd02910411040091040000030a0000001d0400950400000299040099040000040cbd029d041104009d040000030b0000001d0400a104000002a50400a5040000040cbd02a904110400a9040000030c0000001d0400ad04000002b10400b1040000040cbd02b504110400b5040000030d0000001d0400b904000002bd0400bd040000040cbd02c104110400c1040000030e0000001d0400c504000002c90400c9040000040cbd02cd04110400cd040000030f0000001d0400d104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f74657273bd02010c75333200011c74617267657473bd02010c7533320000d50404184f7074696f6e04045401e40108104e6f6e6500000010536f6d650400e40000010000d904000002dd0400dd040000040800e10400e104084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273d401845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e0000e504103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400017410626f6e6408011476616c75657501013042616c616e63654f663c543e0001147061796565f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00000454536565205b6050616c6c65743a3a626f6e64605d2e28626f6e645f65787472610401386d61785f6164646974696f6e616c7501013042616c616e63654f663c543e0001046c536565205b6050616c6c65743a3a626f6e645f6578747261605d2e18756e626f6e6404011476616c75657501013042616c616e63654f663c543e0002045c536565205b6050616c6c65743a3a756e626f6e64605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c75333200030488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e2076616c69646174650401147072656673fc013856616c696461746f72507265667300040464536565205b6050616c6c65743a3a76616c6964617465605d2e206e6f6d696e61746504011c74617267657473e90401645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00050464536565205b6050616c6c65743a3a6e6f6d696e617465605d2e146368696c6c00060458536565205b6050616c6c65743a3a6368696c6c605d2e247365745f70617965650401147061796565f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00070468536565205b6050616c6c65743a3a7365745f7061796565605d2e387365745f636f6e74726f6c6c65720008047c536565205b6050616c6c65743a3a7365745f636f6e74726f6c6c6572605d2e4c7365745f76616c696461746f725f636f756e7404010c6e6577bd02010c75333200090490536565205b6050616c6c65743a3a7365745f76616c696461746f725f636f756e74605d2e60696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616cbd02010c753332000a04a4536565205b6050616c6c65743a3a696e6372656173655f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f729902011c50657263656e74000b0498536565205b6050616c6c65743a3a7363616c655f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c0478536565205b6050616c6c65743a3a666f7263655f6e6f5f65726173605d2e34666f7263655f6e65775f657261000d0478536565205b6050616c6c65743a3a666f7263655f6e65775f657261605d2e447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573250201445665633c543a3a4163636f756e7449643e000e0488536565205b6050616c6c65743a3a7365745f696e76756c6e657261626c6573605d2e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0478536565205b6050616c6c65743a3a666f7263655f756e7374616b65605d2e50666f7263655f6e65775f6572615f616c7761797300100494536565205b6050616c6c65743a3a666f7263655f6e65775f6572615f616c77617973605d2e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573ed0401205665633c7533323e00110498536565205b6050616c6c65743a3a63616e63656c5f64656665727265645f736c617368605d2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780012047c536565205b6050616c6c65743a3a7061796f75745f7374616b657273605d2e187265626f6e6404011476616c75657501013042616c616e63654f663c543e0013045c536565205b6050616c6c65743a3a7265626f6e64605d2e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014046c536565205b6050616c6c65743a3a726561705f7374617368605d2e106b69636b04010c77686fe90401645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00150454536565205b6050616c6c65743a3a6b69636b605d2e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e64f1040158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e64f1040158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e74f5040134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e74f5040134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c64f9040144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6efd040144436f6e6669674f703c50657262696c6c3e00160490536565205b6050616c6c65743a3a7365745f7374616b696e675f636f6e66696773605d2e2c6368696c6c5f6f746865720401147374617368000130543a3a4163636f756e74496400170470536565205b6050616c6c65743a3a6368696c6c5f6f74686572605d2e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e744964001804ac536565205b6050616c6c65743a3a666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e605d2e487365745f6d696e5f636f6d6d697373696f6e04010c6e6577f8011c50657262696c6c0019048c536565205b6050616c6c65743a3a7365745f6d696e5f636f6d6d697373696f6e605d2e587061796f75745f7374616b6572735f62795f706167650c013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780001107061676510011050616765001a049c536565205b6050616c6c65743a3a7061796f75745f7374616b6572735f62795f70616765605d2e307570646174655f7061796565040128636f6e74726f6c6c6572000130543a3a4163636f756e744964001b0474536565205b6050616c6c65743a3a7570646174655f7061796565605d2e686465707265636174655f636f6e74726f6c6c65725f626174636804012c636f6e74726f6c6c657273010501f4426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d6178436f6e74726f6c6c657273496e4465707265636174696f6e42617463683e001c04ac536565205b6050616c6c65743a3a6465707265636174655f636f6e74726f6c6c65725f6261746368605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee904000002650300ed040000021000f104103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f766500020000f504103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f766500020000f904103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454019902010c104e6f6f700000000c536574040099020104540001001852656d6f766500020000fd04103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f7004045401f8010c104e6f6f700000000c5365740400f80104540001001852656d6f76650002000001050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e000005050c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579730905011c543a3a4b65797300011470726f6f6634011c5665633c75383e00000464536565205b6050616c6c65743a3a7365745f6b657973605d2e2870757267655f6b6579730001046c536565205b6050616c6c65743a3a70757267655f6b657973605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e09050c5874616e676c655f746573746e65745f72756e74696d65186f70617175652c53657373696f6e4b6579730000100110626162657d0301c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011c6772616e647061a801d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65610101d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000110726f6c650d0501c83c526f6c6573206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300000d050c6074616e676c655f63727970746f5f7072696d6974697665731863727970746f185075626c6963000004001105013465636473613a3a5075626c6963000011050c1c73705f636f7265146563647361185075626c696300000400150501805b75383b205055424c49435f4b45595f53455249414c495a45445f53495a455d0000150500000321000000080019050c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001243470726f706f73655f7370656e6408011476616c75657501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a70726f706f73655f7370656e64605d2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800010480536565205b6050616c6c65743a3a72656a6563745f70726f706f73616c605d2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800020484536565205b6050616c6c65743a3a617070726f76655f70726f706f73616c605d2e2c7370656e645f6c6f63616c080118616d6f756e747501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00030470536565205b6050616c6c65743a3a7370656e645f6c6f63616c605d2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800040480536565205b6050616c6c65743a3a72656d6f76655f617070726f76616c605d2e147370656e6410012861737365745f6b696e64840144426f783c543a3a41737365744b696e643e000118616d6f756e7475010150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279000178426f783c42656e65666963696172794c6f6f6b75704f663c542c20493e3e00012876616c69645f66726f6d1d0501644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e00050458536565205b6050616c6c65743a3a7370656e64605d2e187061796f7574040114696e6465781001285370656e64496e6465780006045c536565205b6050616c6c65743a3a7061796f7574605d2e30636865636b5f737461747573040114696e6465781001285370656e64496e64657800070474536565205b6050616c6c65743a3a636865636b5f737461747573605d2e28766f69645f7370656e64040114696e6465781001285370656e64496e6465780008046c536565205b6050616c6c65743a3a766f69645f7370656e64605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1d0504184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c000001000021050c3c70616c6c65745f626f756e746965731870616c6c65741043616c6c0804540004490001243870726f706f73655f626f756e747908011476616c75657501013c42616c616e63654f663c542c20493e00012c6465736372697074696f6e34011c5665633c75383e0000047c536565205b6050616c6c65743a3a70726f706f73655f626f756e7479605d2e38617070726f76655f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e6465780001047c536565205b6050616c6c65743a3a617070726f76655f626f756e7479605d2e3c70726f706f73655f63757261746f720c0124626f756e74795f6964bd02012c426f756e7479496e64657800011c63757261746f72650301504163636f756e7449644c6f6f6b75704f663c543e00010c6665657501013c42616c616e63654f663c542c20493e00020480536565205b6050616c6c65743a3a70726f706f73655f63757261746f72605d2e40756e61737369676e5f63757261746f72040124626f756e74795f6964bd02012c426f756e7479496e64657800030484536565205b6050616c6c65743a3a756e61737369676e5f63757261746f72605d2e386163636570745f63757261746f72040124626f756e74795f6964bd02012c426f756e7479496e6465780004047c536565205b6050616c6c65743a3a6163636570745f63757261746f72605d2e3061776172645f626f756e7479080124626f756e74795f6964bd02012c426f756e7479496e64657800012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00050474536565205b6050616c6c65743a3a61776172645f626f756e7479605d2e30636c61696d5f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e64657800060474536565205b6050616c6c65743a3a636c61696d5f626f756e7479605d2e30636c6f73655f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e64657800070474536565205b6050616c6c65743a3a636c6f73655f626f756e7479605d2e50657874656e645f626f756e74795f657870697279080124626f756e74795f6964bd02012c426f756e7479496e64657800011872656d61726b34011c5665633c75383e00080494536565205b6050616c6c65743a3a657874656e645f626f756e74795f657870697279605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e25050c5470616c6c65745f6368696c645f626f756e746965731870616c6c65741043616c6c04045400011c406164645f6368696c645f626f756e74790c0140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800011476616c75657501013042616c616e63654f663c543e00012c6465736372697074696f6e34011c5665633c75383e00000484536565205b6050616c6c65743a3a6164645f6368696c645f626f756e7479605d2e3c70726f706f73655f63757261746f72100140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800011c63757261746f72650301504163636f756e7449644c6f6f6b75704f663c543e00010c6665657501013042616c616e63654f663c543e00010480536565205b6050616c6c65743a3a70726f706f73655f63757261746f72605d2e386163636570745f63757261746f72080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780002047c536565205b6050616c6c65743a3a6163636570745f63757261746f72605d2e40756e61737369676e5f63757261746f72080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800030484536565205b6050616c6c65743a3a756e61737369676e5f63757261746f72605d2e4861776172645f6368696c645f626f756e74790c0140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e0004048c536565205b6050616c6c65743a3a61776172645f6368696c645f626f756e7479605d2e48636c61696d5f6368696c645f626f756e7479080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780005048c536565205b6050616c6c65743a3a636c61696d5f6368696c645f626f756e7479605d2e48636c6f73655f6368696c645f626f756e7479080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780006048c536565205b6050616c6c65743a3a636c6f73655f6368696c645f626f756e7479605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e29050c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c08045400044900010c1472656261670401286469736c6f6361746564650301504163636f756e7449644c6f6f6b75704f663c543e00000458536565205b6050616c6c65743a3a7265626167605d2e3c7075745f696e5f66726f6e745f6f6604011c6c696768746572650301504163636f756e7449644c6f6f6b75704f663c543e00010480536565205b6050616c6c65743a3a7075745f696e5f66726f6e745f6f66605d2e547075745f696e5f66726f6e745f6f665f6f7468657208011c68656176696572650301504163636f756e7449644c6f6f6b75704f663c543e00011c6c696768746572650301504163636f756e7449644c6f6f6b75704f663c543e00020498536565205b6050616c6c65743a3a7075745f696e5f66726f6e745f6f665f6f74686572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d050c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c65741043616c6c04045400015c106a6f696e080118616d6f756e747501013042616c616e63654f663c543e00011c706f6f6c5f6964100118506f6f6c496400000454536565205b6050616c6c65743a3a6a6f696e605d2e28626f6e645f657874726104011465787472613105015c426f6e6445787472613c42616c616e63654f663c543e3e0001046c536565205b6050616c6c65743a3a626f6e645f6578747261605d2e30636c61696d5f7061796f757400020474536565205b6050616c6c65743a3a636c61696d5f7061796f7574605d2e18756e626f6e640801386d656d6265725f6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e000140756e626f6e64696e675f706f696e74737501013042616c616e63654f663c543e0003045c536565205b6050616c6c65743a3a756e626f6e64605d2e58706f6f6c5f77697468647261775f756e626f6e64656408011c706f6f6c5f6964100118506f6f6c49640001486e756d5f736c617368696e675f7370616e7310010c7533320004049c536565205b6050616c6c65743a3a706f6f6c5f77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640801386d656d6265725f6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e0001486e756d5f736c617368696e675f7370616e7310010c75333200050488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e18637265617465100118616d6f756e747501013042616c616e63654f663c543e000110726f6f74650301504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72650301504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572650301504163636f756e7449644c6f6f6b75704f663c543e0006045c536565205b6050616c6c65743a3a637265617465605d2e4c6372656174655f776974685f706f6f6c5f6964140118616d6f756e747501013042616c616e63654f663c543e000110726f6f74650301504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72650301504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572650301504163636f756e7449644c6f6f6b75704f663c543e00011c706f6f6c5f6964100118506f6f6c496400070490536565205b6050616c6c65743a3a6372656174655f776974685f706f6f6c5f6964605d2e206e6f6d696e61746508011c706f6f6c5f6964100118506f6f6c496400012876616c696461746f7273250201445665633c543a3a4163636f756e7449643e00080464536565205b6050616c6c65743a3a6e6f6d696e617465605d2e247365745f737461746508011c706f6f6c5f6964100118506f6f6c4964000114737461746521010124506f6f6c537461746500090468536565205b6050616c6c65743a3a7365745f7374617465605d2e307365745f6d6574616461746108011c706f6f6c5f6964100118506f6f6c49640001206d6574616461746134011c5665633c75383e000a0474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e2c7365745f636f6e666967731801346d696e5f6a6f696e5f626f6e6435050158436f6e6669674f703c42616c616e63654f663c543e3e00013c6d696e5f6372656174655f626f6e6435050158436f6e6669674f703c42616c616e63654f663c543e3e0001246d61785f706f6f6c7339050134436f6e6669674f703c7533323e00012c6d61785f6d656d6265727339050134436f6e6669674f703c7533323e0001506d61785f6d656d626572735f7065725f706f6f6c39050134436f6e6669674f703c7533323e000154676c6f62616c5f6d61785f636f6d6d697373696f6e3d050144436f6e6669674f703c50657262696c6c3e000b0470536565205b6050616c6c65743a3a7365745f636f6e66696773605d2e307570646174655f726f6c657310011c706f6f6c5f6964100118506f6f6c49640001206e65775f726f6f7441050158436f6e6669674f703c543a3a4163636f756e7449643e0001346e65775f6e6f6d696e61746f7241050158436f6e6669674f703c543a3a4163636f756e7449643e00012c6e65775f626f756e63657241050158436f6e6669674f703c543a3a4163636f756e7449643e000c0474536565205b6050616c6c65743a3a7570646174655f726f6c6573605d2e146368696c6c04011c706f6f6c5f6964100118506f6f6c4964000d0458536565205b6050616c6c65743a3a6368696c6c605d2e40626f6e645f65787472615f6f746865720801186d656d626572650301504163636f756e7449644c6f6f6b75704f663c543e00011465787472613105015c426f6e6445787472613c42616c616e63654f663c543e3e000e0484536565205b6050616c6c65743a3a626f6e645f65787472615f6f74686572605d2e507365745f636c61696d5f7065726d697373696f6e0401287065726d697373696f6e4505013c436c61696d5065726d697373696f6e000f0494536565205b6050616c6c65743a3a7365745f636c61696d5f7065726d697373696f6e605d2e48636c61696d5f7061796f75745f6f746865720401146f74686572000130543a3a4163636f756e7449640010048c536565205b6050616c6c65743a3a636c61696d5f7061796f75745f6f74686572605d2e387365745f636f6d6d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001386e65775f636f6d6d697373696f6e2501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e0011047c536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e605d2e487365745f636f6d6d697373696f6e5f6d617808011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6ef8011c50657262696c6c0012048c536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f6d6178605d2e687365745f636f6d6d697373696f6e5f6368616e67655f7261746508011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f726174652d01019c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e001304ac536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f6368616e67655f72617465605d2e40636c61696d5f636f6d6d697373696f6e04011c706f6f6c5f6964100118506f6f6c496400140484536565205b6050616c6c65743a3a636c61696d5f636f6d6d697373696f6e605d2e4c61646a7573745f706f6f6c5f6465706f73697404011c706f6f6c5f6964100118506f6f6c496400150490536565205b6050616c6c65743a3a61646a7573745f706f6f6c5f6465706f736974605d2e7c7365745f636f6d6d697373696f6e5f636c61696d5f7065726d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001287065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e001604c0536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f636c61696d5f7065726d697373696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324426f6e644578747261041c42616c616e6365011801082c4672656542616c616e6365040018011c42616c616e63650000001c52657761726473000100003505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200003905085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200003d05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f7004045401f8010c104e6f6f700000000c5365740400f80104540001001852656d6f7665000200004105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540100010c104e6f6f700000000c5365740400000104540001001852656d6f7665000200004505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c436c61696d5065726d697373696f6e000110305065726d697373696f6e6564000000585065726d697373696f6e6c657373436f6d706f756e64000100585065726d697373696f6e6c6573735769746864726177000200445065726d697373696f6e6c657373416c6c0003000049050c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e2c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000464536565205b6050616c6c65743a3a7363686564756c65605d2e1863616e63656c0801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001045c536565205b6050616c6c65743a3a63616e63656c605d2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e2c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0002047c536565205b6050616c6c65743a3a7363686564756c655f6e616d6564605d2e3063616e63656c5f6e616d656404010869640401205461736b4e616d6500030474536565205b6050616c6c65743a3a63616e63656c5f6e616d6564605d2e387363686564756c655f616674657210011461667465722c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004047c536565205b6050616c6c65743a3a7363686564756c655f6166746572605d2e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d6500011461667465722c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050494536565205b6050616c6c65743a3a7363686564756c655f6e616d65645f6166746572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d0504184f7074696f6e040454013d010108104e6f6e6500000010536f6d6504003d01000001000051050c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000114346e6f74655f707265696d616765040114627974657334011c5665633c75383e00000478536565205b6050616c6c65743a3a6e6f74655f707265696d616765605d2e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a4861736800010480536565205b6050616c6c65743a3a756e6e6f74655f707265696d616765605d2e40726571756573745f707265696d6167650401106861736830011c543a3a4861736800020484536565205b6050616c6c65743a3a726571756573745f707265696d616765605d2e48756e726571756573745f707265696d6167650401106861736830011c543a3a486173680003048c536565205b6050616c6c65743a3a756e726571756573745f707265696d616765605d2e38656e737572655f75706461746564040118686173686573c90101305665633c543a3a486173683e0004047c536565205b6050616c6c65743a3a656e737572655f75706461746564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e55050c3c70616c6c65745f74785f70617573651870616c6c65741043616c6c04045400010814706175736504012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e00000458536565205b6050616c6c65743a3a7061757365605d2e1c756e70617573650401146964656e745501015052756e74696d6543616c6c4e616d654f663c543e00010460536565205b6050616c6c65743a3a756e7061757365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59050c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c040454000104246865617274626561740801246865617274626561745d0501704865617274626561743c426c6f636b4e756d626572466f723c543e3e0001247369676e6174757265610501bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500000468536565205b6050616c6c65743a3a686561727462656174605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d05084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572012c00100130626c6f636b5f6e756d6265722c012c426c6f636b4e756d62657200013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c75333200006105104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e61747572650000040065050148737232353531393a3a5369676e6174757265000065050c1c73705f636f72651c73723235353139245369676e617475726500000400b10301205b75383b2036345d000069050c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c040454000158346164645f72656769737472617204011c6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a6164645f726567697374726172605d2e307365745f6964656e74697479040110696e666f6d05016c426f783c543a3a4964656e74697479496e666f726d6174696f6e3e00010474536565205b6050616c6c65743a3a7365745f6964656e74697479605d2e207365745f7375627304011073756273f50501645665633c28543a3a4163636f756e7449642c2044617461293e00020464536565205b6050616c6c65743a3a7365745f73756273605d2e38636c6561725f6964656e746974790003047c536565205b6050616c6c65743a3a636c6561725f6964656e74697479605d2e44726571756573745f6a756467656d656e740801247265675f696e646578bd020138526567697374726172496e64657800011c6d61785f6665657501013042616c616e63654f663c543e00040488536565205b6050616c6c65743a3a726571756573745f6a756467656d656e74605d2e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e6465780005047c536565205b6050616c6c65743a3a63616e63656c5f72657175657374605d2e1c7365745f666565080114696e646578bd020138526567697374726172496e64657800010c6665657501013042616c616e63654f663c543e00060460536565205b6050616c6c65743a3a7365745f666565605d2e387365745f6163636f756e745f6964080114696e646578bd020138526567697374726172496e64657800010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e0007047c536565205b6050616c6c65743a3a7365745f6163636f756e745f6964605d2e287365745f6669656c6473080114696e646578bd020138526567697374726172496e6465780001186669656c64732c0129013c543a3a4964656e74697479496e666f726d6174696f6e206173204964656e74697479496e666f726d6174696f6e50726f76696465723e3a3a0a4669656c64734964656e7469666965720008046c536565205b6050616c6c65743a3a7365745f6669656c6473605d2e4470726f766964655f6a756467656d656e741001247265675f696e646578bd020138526567697374726172496e646578000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e74fd05015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e7469747930011c543a3a4861736800090488536565205b6050616c6c65743a3a70726f766964655f6a756467656d656e74605d2e346b696c6c5f6964656e74697479040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000a0478536565205b6050616c6c65743a3a6b696c6c5f6964656e74697479605d2e1c6164645f73756208010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000110646174617905011044617461000b0460536565205b6050616c6c65743a3a6164645f737562605d2e2872656e616d655f73756208010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000110646174617905011044617461000c046c536565205b6050616c6c65743a3a72656e616d655f737562605d2e2872656d6f76655f73756204010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000d046c536565205b6050616c6c65743a3a72656d6f76655f737562605d2e20717569745f737562000e0464536565205b6050616c6c65743a3a717569745f737562605d2e586164645f757365726e616d655f617574686f726974790c0124617574686f72697479650301504163636f756e7449644c6f6f6b75704f663c543e00011873756666697834011c5665633c75383e000128616c6c6f636174696f6e10010c753332000f049c536565205b6050616c6c65743a3a6164645f757365726e616d655f617574686f72697479605d2e6472656d6f76655f757365726e616d655f617574686f72697479040124617574686f72697479650301504163636f756e7449644c6f6f6b75704f663c543e001004a8536565205b6050616c6c65743a3a72656d6f76655f757365726e616d655f617574686f72697479605d2e407365745f757365726e616d655f666f720c010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000120757365726e616d6534011c5665633c75383e0001247369676e6174757265010601704f7074696f6e3c543a3a4f6666636861696e5369676e61747572653e00110484536565205b6050616c6c65743a3a7365745f757365726e616d655f666f72605d2e3c6163636570745f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e00120480536565205b6050616c6c65743a3a6163636570745f757365726e616d65605d2e5c72656d6f76655f657870697265645f617070726f76616c040120757365726e616d658501012c557365726e616d653c543e001304a0536565205b6050616c6c65743a3a72656d6f76655f657870697265645f617070726f76616c605d2e507365745f7072696d6172795f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e00140494536565205b6050616c6c65743a3a7365745f7072696d6172795f757365726e616d65605d2e6072656d6f76655f64616e676c696e675f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e001504a4536565205b6050616c6c65743a3a72656d6f76655f64616e676c696e675f757365726e616d65605d2e04704964656e746974792070616c6c6574206465636c61726174696f6e2e6d050c3c70616c6c65745f6964656e74697479186c6567616379304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c71050190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617979050110446174610001146c6567616c790501104461746100010c776562790501104461746100011072696f747905011044617461000114656d61696c790501104461746100013c7067705f66696e6765727072696e74f10501404f7074696f6e3c5b75383b2032305d3e000114696d616765790501104461746100011c747769747465727905011044617461000071050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017505045300000400ed0501185665633c543e0000750500000408790579050079050c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e65000000105261773004007d0500000100105261773104008105000002001052617732040085050000030010526177330400890500000400105261773404004400000500105261773504008d05000006001052617736040091050000070010526177370400950500000800105261773804004d030000090010526177390400990500000a0014526177313004009d0500000b001452617731310400a10500000c001452617731320400a50500000d001452617731330400a90500000e001452617731340400ad0500000f001452617731350400b1050000100014526177313604004d01000011001452617731370400b505000012001452617731380400b905000013001452617731390400bd050000140014526177323004009d01000015001452617732310400c105000016001452617732320400c505000017001452617732330400c905000018001452617732340400cd05000019001452617732350400d10500001a001452617732360400d50500001b001452617732370400d90500001c001452617732380400dd0500001d001452617732390400e10500001e001452617733300400e50500001f001452617733310400e90500002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c536861546872656532353604000400002500007d050000030000000008008105000003010000000800850500000302000000080089050000030300000008008d050000030500000008009105000003060000000800950500000307000000080099050000030900000008009d050000030a0000000800a1050000030b0000000800a5050000030c0000000800a9050000030d0000000800ad050000030e0000000800b1050000030f0000000800b505000003110000000800b905000003120000000800bd05000003130000000800c105000003150000000800c505000003160000000800c905000003170000000800cd05000003180000000800d105000003190000000800d5050000031a0000000800d9050000031b0000000800dd050000031c0000000800e1050000031d0000000800e5050000031e0000000800e9050000031f0000000800ed05000002750500f10504184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d010000010000f505000002f90500f9050000040800790500fd050c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000010604184f7074696f6e0404540105060108104e6f6e6500000010536f6d650400050600000100000506082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400ad030148656432353531393a3a5369676e61747572650000001c53723235353139040065050148737232353531393a3a5369676e617475726500010014456364736104000906014065636473613a3a5369676e61747572650002000009060c1c73705f636f7265146563647361245369676e6174757265000004000d06017c5b75383b205349474e41545552455f53455249414c495a45445f53495a455d00000d0600000341000000080011060c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a6261746368605d2e3461735f64657269766174697665080114696e6465789102010c75313600011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00010478536565205b6050616c6c65743a3a61735f64657269766174697665605d2e2462617463685f616c6c04011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00020468536565205b6050616c6c65743a3a62617463685f616c6c605d2e2c64697370617463685f617308012461735f6f726967696e19060154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030470536565205b6050616c6c65743a3a64697370617463685f6173605d2e2c666f7263655f626174636804011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00040470536565205b6050616c6c65743a3a666f7263655f6261746368605d2e2c776974685f77656967687408011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687424011857656967687400050470536565205b6050616c6c65743a3a776974685f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15060000025d03001906085874616e676c655f746573746e65745f72756e74696d65304f726967696e43616c6c65720001101873797374656d04001d0601746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400210601010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e000c0020457468657265756d04002506015c70616c6c65745f657468657265756d3a3a4f726967696e00200010566f69640400c50301410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f6964000300001d060c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200002106084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200002506083c70616c6c65745f657468657265756d245261774f726967696e0001044c457468657265756d5472616e73616374696f6e040099010110483136300000000029060c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000494536565205b6050616c6c65743a3a61735f6d756c74695f7468726573686f6c645f31605d2e2061735f6d756c74691401247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e742d0601904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687424011857656967687400010464536565205b6050616c6c65743a3a61735f6d756c7469605d2e40617070726f76655f61735f6d756c74691401247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e742d0601904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687424011857656967687400020484536565205b6050616c6c65743a3a617070726f76655f61735f6d756c7469605d2e3c63616e63656c5f61735f6d756c74691001247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d00030480536565205b6050616c6c65743a3a63616e63656c5f61735f6d756c7469605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d0604184f7074696f6e0404540191010108104e6f6e6500000010536f6d6504009101000001000031060c3c70616c6c65745f657468657265756d1870616c6c65741043616c6c040454000104207472616e7361637404012c7472616e73616374696f6e3506012c5472616e73616374696f6e00000464536565205b6050616c6c65743a3a7472616e73616374605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e35060c20657468657265756d2c7472616e73616374696f6e345472616e73616374696f6e563200010c184c65676163790400390601444c65676163795472616e73616374696f6e0000001c45495032393330040049060148454950323933305472616e73616374696f6e0001001c45495031353539040055060148454950313535395472616e73616374696f6e0002000039060c20657468657265756d2c7472616e73616374696f6e444c65676163795472616e73616374696f6e00001c01146e6f6e6365d1010110553235360001246761735f7072696365d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e70757434011442797465730001247369676e6174757265410601505472616e73616374696f6e5369676e617475726500003d060c20657468657265756d2c7472616e73616374696f6e445472616e73616374696f6e416374696f6e0001081043616c6c04009901011048313630000000184372656174650001000041060c20657468657265756d2c7472616e73616374696f6e505472616e73616374696f6e5369676e617475726500000c010476450601545472616e73616374696f6e5265636f76657279496400010472300110483235360001047330011048323536000045060c20657468657265756d2c7472616e73616374696f6e545472616e73616374696f6e5265636f766572794964000004002c010c753634000049060c20657468657265756d2c7472616e73616374696f6e48454950323933305472616e73616374696f6e00002c0120636861696e5f69642c010c7536340001146e6f6e6365d1010110553235360001246761735f7072696365d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e707574340114427974657300012c6163636573735f6c6973744d0601284163636573734c6973740001306f64645f795f706172697479780110626f6f6c0001047230011048323536000104733001104832353600004d0600000251060051060c20657468657265756d2c7472616e73616374696f6e384163636573734c6973744974656d000008011c616464726573739901011c4164647265737300013073746f726167655f6b657973c90101245665633c483235363e000055060c20657468657265756d2c7472616e73616374696f6e48454950313535395472616e73616374696f6e0000300120636861696e5f69642c010c7536340001146e6f6e6365d1010110553235360001606d61785f7072696f726974795f6665655f7065725f676173d10101105532353600013c6d61785f6665655f7065725f676173d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e707574340114427974657300012c6163636573735f6c6973744d0601284163636573734c6973740001306f64645f795f706172697479780110626f6f6c00010472300110483235360001047330011048323536000059060c2870616c6c65745f65766d1870616c6c65741043616c6c04045400011020776974686472617708011c61646472657373990101104831363000011476616c756518013042616c616e63654f663c543e00000464536565205b6050616c6c65743a3a7769746864726177605d2e1063616c6c240118736f7572636599010110483136300001187461726765749901011048313630000114696e70757434011c5665633c75383e00011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e00010454536565205b6050616c6c65743a3a63616c6c605d2e18637265617465200118736f757263659901011048313630000110696e697434011c5665633c75383e00011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e0002045c536565205b6050616c6c65743a3a637265617465605d2e1c63726561746532240118736f757263659901011048313630000110696e697434011c5665633c75383e00011073616c743001104832353600011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e00030460536565205b6050616c6c65743a3a63726561746532605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d0604184f7074696f6e04045401d1010108104e6f6e6500000010536f6d650400d101000001000061060000026506006506000004089901c9010069060c4870616c6c65745f64796e616d69635f6665651870616c6c65741043616c6c040454000104646e6f74655f6d696e5f6761735f70726963655f746172676574040118746172676574d101011055323536000004a8536565205b6050616c6c65743a3a6e6f74655f6d696e5f6761735f70726963655f746172676574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d060c3c70616c6c65745f626173655f6665651870616c6c65741043616c6c040454000108507365745f626173655f6665655f7065725f67617304010c666565d10101105532353600000494536565205b6050616c6c65743a3a7365745f626173655f6665655f7065725f676173605d2e387365745f656c6173746963697479040128656c6173746963697479d901011c5065726d696c6c0001047c536565205b6050616c6c65743a3a7365745f656c6173746963697479605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71060c6470616c6c65745f686f746669785f73756666696369656e74731870616c6c65741043616c6c04045400010478686f746669785f696e635f6163636f756e745f73756666696369656e7473040124616464726573736573750601245665633c483136303e000004bc536565205b6050616c6c65743a3a686f746669785f696e635f6163636f756e745f73756666696369656e7473605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750600000299010079060c5470616c6c65745f61697264726f705f636c61696d731870616c6c65741043616c6c04045400011814636c61696d0c0110646573747d0601504f7074696f6e3c4d756c7469416464726573733e0001187369676e65727d0601504f7074696f6e3c4d756c7469416464726573733e0001247369676e6174757265810601544d756c7469416464726573735369676e617475726500000458536565205b6050616c6c65743a3a636c61696d605d2e286d696e745f636c61696d10010c77686fe10101304d756c74694164647265737300011476616c756518013042616c616e63654f663c543e00014076657374696e675f7363686564756c658d060179014f7074696f6e3c426f756e6465645665633c0a2842616c616e63654f663c543e2c2042616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e292c20543a3a0a4d617856657374696e675363686564756c65733e2c3e00012473746174656d656e749d0601544f7074696f6e3c53746174656d656e744b696e643e0001046c536565205b6050616c6c65743a3a6d696e745f636c61696d605d2e30636c61696d5f617474657374100110646573747d0601504f7074696f6e3c4d756c7469416464726573733e0001187369676e65727d0601504f7074696f6e3c4d756c7469416464726573733e0001247369676e6174757265810601544d756c7469416464726573735369676e617475726500012473746174656d656e7434011c5665633c75383e00020474536565205b6050616c6c65743a3a636c61696d5f617474657374605d2e286d6f76655f636c61696d08010c6f6c64e10101304d756c74694164647265737300010c6e6577e10101304d756c7469416464726573730004046c536565205b6050616c6c65743a3a6d6f76655f636c61696d605d2e5c666f7263655f7365745f6578706972795f636f6e6669670801306578706972795f626c6f636b2c0144426c6f636b4e756d626572466f723c543e00011064657374e10101304d756c746941646472657373000504a0536565205b6050616c6c65743a3a666f7263655f7365745f6578706972795f636f6e666967605d2e30636c61696d5f7369676e6564040110646573747d0601504f7074696f6e3c4d756c7469416464726573733e00060474536565205b6050616c6c65743a3a636c61696d5f7369676e6564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7d0604184f7074696f6e04045401e1010108104e6f6e6500000010536f6d650400e101000001000081060c5470616c6c65745f61697264726f705f636c61696d73147574696c73544d756c7469416464726573735369676e61747572650001080c45564d04008506013845636473615369676e6174757265000000184e6174697665040089060140537232353531395369676e6174757265000100008506105470616c6c65745f61697264726f705f636c61696d73147574696c7340657468657265756d5f616464726573733845636473615369676e6174757265000004000d0601205b75383b2036355d000089060c5470616c6c65745f61697264726f705f636c61696d73147574696c7340537232353531395369676e617475726500000400650501245369676e617475726500008d0604184f7074696f6e0404540191060108104e6f6e6500000010536f6d6504009106000001000091060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019506045300000400990601185665633c543e000095060000040c18182c0099060000029506009d0604184f7074696f6e04045401a1060108104e6f6e6500000010536f6d650400a1060000010000a106085470616c6c65745f61697264726f705f636c61696d733453746174656d656e744b696e640001081c526567756c6172000000105361666500010000a5060c3070616c6c65745f726f6c65731870616c6c65741043616c6c040454000120386372656174655f70726f66696c6508011c70726f66696c65a906012850726f66696c653c543e00014c6d61785f6163746976655f7365727669636573e103012c4f7074696f6e3c7533323e0000047c536565205b6050616c6c65743a3a6372656174655f70726f66696c65605d2e387570646174655f70726f66696c6504013c757064617465645f70726f66696c65a906012850726f66696c653c543e0001047c536565205b6050616c6c65743a3a7570646174655f70726f66696c65605d2e3864656c6574655f70726f66696c650002047c536565205b6050616c6c65743a3a64656c6574655f70726f66696c65605d2e146368696c6c00030458536565205b6050616c6c65743a3a6368696c6c605d2e30756e626f6e645f66756e6473040118616d6f756e747501013042616c616e63654f663c543e00040474536565205b6050616c6c65743a3a756e626f6e645f66756e6473605d2e4477697468647261775f756e626f6e64656400050488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780006047c536565205b6050616c6c65743a3a7061796f75745f7374616b657273605d2e587365745f6d696e5f72657374616b696e675f626f6e640401486d696e5f72657374616b696e675f626f6e6418013042616c616e63654f663c543e0007049c536565205b6050616c6c65743a3a7365745f6d696e5f72657374616b696e675f626f6e64605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea9060c3070616c6c65745f726f6c65731c70726f66696c651c50726f66696c650404540001082c496e646570656e64656e740400ad060170496e646570656e64656e7452657374616b6550726f66696c653c543e000000185368617265640400c106015c53686172656452657374616b6550726f66696c653c543e00010000ad060c3070616c6c65745f726f6c65731c70726f66696c6564496e646570656e64656e7452657374616b6550726f66696c65040454000004011c7265636f726473b10601b0426f756e6465645665633c5265636f72643c543e2c20543a3a4d6178526f6c65735065724163636f756e743e0000b1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b506045300000400bd0601185665633c543e0000b5060c3070616c6c65745f726f6c65731c70726f66696c65185265636f72640404540000080110726f6c65ed010120526f6c6554797065000118616d6f756e74b90601504f7074696f6e3c42616c616e63654f663c543e3e0000b90604184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000bd06000002b50600c1060c3070616c6c65745f726f6c65731c70726f66696c655053686172656452657374616b6550726f66696c65040454000008011c7265636f726473b10601b0426f756e6465645665633c5265636f72643c543e2c20543a3a4d6178526f6c65735065724163636f756e743e000118616d6f756e7418013042616c616e63654f663c543e0000c5060c2c70616c6c65745f6a6f6273186d6f64756c651043616c6c040454000120287375626d69745f6a6f6204010c6a6f62090201484a6f625375626d697373696f6e4f663c543e0000046c536565205b6050616c6c65743a3a7375626d69745f6a6f62605d2e447375626d69745f6a6f625f726573756c740c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f624964000118726573756c74c90601384a6f62526573756c744f663c543e00010488536565205b6050616c6c65743a3a7375626d69745f6a6f625f726573756c74605d2e4077697468647261775f7265776172647300020484536565205b6050616c6c65743a3a77697468647261775f72657761726473605d2e647265706f72745f696e6163746976655f76616c696461746f72140124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f62496400012476616c696461746f72000130543a3a4163636f756e74496400011c6f6666656e63652907015056616c696461746f724f6666656e6365547970650001287369676e6174757265731d0301305665633c5665633c75383e3e000304a8536565205b6050616c6c65743a3a7265706f72745f696e6163746976655f76616c696461746f72605d2e507365745f7065726d69747465645f63616c6c65720c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f6249640001506e65775f7065726d69747465645f63616c6c6572000130543a3a4163636f756e74496400040494536565205b6050616c6c65743a3a7365745f7065726d69747465645f63616c6c6572605d2e307365745f74696d655f66656504011c6e65775f66656518013042616c616e63654f663c543e00050474536565205b6050616c6c65743a3a7365745f74696d655f666565605d2e487375626d69745f6d69736265686176696f7204012c6d69736265686176696f722d0701544d69736265686176696f725375626d697373696f6e0006048c536565205b6050616c6c65743a3a7375626d69745f6d69736265686176696f72605d2e54657874656e645f6a6f625f726573756c745f74746c0c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f624964000124657874656e645f62792c0144426c6f636b4e756d626572466f723c543e00070498536565205b6050616c6c65743a3a657874656e645f6a6f625f726573756c745f74746c605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9060c4474616e676c655f7072696d697469766573106a6f6273244a6f62526573756c74183c4d61785061727469636970616e7473010d02244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106284d6178446174614c656e01d5062c4d617850726f6f664c656e01d906584d61784164646974696f6e616c506172616d734c656e01150201182c444b4750686173654f6e650400dd06011901444b475453534b65795375626d697373696f6e526573756c743c4d61784b65794c656e2c204d61785061727469636970616e74732c204d61785369676e61747572654c656e3e0000002c444b47506861736554776f0400fd06015501444b475453535369676e6174757265526573756c743c4d6178446174614c656e2c204d61784b65794c656e2c204d61785369676e61747572654c656e2c0a4d61784164646974696f6e616c506172616d734c656e3e00010034444b4750686173655468726565040005070158444b475453534b657952656672657368526573756c7400020030444b475068617365466f757204000907012d01444b475453534b6579526f746174696f6e526573756c743c4d61784b65794c656e2c204d61785369676e61747572654c656e2c204d61784164646974696f6e616c506172616d734c656e3e000300385a6b5361615350686173654f6e6504000d0701905a6b5361615343697263756974526573756c743c4d61785061727469636970616e74733e000400385a6b53616153506861736554776f0400190701785a6b5361615350726f6f66526573756c743c4d617850726f6f664c656e3e00050000cd06085874616e676c655f746573746e65745f72756e74696d65244d61784b65794c656e00000000d106085874616e676c655f746573746e65745f72756e74696d653c4d61785369676e61747572654c656e00000000d506085874616e676c655f746573746e65745f72756e74696d65284d6178446174614c656e00000000d906085874616e676c655f746573746e65745f72756e74696d652c4d617850726f6f664c656e00000000dd06104474616e676c655f7072696d697469766573106a6f62730c74737364444b475453534b65795375626d697373696f6e526573756c740c244d61784b65794c656e01cd063c4d61785061727469636970616e7473010d023c4d61785369676e61747572654c656e01d106001801407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500010c6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e0001307061727469636970616e7473e90601d8426f756e6465645665633c426f756e6465645665633c75382c204d61784b65794c656e3e2c204d61785061727469636970616e74733e0001287369676e617475726573f10601f0426f756e6465645665633c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e2c204d61785061727469636970616e74733e0001247468726573686f6c6408010875380000e106104474616e676c655f7072696d697469766573106a6f62730c747373584469676974616c5369676e6174757265536368656d65000130384563647361536563703235366b31000000384563647361536563703235367231000100284563647361537461726b0002002c5363686e6f7272503235360003002c5363686e6f727250333834000400405363686e6f7272536563703235366b31000500385363686e6f7272537232353531390006004c5363686e6f727252697374726574746f323535000700385363686e6f727245643235353139000800305363686e6f72724564343438000900385363686e6f7272546170726f6f74000a0018426c73333831000b0000e5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000e9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e506045300000400ed0601185665633c543e0000ed06000002e50600f1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f506045300000400f90601185665633c543e0000f5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000f906000002f50600fd06104474616e676c655f7072696d697469766573106a6f62730c74737354444b475453535369676e6174757265526573756c7410284d6178446174614c656e01d506244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106584d61784164646974696f6e616c506172616d734c656e011502001801407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d650001106461746101070168426f756e6465645665633c75382c204d6178446174614c656e3e0001247369676e6174757265f506017c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e000134766572696679696e675f6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e00013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e000001070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00000507104474616e676c655f7072696d697469766573106a6f62730c74737358444b475453534b657952656672657368526573756c7400000401407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500000907104474616e676c655f7072696d697469766573106a6f62730c7473735c444b475453534b6579526f746174696f6e526573756c740c244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106584d61784164646974696f6e616c506172616d734c656e0115020020013070686173655f6f6e655f69642c01144a6f6249640001406e65775f70686173655f6f6e655f69642c01144a6f62496400011c6e65775f6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e00010c6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e0001247369676e6174757265f506017c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e0001407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e00000d07104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c5a6b5361615343697263756974526573756c74043c4d61785061727469636970616e7473010d02000801186a6f625f69642c01144a6f6249640001307061727469636970616e7473110701a8426f756e6465645665633c65636473613a3a5075626c69632c204d61785061727469636970616e74733e000011070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011105045300000400150701185665633c543e000015070000021105001907104474616e676c655f7072696d697469766573106a6f6273187a6b73616173445a6b5361615350726f6f66526573756c74042c4d617850726f6f664c656e01d90601082041726b776f726b7304001d07018041726b776f726b7350726f6f66526573756c743c4d617850726f6f664c656e3e00000018436972636f6d040025070178436972636f6d50726f6f66526573756c743c4d617850726f6f664c656e3e000100001d07104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c41726b776f726b7350726f6f66526573756c74042c4d617850726f6f664c656e01d9060004011470726f6f662107016c426f756e6465645665633c75382c204d617850726f6f664c656e3e000021070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00002507104474616e676c655f7072696d697469766573106a6f6273187a6b7361617344436972636f6d50726f6f66526573756c74042c4d617850726f6f664c656e01d9060004011470726f6f662107016c426f756e6465645665633c75382c204d617850726f6f664c656e3e000029070c4474616e676c655f7072696d697469766573106a6f62735056616c696461746f724f6666656e63655479706500011028496e616374697669747900000064496e76616c69645369676e61747572655375626d69747465640001004c52656a656374656456616c6964416374696f6e00020054417070726f766564496e76616c6964416374696f6e000300002d070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72544d69736265686176696f725375626d697373696f6e0000100124726f6c655f74797065ed010120526f6c65547970650001206f6666656e646572150501205b75383b2033335d0001186a6f625f69642c01144a6f6249640001346a757374696669636174696f6e310701604d69736265686176696f724a757374696669636174696f6e000031070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72604d69736265686176696f724a757374696669636174696f6e00010818444b4754535304003507014c444b475453534a757374696669636174696f6e000000185a6b5361615304006507014c5a6b536161534a757374696669636174696f6e0001000035070c4474616e676c655f7072696d6974697665732c6d69736265686176696f724c444b475453534a757374696669636174696f6e0001082c44666e734347474d50323104003907019864666e735f6367676d7032313a3a44666e734347474d5032314a757374696669636174696f6e000000285a4361736846726f73740400590701907a636173685f66726f73743a3a5a4361736846726f73744a757374696669636174696f6e000100003907104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d7032316044666e734347474d5032314a757374696669636174696f6e00010c184b657967656e0c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e410701344b657967656e41626f72746564000000284b6579526566726573680c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e4d0701444b65795265667265736841626f727465640001001c5369676e696e670c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e550701385369676e696e6741626f72746564000200003d070000021505004107104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231344b657967656e41626f727465640001104c496e76616c69644465636f6d6d69746d656e74080118726f756e6431450701485369676e6564526f756e644d65737361676500011c726f756e643261450701485369676e6564526f756e644d6573736167650000004c496e76616c69645363686e6f727250726f6f6608011c726f756e6432614907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e6433450701485369676e6564526f756e644d6573736167650001006446656c646d616e566572696669636174696f6e4661696c656408011c726f756e643261450701485369676e6564526f756e644d65737361676500011c726f756e643262450701485369676e6564526f756e644d6573736167650002003c496e76616c69644461746153697a6504011c726f756e643261450701485369676e6564526f756e644d6573736167650003000045070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72485369676e6564526f756e644d65737361676500000c011873656e6465729102010c75313600011c6d65737361676534011c5665633c75383e0001247369676e617475726534011c5665633c75383e000049070000024507004d07104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231444b65795265667265736841626f727465640001244c496e76616c69644465636f6d6d69746d656e74080118726f756e6431450701485369676e6564526f756e644d657373616765000118726f756e6432450701485369676e6564526f756e644d6573736167650000004c496e76616c69645363686e6f727250726f6f660001003c496e76616c69644d6f6450726f6f660c0118726561736f6e51070148496e76616c696450726f6f66526561736f6e000118726f756e64324907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e6433450701485369676e6564526f756e644d6573736167650002003c496e76616c696446616350726f6f6600030074496e76616c696452696e67506564657273656e506172616d6574657273040118726f756e6432450701485369676e6564526f756e644d65737361676500040020496e76616c69645800050034496e76616c69645853686172650006003c496e76616c69644461746153697a650007002c5061696c6c696572446563000800005107104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d70323148496e76616c696450726f6f66526561736f6e00012834457175616c697479436865636b040008010875380000002852616e6765436865636b0400080108753800010028456e6372797074696f6e0002002c5061696c6c696572456e63000300285061696c6c6965724f70000400184d6f64506f77000500384d6f64756c757349735072696d65000600344d6f64756c757349734576656e00070040496e636f72726563744e7468526f6f74040008010875380008004c496e636f7272656374466f75727468526f6f7404000801087538000900005507104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231385369676e696e6741626f727465640001102c456e6350726f6f664f664b00000028496e76616c696450736900010050496e76616c69645073695072696d655072696d650002003c4d69736d61746368656444656c7461000300005907104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f73745c5a4361736846726f73744a757374696669636174696f6e000108184b657967656e0c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e5d0701344b657967656e41626f727465640000001c5369676e696e670c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e610701385369676e696e6741626f72746564000100005d07104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f7374344b657967656e41626f727465640001085c496e76616c696450726f6f664f664b6e6f776c65646765040118726f756e6431450701485369676e6564526f756e644d65737361676500000048496e76616c69645365637265745368617265080118726f756e6431450701485369676e6564526f756e644d657373616765000118726f756e6432450701485369676e6564526f756e644d657373616765000100006107104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f7374385369676e696e6741626f7274656400010454496e76616c69645369676e61747572655368617265080118726f756e64314907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e64324907015c5665633c5369676e6564526f756e644d6573736167653e0000000065070c4474616e676c655f7072696d6974697665732c6d69736265686176696f724c5a6b536161534a757374696669636174696f6e0001000069070c2870616c6c65745f646b671870616c6c65741043616c6c0404540001041c7365745f6665650401206665655f696e666f7d020130466565496e666f4f663c543e00000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d070c3470616c6c65745f7a6b736161731870616c6c65741043616c6c0404540001041c7365745f6665650401206665655f696e666f85020130466565496e666f4f663c543e00000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71070c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c650301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065750701504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a70726f7879605d2e246164645f70726f78790c012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00010468536565205b6050616c6c65743a3a6164645f70726f7879605d2e3072656d6f76655f70726f78790c012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a72656d6f76655f70726f7879605d2e3872656d6f76655f70726f786965730003047c536565205b6050616c6c65743a3a72656d6f76655f70726f78696573605d2e2c6372656174655f707572650c012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e000114696e6465789102010c75313600040470536565205b6050616c6c65743a3a6372656174655f70757265605d2e246b696c6c5f7075726514011c737061776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f787954797065000114696e6465789102010c753136000118686569676874280144426c6f636b4e756d626572466f723c543e0001246578745f696e646578bd02010c75333200050468536565205b6050616c6c65743a3a6b696c6c5f70757265605d2e20616e6e6f756e63650801107265616c650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00060464536565205b6050616c6c65743a3a616e6e6f756e6365605d2e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00070490536565205b6050616c6c65743a3a72656d6f76655f616e6e6f756e63656d656e74605d2e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00080490536565205b6050616c6c65743a3a72656a6563745f616e6e6f756e63656d656e74605d2e3c70726f78795f616e6e6f756e63656410012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e0001107265616c650301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065750701504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00090480536565205b6050616c6c65743a3a70726f78795f616e6e6f756e636564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750704184f7074696f6e040454018d020108104e6f6e6500000010536f6d6504008d02000001000079070c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c65741043616c6c040454000154386a6f696e5f6f70657261746f727304012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0000047c536565205b6050616c6c65743a3a6a6f696e5f6f70657261746f7273605d2e607363686564756c655f6c656176655f6f70657261746f7273000104a4536565205b6050616c6c65743a3a7363686564756c655f6c656176655f6f70657261746f7273605d2e5863616e63656c5f6c656176655f6f70657261746f72730002049c536565205b6050616c6c65743a3a63616e63656c5f6c656176655f6f70657261746f7273605d2e5c657865637574655f6c656176655f6f70657261746f7273000304a0536565205b6050616c6c65743a3a657865637574655f6c656176655f6f70657261746f7273605d2e486f70657261746f725f626f6e645f6d6f726504013c6164646974696f6e616c5f626f6e6418013042616c616e63654f663c543e0004048c536565205b6050616c6c65743a3a6f70657261746f725f626f6e645f6d6f7265605d2e647363686564756c655f6f70657261746f725f756e7374616b65040138756e7374616b655f616d6f756e7418013042616c616e63654f663c543e000504a8536565205b6050616c6c65743a3a7363686564756c655f6f70657261746f725f756e7374616b65605d2e60657865637574655f6f70657261746f725f756e7374616b65000604a4536565205b6050616c6c65743a3a657865637574655f6f70657261746f725f756e7374616b65605d2e5c63616e63656c5f6f70657261746f725f756e7374616b65000704a0536565205b6050616c6c65743a3a63616e63656c5f6f70657261746f725f756e7374616b65605d2e28676f5f6f66666c696e650008046c536565205b6050616c6c65743a3a676f5f6f66666c696e65605d2e24676f5f6f6e6c696e6500090468536565205b6050616c6c65743a3a676f5f6f6e6c696e65605d2e1c6465706f73697408012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000a0460536565205b6050616c6c65743a3a6465706f736974605d2e447363686564756c655f776974686472617708012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000b0488536565205b6050616c6c65743a3a7363686564756c655f7769746864726177605d2e40657865637574655f7769746864726177000c0484536565205b6050616c6c65743a3a657865637574655f7769746864726177605d2e3c63616e63656c5f776974686472617708012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000d0480536565205b6050616c6c65743a3a63616e63656c5f7769746864726177605d2e2064656c65676174650c01206f70657261746f72000130543a3a4163636f756e74496400012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000e0464536565205b6050616c6c65743a3a64656c6567617465605d2e687363686564756c655f64656c656761746f725f756e7374616b650c01206f70657261746f72000130543a3a4163636f756e74496400012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000f04ac536565205b6050616c6c65743a3a7363686564756c655f64656c656761746f725f756e7374616b65605d2e64657865637574655f64656c656761746f725f756e7374616b65001004a8536565205b6050616c6c65743a3a657865637574655f64656c656761746f725f756e7374616b65605d2e6063616e63656c5f64656c656761746f725f756e7374616b6508012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e001104a4536565205b6050616c6c65743a3a63616e63656c5f64656c656761746f725f756e7374616b65605d2e647365745f696e63656e746976655f6170795f616e645f6361700c011c706f6f6c5f6964180124543a3a506f6f6c496400010c6170799902014c73705f72756e74696d653a3a50657263656e7400010c63617018013042616c616e63654f663c543e001304a8536565205b6050616c6c65743a3a7365745f696e63656e746976655f6170795f616e645f636170605d2e7c77686974656c6973745f626c75657072696e745f666f725f72657761726473040130626c75657072696e745f696410010c753332001404c0536565205b6050616c6c65743a3a77686974656c6973745f626c75657072696e745f666f725f72657761726473605d2e506d616e6167655f61737365745f696e5f706f6f6c0c011c706f6f6c5f6964180124543a3a506f6f6c496400012061737365745f6964180128543a3a41737365744964000118616374696f6e9d02012c4173736574416374696f6e00150494536565205b6050616c6c65743a3a6d616e6167655f61737365745f696e5f706f6f6c605d2e04c85468652063616c6c61626c652066756e6374696f6e73202865787472696e7369637329206f66207468652070616c6c65742e7d070c5c7379676d615f6163636573735f73656772656761746f721870616c6c65741043616c6c040454000104306772616e745f6163636573730c013070616c6c65745f696e646578080108753800013865787472696e7369635f6e616d6534011c5665633c75383e00010c77686f000130543a3a4163636f756e74496400000474536565205b6050616c6c65743a3a6772616e745f616363657373605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81070c587379676d615f62617369635f66656568616e646c65721870616c6c65741043616c6c0404540001041c7365745f6665650c0118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e000118616d6f756e741801107531323800000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e85070c607379676d615f6665655f68616e646c65725f726f757465721870616c6c65741043616c6c0404540001043c7365745f6665655f68616e646c65720c0118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e00013068616e646c65725f74797065f102013846656548616e646c65725479706500000480536565205b6050616c6c65743a3a7365745f6665655f68616e646c6572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89070c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c65741043616c6c040454000104307365745f6665655f72617465140118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e0001506665655f726174655f62617369735f706f696e7410010c75333200013c6665655f6c6f7765725f626f756e641801107531323800013c6665655f75707065725f626f756e641801107531323800000474536565205b6050616c6c65743a3a7365745f6665655f72617465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d070c307379676d615f6272696467651870616c6c65741043616c6c0404540001283070617573655f627269646765040138646573745f646f6d61696e5f6964080120446f6d61696e494400000474536565205b6050616c6c65743a3a70617573655f627269646765605d2e38756e70617573655f627269646765040138646573745f646f6d61696e5f6964080120446f6d61696e49440001047c536565205b6050616c6c65743a3a756e70617573655f627269646765605d2e3c7365745f6d70635f6164647265737304011061646472910701284d70634164647265737300020480536565205b6050616c6c65743a3a7365745f6d70635f61646472657373605d2e3c72656769737465725f646f6d61696e080138646573745f646f6d61696e5f6964080120446f6d61696e4944000134646573745f636861696e5f6964d101011c436861696e494400030480536565205b6050616c6c65743a3a72656769737465725f646f6d61696e605d2e44756e72656769737465725f646f6d61696e080138646573745f646f6d61696e5f6964080120446f6d61696e4944000134646573745f636861696e5f6964d101011c436861696e494400040488536565205b6050616c6c65743a3a756e72656769737465725f646f6d61696e605d2e1c6465706f736974080114617373657495070128426f783c41737365743e00011064657374ad020134426f783c4c6f636174696f6e3e00050460536565205b6050616c6c65743a3a6465706f736974605d2e14726574727908015c6465706f7369745f6f6e5f626c6f636b5f68656967687418011075313238000138646573745f646f6d61696e5f6964080120446f6d61696e494400060458536565205b6050616c6c65743a3a7265747279605d2e40657865637574655f70726f706f73616c08012470726f706f73616c73a10701345665633c50726f706f73616c3e0001247369676e617475726534011c5665633c75383e00070484536565205b6050616c6c65743a3a657865637574655f70726f706f73616c605d2e4470617573655f616c6c5f6272696467657300080488536565205b6050616c6c65743a3a70617573655f616c6c5f62726964676573605d2e4c756e70617573655f616c6c5f6272696467657300090490536565205b6050616c6c65743a3a756e70617573655f616c6c5f62726964676573605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e910708307379676d615f747261697473284d706341646472657373000004009d0101205b75383b2032305d00009507102c73746167696e675f78636d08763414617373657414417373657400000801086964a902011c4173736574496400010c66756e9907012c46756e676962696c69747900009907102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c65040075010110753132380000002c4e6f6e46756e6769626c6504009d0701344173736574496e7374616e6365000100009d07102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400750101107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804004d03011c5b75383b20385d0003001c4172726179313604004d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000a107000002a50700a5070c307379676d615f6272696467651870616c6c65742050726f706f73616c00001001406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e636500012c7265736f757263655f69640401285265736f7572636549640001106461746134011c5665633c75383e0000a9070c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742ead070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400c90101185665633c543e0000b1070c3470616c6c65745f61737365747314747970657330417373657444657461696c730c1c42616c616e63650118244163636f756e7449640100384465706f73697442616c616e63650118003001146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000118737570706c7918011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e636500012c6d696e5f62616c616e636518011c42616c616e636500013469735f73756666696369656e74780110626f6f6c0001206163636f756e747310010c75333200012c73756666696369656e747310010c753332000124617070726f76616c7310010c753332000118737461747573b507012c41737365745374617475730000b5070c3470616c6c65745f6173736574731474797065732c417373657453746174757300010c104c6976650000001846726f7a656e0001002844657374726f79696e6700020000b90700000408180000bd070c3470616c6c65745f6173736574731474797065733041737365744163636f756e74101c42616c616e63650118384465706f73697442616c616e636501181445787472610184244163636f756e74496401000010011c62616c616e636518011c42616c616e6365000118737461747573c10701344163636f756e74537461747573000118726561736f6ec50701a84578697374656e6365526561736f6e3c4465706f73697442616c616e63652c204163636f756e7449643e000114657874726184011445787472610000c1070c3470616c6c65745f617373657473147479706573344163636f756e7453746174757300010c184c69717569640000001846726f7a656e0001001c426c6f636b656400020000c5070c3470616c6c65745f6173736574731474797065733c4578697374656e6365526561736f6e081c42616c616e63650118244163636f756e7449640100011420436f6e73756d65720000002853756666696369656e740001002c4465706f73697448656c64040018011c42616c616e63650002003c4465706f736974526566756e6465640003002c4465706f73697446726f6d08000001244163636f756e744964000018011c42616c616e636500040000c9070000040c18000000cd070c3470616c6c65745f61737365747314747970657320417070726f76616c081c42616c616e63650118384465706f73697442616c616e6365011800080118616d6f756e7418011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e63650000d1070c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e6701d5070014011c6465706f7369741801384465706f73697442616c616e63650001106e616d65d5070134426f756e646564537472696e6700011873796d626f6cd5070134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c0000d5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000d9070c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742edd070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401e107045300000400e90701185665633c543e0000e1070c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c010869644d0301384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73e507011c526561736f6e730000e5070c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000e907000002e10700ed070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f107045300000400f50701185665633c543e0000f1070c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e746966696572014d031c42616c616e636501180008010869644d030144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000f507000002f10700f9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401fd07045300000400090801185665633c543e0000fd070c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640101081c42616c616e63650118000801086964010801084964000118616d6f756e7418011c42616c616e636500000108085874616e676c655f746573746e65745f72756e74696d654452756e74696d65486f6c64526561736f6e00010420507265696d61676504000508016c70616c6c65745f707265696d6167653a3a486f6c64526561736f6e0019000005080c3c70616c6c65745f707265696d6167651870616c6c657428486f6c64526561736f6e00010420507265696d616765000000000908000002fd07000d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540111080453000004001d0801185665633c543e000011080c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640115081c42616c616e63650118000801086964150801084964000118616d6f756e7418011c42616c616e636500001508085874616e676c655f746573746e65745f72756e74696d654c52756e74696d65467265657a65526561736f6e0001043c4e6f6d696e6174696f6e506f6f6c7304001908019470616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a467265657a65526561736f6e0017000019080c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657430467265657a65526561736f6e00010438506f6f6c4d696e42616c616e6365000000001d0800000211080021080c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e25080c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800002908086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100002d080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013108045300000400350801185665633c543e00003108000004087d032c00350800000231080039080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401040453000004003d0801185665633c543e00003d080000020400410804184f7074696f6e0404540145080108104e6f6e6500000010536f6d6504004508000001000045080c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400490801405072696d617279507265446967657374000100385365636f6e64617279506c61696e04005108015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400550801545365636f6e646172795652465072654469676573740003000049080c4473705f636f6e73656e7375735f626162651c64696765737473405072696d61727950726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f740001347672665f7369676e61747572654d0801305672665369676e617475726500004d08101c73705f636f72651c737232353531390c767266305672665369676e617475726500000801287072655f6f75747075740401305672665072654f757470757400011470726f6f66b103012056726650726f6f66000051080c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f74000055080c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e6461727956524650726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f740001347672665f7369676e61747572654d0801305672665369676e617475726500005908084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e0000080104638d030128287536342c2075363429000134616c6c6f7765645f736c6f747391030130416c6c6f776564536c6f747300005d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013d01045300000400050301185665633c543e000061080c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6508083870616c6c65745f6772616e6470612c53746f726564537461746504044e012c0110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61742c01044e00011464656c61792c01044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61742c01044e00011464656c61792c01044e000300006908083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e012c144c696d697400001001307363686564756c65645f61742c01044e00011464656c61792c01044e0001406e6578745f617574686f7269746965736d08016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f726365641d0501244f7074696f6e3c4e3e00006d080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a4045300000400a001185665633c543e000071080c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e75080000040c0018780079080c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018108045300000400850801185665633c543e000081080000040c10d10300008508000002810800890800000408010518008d080c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d626572012c2050726f706f73616c01d1031c42616c616e6365011801081c4f6e676f696e670400910801c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564780110626f6f6c00010c656e642c012c426c6f636b4e756d6265720001000091080c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d626572012c2050726f706f73616c01d1031c42616c616e636501180014010c656e642c012c426c6f636b4e756d62657200012070726f706f73616cd103012050726f706f73616c0001247468726573686f6c64b80134566f74655468726573686f6c6400011464656c61792c012c426c6f636b4e756d62657200011474616c6c799508013854616c6c793c42616c616e63653e000095080c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e6365000099080c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d626572012c204d6178566f746573000108184469726563740c0114766f7465739d0801f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e73a908015044656c65676174696f6e733c42616c616e63653e0001147072696f72ad08017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6edd030128436f6e76696374696f6e00012c64656c65676174696f6e73a908015044656c65676174696f6e733c42616c616e63653e0001147072696f72ad08017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e000100009d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a108045300000400a50801185665633c543e0000a1080000040810bc00a508000002a10800a9080c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000ad080c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d626572012c1c42616c616e636501180008002c012c426c6f636b4e756d626572000018011c42616c616e63650000b10800000408d103b800b508000004082c010500b9080c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400c90101185665633c543e0000c108084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572012c00140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e7400011061796573250201385665633c4163636f756e7449643e0001106e617973250201385665633c4163636f756e7449643e00010c656e642c012c426c6f636b4e756d6265720000c5080c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f7208045400044900012c244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e545072696d654163636f756e744e6f744d656d626572000a04745072696d65206163636f756e74206973206e6f742061206d656d626572048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f103045300000400cd0801185665633c543e0000cd08000002f10300d108083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000d5080c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742ed908000002dd0800dd08086470616c6c65745f656c656374696f6e735f70687261676d656e2853656174486f6c64657208244163636f756e74496401001c42616c616e63650118000c010c77686f0001244163636f756e7449640001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e63650000e108086470616c6c65745f656c656374696f6e735f70687261676d656e14566f74657208244163636f756e74496401001c42616c616e63650118000c0114766f746573250201385665633c4163636f756e7449643e0001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e63650000e5080c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144572726f7204045400014430556e61626c65546f566f7465000004c043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e1c4e6f566f746573000104944d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e30546f6f4d616e79566f7465730002048443616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e504d6178696d756d566f74657345786365656465640003049843616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e284c6f7742616c616e6365000404c443616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e3c556e61626c65546f506179426f6e6400050478566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2c4d7573744265566f746572000604404d757374206265206120766f7465722e4c4475706c69636174656443616e646964617465000704804475706c6963617465642063616e646964617465207375626d697373696f6e2e44546f6f4d616e7943616e6469646174657300080498546f6f206d616e792063616e646964617465732068617665206265656e20637265617465642e304d656d6265725375626d6974000904884d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e3852756e6e657255705375626d6974000a048852756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e68496e73756666696369656e7443616e64696461746546756e6473000b049443616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e244e6f744d656d626572000c04344e6f742061206d656d6265722e48496e76616c69645769746e65737344617461000d04e05468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e40496e76616c6964566f7465436f756e74000e04cc5468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e44496e76616c696452656e6f756e63696e67000f04fc5468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e48496e76616c69645265706c6163656d656e74001004fc50726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee908089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e08244163636f756e74496400284d617857696e6e65727300000c0120737570706f727473ed080198426f756e646564537570706f7274733c4163636f756e7449642c204d617857696e6e6572733e00011473636f7265e40134456c656374696f6e53636f726500011c636f6d70757465e0013c456c656374696f6e436f6d707574650000ed080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401dd04045300000400d90401185665633c543e0000f108089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f7408244163636f756e7449640100304461746150726f766964657201f50800080118766f74657273fd0801445665633c4461746150726f76696465723e00011c74617267657473250201385665633c4163636f756e7449643e0000f5080000040c002cf90800f9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e0000fd08000002f5080001090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010509045300000400090901185665633c543e000005090000040ce42c100009090000020509000d090c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e0105040010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6e01040154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e6365000011090c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f7204045400013c6850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273645072654469737061746368446966666572656e74526f756e64000e04b453756d697373696f6e2077617320707265706172656420666f72206120646966666572656e7420726f756e642e040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732e1509083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616c7501013042616c616e63654f663c543e0001186163746976657501013042616c616e63654f663c543e000124756e6c6f636b696e67190901f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e0001586c65676163795f636c61696d65645f7265776172647325090194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e000019090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d09045300000400210901185665633c543e00001d09083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c75657501011c42616c616e636500010c657261bd020120457261496e646578000021090000021d090025090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400ed0401185665633c543e00002909083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473f90801b4426f756e6465645665633c543a3a4163636f756e7449642c204d61784e6f6d696e6174696f6e734f663c543e3e0001307375626d69747465645f696e100120457261496e64657800012873757070726573736564780110626f6f6c00002d09083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172741d05012c4f7074696f6e3c7536343e00003109000004081000003509082873705f7374616b696e675450616765644578706f737572654d65746164617461041c42616c616e6365011800100114746f74616c7501011c42616c616e636500010c6f776e7501011c42616c616e636500013c6e6f6d696e61746f725f636f756e7410010c753332000128706167655f636f756e7410011050616765000039090000040c100010003d09082873705f7374616b696e67304578706f737572655061676508244163636f756e74496401001c42616c616e6365011800080128706167655f746f74616c7501011c42616c616e63650001186f7468657273790101ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e00004109083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c4509018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00004509042042547265654d617008044b010004560110000400490900000049090000024d09004d090000040800100051090000025509005509083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273d401645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273250201385665633c4163636f756e7449643e0001187061796f757418011c42616c616e6365000059090000025d09005d0900000408101000610900000408f8180065090c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72ed0401345665633c457261496e6465783e000069090c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e636500006d090000027109007109000004081078007509103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000170344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e2c496e76616c696450616765000f04844e6f206e6f6d696e61746f7273206578697374206f6e207468697320706167652e54496e636f7272656374486973746f72794465707468001004c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001104b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650012043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300130494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740014043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001504550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730016084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001708550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001804e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400190458536f6d6520626f756e64206973206e6f74206d65742e50436f6e74726f6c6c657244657072656361746564001a04010155736564207768656e20617474656d7074696e6720746f20757365206465707265636174656420636f6e74726f6c6c6572206163636f756e74206c6f6769632e3452657374616b65416374697665001b046c546865207573657220686173206163746976652072657374616b65048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79090000027d09007d0900000408000905008109000004088509340085090c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d000089090c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e8d09000004083010009109083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e6365000095090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400ed0401185665633c543e00009909083c70616c6c65745f74726561737572792c5370656e64537461747573142441737365744b696e64018430417373657442616c616e636501182c42656e656669636961727901002c426c6f636b4e756d626572012c245061796d656e74496401840018012861737365745f6b696e6484012441737365744b696e64000118616d6f756e74180130417373657442616c616e636500012c62656e656669636961727900012c42656e656669636961727900012876616c69645f66726f6d2c012c426c6f636b4e756d6265720001246578706972655f61742c012c426c6f636b4e756d6265720001187374617475739d09015c5061796d656e7453746174653c5061796d656e7449643e00009d09083c70616c6c65745f7472656173757279305061796d656e745374617465040849640184010c1c50656e64696e6700000024417474656d7074656404010869648401084964000100184661696c656400020000a10908346672616d655f737570706f72742050616c6c65744964000004004d03011c5b75383b20385d0000a5090c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900013070496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104ac4e6f2070726f706f73616c2c20626f756e7479206f72207370656e64206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e584661696c6564546f436f6e7665727442616c616e636500050451015468652062616c616e6365206f6620746865206173736574206b696e64206973206e6f7420636f6e7665727469626c6520746f207468652062616c616e6365206f6620746865206e61746976652061737365742e305370656e6445787069726564000604b0546865207370656e6420686173206578706972656420616e642063616e6e6f7420626520636c61696d65642e2c4561726c795061796f7574000704a4546865207370656e64206973206e6f742079657420656c696769626c6520666f72207061796f75742e40416c7265616479417474656d707465640008049c546865207061796d656e742068617320616c7265616479206265656e20617474656d707465642e2c5061796f75744572726f72000904cc54686572652077617320736f6d65206973737565207769746820746865206d656368616e69736d206f66207061796d656e742e304e6f74417474656d70746564000a04a4546865207061796f757420776173206e6f742079657420617474656d707465642f636c61696d65642e30496e636f6e636c7573697665000b04c4546865207061796d656e7420686173206e656974686572206661696c6564206e6f7220737563636565646564207965742e04784572726f7220666f72207468652074726561737572792070616c6c65742ea909083c70616c6c65745f626f756e7469657318426f756e74790c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572012c0018012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500010c66656518011c42616c616e636500013c63757261746f725f6465706f73697418011c42616c616e6365000110626f6e6418011c42616c616e6365000118737461747573ad090190426f756e74795374617475733c4163636f756e7449642c20426c6f636b4e756d6265723e0000ad09083c70616c6c65745f626f756e7469657330426f756e747953746174757308244163636f756e74496401002c426c6f636b4e756d626572012c01182050726f706f73656400000020417070726f7665640001001846756e6465640002003c43757261746f7250726f706f73656404011c63757261746f720001244163636f756e7449640003001841637469766508011c63757261746f720001244163636f756e7449640001287570646174655f6475652c012c426c6f636b4e756d6265720004003450656e64696e675061796f75740c011c63757261746f720001244163636f756e74496400012c62656e65666963696172790001244163636f756e744964000124756e6c6f636b5f61742c012c426c6f636b4e756d62657200050000b1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b5090c3c70616c6c65745f626f756e746965731870616c6c6574144572726f7208045400044900012c70496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e30526561736f6e546f6f4269670002048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e40556e65787065637465645374617475730003048054686520626f756e74792073746174757320697320756e65787065637465642e385265717569726543757261746f720004045c5265717569726520626f756e74792063757261746f722e30496e76616c696456616c756500050454496e76616c696420626f756e74792076616c75652e28496e76616c69644665650006044c496e76616c696420626f756e7479206665652e3450656e64696e675061796f75740007086c4120626f756e7479207061796f75742069732070656e64696e672ef8546f2063616e63656c2074686520626f756e74792c20796f75206d75737420756e61737369676e20616e6420736c617368207468652063757261746f722e245072656d6174757265000804450154686520626f756e746965732063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e504861734163746976654368696c64426f756e7479000904050154686520626f756e74792063616e6e6f7420626520636c6f73656420626563617573652069742068617320616374697665206368696c6420626f756e746965732e34546f6f4d616e79517565756564000a0498546f6f206d616e7920617070726f76616c732061726520616c7265616479207175657565642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb909085470616c6c65745f6368696c645f626f756e746965732c4368696c64426f756e74790c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572012c00140134706172656e745f626f756e747910012c426f756e7479496e64657800011476616c756518011c42616c616e636500010c66656518011c42616c616e636500013c63757261746f725f6465706f73697418011c42616c616e6365000118737461747573bd0901a44368696c64426f756e74795374617475733c4163636f756e7449642c20426c6f636b4e756d6265723e0000bd09085470616c6c65745f6368696c645f626f756e74696573444368696c64426f756e747953746174757308244163636f756e74496401002c426c6f636b4e756d626572012c01101441646465640000003c43757261746f7250726f706f73656404011c63757261746f720001244163636f756e7449640001001841637469766504011c63757261746f720001244163636f756e7449640002003450656e64696e675061796f75740c011c63757261746f720001244163636f756e74496400012c62656e65666963696172790001244163636f756e744964000124756e6c6f636b5f61742c012c426c6f636b4e756d62657200030000c1090c5470616c6c65745f6368696c645f626f756e746965731870616c6c6574144572726f7204045400010c54506172656e74426f756e74794e6f74416374697665000004a454686520706172656e7420626f756e7479206973206e6f7420696e206163746976652073746174652e64496e73756666696369656e74426f756e747942616c616e6365000104e454686520626f756e74792062616c616e6365206973206e6f7420656e6f75676820746f20616464206e6577206368696c642d626f756e74792e50546f6f4d616e794368696c64426f756e746965730002040d014e756d626572206f66206368696c6420626f756e746965732065786365656473206c696d697420604d61784163746976654368696c64426f756e7479436f756e74602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec5090c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e744964000110707265768801504f7074696f6e3c543a3a4163636f756e7449643e0001106e6578748801504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f75707065722c0120543a3a53636f726500011473636f72652c0120543a3a53636f72650000c9090c4070616c6c65745f626167735f6c697374106c6973740c4261670804540004490000080110686561648801504f7074696f6e3c543a3a4163636f756e7449643e0001107461696c8801504f7074696f6e3c543a3a4163636f756e7449643e0000cd090000022c00d1090c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400d50901244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed5090c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e6400030000d909085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328506f6f6c4d656d626572040454000010011c706f6f6c5f6964100118506f6f6c4964000118706f696e747318013042616c616e63654f663c543e0001706c6173745f7265636f726465645f7265776172645f636f756e74657225080140543a3a526577617264436f756e746572000138756e626f6e64696e675f65726173dd0901e0426f756e64656442547265654d61703c457261496e6465782c2042616c616e63654f663c543e2c20543a3a4d6178556e626f6e64696e673e0000dd090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560118045300000400e109013842547265654d61703c4b2c20563e0000e109042042547265654d617008044b011004560118000400e509000000e509000002e90900e90900000408101800ed09085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c426f6e646564506f6f6c496e6e65720404540000140128636f6d6d697373696f6ef1090134436f6d6d697373696f6e3c543e0001386d656d6265725f636f756e74657210010c753332000118706f696e747318013042616c616e63654f663c543e000114726f6c6573fd09015c506f6f6c526f6c65733c543a3a4163636f756e7449643e000114737461746521010124506f6f6c53746174650000f109085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328436f6d6d697373696f6e040454000014011c63757272656e742501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e00010c6d6178f509013c4f7074696f6e3c50657262696c6c3e00012c6368616e67655f72617465f90901bc4f7074696f6e3c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e3e0001347468726f74746c655f66726f6d1d0501644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000140636c61696d5f7065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e0000f50904184f7074696f6e04045401f80108104e6f6e6500000010536f6d650400f80000010000f90904184f7074696f6e040454012d010108104e6f6e6500000010536f6d6504002d010000010000fd09085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c526f6c657304244163636f756e7449640100001001246465706f7369746f720001244163636f756e744964000110726f6f748801444f7074696f6e3c4163636f756e7449643e0001246e6f6d696e61746f728801444f7074696f6e3c4163636f756e7449643e00011c626f756e6365728801444f7074696f6e3c4163636f756e7449643e0000010a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328526577617264506f6f6c04045400001401706c6173745f7265636f726465645f7265776172645f636f756e74657225080140543a3a526577617264436f756e74657200016c6c6173745f7265636f726465645f746f74616c5f7061796f75747318013042616c616e63654f663c543e000154746f74616c5f726577617264735f636c61696d656418013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f70656e64696e6718013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f636c61696d656418013042616c616e63654f663c543e0000050a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320537562506f6f6c7304045400000801186e6f5f657261090a0134556e626f6e64506f6f6c3c543e000120776974685f6572610d0a010101426f756e64656442547265654d61703c457261496e6465782c20556e626f6e64506f6f6c3c543e2c20546f74616c556e626f6e64696e67506f6f6c733c543e3e0000090a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328556e626f6e64506f6f6c0404540000080118706f696e747318013042616c616e63654f663c543e00011c62616c616e636518013042616c616e63654f663c543e00000d0a0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601090a045300000400110a013842547265654d61703c4b2c20563e0000110a042042547265654d617008044b0110045601090a000400150a000000150a000002190a00190a0000040810090a001d0a0c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144572726f7204045400018030506f6f6c4e6f74466f756e6400000488412028626f6e6465642920706f6f6c20696420646f6573206e6f742065786973742e48506f6f6c4d656d6265724e6f74466f756e640001046c416e206163636f756e74206973206e6f742061206d656d6265722e48526577617264506f6f6c4e6f74466f756e640002042101412072657761726420706f6f6c20646f6573206e6f742065786973742e20496e20616c6c206361736573207468697320697320612073797374656d206c6f676963206572726f722e40537562506f6f6c734e6f74466f756e6400030468412073756220706f6f6c20646f6573206e6f742065786973742e644163636f756e7442656c6f6e6773546f4f74686572506f6f6c0004084d01416e206163636f756e7420697320616c72656164792064656c65676174696e6720696e20616e6f7468657220706f6f6c2e20416e206163636f756e74206d6179206f6e6c792062656c6f6e6720746f206f6e653c706f6f6c20617420612074696d652e3846756c6c79556e626f6e64696e670005083d01546865206d656d6265722069732066756c6c7920756e626f6e6465642028616e6420746875732063616e6e6f74206163636573732074686520626f6e64656420616e642072657761726420706f6f6ca8616e796d6f726520746f2c20666f72206578616d706c652c20636f6c6c6563742072657761726473292e444d6178556e626f6e64696e674c696d69740006040901546865206d656d6265722063616e6e6f7420756e626f6e642066757274686572206368756e6b732064756520746f207265616368696e6720746865206c696d69742e4443616e6e6f745769746864726177416e790007044d014e6f6e65206f66207468652066756e64732063616e2062652077697468647261776e2079657420626563617573652074686520626f6e64696e67206475726174696f6e20686173206e6f74207061737365642e444d696e696d756d426f6e644e6f744d6574000814290154686520616d6f756e7420646f6573206e6f74206d65657420746865206d696e696d756d20626f6e6420746f20656974686572206a6f696e206f7220637265617465206120706f6f6c2e005501546865206465706f7369746f722063616e206e6576657220756e626f6e6420746f20612076616c7565206c657373207468616e206050616c6c65743a3a6465706f7369746f725f6d696e5f626f6e64602e205468655d0163616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e204d656d626572732063616e206e6576657220756e626f6e6420746f20616876616c75652062656c6f7720604d696e4a6f696e426f6e64602e304f766572666c6f775269736b0009042101546865207472616e73616374696f6e20636f756c64206e6f742062652065786563757465642064756520746f206f766572666c6f77207269736b20666f722074686520706f6f6c2e344e6f7444657374726f79696e67000a085d014120706f6f6c206d75737420626520696e205b60506f6f6c53746174653a3a44657374726f79696e67605d20696e206f7264657220666f7220746865206465706f7369746f7220746f20756e626f6e64206f7220666f72b86f74686572206d656d6265727320746f206265207065726d697373696f6e6c6573736c7920756e626f6e6465642e304e6f744e6f6d696e61746f72000b04f45468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e544e6f744b69636b65724f7244657374726f79696e67000c043d01456974686572206129207468652063616c6c65722063616e6e6f74206d616b6520612076616c6964206b69636b206f722062292074686520706f6f6c206973206e6f742064657374726f79696e672e1c4e6f744f70656e000d047054686520706f6f6c206973206e6f74206f70656e20746f206a6f696e204d6178506f6f6c73000e04845468652073797374656d206973206d61786564206f7574206f6e20706f6f6c732e384d6178506f6f6c4d656d62657273000f049c546f6f206d616e79206d656d6265727320696e2074686520706f6f6c206f722073797374656d2e4443616e4e6f744368616e676553746174650010048854686520706f6f6c732073746174652063616e6e6f74206265206368616e6765642e54446f65734e6f74486176655065726d697373696f6e001104b85468652063616c6c657220646f6573206e6f742068617665206164657175617465207065726d697373696f6e732e544d65746164617461457863656564734d61784c656e001204ac4d657461646174612065786365656473205b60436f6e6669673a3a4d61784d657461646174614c656e605d24446566656e736976650400210a0138446566656e736976654572726f720013083101536f6d65206572726f72206f6363757272656420746861742073686f756c64206e657665722068617070656e2e20546869732073686f756c64206265207265706f7274656420746f20746865306d61696e7461696e6572732e9c5061727469616c556e626f6e644e6f74416c6c6f7765645065726d697373696f6e6c6573736c79001404bc5061727469616c20756e626f6e64696e67206e6f7720616c6c6f776564207065726d697373696f6e6c6573736c792e5c4d6178436f6d6d697373696f6e526573747269637465640015041d0154686520706f6f6c2773206d617820636f6d6d697373696f6e2063616e6e6f742062652073657420686967686572207468616e20746865206578697374696e672076616c75652e60436f6d6d697373696f6e457863656564734d6178696d756d001604ec54686520737570706c69656420636f6d6d697373696f6e206578636565647320746865206d617820616c6c6f77656420636f6d6d697373696f6e2e78436f6d6d697373696f6e45786365656473476c6f62616c4d6178696d756d001704e854686520737570706c69656420636f6d6d697373696f6e206578636565647320676c6f62616c206d6178696d756d20636f6d6d697373696f6e2e64436f6d6d697373696f6e4368616e67655468726f74746c656400180409014e6f7420656e6f75676820626c6f636b732068617665207375727061737365642073696e636520746865206c61737420636f6d6d697373696f6e207570646174652e78436f6d6d697373696f6e4368616e6765526174654e6f74416c6c6f7765640019040101546865207375626d6974746564206368616e67657320746f20636f6d6d697373696f6e206368616e6765207261746520617265206e6f7420616c6c6f7765642e4c4e6f50656e64696e67436f6d6d697373696f6e001a04a05468657265206973206e6f2070656e64696e6720636f6d6d697373696f6e20746f20636c61696d2e584e6f436f6d6d697373696f6e43757272656e74536574001b048c4e6f20636f6d6d697373696f6e2063757272656e7420686173206265656e207365742e2c506f6f6c4964496e557365001c0464506f6f6c2069642063757272656e746c7920696e207573652e34496e76616c6964506f6f6c4964001d049c506f6f6c2069642070726f7669646564206973206e6f7420636f72726563742f757361626c652e4c426f6e64457874726152657374726963746564001e04fc426f6e64696e67206578747261206973207265737472696374656420746f207468652065786163742070656e64696e672072657761726420616d6f756e742e3c4e6f7468696e67546f41646a757374001f04b04e6f20696d62616c616e636520696e20746865204544206465706f73697420666f722074686520706f6f6c2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e210a0c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657438446566656e736976654572726f72000114684e6f74456e6f7567685370616365496e556e626f6e64506f6f6c00000030506f6f6c4e6f74466f756e6400010048526577617264506f6f6c4e6f74466f756e6400020040537562506f6f6c734e6f74466f756e6400030070426f6e64656453746173684b696c6c65645072656d61747572656c7900040000250a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401290a045300000400310a01185665633c543e0000290a04184f7074696f6e040454012d0a0108104e6f6e6500000010536f6d6504002d0a00000100002d0a084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01d1032c426c6f636b4e756d626572012c3450616c6c6574734f726967696e011906244163636f756e7449640100001401206d617962655f6964410101304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cd103011043616c6c0001386d617962655f706572696f6469634d0501944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e1906013450616c6c6574734f726967696e0000310a000002290a00350a0c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e390a083c70616c6c65745f707265696d616765404f6c645265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974d80150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f7369743d0a01704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656ee103012c4f7074696f6e3c7533323e000100003d0a04184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d80000010000410a083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e7449640100185469636b6574018401082c556e7265717565737465640801187469636b6574450a014c284163636f756e7449642c205469636b65742900010c6c656e10010c753332000000245265717565737465640c01306d617962655f7469636b6574490a016c4f7074696f6e3c284163636f756e7449642c205469636b6574293e000114636f756e7410010c7533320001246d617962655f6c656ee103012c4f7074696f6e3c7533323e00010000450a00000408008400490a04184f7074696f6e04045401450a0108104e6f6e6500000010536f6d650400450a00000100004d0a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000510a0c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400012018546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e1c546f6f4d616e7900060455014d6f7265207468616e20604d41585f484153485f555047524144455f42554c4b5f434f554e54602068617368657320776572652072657175657374656420746f206265207570677261646564206174206f6e63652e18546f6f466577000704e4546f6f206665772068617368657320776572652072657175657374656420746f2062652075706772616465642028692e652e207a65726f292e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e550a0c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e646572016d01000801206f6666656e6465726d0101204f6666656e6465720001247265706f7274657273250201345665633c5265706f727465723e0000590a000004084d0134005d0a0c3c70616c6c65745f74785f70617573651870616c6c6574144572726f720404540001102049735061757365640000044c5468652063616c6c206973207061757365642e284973556e706175736564000104545468652063616c6c20697320756e7061757365642e28556e7061757361626c65000204b45468652063616c6c2069732077686974656c697374656420616e642063616e6e6f74206265207061757365642e204e6f74466f756e64000300048054686520604572726f726020656e756d206f6620746869732070616c6c65742e610a0c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454016101045300000400650a01185665633c543e0000650a000002610100690a0c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6d0a00000408710a810a00710a0c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e747300304964656e74697479496e666f016d05000c01286a756467656d656e7473750a01fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f6d0501304964656e74697479496e666f0000750a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401790a0453000004007d0a01185665633c543e0000790a0000040810fd05007d0a000002790a00810a04184f7074696f6e0404540185010108104e6f6e6500000010536f6d65040085010000010000850a0000040818890a00890a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e00008d0a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401910a045300000400990a01185665633c543e0000910a04184f7074696f6e04045401950a0108104e6f6e6500000010536f6d650400950a0000010000950a0c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f0c1c42616c616e63650118244163636f756e74496401001c49644669656c64012c000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c64732c011c49644669656c640000990a000002910a009d0a0c3c70616c6c65745f6964656e746974791474797065734c417574686f7269747950726f70657274696573041853756666697801a10a00080118737566666978a10a0118537566666978000128616c6c6f636174696f6e100128416c6c6f636174696f6e0000a10a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000a50a00000408002c00a90a0c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400016848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e44546f6f4d616e7952656769737472617273000b04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000c04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000d047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000e04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479000f04d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001004f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e34496e76616c6964537566666978001104805468652070726f76696465642073756666697820697320746f6f206c6f6e672e504e6f74557365726e616d65417574686f72697479001204e05468652073656e64657220646f6573206e6f742068617665207065726d697373696f6e20746f206973737565206120757365726e616d652e304e6f416c6c6f636174696f6e001304c454686520617574686f726974792063616e6e6f7420616c6c6f6361746520616e79206d6f726520757365726e616d65732e40496e76616c69645369676e6174757265001404a8546865207369676e6174757265206f6e206120757365726e616d6520776173206e6f742076616c69642e4452657175697265735369676e6174757265001504090153657474696e67207468697320757365726e616d652072657175697265732061207369676e61747572652c20627574206e6f6e65207761732070726f76696465642e3c496e76616c6964557365726e616d65001604b054686520757365726e616d6520646f6573206e6f74206d6565742074686520726571756972656d656e74732e34557365726e616d6554616b656e0017047854686520757365726e616d6520697320616c72656164792074616b656e2e284e6f557365726e616d65001804985468652072657175657374656420757365726e616d6520646f6573206e6f742065786973742e284e6f74457870697265640019042d0154686520757365726e616d652063616e6e6f7420626520666f72636566756c6c792072656d6f76656420626563617573652069742063616e207374696c6c2062652061636365707465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ead0a0c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb10a00000408000400b50a083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d626572012c1c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e9101015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c730105018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000b90a0c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd0a000002c10a00c10a0000040c3506c50ad90a00c50a081866705f727063445472616e73616374696f6e53746174757300001c01407472616e73616374696f6e5f68617368300110483235360001447472616e73616374696f6e5f696e64657810010c75333200011066726f6d9901011048313630000108746fc90a01304f7074696f6e3c483136303e000140636f6e74726163745f61646472657373c90a01304f7074696f6e3c483136303e0001106c6f6773cd0a01205665633c4c6f673e0001286c6f67735f626c6f6f6dd10a0114426c6f6f6d0000c90a04184f7074696f6e0404540199010108104e6f6e6500000010536f6d65040099010000010000cd0a000002c50100d10a0820657468626c6f6f6d14426c6f6f6d00000400d50a01405b75383b20424c4f4f4d5f53495a455d0000d50a000003000100000800d90a0c20657468657265756d1c726563656970742452656365697074563300010c184c65676163790400dd0a014445495036353852656365697074446174610000001c454950323933300400dd0a01484549503239333052656365697074446174610001001c454950313535390400dd0a014845495031353539526563656970744461746100020000dd0a0c20657468657265756d1c72656365697074444549503635385265636569707444617461000010012c7374617475735f636f64650801087538000120757365645f676173d1010110553235360001286c6f67735f626c6f6f6dd10a0114426c6f6f6d0001106c6f6773cd0a01205665633c4c6f673e0000e10a0c20657468657265756d14626c6f636b14426c6f636b040454013506000c0118686561646572e50a01184865616465720001307472616e73616374696f6e73ed0a01185665633c543e0001186f6d6d657273f10a012c5665633c4865616465723e0000e50a0c20657468657265756d186865616465721848656164657200003c012c706172656e745f686173683001104832353600012c6f6d6d6572735f686173683001104832353600012c62656e6566696369617279990101104831363000012873746174655f726f6f74300110483235360001447472616e73616374696f6e735f726f6f743001104832353600013472656365697074735f726f6f74300110483235360001286c6f67735f626c6f6f6dd10a0114426c6f6f6d000128646966666963756c7479d1010110553235360001186e756d626572d1010110553235360001246761735f6c696d6974d1010110553235360001206761735f75736564d10101105532353600012474696d657374616d702c010c75363400012865787472615f6461746134011442797465730001206d69785f68617368300110483235360001146e6f6e6365e90a010c4836340000e90a0c38657468657265756d5f747970657310686173680c483634000004004d03011c5b75383b20385d0000ed0a000002350600f10a000002e50a00f50a000002d90a00f90a000002c50a00fd0a0c3c70616c6c65745f657468657265756d1870616c6c6574144572726f7204045400010840496e76616c69645369676e6174757265000004545369676e617475726520697320696e76616c69642e305072654c6f67457869737473000104d85072652d6c6f672069732070726573656e742c207468657265666f7265207472616e73616374206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e010b082870616c6c65745f65766d30436f64654d65746164617461000008011073697a652c010c75363400011068617368300110483235360000050b0000040899013000090b0c2870616c6c65745f65766d1870616c6c6574144572726f720404540001342842616c616e63654c6f77000004904e6f7420656e6f7567682062616c616e636520746f20706572666f726d20616374696f6e2c4665654f766572666c6f770001048043616c63756c6174696e6720746f74616c20666565206f766572666c6f7765643c5061796d656e744f766572666c6f770002049043616c63756c6174696e6720746f74616c207061796d656e74206f766572666c6f7765643857697468647261774661696c65640003044c576974686472617720666565206661696c6564384761735072696365546f6f4c6f770004045447617320707269636520697320746f6f206c6f772e30496e76616c69644e6f6e6365000504404e6f6e636520697320696e76616c6964384761734c696d6974546f6f4c6f7700060454476173206c696d697420697320746f6f206c6f772e3c4761734c696d6974546f6f4869676800070458476173206c696d697420697320746f6f20686967682e38496e76616c6964436861696e49640008046054686520636861696e20696420697320696e76616c69642e40496e76616c69645369676e617475726500090464746865207369676e617475726520697320696e76616c69642e285265656e7472616e6379000a043845564d207265656e7472616e6379685472616e73616374696f6e4d757374436f6d6546726f6d454f41000b04244549502d333630372c24556e646566696e6564000c0440556e646566696e6564206572726f722e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0d0b0c6470616c6c65745f686f746669785f73756666696369656e74731870616c6c6574144572726f720404540001045c4d617841646472657373436f756e744578636565646564000004784d6178696d756d206164647265737320636f756e74206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e110b000004082ce10100150b0c5470616c6c65745f61697264726f705f636c61696d731870616c6c6574144572726f7204045400012060496e76616c6964457468657265756d5369676e61747572650000046c496e76616c696420457468657265756d207369676e61747572652e58496e76616c69644e61746976655369676e617475726500010488496e76616c6964204e617469766520287372323535313929207369676e617475726550496e76616c69644e61746976654163636f756e740002047c496e76616c6964204e6174697665206163636f756e74206465636f64696e67405369676e65724861734e6f436c61696d00030478457468657265756d206164647265737320686173206e6f20636c61696d2e4053656e6465724861734e6f436c61696d000404b04163636f756e742049442073656e64696e67207472616e73616374696f6e20686173206e6f20636c61696d2e30506f74556e646572666c6f77000508490154686572652773206e6f7420656e6f75676820696e2074686520706f7420746f20706179206f757420736f6d6520756e76657374656420616d6f756e742e2047656e6572616c6c7920696d706c6965732061306c6f676963206572726f722e40496e76616c696453746174656d656e740006049041206e65656465642073746174656d656e7420776173206e6f7420696e636c756465642e4c56657374656442616c616e6365457869737473000704a4546865206163636f756e7420616c7265616479206861732061207665737465642062616c616e63652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e190b0c3070616c6c65745f726f6c65731474797065733c52657374616b696e674c656467657204045400002001147374617368000130543a3a4163636f756e744964000114746f74616c7501013042616c616e63654f663c543e00011c70726f66696c65a906012850726f66696c653c543e000114726f6c65731d0b01f4426f756e64656442547265654d61703c526f6c65547970652c205265636f72643c543e2c20543a3a4d6178526f6c657350657256616c696461746f723e000120726f6c655f6b6579e5060170426f756e6465645665633c75382c20543a3a4d61784b65794c656e3e000124756e6c6f636b696e672d0b01f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f7265776172647325090194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e00014c6d61785f6163746976655f736572766963657310010c75333200001d0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01ed01045601b506045300000400210b013842547265654d61703c4b2c20563e0000210b042042547265654d617008044b01ed01045601b506000400250b000000250b000002290b00290b00000408ed01b506002d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401310b045300000400350b01185665633c543e0000310b0c3070616c6c65745f726f6c65731474797065732c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c75657501011c42616c616e636500010c657261bd020120457261496e6465780000350b000002310b00390b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ed01045300000400f90101185665633c543e00003d0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0100045601100453000004004509013842547265654d61703c4b2c20563e0000410b0c3070616c6c65745f726f6c65731870616c6c6574144572726f7204045400014c304e6f7456616c696461746f72000004404e6f7420612076616c696461746f722e3c486173526f6c6541737369676e65640001048c56616c696461746f72206861732061637469766520726f6c652061737369676e65642e3c526f6c654e6f7441737369676e6564000204b0476976656e20726f6c65206973206e6f742061737369676e656420746f207468652076616c696461746f722e204d6178526f6c65730003049c4d617820726f6c65206c696d6974207265616368656420666f7220746865206163636f756e742e4c526f6c6543616e6e6f74426552656d6f7665640004042101526f6c652063616e6e6f742064756520746f2070656e64696e67206a6f62732c2077686963682063616e2774206265206f70746564206f757420617420746865206d6f6d656e742e7852657374616b696e67416d6f756e7443616e6e6f744265557064617465640005045d0152657374616b696e6720616d6f756e742063616e6e6f74206265206c6f77657265642069662074686572652061726520616e792070656e64696e67206a6f62732e20596f752063616e206f6e6c7920616464206d6f726558457863656564734d617852657374616b6556616c75650006040101496e76616c69642052657374616b696e6720616d6f756e742c2073686f756c64206e6f742065786365656420746f74616c207374616b656420616d6f756e742e64496e73756666696369656e7452657374616b696e67426f6e6400070431015265207374616b696e6720616d6f756e742073686f756c642062652067726561746572207468616e206d696e696d756d2052657374616b696e6720626f6e6420726571756972656d656e742e4c50726f66696c655570646174654661696c65640008045850726f66696c6520557064617465206661696c65642e5050726f66696c65416c7265616479457869737473000904cc50726f66696c6520616c72656164792065786973747320666f7220676976656e2076616c696461746f72206163636f756e742e384e6f50726f66696c65466f756e64000a04cc537461736820636f6e74726f6c6c6572206163636f756e74206e6f7420666f756e6420696e20526f6c6573204c65646765722e6850726f66696c6544656c657465526571756573744661696c6564000b08490150726f66696c652064656c6574652072657175657374206661696c65642064756520746f2070656e64696e67206a6f62732c2077686963682063616e2774206265206f70746564206f7574206174207468651c6d6f6d656e742e5853657373696f6e4b6579734e6f7450726f7669646564000c046053657373696f6e4b657973206e6f742070726f76696465643c4b657953697a654578636565646564000d04444b65792073697a652065786365656465644c43616e6e6f7447657443757272656e74457261000e045c43616e6e6f742066696e642043757272656e742065726148496e76616c6964457261546f526577617264000f0440496e76616c69642065726120696e666f2c426f756e644e6f744d65740010044c4f7574206f6620626f756e647320696e70757438416c7265616479436c61696d65640011045c5265776172647320616c726561647920636c61696d6564304e6f4d6f72654368756e6b7300120470556e6c6f636b206368756e6b7320616c72656164792066696c6c6564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e450b0c4474616e676c655f7072696d697469766573106a6f62732c5068617365526573756c7424244163636f756e74496401002c426c6f636b4e756d626572012c3c4d61785061727469636970616e7473010d02244d61784b65794c656e01cd06284d6178446174614c656e01d5063c4d61785369676e61747572654c656e01d106404d61785375626d697373696f6e4c656e0111022c4d617850726f6f664c656e01d906584d61784164646974696f6e616c506172616d734c656e011502001401146f776e65720001244163636f756e744964000118726573756c74c90601a1014a6f62526573756c743c4d61785061727469636970616e74732c204d61784b65794c656e2c204d61785369676e61747572654c656e2c204d6178446174614c656e2c0a4d617850726f6f664c656e2c204d61784164646974696f6e616c506172616d734c656e2c3e00010c74746c2c012c426c6f636b4e756d6265720001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e0001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e0000490b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010102045300000400fd0101185665633c543e00004d0b0c2c70616c6c65745f6a6f6273186d6f64756c65144572726f720404540001483c496e76616c69644a6f62506861736500000458696e76616c69642070686173652070726f766964656440496e76616c696456616c696461746f7200010498476976656e2076616c696461746f72206e6f742076616c696420666f72206a6f62207479706540496e76616c69644a6f62506172616d730002048c696e76616c696420706172616d732c2063616e6e6f742065786563757465206a6f62735850726576696f7573526573756c744e6f74466f756e640003046863616e6e6f742066696e64207068617365203120726573756c7434526573756c74457870697265640004046c5468652070726576696f757320726573756c742065787069726564444a6f62416c72656164794578706972656400050460496e76616c6964206a6f622065787069727920696e7075742c4a6f624e6f74466f756e640006047c54686520726571756573746564206a6f6220776173206e6f7420666f756e645850686173654f6e65526573756c744e6f74466f756e640007044c503120726573756c74206e6f7420666f756e64244e6f52657761726473000804786e6f207265776172647320666f756e6420666f722076616c696461746f724c4e6f74456e6f75676856616c696461746f7273000904744e6f7420656e6f7567682076616c696461746f727320746f20657869742c456d707479526573756c74000a0430656d70747920726573756c7420456d7074794a6f62000b0424656d707479206a6f626056616c696461746f72526f6c654b65794e6f74466f756e64000c047456616c696461746f7220726f6c65206b6579206e6f7420666f756e642e54526573756c744e6f74457870656374656454797065000d0468556e657870656374656420726573756c742070726f7669646564304e6f5065726d697373696f6e000e04a04e6f207065726d697373696f6e20746f206368616e6765207065726d69747465642063616c6c65724c546f6f4d616e795061727469636970616e7473000f047845786365656473206d6178207061727469636970616e74206c696d69747344457863656564734d61784b657953697a6500100440496e76616c6964204b65792073697a655c546f6f4d616e794a6f6273466f7256616c696461746f72001104a856616c696461746f722065786365656473206c696d6974206f66206d617820616374697665206a6f6273048054686520604572726f726020656e756d206f6620746869732070616c6c65742e510b0c2870616c6c65745f646b671870616c6c6574144572726f720404540001c05043616e6e6f7452657472656976655369676e6572000004a843616e6e6f74207265747265697665207369676e6572732066726f6d20746865207369676e6174757265404e6f74456e6f7567685369676e657273000104804e6f7420656e6f756768207369676e65727320666f72207468726573686f6c6450496e76616c69645369676e61747572654461746100020498546865207369676e6572732068617665207369676e656420646966666572656e7420646174614c4e6f5061727469636970616e7473466f756e64000304544e6f207061727469636970616e747320666f756e64444e6f5369676e617475726573466f756e640004044c4e6f207369676e61747572657320666f756e6438496e76616c69644a6f62547970650005044c556e6578706563746564206a6f622074797065484475706c69636174655369676e61747572650006049c4475706c6963617465207369676e617475726520666f756e6420696e207375626d697373696f6e40496e76616c69645369676e61747572650007046c496e76616c6964207369676e6174757265207375626d697474656458496e76616c69645369676e6174757265536368656d6500080460496e76616c6964207369676e617475726520736368656d657c496e76616c69645369676e6174757265446573657269616c697a6174696f6e00090484496e76616c6964207369676e617475726520646573657269616c697a6174696f6e4c496e76616c6964566572696679696e674b6579000a047c496e76616c696420766572696679696e67206b6579207375626d697474656488496e76616c6964566572696679696e674b6579446573657269616c697a6174696f6e000b0494496e76616c696420766572696679696e67206b657920646573657269616c697a6174696f6e485369676e696e674b65794d69736d61746368000c046c5369676e65642077697468206120646966666572656e74206b65796c496e76616c69645061727469636970616e745075626c69634b6579000d0478496e76616c6964207061727469636970616e74207075626c6963206b65794c496e76616c6964426c735075626c69634b6579000e0458496e76616c696420424c53207075626c6963206b65793c496e76616c6964526f6c6554797065000f0478496e76616c6964204d69736265686176696f7220526f6c6520747970652e50496e76616c69644a757374696669636174696f6e0010046c496e76616c6964204a757374696669636174696f6e20747970652e544d616c666f726d6564526f756e644d657373616765001104a0436f756c64206e6f7420646573657269616c697a652074686520726f756e64206d6573736167652e4c4e6f745369676e656442794f6666656e646572001204c05369676e656420526f756e64204d657373616765206e6f74207369676e656420627920746865206f6666656e6465722e4456616c69644465636f6d6d69746d656e7400131090546865207375626d6974746564206465636f6d6d69746d656e742069732076616c69642e00d454686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e742069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964213456616c69644461746153697a65001410b8546865207375626d6974746564206465636f6d6d69746d656e7420646174612073697a652069732076616c69642e00fc54686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e7420646174612073697a652069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964216056616c696446656c646d616e566572696669636174696f6e001510cc546865207375626d6974746564206d65737361676573207061737365642046656c646d616e20766572696669636174696f6e2e00110154686973206572726f722069732072657475726e6564207768656e20746865206d65737361676573207061737365642046656c646d616e20766572696669636174696f6e90627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964214456616c69645363686e6f727250726f6f6600161494546865207375626d6974746564205363686e6f72722050726f6f662069732076616c69642e00d054686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e7420616e6420697473845363686e6f7272206172652076616c69642e20627574207468652063616c6c657254636c61696d7320697420697320696e76616c69642e6c56616c696452696e67506564657273656e506172616d6574657273001710c4546865207375626d69747465642072696e6720706564657273656e20706172616d6574657273206172652076616c69642e00090154686973206572726f722069732072657475726e6564207768656e207468652072696e6720706564657273656e20706172616d6574657273206172652076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c69642e3456616c69644d6f6450726f6f6600181084546865207375626d6974746564204d6f642050726f6f662069732076616c69642e00c854686973206572726f722069732072657475726e6564207768656e20746865204d6f642050726f6f662069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c69642e6056616c696446726f73745369676e6174757265536861726500191001012d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202f2f2f010120202020202020202020202020202020202020202020202046524f5354204552524f5253202020202020202020202020202020202020202020202020202f2f2f01012d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202f2f2f6c56616c69642046524f5354207369676e617475726520736861726580496e76616c696446726f73744d65737361676553657269616c697a6174696f6e001a048c496e76616c69642046524f5354206d6573736167652073657269616c697a6174696f6e88496e76616c696446726f73744d657373616765446573657269616c697a6174696f6e001b0494496e76616c69642046524f5354206d65737361676520646573657269616c697a6174696f6e80496e76616c69644964656e746966696572446573657269616c697a6174696f6e001c0488496e76616c6964206964656e74696669657220646573657269616c697a6174696f6e4c56616c696446726f73745369676e6174757265001d04d056616c69642046524f5354207369676e6174757265206572726f7220666f722061206d69736265686176696f72207265706f727444556e6b6e6f776e4964656e746966696572001e0448556e6b6e6f776e206964656e7469666965724c4475706c69636174654964656e746966696572001f04504475706c6963617465206964656e74696669657270496e636f72726563744e756d6265724f664964656e746966696572730020047c496e636f7272656374206e756d626572206f66206964656e74696669657273804964656e74696669657244657269766174696f6e4e6f74537570706f727465640021048c4964656e7469666965722064657269766174696f6e206e6f7420737570706f727465645c4d616c666f726d656446726f73745369676e61747572650022044c4d616c666f726d6564207369676e617475726554496e76616c696446726f73745369676e61747572650023045c496e76616c69642046524f5354207369676e617475726568496e76616c696446726f73745369676e6174757265536861726500240474496e76616c69642046524f5354207369676e61747572652073686172656c496e76616c696446726f73745369676e6174757265536368656d6500250478496e76616c69642046524f5354207369676e617475726520736368656d65684d616c666f726d656446726f7374566572696679696e674b6579002604744d616c666f726d65642046524f535420766572696679696e67206b6579604d616c666f726d656446726f73745369676e696e674b65790027046c4d616c666f726d65642046524f5354207369676e696e67206b6579584d697373696e6746726f7374436f6d6d69746d656e74002804604d697373696e672046524f535420636f6d6d69746d656e74484964656e74697479436f6d6d69746d656e7400290460496e76616c69642046524f535420636f6d6d69746d656e743c46726f73744669656c644572726f72002a046046524f5354204669656c64207363616c6172206572726f723c46726f737447726f75704572726f72002b046446524f53542047726f757020656c656d656e74206572726f72444669656c64456c656d656e744572726f72002c044c4669656c6420656c656d656e74206572726f7240496e76616c69645075626c69634b6579002d0460496e76616c6964207075626c6963206b6579206572726f7238496e76616c69644d657373616765002e043c496e76616c6964206d6573736167655c4d616c666f726d6564537461726b5369676e6174757265002f04644d616c666f726d656420537461726b207369676e6174757265048054686520604572726f726020656e756d206f6620746869732070616c6c65742e550b0c3470616c6c65745f7a6b736161731870616c6c6574144572726f7204045400010c38496e76616c69644a6f62547970650000044c556e6578706563746564206a6f62207479706530496e76616c696450726f6f6600010434496e76616c69642070726f6f66384d616c666f726d656450726f6f660002083c4d616c666f726d65642050726f6f66886966207468652070726f6f66206279746573206973206e6f7420636f72726563742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e590b000004085d0b18005d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401610b045300000400650b01185665633c543e0000610b083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f787954797065018d022c426c6f636b4e756d626572012c000c012064656c65676174650001244163636f756e74496400012870726f78795f747970658d02012450726f78795479706500011464656c61792c012c426c6f636b4e756d6265720000650b000002610b00690b000004086d0b18006d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401710b045300000400750b01185665633c543e0000710b083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801302c426c6f636b4e756d626572012c000c01107265616c0001244163636f756e74496400012463616c6c5f68617368300110486173680001186865696768742c012c426c6f636b4e756d6265720000750b000002710b00790b0c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72404f70657261746f724d657461646174610c244163636f756e74496401001c42616c616e636501181c417373657449640118001401147374616b6518011c42616c616e636500014064656c65676174696f6e5f636f756e7410010c75333200011c72657175657374810b01a04f7074696f6e3c4f70657261746f72426f6e644c657373526571756573743c42616c616e63653e3e00012c64656c65676174696f6e73890b01bc5665633c44656c656761746f72426f6e643c4163636f756e7449642c2042616c616e63652c20417373657449643e3e000118737461747573910b01384f70657261746f725374617475730000810b04184f7074696f6e04045401850b0108104e6f6e6500000010536f6d650400850b0000010000850b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f725c4f70657261746f72426f6e644c65737352657175657374041c42616c616e6365011800080118616d6f756e7418011c42616c616e6365000130726571756573745f74696d65100128526f756e64496e6465780000890b0000028d0b008d0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f723444656c656761746f72426f6e640c244163636f756e74496401001c42616c616e636501181c417373657449640118000c012464656c656761746f720001244163636f756e744964000118616d6f756e7418011c42616c616e636500012061737365745f696418011c417373657449640000910b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72384f70657261746f7253746174757300010c1841637469766500000020496e6163746976650001001c4c656176696e670400100128526f756e64496e64657800020000950b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72404f70657261746f72536e617073686f740c244163636f756e74496401001c42616c616e636501181c417373657449640118000801147374616b6518011c42616c616e636500012c64656c65676174696f6e73890b01bc5665633c44656c656761746f72426f6e643c4163636f756e7449642c2042616c616e63652c20417373657449643e3e0000990b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f724444656c656761746f724d657461646174610c244163636f756e74496401001c42616c616e636501181c417373657449640118001401206465706f736974739d0b016842547265654d61703c417373657449642c2042616c616e63653e00014477697468647261775f7265717565737473a90b01985665633c5769746864726177526571756573743c417373657449642c2042616c616e63653e3e00012c64656c65676174696f6e73b10b01cc5665633c426f6e64496e666f44656c656761746f723c4163636f756e7449642c2042616c616e63652c20417373657449643e3e00016864656c656761746f725f756e7374616b655f7265717565737473b90b01c45665633c426f6e644c657373526571756573743c4163636f756e7449642c20417373657449642c2042616c616e63653e3e000118737461747573c10b013c44656c656761746f7253746174757300009d0b042042547265654d617008044b011804560118000400a10b000000a10b000002a50b00a50b00000408181800a90b000002ad0b00ad0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c576974686472617752657175657374081c4173736574496401181c42616c616e63650118000c012061737365745f696418011c41737365744964000118616d6f756e7418011c42616c616e636500013c7265717565737465645f726f756e64100128526f756e64496e6465780000b10b000002b50b00b50b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f7244426f6e64496e666f44656c656761746f720c244163636f756e74496401001c42616c616e636501181c417373657449640118000c01206f70657261746f720001244163636f756e744964000118616d6f756e7418011c42616c616e636500012061737365745f696418011c417373657449640000b90b000002bd0b00bd0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c426f6e644c657373526571756573740c244163636f756e74496401001c4173736574496401181c42616c616e63650118001001206f70657261746f720001244163636f756e74496400012061737365745f696418011c41737365744964000118616d6f756e7418011c42616c616e636500013c7265717565737465645f726f756e64100128526f756e64496e6465780000c10b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c44656c656761746f7253746174757300010818416374697665000000404c656176696e675363686564756c65640400100128526f756e64496e64657800010000c50b0000021800c90b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c7265776172647330526577617264436f6e6669670818506f6f6c496401181c42616c616e636501180008011c636f6e66696773cd0b01cc42547265654d61703c506f6f6c49642c20526577617264436f6e666967466f724173736574506f6f6c3c42616c616e63653e3e00016477686974656c69737465645f626c75657072696e745f696473ed0401205665633c7533323e0000cd0b042042547265654d617008044b0118045601d10b000400d50b000000d10b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c7265776172647360526577617264436f6e666967466f724173736574506f6f6c041c42616c616e636501180008010c6170799902011c50657263656e7400010c63617018011c42616c616e63650000d50b000002d90b00d90b0000040818d10b00dd0b0c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c6574144572726f720404540001783c416c72656164794f70657261746f720000048c546865206163636f756e7420697320616c726561647920616e206f70657261746f722e28426f6e64546f6f4c6f7700010470546865207374616b6520616d6f756e7420697320746f6f206c6f772e344e6f74416e4f70657261746f720002047c546865206163636f756e74206973206e6f7420616e206f70657261746f722e2843616e6e6f744578697400030460546865206163636f756e742063616e6e6f7420657869742e38416c72656164794c656176696e6700040480546865206f70657261746f7220697320616c7265616479206c656176696e672e484e6f744c656176696e674f70657261746f72000504a8546865206163636f756e74206973206e6f74206c656176696e6720617320616e206f70657261746f722e3c4e6f744c656176696e67526f756e64000604cc54686520726f756e6420646f6573206e6f74206d6174636820746865207363686564756c6564206c6561766520726f756e642e4c4e6f5363686564756c6564426f6e644c657373000704985468657265206973206e6f207363686564756c656420756e7374616b6520726571756573742e6c426f6e644c657373526571756573744e6f745361746973666965640008049454686520756e7374616b652072657175657374206973206e6f74207361746973666965642e444e6f744163746976654f70657261746f720009046c546865206f70657261746f72206973206e6f74206163746976652e484e6f744f66666c696e654f70657261746f72000a0470546865206f70657261746f72206973206e6f74206f66666c696e652e40416c726561647944656c656761746f72000b048c546865206163636f756e7420697320616c726561647920612064656c656761746f722e304e6f7444656c656761746f72000c047c546865206163636f756e74206973206e6f7420612064656c656761746f722e70576974686472617752657175657374416c7265616479457869737473000d048841207769746864726177207265717565737420616c7265616479206578697374732e4c496e73756666696369656e7442616c616e6365000e0494546865206163636f756e742068617320696e73756666696369656e742062616c616e63652e444e6f576974686472617752657175657374000f04745468657265206973206e6f20776974686472617720726571756573742e444e6f426f6e644c65737352657175657374001004705468657265206973206e6f20756e7374616b6520726571756573742e40426f6e644c6573734e6f7452656164790011048454686520756e7374616b652072657175657374206973206e6f742072656164792e70426f6e644c65737352657175657374416c7265616479457869737473001204844120756e7374616b65207265717565737420616c7265616479206578697374732e6041637469766553657276696365735573696e674173736574001304a854686572652061726520616374697665207365727669636573207573696e67207468652061737365742e484e6f41637469766544656c65676174696f6e001404785468657265206973206e6f74206163746976652064656c65676174696f6e4c41737365744e6f7457686974656c697374656400150470546865206173736574206973206e6f742077686974656c6973746564344e6f74417574686f72697a6564001604cc546865206f726967696e206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e3441737365744e6f74466f756e6400170464546865206173736574204944206973206e6f7420666f756e646c426c75657072696e74416c726561647957686974656c69737465640018049c54686520626c75657072696e7420494420697320616c72656164792077686974656c6973746564484e6f77697468647261775265717565737473001904684e6f20776974686472617720726571756573747320666f756e64644e6f4d61746368696e67776974686472617752657175657374001a04884e6f206d61746368696e67207769746864726177207265716573747320666f756e64484173736574416c7265616479496e506f6f6c001b0494417373657420616c72656164792065786973747320696e20612072657761726420706f6f6c3841737365744e6f74496e506f6f6c001c04784173736574206e6f7420666f756e6420696e2072657761726420706f6f6c30506f6f6c4e6f74466f756e64001d04785468652072657761726420706f6f6c20646f6573206e6f7420657869737404744572726f727320656d6974746564206279207468652070616c6c65742ee10b00000408083400e50b0c5c7379676d615f6163636573735f73656772656761746f721870616c6c6574144572726f7204045400010834556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e746564444772616e744163636573734661696c6564000104e44661696c656420746f206772616e742065787472696e73696320616363657373207065726d697373696f6e20746f20616e206163636f756e74048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee90b0000040808a90200ed0b0c587379676d615f62617369635f66656568616e646c65721870616c6c6574144572726f7204045400010834556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e7465643041636365737344656e696564000104a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef10b0c607379676d615f6665655f68616e646c65725f726f757465721870616c6c6574144572726f720404540001083041636365737344656e696564000004a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e34556e696d706c656d656e7465640001045846756e6374696f6e20756e696d706c656d656e746564048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef50b0000040c10181800f90b0c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c6574144572726f7204045400011034556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e7465643041636365737344656e696564000104a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e44466565526174654f75744f6652616e67650002048c4665652072617465206973206f7574206f662072616e6765205b302c203130303030293c496e76616c6964466565426f756e640003047c50657263656e746167652066656520626f756e6420697320696e76616c6964048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd0b00000408082c00010c042042547265654d617008044b01a90204560100000400050c000000050c000002090c00090c00000408a90200000d0c000002110c00110c00000408a9020400150c0c307379676d615f6272696467651870616c6c6574144572726f720404540001783041636365737344656e696564000004a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e3c4261644d70635369676e6174757265000104c450726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792072656c617965724c496e73756666696369656e7442616c616e636500020498496e73756666696369656e742062616c616e6365206f6e2073656e646572206163636f756e74545472616e736163744661696c65644465706f736974000304844173736574207472616e736163746f7220657865637574696f6e206661696c6564585472616e736163744661696c65645769746864726177000400605472616e736163744661696c65644665654465706f736974000500705472616e736163744661696c6564486f6c64496e5265736572766564000600845472616e736163744661696c656452656c6561736546726f6d52657365727665640007003c466565546f6f457870656e73697665000804c85468652077697468647261776e20616d6f756e742063616e206e6f7420636f7665722074686520666565207061796d656e74444d697373696e674d7063416464726573730009044c4d50432061646472657373206e6f74207365744c4d7063416464724e6f74557064617461626c65000a04784d504320616464726573732063616e206e6f74206265207570646174656430427269646765506175736564000b04404272696467652069732070617573656438427269646765556e706175736564000c044842726964676520697320756e706175736564404d697373696e67466565436f6e666967000d046446656520636f6e666967206f7074696f6e206d697373696e673441737365744e6f74426f756e64000e04804173736574206e6f7420626f756e6420746f2061207265736f757263652069645c50726f706f73616c416c7265616479436f6d706c657465000f049c50726f706f73616c2068617320656974686572206661696c6564206f722073756363656564656444456d70747950726f706f73616c4c6973740010044c50726f706f73616c206c69737420656d707479405472616e736163746f724661696c65640011046c5472616e736163746f72206f7065726174696f6e206661696c65647c496e76616c69644465706f73697444617461496e76616c69644c656e677468001204604465706f7369742064617461206e6f7420636f72726563747c496e76616c69644465706f73697444617461496e76616c6964416d6f756e74001300a0496e76616c69644465706f73697444617461496e76616c6964526563697069656e744c656e677468001400a4496e76616c69644465706f73697444617461526563697069656e744c656e6774684e6f744d6174636800150088496e76616c69644465706f73697444617461496e76616c6964526563697069656e740016005844657374446f6d61696e4e6f74537570706f72746564001704644465737420646f6d61696e206e6f7420737570706f727465644c44657374436861696e49444e6f744d617463680018045c4465737420636861696e206964206e6f74206d61746368544578747261637444657374446174614661696c6564001904884661696c656420746f20657874726163742064657374696e6174696f6e206461746154446563696d616c436f6e76657273696f6e4661696c001a047c4661696c6564206f6e2074686520646563696d616c20636f6e766572746572504465706f7369744e6f6e63654f766572666c6f77001b04ac4465706f736974206e6f6e6365206861732072656163686564206d617820696e74656765722076616c7565744e6f4c6971756964697479486f6c6465724163636f756e74426f756e64001c04b44173736574206e6f7420626f756e6420746f2061206c697175696469747920686f6c646572206163636f756e7434556e696d706c656d656e746564001d045846756e6374696f6e20756e696d706c656d656e746564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e190c0c4466705f73656c665f636f6e7461696e65644c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730165031043616c6c015d03245369676e6174757265010506144578747261011d0c0004004d0c01250173705f72756e74696d653a3a67656e657269633a3a556e636865636b656445787472696e7369633c416464726573732c2043616c6c2c205369676e61747572652c2045787472610a3e00001d0c00000424210c250c290c2d0c310c390c3d0c410c450c00210c10306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000250c10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000290c10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000002d0c10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000310c10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400350c010c4572610000350c102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000390c10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400bd020120543a3a4e6f6e636500003d0c10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000410c086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e74040454000004007501013042616c616e63654f663c543e0000450c08746672616d655f6d657461646174615f686173685f657874656e73696f6e44436865636b4d657461646174614861736804045400000401106d6f6465490c01104d6f64650000490c08746672616d655f6d657461646174615f686173685f657874656e73696f6e104d6f64650001082044697361626c65640000001c456e61626c6564000100004d0c102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730165031043616c6c015d03245369676e6174757265010506144578747261011d0c00040034000000510c085874616e676c655f746573746e65745f72756e74696d651c52756e74696d6500000000c81853797374656d011853797374656d441c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b48617368010104052c308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d62657201002c200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023005030400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000090304000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100780400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100780400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500000103040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500000d03040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01110301541830426c6f636b576569676874732103f901025b1f5d000b00204aa9d10113ffffffffffffffffc2a0a91d00010bd05f9fa62e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf010000c2a0a91d00010bd0e7f110a3011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a74130000000000000040c2a0a91d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746831033000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e742c200001000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687439034040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e3d03c1033874616e676c652d746573746e65743874616e676c652d746573746e6574010000004c0400000100000040df6acb689907609b0400000037e397fc7c91f5e40200000040fe3ad401f8959a060000007ee4fdd3f4b9d4d001000000b18f582993e030f401000000582211f65bb14b8905000000e65b00e46cedd0aa02000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000cbca25e39f14238702000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000ed99c5acb25eedf503000000bd78255d4feeea1f04000000a33d43f58731ad840200000001000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669789102082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e015103002454696d657374616d70012454696d657374616d70080c4e6f7701002c20000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010078040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e0155030004344d696e696d756d506572696f642c20b80b000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e0001105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e015903017c0001a907026052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100ad0704000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e0000000003184173736574730118417373657473101441737365740001040218b107040004542044657461696c73206f6620616e2061737365742e1c4163636f756e740001080202b907bd07040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c020202c907cd0704000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d657461646174610101040218d1075000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e016103018c1c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f73697418400000e8890423c78a000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f73697418400000e8890423c78a00000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f736974426173651840000054129336377505000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f7369745065724279746518400000c16ff2862300000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f736974184000e40b540200000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e01d907042042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200dd07040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200ed07040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c64730101040200f9070400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a657301010402000d080400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e016903019010484578697374656e7469616c4465706f736974184000e40b5402000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e284d6178467265657a657310103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01210805485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100250840000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100290804000000019804604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000628417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000071042616265011042616265442845706f6368496e64657801002c20000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f72697469657301002d080400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100810320000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100810320000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e67650000890304000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f72697469657301002d0804000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510390804000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a65640000410804000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100410104001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f6368537461727401008d034000000000000000000000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e65737301002c20000000000000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000590804000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e666967000059080400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f63687301005d0804002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e01710300103445706f63684475726174696f6e2c20b0040000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652c20701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010e80300000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f776564344d61784e6f6d696e61746f727310100001000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e016108081c4772616e647061011c4772616e6470611c1453746174650100650804000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006908040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f7263656400002c040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c656400008d030400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e74536574496401002c200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e000104052c1004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e2c417574686f72697469657301006d0804000484205468652063757272656e74206c697374206f6620617574686f7269746965732e019503019c0c384d6178417574686f7269746965731010e8030000045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310100001000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e74726965732c20000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e017108091c496e6469636573011c496e646963657304204163636f756e7473000104021075080400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01c90301b0041c4465706f7369741840000064a7b3b6e00d000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e0179080a2444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010010100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301007d08040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040510890804000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010010100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f6600010405108d0804000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405009908e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100780400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000b108040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630b50804000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040630780400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402c430040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e490120546865206048617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01cd0301b4303c456e6163746d656e74506572696f642c20c0a800000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f642c20201c00000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f642c20c08901000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f642c20c0a8000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400000a0dec5adc935360000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f7765647804010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f642c20807000000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f642c20c0a800000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657310106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73101064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473101064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656410106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01b9080b1c436f756e63696c011c436f756e63696c182450726f706f73616c730100bd08040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406305d03040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001040630c108040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010025020400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01e90301c804444d617850726f706f73616c576569676874243c070010a5d4e813ffffffffffffff7f04250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e01c5080c1c56657374696e67011c56657374696e67081c56657374696e670001040200c908040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100d10804000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01ed0301cc08444d696e5665737465645472616e736665721840000010632d5ec76b050000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c0000000001d5080d24456c656374696f6e730124456c656374696f6e73141c4d656d626572730100d90804000c74205468652063757272656e7420656c6563746564206d656d626572732e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100d90804001084205468652063757272656e742072657365727665642072756e6e6572732d75702e00590120496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865bc206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e2843616e646964617465730100d40400185901205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f72d020616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e007c205365636f6e6420656c656d656e7420697320746865206465706f7369742e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e38456c656374696f6e526f756e647301001010000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e18566f74696e670101040500e108840000000000000000000000000000000000000000000000000000000000000000000cb820566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e00c42054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e01f50301d0282050616c6c657449644d0320706872656c65637404d0204964656e74696669657220666f722074686520656c656374696f6e732d70687261676d656e2070616c6c65742773206c6f636b3443616e646964616379426f6e6418400000a0dec5adc935360000000000000004050120486f77206d7563682073686f756c64206265206c6f636b656420757020696e206f7264657220746f207375626d6974206f6e6527732063616e6469646163792e38566f74696e67426f6e6442617365184000005053c91aa974050000000000000010942042617365206465706f736974206173736f636961746564207769746820766f74696e672e00550120546869732073686f756c642062652073656e7369626c79206869676820746f2065636f6e6f6d6963616c6c7920656e73757265207468652070616c6c65742063616e6e6f742062652061747461636b656420627994206372656174696e67206120676967616e746963206e756d626572206f6620766f7465732e40566f74696e67426f6e64466163746f721840000020f84dde700400000000000000000411012054686520616d6f756e74206f6620626f6e642074686174206e65656420746f206265206c6f636b656420666f72206561636820766f746520283332206279746573292e38446573697265644d656d626572731010050000000470204e756d626572206f66206d656d6265727320746f20656c6563742e404465736972656452756e6e65727355701010030000000478204e756d626572206f662072756e6e6572735f757020746f206b6565702e305465726d4475726174696f6e2c20c0890100000000000c510120486f77206c6f6e6720656163682073656174206973206b6570742e205468697320646566696e657320746865206e65787420626c6f636b206e756d62657220617420776869636820616e20656c656374696f6e5d0120726f756e642077696c6c2068617070656e2e2049662073657420746f207a65726f2c206e6f20656c656374696f6e732061726520657665722074726967676572656420616e6420746865206d6f64756c652077696c6c5020626520696e2070617373697665206d6f64652e344d617843616e6469646174657310104000000018e420546865206d6178696d756d206e756d626572206f662063616e6469646174657320696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e003101205768656e2074686973206c696d69742069732072656163686564206e6f206d6f72652063616e646964617465732061726520616363657074656420696e2074686520656c656374696f6e2e244d6178566f7465727310100002000018f820546865206d6178696d756d206e756d626572206f6620766f7465727320746f20616c6c6f7720696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e00d8205768656e20746865206c696d6974206973207265616368656420746865206e657720766f74657273206172652069676e6f7265642e404d6178566f746573506572566f7465721010640000001090204d6178696d756d206e756d62657273206f6620766f7465732070657220766f7465722e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e01e5080e68456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e7450686173650100e80400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e0000e90804000c3d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e006020416c7761797320736f727465642062792073636f72652e20536e617073686f740000f1080400107020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e384465736972656454617267657473000010040010cc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e40536e617073686f744d657461646174610000d1040400109820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e6469636573010001090400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d617000010405100d0904001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f72650000e40400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e01fd0301dc4034556e7369676e656450686173652c2058020000000000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173652c2058020000000000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c64f81000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e384f6666636861696e5265706561742c20050000000000000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792c20feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e7310100a0000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d617857656967687424400b1089578f2e011366666666666666a61494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100300000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e6564526577617264426173651840000064a7b3b6e00d0000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f73697442797465184000008a5d78456301000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e284d617857696e6e6572731010e803000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e67746810100000360000384d696e65724d617857656967687424400b1089578f2e011366666666666666a600544d696e65724d6178566f746573506572566f746572101010000000003c4d696e65724d617857696e6e6572731010e8030000000111090f1c5374616b696e67011c5374616b696e67a03856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100250204000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e0100f810000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c6564676572000104020015090400104501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e007501204e6f74653a20416c6c2074686520726561647320616e64206d75746174696f6e7320746f20746869732073746f72616765202a4d5553542a20626520646f6e65207468726f75676820746865206d6574686f6473206578706f736564e8206279205b605374616b696e674c6564676572605d20746f20656e73757265206461746120616e64206c6f636b20636f6e73697374656e63792e1450617965650001040500f404000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f72730101040500fc0800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f72730001040500290904004c750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468652d01206163636f756e742773205b604e6f6d696e6174696f6e7351756f74613a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e9020496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e2441637469766545726100002d09040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400105501205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b6572730101080505310971010c0000002078204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e002901204e6f74653a20446570726563617465642073696e6365207631342e205573652060457261496e666f6020696e737465616420746f20776f726b2077697468206578706f73757265732e4c457261735374616b6572734f76657276696577000108050531093509040030b82053756d6d617279206f662076616c696461746f72206578706f73757265206174206120676976656e206572612e007101205468697320636f6e7461696e732074686520746f74616c207374616b6520696e20737570706f7274206f66207468652076616c696461746f7220616e64207468656972206f776e207374616b652e20496e206164646974696f6e2c75012069742063616e20616c736f206265207573656420746f2067657420746865206e756d626572206f66206e6f6d696e61746f7273206261636b696e6720746869732076616c696461746f7220616e6420746865206e756d626572206f666901206578706f73757265207061676573207468657920617265206469766964656420696e746f2e20546865207061676520636f756e742069732075736566756c20746f2064657465726d696e6520746865206e756d626572206f66ac207061676573206f6620726577617264732074686174206e6565647320746f20626520636c61696d65642e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742eac2053686f756c64206f6e6c79206265206163636573736564207468726f7567682060457261496e666f602e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206f766572766965772069732072657475726e65642e48457261735374616b657273436c69707065640101080505310971010c000000409820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e006501204e6f74653a205468697320697320646570726563617465642c2073686f756c64206265207573656420617320726561642d6f6e6c7920616e642077696c6c2062652072656d6f76656420696e20746865206675747572652e3101204e657720604578706f737572656073206172652073746f72656420696e2061207061676564206d616e6e657220696e2060457261735374616b65727350616765646020696e73746561642e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865a82060543a3a4d61784578706f737572655061676553697a65602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049742069732072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e002901204e6f74653a20446570726563617465642073696e6365207631342e205573652060457261496e666f6020696e737465616420746f20776f726b2077697468206578706f73757265732e40457261735374616b657273506167656400010c05050539093d09040018c020506167696e61746564206578706f73757265206f6620612076616c696461746f7220617420676976656e206572612e0071012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e2c207468656e207374617368206163636f756e7420616e642066696e616c6c79d42074686520706167652e2053686f756c64206f6e6c79206265206163636573736564207468726f7567682060457261496e666f602e00d4205468697320697320636c6561726564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e38436c61696d65645265776172647301010805053109ed04040018dc20486973746f7279206f6620636c61696d656420706167656420726577617264732062792065726120616e642076616c696461746f722e0069012054686973206973206b657965642062792065726120616e642076616c696461746f72207374617368207768696368206d61707320746f2074686520736574206f66207061676520696e6465786573207768696368206861766538206265656e20636c61696d65642e00cc2049742069732072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e484572617356616c696461746f72507265667301010805053109fc0800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4c4572617356616c696461746f7252657761726400010405101804000c2d012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510410914000000000008d0205265776172647320666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b6501010405101840000000000000000000000000000000000811012054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100050104000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e0100f810000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405105109040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100590904001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e457261000108050531096109040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505310918040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e73000104050065090400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c617368010104054d096909800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301006d09040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c640000990204000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e01e50401f01830486973746f72794465707468101050000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602c4501206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c2060436c61696d656452657761726473602c2060457261735374616b6572735061676564602c5c2060457261735374616b6572734f76657276696577602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563602d01206974656d20605374616b696e674c65646765722e6c65676163795f636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010030000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10100e00000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e10100a000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e4c4d61784578706f737572655061676553697a651010400000002cb020546865206d6178696d756d2073697a65206f6620656163682060543a3a4578706f7375726550616765602e00290120416e20604578706f737572655061676560206973207765616b6c7920626f756e64656420746f2061206d6178696d756d206f6620604d61784578706f737572655061676553697a656030206e6f6d696e61746f72732e00210120466f72206f6c646572206e6f6e2d7061676564206578706f737572652c206120726577617264207061796f757420776173207265737472696374656420746f2074686520746f70210120604d61784578706f737572655061676553697a6560206e6f6d696e61746f72732e205468697320697320746f206c696d69742074686520692f6f20636f737420666f722074686548206e6f6d696e61746f72207061796f75742e005901204e6f74653a20604d61784578706f737572655061676553697a6560206973207573656420746f20626f756e642060436c61696d6564526577617264736020616e6420697320756e7361666520746f207265647563659020776974686f75742068616e646c696e6720697420696e2061206d6967726174696f6e2e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e017509101c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010025020400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010078040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010079090400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100ed040400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050009050400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405810900040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e010505010901000189091128486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e7300010405108d090400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e676500005d09040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c61737429000000001220547265617375727901205472656173757279183450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051091090400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301009509040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e285370656e64436f756e74010010100000000004a42054686520636f756e74206f66207370656e647320746861742068617665206265656e206d6164652e185370656e647300010405109909040004d0205370656e647320746861742068617665206265656e20617070726f76656420616e64206265696e672070726f6365737365642e011905010d01203050726f706f73616c426f6e64d9011050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d18400000a0dec5adc9353600000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756db9060400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f642c204038000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726ed90110000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964a1092070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e305061796f7574506572696f642c200a000000000000000419012054686520706572696f6420647572696e6720776869636820616e20617070726f766564207472656173757279207370656e642068617320746f20626520636c61696d65642e01a5091320426f756e746965730120426f756e74696573102c426f756e7479436f756e74010010100000000004c0204e756d626572206f6620626f756e74792070726f706f73616c7320746861742068617665206265656e206d6164652e20426f756e746965730001040510a9090400047820426f756e7469657320746861742068617665206265656e206d6164652e48426f756e74794465736372697074696f6e730001040510b1090400048020546865206465736372697074696f6e206f66206561636820626f756e74792e3c426f756e7479417070726f76616c7301009509040004ec20426f756e747920696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f74207965742066756e6465642e0121050111012444426f756e74794465706f736974426173651840000064a7b3b6e00d000000000000000004e82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120626f756e74792070726f706f73616c2e60426f756e74794465706f7369745061796f757444656c61792c204038000000000000045901205468652064656c617920706572696f6420666f72207768696368206120626f756e74792062656e6566696369617279206e65656420746f2077616974206265666f726520636c61696d20746865207061796f75742e48426f756e7479557064617465506572696f642c208013030000000000046c20426f756e7479206475726174696f6e20696e20626c6f636b732e6043757261746f724465706f7369744d756c7469706c696572d9011020a10700101901205468652063757261746f72206465706f7369742069732063616c63756c6174656420617320612070657263656e74616765206f66207468652063757261746f72206665652e0039012054686973206465706f73697420686173206f7074696f6e616c20757070657220616e64206c6f77657220626f756e64732077697468206043757261746f724465706f7369744d61786020616e6454206043757261746f724465706f7369744d696e602e4443757261746f724465706f7369744d6178b9064401000010632d5ec76b0500000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4443757261746f724465706f7369744d696eb9064401000064a7b3b6e00d0000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e48426f756e747956616c75654d696e696d756d18400000f4448291634500000000000000000470204d696e696d756d2076616c756520666f72206120626f756e74792e48446174614465706f73697450657242797465184000008a5d7845630100000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e4c4d6178696d756d526561736f6e4c656e67746810102c0100000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756501b50914344368696c64426f756e7469657301344368696c64426f756e7469657314404368696c64426f756e7479436f756e7401001010000000000480204e756d626572206f6620746f74616c206368696c6420626f756e746965732e4c506172656e744368696c64426f756e74696573010104051010100000000008b0204e756d626572206f66206368696c6420626f756e746965732070657220706172656e7420626f756e74792ee0204d6170206f6620706172656e7420626f756e747920696e64657820746f206e756d626572206f66206368696c6420626f756e746965732e344368696c64426f756e7469657300010805055d09b90904000494204368696c6420626f756e7469657320746861742068617665206265656e2061646465642e5c4368696c64426f756e74794465736372697074696f6e730001040510b1090400049820546865206465736372697074696f6e206f662065616368206368696c642d626f756e74792e4c4368696c6472656e43757261746f72466565730101040510184000000000000000000000000000000000040101205468652063756d756c6174697665206368696c642d626f756e74792063757261746f722066656520666f72206561636820706172656e7420626f756e74792e01250501150108644d61784163746976654368696c64426f756e7479436f756e74101005000000041d01204d6178696d756d206e756d626572206f66206368696c6420626f756e7469657320746861742063616e20626520616464656420746f206120706172656e7420626f756e74792e5c4368696c64426f756e747956616c75654d696e696d756d1840000064a7b3b6e00d00000000000000000488204d696e696d756d2076616c756520666f722061206368696c642d626f756e74792e01c1091520426167734c6973740120426167734c6973740c244c6973744e6f6465730001040500c50904000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c69737442616773000104052cc90904000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01290501190104344261675468726573686f6c6473cd090919210300407a10f35a00006a70ccd4a96000009ef3397fbc660000a907ccd5306d00003d9a67fb0c740000a9bfa275577b0000a6fdf73217830000034f5d91538b0000132445651494000078081001629d00000302f63c45a70000392e6f7fc7b10000f59c23c6f2bc00004ae76aafd1c80000598a64846fd50000129fb243d8e200003f22e1ac18f1000033a4844c3e000100e2e51b895710010076a2c0b0732101006789b407a3330100793ed8d7f646010078131b81815b01000c1cf38a567101004437eeb68a8801009eb56d1434a10100335e9f156abb010067c3c7a545d701003218f340e1f40100de0b230d59140200699c11f5ca350200ad50a2c4565902009ae41c471e7f0200d0244e6745a70200f984ad51f2d10200ace7a7984dff0200a118325b822f0300ffa4c76dbe620300580bfd8532990300a9afce6812d30300109ad81b95100400d9caa519f551040038df488970970400bee1727949e10400cc73401fc62f0500b304f91831830500828bffb4d9db05001235383d143a0600a5b42a473a9e060036662d09ab080700f73aeab4cb790700b87e93d707f20700ffec23c0d1710800b84b0beca2f90800c9dcae7afc89090091752ba867230a0064f1cd4f76c60a003609be76c3730b0078655fdff32b0c00a407f5a5b6ef0c0052f61be7c5bf0d00da71bb70e79c0e000de9127eed870f001477987fb7811000ebee65ef328b11001269fe325ca5120033f8428b3fd113008ba57a13fa0f15001b2b60d0ba6216000d1d37d0c3ca17006c64fa5c6b4919002622c7411de01a00045bb9245c901c00233d83f6c25b1e00c8771c79064420003013fddef64a2200aa8b6e848172240082c096c4b2bc260016a3faebb72b29008296524ae1c12b00a636a865a4812e00d0e2d4509e6d31009c0a9a2796883400e4faafb27fd53700e6e64d367e573b000e4bd66de7113f0088b17db746084300b07def72603e470034de249635b84b00d48bd57b077a5000d0bd20ef5b885500b8f0467801e85a0010f88aee139e60003892925301b066009c95e4fc8e236d00b4126d10dffe730028b43e5976487b00a08a1c7a42078300b09ab083a0428b002846b2f463029400c861a42ade4e9d0050d23d4ae630a700805101a7e1b1b10038e501b2ccdbbc002016527844b9c800388924ba9055d50070ca35a4aebce200805fb1355cfbf0008035685d241f0001a0c3dcd96b361001d07862e87e50210160e852d09f7d330190662c5816cf460110274c3340575b01804be277a22971013082b92dfc5a880180d276075a01a101b0f511592b34bb014031745f580cd701802f6cee59a4f40140ff799b521814026075607d2986350260fde999a60d590200e5e71c91d07e02c0df2575cff2a602a07fd975899ad102a067009d4cf0fe0220dc29a1321f2f0320ff526b0a5562038088caa383c29803e05683fb5c9bd203401dd75d9516100400317e39a06e5104c0b071129de1960480b48c9192b1e00480e8124aad242f05c007ca7082858205007c13c45623db0540836fe869523906c0700f81466c9d0640f09c5017d00707c0e624b301e37807c0332ac78510f10780074ca1e4ca700800d5a9eb8c8bf80800a849588ed3880900804254142c220a80a25170e826c50a00e8d5fafc5e720b801df64e00792a0c80d4fe64f923ee0c006dd038ee19be0d001e90a494209b0e0010bf570e0a860f00da6a9db0b57f1000bf64afd810891100bb5b60cd17a31200f963f3aed6ce1300d5f004766a0d1500e099770202601600103d663bdfc71700de3e2d4158461900ecdbadb2d8dc1a0045c70007e38c1c00b8bde0fc11581e00ba5c2a211a402000407de46dcb462200dea55b03136e2400aaf1f3fcfcb7260014226f63b62629006492803e8fbc2b008486a6c7fc7b2e002cf05fc09b673100da63f7ed32823400f0b13fbdb5ce3700f291c41047503b00422a1a3c3c0a3f002c24212f20004300ac9342d4b6354700cc6ed7a400af4b00c4d022773e70500020017d89f57d5500f86387cef3dc5a008c4c7f7e54926000206207f284a36600cc1e05cb49166d00b42a7a70c4f07300d43a90e278397b0038f461ec53f78200a07264b9b1318b0048c9b3d464f09300007fe998bd3b9d0010058f17921ca70000dfaf7f469cb100e80c880bd6c4bc0058bdcb7ddca0c80038d18d37a03bd50030d55bf01ca1e200704ac01a0fdef0ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01d109163c4e6f6d696e6174696f6e506f6f6c73013c4e6f6d696e6174696f6e506f6f6c735440546f74616c56616c75654c6f636b65640100184000000000000000000000000000000000148c205468652073756d206f662066756e6473206163726f737320616c6c20706f6f6c732e0071012054686973206d69676874206265206c6f77657220627574206e6576657220686967686572207468616e207468652073756d206f662060746f74616c5f62616c616e636560206f6620616c6c205b60506f6f6c4d656d62657273605d590120626563617573652063616c6c696e672060706f6f6c5f77697468647261775f756e626f6e64656460206d696768742064656372656173652074686520746f74616c207374616b65206f662074686520706f6f6c277329012060626f6e6465645f6163636f756e746020776974686f75742061646a757374696e67207468652070616c6c65742d696e7465726e616c2060556e626f6e64696e67506f6f6c6027732e2c4d696e4a6f696e426f6e640100184000000000000000000000000000000000049c204d696e696d756d20616d6f756e7420746f20626f6e6420746f206a6f696e206120706f6f6c2e344d696e437265617465426f6e6401001840000000000000000000000000000000001ca0204d696e696d756d20626f6e6420726571756972656420746f20637265617465206120706f6f6c2e00650120546869732069732074686520616d6f756e74207468617420746865206465706f7369746f72206d7573742070757420617320746865697220696e697469616c207374616b6520696e2074686520706f6f6c2c20617320616e8820696e6469636174696f6e206f662022736b696e20696e207468652067616d65222e0069012054686973206973207468652076616c756520746861742077696c6c20616c7761797320657869737420696e20746865207374616b696e67206c6564676572206f662074686520706f6f6c20626f6e646564206163636f756e7480207768696c6520616c6c206f74686572206163636f756e7473206c656176652e204d6178506f6f6c730000100400086901204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e20706f6f6c7320746861742063616e2065786973742e20496620604e6f6e65602c207468656e20616e20756e626f756e646564206e756d626572206f664420706f6f6c732063616e2065786973742e384d6178506f6f6c4d656d626572730000100400084901204d6178696d756d206e756d626572206f66206d656d6265727320746861742063616e20657869737420696e207468652073797374656d2e20496620604e6f6e65602c207468656e2074686520636f756e74b8206d656d6265727320617265206e6f7420626f756e64206f6e20612073797374656d20776964652062617369732e544d6178506f6f6c4d656d62657273506572506f6f6c0000100400084101204d6178696d756d206e756d626572206f66206d656d626572732074686174206d61792062656c6f6e6720746f20706f6f6c2e20496620604e6f6e65602c207468656e2074686520636f756e74206f66a8206d656d62657273206973206e6f7420626f756e64206f6e20612070657220706f6f6c2062617369732e4c476c6f62616c4d6178436f6d6d697373696f6e0000f804000c690120546865206d6178696d756d20636f6d6d697373696f6e20746861742063616e2062652063686172676564206279206120706f6f6c2e2055736564206f6e20636f6d6d697373696f6e207061796f75747320746f20626f756e64250120706f6f6c20636f6d6d697373696f6e73207468617420617265203e2060476c6f62616c4d6178436f6d6d697373696f6e602c206e65636573736172792069662061206675747572650d012060476c6f62616c4d6178436f6d6d697373696f6e60206973206c6f776572207468616e20736f6d652063757272656e7420706f6f6c20636f6d6d697373696f6e732e2c506f6f6c4d656d626572730001040500d90904000c4020416374697665206d656d626572732e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e54436f756e746572466f72506f6f6c4d656d62657273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c426f6e646564506f6f6c730001040510ed09040004682053746f7261676520666f7220626f6e64656420706f6f6c732e54436f756e746572466f72426f6e646564506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c526577617264506f6f6c730001040510010a04000875012052657761726420706f6f6c732e2054686973206973207768657265207468657265207265776172647320666f72206561636820706f6f6c20616363756d756c6174652e205768656e2061206d656d62657273207061796f7574206973590120636c61696d65642c207468652062616c616e636520636f6d6573206f757420666f207468652072657761726420706f6f6c2e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e54436f756e746572466f72526577617264506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c537562506f6f6c7353746f726167650001040510050a04000819012047726f757073206f6620756e626f6e64696e6720706f6f6c732e20456163682067726f7570206f6620756e626f6e64696e6720706f6f6c732062656c6f6e677320746f2061290120626f6e64656420706f6f6c2c2068656e636520746865206e616d65207375622d706f6f6c732e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e64436f756e746572466f72537562506f6f6c7353746f72616765010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204d65746164617461010104051059010400045c204d6574616461746120666f722074686520706f6f6c2e48436f756e746572466f724d65746164617461010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170284c617374506f6f6c4964010010100000000004d0204576657220696e6372656173696e67206e756d626572206f6620616c6c20706f6f6c73206372656174656420736f206661722e4c52657665727365506f6f6c49644c6f6f6b7570000104050010040010dc20412072657665727365206c6f6f6b75702066726f6d2074686520706f6f6c2773206163636f756e7420696420746f206974732069642e0055012054686973206973206f6e6c79207573656420666f7220736c617368696e672e20496e20616c6c206f7468657220696e7374616e6365732c2074686520706f6f6c20696420697320757365642c20616e6420746865c0206163636f756e7473206172652064657465726d696e6973746963616c6c7920646572697665642066726f6d2069742e74436f756e746572466f7252657665727365506f6f6c49644c6f6f6b7570010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617040436c61696d5065726d697373696f6e73010104050045050400040101204d61702066726f6d206120706f6f6c206d656d626572206163636f756e7420746f207468656972206f7074656420636c61696d207065726d697373696f6e2e012d05011d010c2050616c6c65744964a1092070792f6e6f706c73048420546865206e6f6d696e6174696f6e20706f6f6c27732070616c6c65742069642e484d6178506f696e7473546f42616c616e636508040a301d0120546865206d6178696d756d20706f6f6c20706f696e74732d746f2d62616c616e636520726174696f207468617420616e20606f70656e6020706f6f6c2063616e20686176652e005501205468697320697320696d706f7274616e7420696e20746865206576656e7420736c617368696e672074616b657320706c61636520616e642074686520706f6f6c277320706f696e74732d746f2d62616c616e63657c20726174696f206265636f6d65732064697370726f706f7274696f6e616c2e006501204d6f72656f7665722c20746869732072656c6174657320746f207468652060526577617264436f756e7465726020747970652061732077656c6c2c206173207468652061726974686d65746963206f7065726174696f6e7355012061726520612066756e6374696f6e206f66206e756d626572206f6620706f696e74732c20616e642062792073657474696e6720746869732076616c756520746f20652e672e2031302c20796f7520656e73757265650120746861742074686520746f74616c206e756d626572206f6620706f696e747320696e207468652073797374656d20617265206174206d6f73742031302074696d65732074686520746f74616c5f69737375616e6365206f669c2074686520636861696e2c20696e20746865206162736f6c75746520776f72736520636173652e00490120466f7220612076616c7565206f662031302c20746865207468726573686f6c6420776f756c64206265206120706f6f6c20706f696e74732d746f2d62616c616e636520726174696f206f662031303a312e310120537563682061207363656e6172696f20776f756c6420616c736f20626520746865206571756976616c656e74206f662074686520706f6f6c206265696e672039302520736c61736865642e304d6178556e626f6e64696e67101008000000043d0120546865206d6178696d756d206e756d626572206f662073696d756c74616e656f757320756e626f6e64696e67206368756e6b7320746861742063616e20657869737420706572206d656d6265722e011d0a17245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e636500002c040000184167656e6461010104052c250a0400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b757000010405043d01040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01490501390108344d6178696d756d57656967687424400b00806e87740113cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101000020000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e01350a1820507265696d6167650120507265696d6167650c24537461747573466f720001040630390a0400049020546865207265717565737420737461747573206f66206120676976656e20686173682e4052657175657374537461747573466f720001040630410a0400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104068d094d0a0400000151050145010001510a19204f6666656e63657301204f6666656e636573081c5265706f7274730001040530550a040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e6465780101080505590ac9010400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e0001490100001a1c54785061757365011c54785061757365042c50617573656443616c6c7300010402550184040004b42054686520736574206f662063616c6c73207468617420617265206578706c696369746c79207061757365642e01550501510104284d61784e616d654c656e1010000100000c2501204d6178696d756d206c656e67746820666f722070616c6c6574206e616d6520616e642063616c6c206e616d65205343414c4520656e636f64656420737472696e67206e616d65732e00a820544f4f204c4f4e47204e414d45532057494c4c2042452054524541544544204153205041555345442e015d0a1b20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201002c2000000000000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b6579730100610a040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e4852656365697665644865617274626561747300010805055d0978040004350120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e646578602e38417574686f726564426c6f636b730101080505310910100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e015905015d010440556e7369676e65645072696f726974792c20ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01690a1c204964656e7469747901204964656e746974791c284964656e746974794f6600010405006d0a040010690120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e204669727374206974656d20697320746865e020726567697374726174696f6e2c207365636f6e6420697320746865206163636f756e742773207072696d61727920757365726e616d652e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f660001040200f9050400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500850a44000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e285265676973747261727301008d0a0400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e4c557365726e616d65417574686f72697469657300010405009d0a040004f42041206d6170206f6620746865206163636f756e74732077686f2061726520617574686f72697a656420746f206772616e7420757365726e616d65732e444163636f756e744f66557365726e616d65000104028501000400146d012052657665727365206c6f6f6b75702066726f6d2060757365726e616d656020746f2074686520604163636f756e7449646020746861742068617320726567697374657265642069742e205468652076616c75652073686f756c6465012062652061206b657920696e2074686520604964656e746974794f6660206d61702c20627574206974206d6179206e6f742069662074686520757365722068617320636c6561726564207468656972206964656e746974792e006901204d756c7469706c6520757365726e616d6573206d6179206d617020746f207468652073616d6520604163636f756e744964602c2062757420604964656e746974794f66602077696c6c206f6e6c79206d617020746f206f6e6548207072696d61727920757365726e616d652e4050656e64696e67557365726e616d6573000104028501a50a0400186d0120557365726e616d6573207468617420616e20617574686f7269747920686173206772616e7465642c20627574207468617420746865206163636f756e7420636f6e74726f6c6c657220686173206e6f7420636f6e6669726d65647101207468617420746865792077616e742069742e2055736564207072696d6172696c7920696e2063617365732077686572652074686520604163636f756e744964602063616e6e6f742070726f766964652061207369676e61747572655d012062656361757365207468657920617265206120707572652070726f78792c206d756c74697369672c206574632e20496e206f7264657220746f20636f6e6669726d2069742c20746865792073686f756c642063616c6c6c205b6043616c6c3a3a6163636570745f757365726e616d65605d2e001d01204669727374207475706c65206974656d20697320746865206163636f756e7420616e64207365636f6e642069732074686520616363657074616e636520646561646c696e652e016905018101203042617369634465706f7369741840000064a7b3b6e00d000000000000000004d82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e746974792e2c427974654465706f7369741840000064a7b3b6e00d0000000000000000041d012054686520616d6f756e742068656c64206f6e206465706f7369742070657220656e636f646564206279746520666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f73697418400000d1d21fe5ea6b05000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e344d617852656769737472617273101014000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e6450656e64696e67557365726e616d6545787069726174696f6e2c20c08901000000000004150120546865206e756d626572206f6620626c6f636b732077697468696e207768696368206120757365726e616d65206772616e74206d7573742062652061636365707465642e3c4d61785375666669784c656e677468101007000000048020546865206d6178696d756d206c656e677468206f662061207375666669782e444d6178557365726e616d654c656e67746810102000000004610120546865206d6178696d756d206c656e677468206f66206120757365726e616d652c20696e636c7564696e67206974732073756666697820616e6420616e792073797374656d2d61646465642064656c696d69746572732e01a90a1d1c5574696c69747900011106018901044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01ad0a1e204d756c746973696701204d756c746973696704244d756c7469736967730001080502b10ab50a040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e012906018d010c2c4465706f736974426173651840000068cd83c1fd77050000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f721840000020f84dde700400000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01b90a1f20457468657265756d0120457468657265756d141c50656e64696e670100bd0a040004d02043757272656e74206275696c64696e6720626c6f636b2773207472616e73616374696f6e7320616e642072656365697074732e3043757272656e74426c6f636b0000e10a04000470205468652063757272656e7420457468657265756d20626c6f636b2e3c43757272656e7452656365697074730000f50a0400047c205468652063757272656e7420457468657265756d2072656365697074732e6843757272656e745472616e73616374696f6e53746174757365730000f90a04000488205468652063757272656e74207472616e73616374696f6e2073746174757365732e24426c6f636b4861736801010405d10130800000000000000000000000000000000000000000000000000000000000000000000131060195010001fd0a200c45564d010c45564d10304163636f756e74436f64657301010402990134040000504163636f756e74436f6465734d65746164617461000104029901010b0400003c4163636f756e7453746f72616765730101080202050b30800000000000000000000000000000000000000000000000000000000000000000002053756963696465640001040299018404000001590601c1010001090b212845564d436861696e4964012845564d436861696e4964041c436861696e496401002c2000000000000000000448205468652045564d20636861696e2049442e00000000222844796e616d6963466565012844796e616d6963466565082c4d696e47617350726963650100d10180000000000000000000000000000000000000000000000000000000000000000000445461726765744d696e47617350726963650000d101040000016906000000231c42617365466565011c426173654665650834426173654665655065724761730100d1018040420f00000000000000000000000000000000000000000000000000000000000028456c61737469636974790100d9011048e8010000016d0601cd0100002444486f7466697853756666696369656e7473000171060000010d0b2518436c61696d730118436c61696d731418436c61696d7300010406e1011804000014546f74616c01001840000000000000000000000000000000000030457870697279436f6e6669670000110b040004c82045787069727920626c6f636b20616e64206163636f756e7420746f206465706f73697420657870697265642066756e64731c56657374696e6700010406e1019106040010782056657374696e67207363686564756c6520666f72206120636c61696d2e0d012046697273742062616c616e63652069732074686520746f74616c20616d6f756e7420746861742073686f756c642062652068656c6420666f722076657374696e672ee4205365636f6e642062616c616e636520697320686f77206d7563682073686f756c6420626520756e6c6f636b65642070657220626c6f636b2ecc2054686520626c6f636b206e756d626572206973207768656e207468652076657374696e672073686f756c642073746172742e1c5369676e696e6700010406e101a106040004c0205468652073746174656d656e74206b696e642074686174206d757374206265207369676e65642c20696620616e792e01790601dd010418507265666978346c68436c61696d20544e547320746f20746865206163636f756e743a0001150b2614526f6c65730114526f6c65731c184c65646765720001040200190b0400041901204d61702066726f6d20616c6c2022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e4c4163636f756e74526f6c65734d617070696e670101040200390b04000490204d617070696e67206f66207265736f7572636520746f2062726964676520696e646578404d696e52657374616b696e67426f6e6401001840e803000000000000000000000000000004f420546865206d696e696d756d207265207374616b696e6720626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c652e30546f74616c52657374616b650100184000000000000000000000000000000000049c2054686520746f74616c2072657374616b6520616d6f756e7420696e207468652073797374656d4856616c696461746f724a6f6273496e45726101003d0b040004cc20546865206e756d626572206f66206a6f627320636f6d706c6574656420627920612076616c696461746f7220696e206572615c4572617352657374616b65526577617264506f696e74730101040510410914000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e4441637469766552657374616b657245726100002d0904000cd820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e00d02054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e01a50601e90104484d6178526f6c65735065724163636f756e74101002000000045c204d617820726f6c657320706572206163636f756e742e01410b27104a6f627301104a6f62731c345375626d69747465644a6f6273000108050201027502040000445375626d69747465644a6f6273526f6c65000104052ced01040000304b6e6f776e526573756c747300010805020102450b0400005056616c696461746f724a6f6249644c6f6f6b75700001040500490b0400004056616c696461746f7252657761726473000104050018040000244e6578744a6f62496401002c200000000000000000044c20546865206a6f622d69642073746f726167653c54696d65466565506572426c6f636b01001840000000000000000000000000000000000001c506010502042050616c6c65744964a1092070792f6a6f6273730480206050616c6c657449646020666f7220746865206a6f62732070616c6c65742e014d0b280c446b67010c446b67041c466565496e666f01007d028101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000169070179020001510b29185a6b5361615301185a6b53616153041c466565496e666f0100850201010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016d070181020001550b2a1450726f7879011450726f7879081c50726f786965730101040500590b4400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500690b44000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e017107018902184050726f78794465706f736974426173651840000018e1c095e36c050000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f7218400000e16740659404000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840000018e1c095e36c050000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f7218400000c2cf80ca2809000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e01790b2b504d756c7469417373657444656c65676174696f6e01504d756c7469417373657444656c65676174696f6e1c244f70657261746f727300010405007d0b040004882053746f7261676520666f72206f70657261746f7220696e666f726d6174696f6e2e3043757272656e74526f756e640100101000000000047c2053746f7261676520666f72207468652063757272656e7420726f756e642e1c41745374616b6500010805053109950b040004050120536e617073686f74206f6620636f6c6c61746f722064656c65676174696f6e207374616b6520617420746865207374617274206f662074686520726f756e642e2844656c656761746f72730001040500990b0400048c2053746f7261676520666f722064656c656761746f7220696e666f726d6174696f6e2e2c526577617264506f6f6c730001040518c50b040004742053746f7261676520666f72207468652072657761726420706f6f6c735841737365744c6f6f6b7570526577617264506f6f6c73000104051818040004742053746f7261676520666f72207468652072657761726420706f6f6c734c526577617264436f6e66696753746f726167650000c90b04000499012053746f7261676520666f72207468652072657761726420636f6e66696775726174696f6e2c20776869636820696e636c75646573204150592c2063617020666f72206173736574732c20616e642077686974656c697374656420626c75657072696e74732e0179070195021c544d696e4f70657261746f72426f6e64416d6f756e7418401027000000000000000000000000000004d820546865206d696e696d756d20616d6f756e74206f66207374616b6520726571756972656420666f7220616e206f70657261746f722e444d696e44656c6567617465416d6f756e741840e803000000000000000000000000000004d420546865206d696e696d756d20616d6f756e74206f66207374616b6520726571756972656420666f7220612064656c65676174652e30426f6e644475726174696f6e10100a00000004b020546865206475726174696f6e20666f7220776869636820746865207374616b65206973206c6f636b65642e4c4c656176654f70657261746f727344656c617910100a000000045501204e756d626572206f6620726f756e64732074686174206f70657261746f72732072656d61696e20626f6e646564206265666f726520746865206578697420726571756573742069732065786563757461626c652e544f70657261746f72426f6e644c65737344656c6179101001000000045901204e756d626572206f6620726f756e6473206f70657261746f7220726571756573747320746f2064656372656173652073656c662d7374616b65206d757374207761697420746f2062652065786563757461626c652e504c6561766544656c656761746f727344656c6179101001000000045901204e756d626572206f6620726f756e647320746861742064656c656761746f72732072656d61696e20626f6e646564206265666f726520746865206578697420726571756573742069732065786563757461626c652e5c44656c65676174696f6e426f6e644c65737344656c6179101005000000045501204e756d626572206f6620726f756e647320746861742064656c65676174696f6e20756e7374616b65207265717565737473206d7573742077616974206265666f7265206265696e672065786563757461626c652e01dd0b2c545379676d6141636365737353656772656761746f7201545379676d6141636365737353656772656761746f72043c45787472696e73696341636365737300010405e10b00040008d4204d617070696e67207369676e6174757265206f662065787472696e73696320746f206163636f756e742068617320616363657373a8202870616c6c65745f696e6465782c2065787472696e7369635f6e616d6529203d3e206163636f756e74017d0701a1020001e50b2d505379676d61426173696346656548616e646c657201505379676d61426173696346656548616e646c6572042441737365744665657300010405e90b18040004d8204d617070696e672066756e6769626c6520617373657420696420746f20636f72726573706f6e64696e672066656520616d6f756e7401810701a5020001ed0b2e545379676d6146656548616e646c6572526f7574657201545379676d6146656548616e646c6572526f75746572042c48616e646c65725479706500010405e90bf102040004e82052657475726e20746865204665652068616e646c65722074797065206261736564206f6e20646f6d61696e494420616e64206173736574494401850701ed020001f10b2f645379676d6150657263656e7461676546656548616e646c657201645379676d6150657263656e7461676546656548616e646c6572043041737365744665655261746500010405e90bf50b0400045501204d617070696e672066756e6769626c65206173736574206964207769746820646f6d61696e20696420746f20666565207261746520616e6420697473206c6f77657220626f756e642c207570706572626f756e6401890701f5020001f90b302c5379676d61427269646765012c5379676d6142726964676518344465706f736974436f756e747301010405082c200000000000000000047c204465706f73697420636f756e746572206f66206465737420646f6d61696e20497350617573656401010405087804000c5c2042726964676520506175736520696e64696361746f72a82042726964676520697320756e70617573656420696e697469616c6c792c20756e74696c2070617573652101204166746572206d706320616464726573732073657475702c206272696467652073686f756c642062652070617573656420756e74696c20726561647920746f20756e70617573651c4d706341646472010091075000000000000000000000000000000000000000000450205072652d736574204d5043206164647265737328557365644e6f6e6365730101080505fd0b2c200000000000000000045101204d61726b20776865746865722061206465706f736974206e6f6e63652077617320757365642e205573656420746f206d61726b20657865637574696f6e20737461747573206f6620612070726f706f73616c2e3444657374446f6d61696e49647301010405087804000474204d61726b20737570706f72746564206465737420646f6d61696e49443044657374436861696e4964730001040508d10104000c2901204d61726b2074686520706169727320666f7220737570706f72746564206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e49446d012054686520636861696e4944206973206e6f74206469726563746c79207573656420696e2070616c6c65742c2074686973206d61702069732064657369676e6564206d6f72652061626f7574207265636865636b696e67207468652420646f6d61696e4944018d0701f902145c5472616e73666572526573657276654163636f756e7473010cd5030c00006d6f646c7379676d612f30310000000000000000000000000000000000000000010300a10f06057379676d61000000000000000000000000000000000000000000000000000000060673796775736400000000000000000000000000000000000000000000000000006d6f646c7379676d612f30310100000000000000000000000000000000000000010300511f06057379676d61000000000000000000000000000000000000000000000000000000060370686100000000000000000000000000000000000000000000000000000000006d6f646c7379676d612f3031010000000000000000000000000000000000000004010120427269646765207472616e736665722072657365727665206163636f756e7473206d617070696e6720776974682064657369676e61746564206173736574737044657374566572696679696e67436f6e7472616374416464726573739901506cde2cd82a4f8b74693ff5e194c19ca08c2d1c6808882045495037313220566572696679696e6720636f6e74726163742061646472657373a42054686973206973207573656420696e20454950373132207479706564206461746120646f6d61696e34454950373132436861696e4944d10180d70e000000000000000000000000000000000000000000000000000000000000083c2050616c6c657420436861696e4944a42054686973206973207573656420696e20454950373132207479706564206461746120646f6d61696e44466565526573657276654163636f756e74008064646464646464646464646464646464646464646464646464646464646464640450204665652072657365727665206163636f756e74345265736f7572636550616972730d0cd5030c00000000000000000000000000000000000000000000000000000000000000002000010300a10f06057379676d61000000000000000000000000000000000000000000000000000000060673796775736400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010300511f06057379676d610000000000000000000000000000000000000000000000000000000603706861000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000474204173736574496420616e64205265736f75726365496420706169727301150c31190c042448436865636b4e6f6e5a65726f53656e646572210c8440436865636b5370656356657273696f6e250c1038436865636b547856657273696f6e290c1030436865636b47656e657369732d0c3038436865636b4d6f7274616c697479310c3028436865636b4e6f6e6365390c842c436865636b5765696768743d0c84604368617267655472616e73616374696f6e5061796d656e74410c8444436865636b4d6574616461746148617368450c4101510c' \ No newline at end of file +export default '0x6d6574610e550c000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c7536340000280000062c002c000005060030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c011470686173650103011450686173650001146576656e7450010445000118746f70696373c90101185665633c543e000050085874616e676c655f746573746e65745f72756e74696d653052756e74696d654576656e740001a81853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e000000105375646f04007c016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0002001841737365747304008c017470616c6c65745f6173736574733a3a4576656e743c52756e74696d653e0004002042616c616e636573040090017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009801a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0006001c4772616e64706104009c015470616c6c65745f6772616e6470613a3a4576656e740009001c496e64696365730400b0017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e000a002444656d6f63726163790400b4018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e000b001c436f756e63696c0400c801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e000c001c56657374696e670400cc017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e000d0024456c656374696f6e730400d001a470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4576656e743c52756e74696d653e000e0068456c656374696f6e50726f76696465724d756c746950686173650400dc01d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e000f001c5374616b696e670400f0017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e0010001c53657373696f6e04000901015470616c6c65745f73657373696f6e3a3a4576656e7400110020547265617375727904000d01017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e00130020426f756e7469657304001101017c70616c6c65745f626f756e746965733a3a4576656e743c52756e74696d653e001400344368696c64426f756e7469657304001501019470616c6c65745f6368696c645f626f756e746965733a3a4576656e743c52756e74696d653e00150020426167734c69737404001901018070616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d653e0016003c4e6f6d696e6174696f6e506f6f6c7304001d01019c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a4576656e743c52756e74696d653e001700245363686564756c657204003901018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e00180020507265696d61676504004501017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e001900204f6666656e63657304004901015870616c6c65745f6f6666656e6365733a3a4576656e74001a001c5478506175736504005101017c70616c6c65745f74785f70617573653a3a4576656e743c52756e74696d653e001b0020496d4f6e6c696e6504005d01018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e001c00204964656e7469747904008101017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e001d001c5574696c69747904008901015470616c6c65745f7574696c6974793a3a4576656e74001e00204d756c746973696704008d01017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e001f0020457468657265756d04009501015870616c6c65745f657468657265756d3a3a4576656e740020000c45564d0400c101016870616c6c65745f65766d3a3a4576656e743c52756e74696d653e0021001c426173654665650400cd01015870616c6c65745f626173655f6665653a3a4576656e7400240018436c61696d730400dd01019470616c6c65745f61697264726f705f636c61696d733a3a4576656e743c52756e74696d653e00260014526f6c65730400e901017070616c6c65745f726f6c65733a3a4576656e743c52756e74696d653e002700104a6f627304000502016c70616c6c65745f6a6f62733a3a4576656e743c52756e74696d653e0028000c446b6704007902016870616c6c65745f646b673a3a4576656e743c52756e74696d653e002900185a6b5361615304008102017470616c6c65745f7a6b736161733a3a4576656e743c52756e74696d653e002a001450726f787904008902017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b00504d756c7469417373657444656c65676174696f6e0400950201b470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e3a3a4576656e743c52756e74696d653e002c00545379676d6141636365737353656772656761746f720400a102019c7379676d615f6163636573735f73656772656761746f723a3a4576656e743c52756e74696d653e002d00505379676d61426173696346656548616e646c65720400a50201987379676d615f62617369635f66656568616e646c65723a3a4576656e743c52756e74696d653e002e00545379676d6146656548616e646c6572526f757465720400ed0201a07379676d615f6665655f68616e646c65725f726f757465723a3a4576656e743c52756e74696d653e002f00645379676d6150657263656e7461676546656548616e646c65720400f50201ac7379676d615f70657263656e746167655f66656568616e646c65723a3a4576656e743c52756e74696d653e0030002c5379676d614272696467650400f90201707379676d615f6272696467653a3a4576656e743c52756e74696d653e00310000540c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6e780110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007800000500007c0c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c748001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c648801504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c748001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574800418526573756c740804540184044501640108084f6b040084000000000c45727204006400000100008400000400008804184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100008c0c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964180128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964180128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964180128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964180128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964180128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964180128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964180128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964180128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964180128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964180128543a3a417373657449640001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964180128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964180128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964180128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964180128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964180128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964180128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000980c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749c0c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574a00134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a0000002a400a400000408a82c00a80c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400ac013c656432353531393a3a5075626c69630000ac0c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000b00c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b40c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657810013c5265666572656e64756d496e6465780001247468726573686f6c64b80134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657810013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114756e74696c2c0144426c6f636b4e756d626572466f723c543e00090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011c543a3a48617368000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657810013c5265666572656e64756d496e646578000110766f7465bc01644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657810012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657810012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572c401344d657461646174614f776e6572043c4d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572c401344d657461646174614f776e6572043c4d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572c401344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572c401344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e01106861736830011c543a3a486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b80c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000bc0c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465c00110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000c00c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000c40c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040010012450726f70496e646578000100285265666572656e64756d040010013c5265666572656e64756d496e64657800020000c80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564780110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c748001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c748001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d00c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144576656e7404045400011c1c4e65775465726d04012c6e65775f6d656d62657273d401ec5665633c283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c2042616c616e63654f663c543e293e000014450141206e6577207465726d2077697468206e65775f6d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e550174686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e65644501666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e645501736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f2c626567696e20776974682e24456d7074795465726d00010831014e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6dc8604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e34456c656374696f6e4572726f72000204e4496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e304d656d6265724b69636b65640401186d656d6265720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000308410141206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f723060456d7074795465726d602e2452656e6f756e63656404012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400040498536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e4043616e646964617465536c617368656408012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0005103901412063616e6469646174652077617320736c617368656420627920616d6f756e742064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722872756e6e65722d75702e00e44e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e4453656174486f6c646572536c617368656408012c736561745f686f6c6465720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000604350141207365617420686f6c6465722077617320736c617368656420627920616d6f756e74206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d4000002d800d800000408001800dc0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d70757465e0013c456c656374696f6e436f6d707574650001186f726967696e8801504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a6563746564780110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c55017468652073746f72656420736f6c7574696f6e20776173207375626d6974656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d70757465e0013c456c656374696f6e436f6d7075746500011473636f7265e40134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6de8016050686173653c426c6f636b4e756d626572466f723c543e3e000108746fe8016050686173653c426c6f636b4e756d626572466f723c543e3e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e0089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e637900040000e4084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e63650000e8089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e012c01100c4f6666000000185369676e656400010020556e7369676e65640400ec012828626f6f6c2c20426e2900020024456d657267656e637900030000ec00000408782c00f0103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e740404540001441c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640c01147374617368000130543a3a4163636f756e74496400011064657374f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000118616d6f756e7418013042616c616e63654f663c543e0001040d01546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e7420746f20746869732064657374696e6174696f6e2e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6ef8011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e7449640001147072656673fc013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e68536e617073686f74566f7465727353697a65457863656564656404011073697a6510010c753332000e0468566f746572732073697a65206c696d697420726561636865642e6c536e617073686f745461726765747353697a65457863656564656404011073697a6510010c753332000f046c546172676574732073697a65206c696d697420726561636865642e20466f7263654572610401106d6f64650501011c466f7263696e670010047441206e657720666f72636520657261206d6f646520776173207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f4083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e6500040000f80c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000fc083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e0101011c50657262696c6c00011c626c6f636b6564780110626f6f6c00000101000006f8000501083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c776179730003000009010c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d010c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001382050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e4841737365745370656e64417070726f766564180114696e6465781001285370656e64496e64657800012861737365745f6b696e64840130543a3a41737365744b696e64000118616d6f756e74180150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279000138543a3a42656e656669636961727900012876616c69645f66726f6d2c0144426c6f636b4e756d626572466f723c543e0001246578706972655f61742c0144426c6f636b4e756d626572466f723c543e000904b441206e6577206173736574207370656e642070726f706f73616c20686173206265656e20617070726f7665642e4041737365745370656e64566f69646564040114696e6465781001285370656e64496e646578000a0474416e20617070726f766564207370656e642077617320766f696465642e1050616964080114696e6465781001285370656e64496e6465780001287061796d656e745f69648401643c543a3a5061796d6173746572206173205061793e3a3a4964000b044c41207061796d656e742068617070656e65642e345061796d656e744661696c6564080114696e6465781001285370656e64496e6465780001287061796d656e745f69648401643c543a3a5061796d6173746572206173205061793e3a3a4964000c049041207061796d656e74206661696c656420616e642063616e20626520726574726965642e385370656e6450726f636573736564040114696e6465781001285370656e64496e646578000d084d0141207370656e64207761732070726f63657373656420616e642072656d6f7665642066726f6d207468652073746f726167652e204974206d696768742068617665206265656e207375636365737366756c6c797070616964206f72206974206d6179206861766520657870697265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657411010c3c70616c6c65745f626f756e746965731870616c6c6574144576656e7408045400044900012c38426f756e747950726f706f736564040114696e64657810012c426f756e7479496e646578000004504e657720626f756e74792070726f706f73616c2e38426f756e747952656a6563746564080114696e64657810012c426f756e7479496e646578000110626f6e6418013c42616c616e63654f663c542c20493e000104cc4120626f756e74792070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e48426f756e7479426563616d65416374697665040114696e64657810012c426f756e7479496e646578000204b84120626f756e74792070726f706f73616c2069732066756e64656420616e6420626563616d65206163746976652e34426f756e747941776172646564080114696e64657810012c426f756e7479496e64657800012c62656e6566696369617279000130543a3a4163636f756e744964000304944120626f756e7479206973206177617264656420746f20612062656e65666963696172792e34426f756e7479436c61696d65640c0114696e64657810012c426f756e7479496e6465780001187061796f757418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640004048c4120626f756e747920697320636c61696d65642062792062656e65666963696172792e38426f756e747943616e63656c6564040114696e64657810012c426f756e7479496e646578000504584120626f756e74792069732063616e63656c6c65642e38426f756e7479457874656e646564040114696e64657810012c426f756e7479496e646578000604704120626f756e74792065787069727920697320657874656e6465642e38426f756e7479417070726f766564040114696e64657810012c426f756e7479496e646578000704544120626f756e747920697320617070726f7665642e3c43757261746f7250726f706f736564080124626f756e74795f696410012c426f756e7479496e64657800011c63757261746f72000130543a3a4163636f756e744964000804744120626f756e74792063757261746f722069732070726f706f7365642e4443757261746f72556e61737369676e6564040124626f756e74795f696410012c426f756e7479496e6465780009047c4120626f756e74792063757261746f7220697320756e61737369676e65642e3c43757261746f724163636570746564080124626f756e74795f696410012c426f756e7479496e64657800011c63757261746f72000130543a3a4163636f756e744964000a04744120626f756e74792063757261746f722069732061636365707465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657415010c5470616c6c65745f6368696c645f626f756e746965731870616c6c6574144576656e74040454000110144164646564080114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780000046041206368696c642d626f756e74792069732061646465642e1c417761726465640c0114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e64657800012c62656e6566696369617279000130543a3a4163636f756e744964000104ac41206368696c642d626f756e7479206973206177617264656420746f20612062656e65666963696172792e1c436c61696d6564100114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780001187061796f757418013042616c616e63654f663c543e00012c62656e6566696369617279000130543a3a4163636f756e744964000204a441206368696c642d626f756e747920697320636c61696d65642062792062656e65666963696172792e2043616e63656c6564080114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780003047041206368696c642d626f756e74792069732063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d2c0120543a3a53636f7265000108746f2c0120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f72652c0120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65741d010c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144576656e740404540001481c437265617465640801246465706f7369746f72000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000004604120706f6f6c20686173206265656e20637265617465642e18426f6e6465641001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000118626f6e64656418013042616c616e63654f663c543e0001186a6f696e6564780110626f6f6c0001049441206d656d6265722068617320626563616d6520626f6e64656420696e206120706f6f6c2e1c506169644f75740c01186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c49640001187061796f757418013042616c616e63654f663c543e0002048c41207061796f757420686173206265656e206d61646520746f2061206d656d6265722e20556e626f6e6465641401186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e00010c657261100120457261496e64657800032c9841206d656d6265722068617320756e626f6e6465642066726f6d20746865697220706f6f6c2e0039012d206062616c616e6365602069732074686520636f72726573706f6e64696e672062616c616e6365206f6620746865206e756d626572206f6620706f696e7473207468617420686173206265656e5501202072657175657374656420746f20626520756e626f6e646564202874686520617267756d656e74206f66207468652060756e626f6e6460207472616e73616374696f6e292066726f6d2074686520626f6e6465641c2020706f6f6c2e45012d2060706f696e74736020697320746865206e756d626572206f6620706f696e747320746861742061726520697373756564206173206120726573756c74206f66206062616c616e636560206265696e67c0646973736f6c76656420696e746f2074686520636f72726573706f6e64696e6720756e626f6e64696e6720706f6f6c2ee42d206065726160206973207468652065726120696e207768696368207468652062616c616e63652077696c6c20626520756e626f6e6465642e5501496e2074686520616273656e6365206f6620736c617368696e672c2074686573652076616c7565732077696c6c206d617463682e20496e207468652070726573656e6365206f6620736c617368696e672c207468654d016e756d626572206f6620706f696e74732074686174206172652069737375656420696e2074686520756e626f6e64696e6720706f6f6c2077696c6c206265206c657373207468616e2074686520616d6f756e746472657175657374656420746f20626520756e626f6e6465642e2457697468647261776e1001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e0004189c41206d656d626572206861732077697468647261776e2066726f6d20746865697220706f6f6c2e00210154686520676976656e206e756d626572206f662060706f696e7473602068617665206265656e20646973736f6c76656420696e2072657475726e206f66206062616c616e6365602e00590153696d696c617220746f2060556e626f6e64656460206576656e742c20696e2074686520616273656e6365206f6620736c617368696e672c2074686520726174696f206f6620706f696e7420746f2062616c616e63652877696c6c20626520312e2444657374726f79656404011c706f6f6c5f6964100118506f6f6c4964000504684120706f6f6c20686173206265656e2064657374726f7965642e3053746174654368616e67656408011c706f6f6c5f6964100118506f6f6c49640001246e65775f737461746521010124506f6f6c53746174650006047c546865207374617465206f66206120706f6f6c20686173206368616e676564344d656d62657252656d6f76656408011c706f6f6c5f6964100118506f6f6c49640001186d656d626572000130543a3a4163636f756e74496400070c9841206d656d62657220686173206265656e2072656d6f7665642066726f6d206120706f6f6c2e0051015468652072656d6f76616c2063616e20626520766f6c756e74617279202877697468647261776e20616c6c20756e626f6e6465642066756e647329206f7220696e766f6c756e7461727920286b69636b6564292e30526f6c6573557064617465640c0110726f6f748801504f7074696f6e3c543a3a4163636f756e7449643e00011c626f756e6365728801504f7074696f6e3c543a3a4163636f756e7449643e0001246e6f6d696e61746f728801504f7074696f6e3c543a3a4163636f756e7449643e000808550154686520726f6c6573206f66206120706f6f6c2068617665206265656e207570646174656420746f2074686520676976656e206e657720726f6c65732e204e6f7465207468617420746865206465706f7369746f724463616e206e65766572206368616e67652e2c506f6f6c536c617368656408011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e0009040d01546865206163746976652062616c616e6365206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e50556e626f6e64696e67506f6f6c536c61736865640c011c706f6f6c5f6964100118506f6f6c496400010c657261100120457261496e64657800011c62616c616e636518013042616c616e63654f663c543e000a04250154686520756e626f6e6420706f6f6c206174206065726160206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e54506f6f6c436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c496400011c63757272656e742501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e000b04b44120706f6f6c277320636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e60506f6f6c4d6178436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6ef8011c50657262696c6c000c04d44120706f6f6c2773206d6178696d756d20636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e7c506f6f6c436f6d6d697373696f6e4368616e6765526174655570646174656408011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f726174652d01019c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e000d04cc4120706f6f6c277320636f6d6d697373696f6e20606368616e67655f726174656020686173206265656e206368616e6765642e90506f6f6c436f6d6d697373696f6e436c61696d5065726d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001287065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e000e04c8506f6f6c20636f6d6d697373696f6e20636c61696d207065726d697373696f6e20686173206265656e20757064617465642e54506f6f6c436f6d6d697373696f6e436c61696d656408011c706f6f6c5f6964100118506f6f6c4964000128636f6d6d697373696f6e18013042616c616e63654f663c543e000f0484506f6f6c20636f6d6d697373696f6e20686173206265656e20636c61696d65642e644d696e42616c616e63654465666963697441646a757374656408011c706f6f6c5f6964100118506f6f6c4964000118616d6f756e7418013042616c616e63654f663c543e001004c8546f70706564207570206465666963697420696e2066726f7a656e204544206f66207468652072657761726420706f6f6c2e604d696e42616c616e636545786365737341646a757374656408011c706f6f6c5f6964100118506f6f6c4964000118616d6f756e7418013042616c616e63654f663c543e001104bc436c61696d6564206578636573732066726f7a656e204544206f66206166207468652072657761726420706f6f6c2e04584576656e7473206f6620746869732070616c6c65742e2101085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c537461746500010c104f70656e0000001c426c6f636b65640001002844657374726f79696e6700020000250104184f7074696f6e0404540129010108104e6f6e6500000010536f6d65040029010000010000290100000408f800002d01085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7350436f6d6d697373696f6e4368616e676552617465042c426c6f636b4e756d626572012c000801306d61785f696e637265617365f8011c50657262696c6c0001246d696e5f64656c61792c012c426c6f636b4e756d6265720000310104184f7074696f6e0404540135010108104e6f6e6500000010536f6d650400350100000100003501085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7364436f6d6d697373696f6e436c61696d5065726d697373696f6e04244163636f756e74496401000108385065726d697373696f6e6c6573730000001c4163636f756e7404000001244163636f756e7449640001000039010c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e000118726573756c748001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736b3d0101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964410101404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652e3d01000004082c1000410104184f7074696f6e04045401040108104e6f6e6500000010536f6d65040004000001000045010c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657449010c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e644d0101104b696e6400012074696d65736c6f743401384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652e4d0100000310000000080051010c3c70616c6c65745f74785f70617573651870616c6c6574144576656e740404540001082843616c6c50617573656404012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e000004b8546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f77207061757365642e3043616c6c556e70617573656404012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e000104c0546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f7720756e7061757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574550100000408590159010059010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00005d010c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f696461010138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e656901016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e047c54686520604576656e746020656e756d206f6620746869732070616c6c65746101104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c6963000004006501013c737232353531393a3a5075626c6963000065010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d000069010000026d01006d0100000408007101007101082873705f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616c7501011c42616c616e636500010c6f776e7501011c42616c616e63650001186f7468657273790101ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e00007501000006180079010000027d01007d01082873705f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c75657501011c42616c616e6365000081010c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001442c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e38417574686f726974794164646564040124617574686f72697479000130543a3a4163636f756e744964000a047c4120757365726e616d6520617574686f72697479207761732061646465642e40417574686f7269747952656d6f766564040124617574686f72697479000130543a3a4163636f756e744964000b04844120757365726e616d6520617574686f72697479207761732072656d6f7665642e2c557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e000c04744120757365726e616d65207761732073657420666f72206077686f602e38557365726e616d655175657565640c010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e00012865787069726174696f6e2c0144426c6f636b4e756d626572466f723c543e000d0419014120757365726e616d6520776173207175657565642c20627574206077686f60206d75737420616363657074206974207072696f7220746f206065787069726174696f6e602e48507265617070726f76616c4578706972656404011477686f7365000130543a3a4163636f756e744964000e043901412071756575656420757365726e616d6520706173736564206974732065787069726174696f6e20776974686f7574206265696e6720636c61696d656420616e64207761732072656d6f7665642e485072696d617279557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e000f0401014120757365726e616d6520776173207365742061732061207072696d61727920616e642063616e206265206c6f6f6b65642075702066726f6d206077686f602e5c44616e676c696e67557365726e616d6552656d6f76656408010c77686f000130543a3a4163636f756e744964000120757365726e616d658501012c557365726e616d653c543e0010085d01412064616e676c696e6720757365726e616d652028617320696e2c206120757365726e616d6520636f72726573706f6e64696e6720746f20616e206163636f756e742074686174206861732072656d6f766564206974736c6964656e746974792920686173206265656e2072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657485010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000089010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c748001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c748001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749101083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d626572012c000801186865696768742c012c426c6f636b4e756d626572000114696e64657810010c753332000095010c3c70616c6c65745f657468657265756d1870616c6c6574144576656e7400010420457865637574656414011066726f6d9901011048313630000108746f99010110483136300001407472616e73616374696f6e5f686173683001104832353600012c657869745f726561736f6ea101012845786974526561736f6e00012865787472615f6461746134011c5665633c75383e000004c8416e20657468657265756d207472616e73616374696f6e20776173207375636365737366756c6c792065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749901083c7072696d69746976655f74797065731048313630000004009d0101205b75383b2032305d00009d01000003140000000800a1010c2065766d5f636f7265146572726f722845786974526561736f6e0001101c537563636565640400a501012c4578697453756363656564000000144572726f720400a9010124457869744572726f72000100185265766572740400b90101284578697452657665727400020014466174616c0400bd01012445786974466174616c00030000a5010c2065766d5f636f7265146572726f722c457869745375636365656400010c1c53746f707065640000002052657475726e656400010020537569636964656400020000a9010c2065766d5f636f7265146572726f7224457869744572726f7200014038537461636b556e646572666c6f7700000034537461636b4f766572666c6f770001002c496e76616c69644a756d7000020030496e76616c696452616e67650003004444657369676e61746564496e76616c69640004002c43616c6c546f6f446565700005003c437265617465436f6c6c6973696f6e0006004c437265617465436f6e74726163744c696d69740007002c496e76616c6964436f64650400ad0101184f70636f6465000f002c4f75744f664f6666736574000800204f75744f66476173000900244f75744f6646756e64000a002c5043556e646572666c6f77000b002c437265617465456d707479000c00144f746865720400b1010144436f773c277374617469632c207374723e000d00204d61784e6f6e6365000e0000ad010c2065766d5f636f7265186f70636f6465184f70636f64650000040008010875380000b101040c436f7704045401b501000400b501000000b5010000050200b9010c2065766d5f636f7265146572726f72284578697452657665727400010420526576657274656400000000bd010c2065766d5f636f7265146572726f722445786974466174616c000110304e6f74537570706f7274656400000048556e68616e646c6564496e746572727570740001004043616c6c4572726f724173466174616c0400a9010124457869744572726f72000200144f746865720400b1010144436f773c277374617469632c207374723e00030000c1010c2870616c6c65745f65766d1870616c6c6574144576656e740404540001140c4c6f6704010c6c6f67c501010c4c6f670000047c457468657265756d206576656e74732066726f6d20636f6e7472616374732e1c4372656174656404011c616464726573739901011048313630000104b44120636f6e747261637420686173206265656e206372656174656420617420676976656e20616464726573732e34437265617465644661696c656404011c61646472657373990101104831363000020405014120636f6e74726163742077617320617474656d7074656420746f20626520637265617465642c206275742074686520657865637574696f6e206661696c65642e20457865637574656404011c616464726573739901011048313630000304f84120636f6e747261637420686173206265656e206578656375746564207375636365737366756c6c79207769746820737461746573206170706c6965642e3845786563757465644661696c656404011c61646472657373990101104831363000040465014120636f6e747261637420686173206265656e2065786563757465642077697468206572726f72732e20537461746573206172652072657665727465642077697468206f6e6c79206761732066656573206170706c6965642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c5010c20657468657265756d0c6c6f670c4c6f6700000c011c616464726573739901011048313630000118746f70696373c90101245665633c483235363e0001106461746134011442797465730000c9010000023000cd010c3c70616c6c65745f626173655f6665651870616c6c6574144576656e7400010c404e65774261736546656550657247617304010c666565d1010110553235360000003c426173654665654f766572666c6f77000100344e6577456c6173746963697479040128656c6173746963697479d901011c5065726d696c6c000200047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d101083c7072696d69746976655f7479706573105532353600000400d50101205b7536343b20345d0000d501000003040000002c00d9010c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000dd010c5470616c6c65745f61697264726f705f636c61696d731870616c6c6574144576656e740404540001041c436c61696d65640c0124726563697069656e74000130543a3a4163636f756e744964000118736f75726365e10101304d756c746941646472657373000118616d6f756e7418013042616c616e63654f663c543e0000048c536f6d656f6e6520636c61696d656420736f6d65206e617469766520746f6b656e732e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e1010c5470616c6c65745f61697264726f705f636c61696d73147574696c73304d756c7469416464726573730001080c45564d0400e501013c457468657265756d41646472657373000000184e6174697665040000012c4163636f756e744964333200010000e501105470616c6c65745f61697264726f705f636c61696d73147574696c7340657468657265756d5f616464726573733c457468657265756d41646472657373000004009d0101205b75383b2032305d0000e9010c3070616c6c65745f726f6c65731870616c6c6574144576656e7404045400012c30526f6c6541737369676e656408011c6163636f756e74000130543a3a4163636f756e744964000110726f6c65ed010120526f6c65547970650000047c526f6c652061737369676e656420746f207468652076616c696461746f722e2c526f6c6552656d6f76656408011c6163636f756e74000130543a3a4163636f756e744964000110726f6c65ed010120526f6c65547970650001047052656d6f7665642076616c696461746f722066726f6d20726f6c652e1c536c617368656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00020448536c61736865642076616c696461746f722e3850726f66696c65437265617465640c011c6163636f756e74000130543a3a4163636f756e744964000154746f74616c5f70726f66696c655f72657374616b6518013042616c616e63654f663c543e000114726f6c6573f90101345665633c526f6c65547970653e000304504e65772070726f66696c6520637265617465642e3850726f66696c65557064617465640c011c6163636f756e74000130543a3a4163636f756e744964000154746f74616c5f70726f66696c655f72657374616b6518013042616c616e63654f663c543e000114726f6c6573f90101345665633c526f6c65547970653e0004044050726f66696c6520757064617465642e3850726f66696c6544656c6574656404011c6163636f756e74000130543a3a4163636f756e7449640005044050726f66696c652064656c657465642e2c50656e64696e674a6f627304013070656e64696e675f6a6f6273fd0101585665633c28526f6c65547970652c204a6f624964293e000604d050656e64696e67206a6f62732c746861742063616e6e6f74206265206f70746564206f757420617420746865206d6f6d656e742e38526f6c6573526577617264536574040134746f74616c5f7265776172647318013042616c616e63654f663c543e0007048c526f6c657320696e666c6174696f6e20726577617264207061696420666f7220657261345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000804a45468652072652d7374616b657273272072657761726473206172652067657474696e6720706169642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000904bc5468652072652d7374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e5c4d696e52657374616b696e67426f6e645570646174656404011476616c756518013042616c616e63654f663c543e000a04b8546865206d696e2072657374616b696e6720626f6e6420616d6f756e7420686173206265656e2075706461746564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ed010c4474616e676c655f7072696d69746976657314726f6c657320526f6c655479706500010c0c5473730400f10101685468726573686f6c645369676e6174757265526f6c6554797065000000185a6b536161530400f50101545a65726f4b6e6f776c65646765526f6c65547970650001004c4c69676874436c69656e7452656c6179696e6700020000f101104474616e676c655f7072696d69746976657314726f6c65730c747373685468726573686f6c645369676e6174757265526f6c65547970650001305044666e734347474d503231536563703235366b310000005044666e734347474d5032315365637032353672310001004044666e734347474d503231537461726b0002006853696c656e745368617264444b4c533233536563703235366b31000300385a6361736846726f737450323536000400385a6361736846726f7374503338340005004c5a6361736846726f7374536563703235366b31000600585a6361736846726f737452697374726574746f323535000700445a6361736846726f7374456432353531390008003c5a6361736846726f737445643434380009004047656e6e61726f444b47426c73333831000a0018577374735632000b0000f501104474616e676c655f7072696d69746976657314726f6c6573187a6b73616173545a65726f4b6e6f776c65646765526f6c6554797065000108345a6b5361615347726f74683136000000305a6b536161534d61726c696e00010000f901000002ed0100fd01000002010200010200000408ed012c0005020c2c70616c6c65745f6a6f6273186d6f64756c65144576656e7404045400011c304a6f625375626d69747465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73090201484a6f625375626d697373696f6e4f663c543e0000047041206e6577206a6f6220686173206265656e207375626d6974746564484a6f62526573756c745375626d69747465640801186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c65547970650001048c41206e6577206a6f6220726573756c7420686173206265656e207375626d69747465644456616c696461746f7252657761726465640801086964000130543a3a4163636f756e74496400011872657761726418013042616c616e63654f663c543e0002046c76616c696461746f7220686173206561726e6564207265776172642c4a6f62526566756e6465640801186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c6554797065000304a0416e206578697374696e67206a6f62207761732072656d6f76656420616e6420726566756e646564584a6f625061727469636970616e7473557064617465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73750201304a6f62496e666f4f663c543e000404a8546865207061727469636970616e7473206f662061206a6f6220686173206265656e2075706461746564384a6f6252655375626d69747465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c655479706500011c64657461696c73750201304a6f62496e666f4f663c543e0005082d0141206a6f6220686173206265656e2072657375626d69747465642c2074686973206973207768656e20612070686173653120726573756c7420686173206265656e2064697363617264656484616e642061206e657720706861736531206a6f6220697320726571756573746564444a6f62526573756c74457874656e6465640c01186a6f625f69642c01144a6f624964000124726f6c655f74797065ed010120526f6c65547970650001286e65775f6578706972792c0144426c6f636b4e756d626572466f723c543e000604a841206a6f6220726573756c74206578706972792074696d6520686173206265656e20657874656e646564047c54686520604576656e746020656e756d206f6620746869732070616c6c657409020c4474616e676c655f7072696d697469766573106a6f6273344a6f625375626d697373696f6e14244163636f756e74496401002c426c6f636b4e756d626572012c3c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502001001186578706972792c012c426c6f636b4e756d62657200010c74746c2c012c426c6f636b4e756d6265720001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e00012066616c6c6261636b7102013c46616c6c6261636b4f7074696f6e7300000d02085874616e676c655f746573746e65745f72756e74696d653c4d61785061727469636970616e7473000000001102085874616e676c655f746573746e65745f72756e74696d65404d61785375626d697373696f6e4c656e000000001502085874616e676c655f746573746e65745f72756e74696d65584d61784164646974696f6e616c506172616d734c656e0000000019020c4474616e676c655f7072696d697469766573106a6f62731c4a6f625479706510244163636f756e74496401003c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502011838444b4754535350686173654f6e6504001d0201c4444b4754535350686173654f6e654a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74733e00000038444b47545353506861736554776f0400290201fc444b47545353506861736554776f4a6f62547970653c4d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e3e00010040444b475453535068617365546872656504003902015c444b47545353506861736554687265654a6f62547970650002003c444b475453535068617365466f757204003d020158444b475453535068617365466f75724a6f6254797065000300385a6b5361615350686173654f6e6504004102010d015a6b5361615350686173654f6e654a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e3e000400385a6b53616153506861736554776f04005102019c5a6b53616153506861736554776f4a6f62547970653c4d61785375626d697373696f6e4c656e3e000500001d02104474616e676c655f7072696d697469766573106a6f62730c74737354444b4754535350686173654f6e654a6f625479706508244163636f756e74496401003c4d61785061727469636970616e7473010d02001401307061727469636970616e747321020198426f756e6465645665633c4163636f756e7449642c204d61785061727469636970616e74733e0001247468726573686f6c6408010875380001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500012468645f77616c6c6574780110626f6f6c000021020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e0000250200000200002902104474616e676c655f7072696d697469766573106a6f62730c74737354444b47545353506861736554776f4a6f625479706508404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e0115020010013070686173655f6f6e655f69642c01144a6f6249640001287375626d697373696f6e2d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e00013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500002d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000310204184f7074696f6e0404540135020108104e6f6e6500000010536f6d6504003502000001000035020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00003902104474616e676c655f7072696d697469766573106a6f62730c7473735c444b47545353506861736554687265654a6f6254797065000008013070686173655f6f6e655f69642c01144a6f624964000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500003d02104474616e676c655f7072696d697469766573106a6f62730c74737358444b475453535068617365466f75724a6f625479706500000c013070686173655f6f6e655f69642c01144a6f6249640001406e65775f70686173655f6f6e655f69642c01144a6f624964000124726f6c655f74797065f10101685468726573686f6c645369676e6174757265526f6c655479706500004102104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b5361615350686173654f6e654a6f62547970650c244163636f756e74496401003c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102001001307061727469636970616e747321020198426f756e6465645665633c4163636f756e7449642c204d61785061727469636970616e74733e0001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e00011873797374656d450201785a6b5361615353797374656d3c4d61785375626d697373696f6e4c656e3e000124726f6c655f74797065f50101545a65726f4b6e6f776c65646765526f6c655479706500004502104474616e676c655f7072696d697469766573106a6f6273187a6b73616173305a6b5361615353797374656d04404d61785375626d697373696f6e4c656e01110201041c47726f7468313604004902017c47726f7468313653797374656d3c4d61785375626d697373696f6e4c656e3e000000004902104474616e676c655f7072696d697469766573106a6f6273187a6b736161733447726f7468313653797374656d04404d61785375626d697373696f6e4c656e0111020018011c636972637569744d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e0001286e756d5f696e707574732c010c75363400013c6e756d5f636f6e73747261696e74732c010c75363400012c70726f76696e675f6b65794d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000134766572696679696e675f6b65792d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e0001107761736d4d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e00004d02104474616e676c655f7072696d697469766573106a6f6273187a6b736161732448797065724461746104404d61785375626d697373696f6e4c656e011102010c0c52617704002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000000104950465304002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000100104854545004002d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000200005102104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b53616153506861736554776f4a6f625479706504404d61785375626d697373696f6e4c656e011102000c013070686173655f6f6e655f69642c01144a6f62496400011c726571756573745502019c5a6b53616153506861736554776f526571756573743c4d61785375626d697373696f6e4c656e3e000124726f6c655f74797065f50101545a65726f4b6e6f776c65646765526f6c655479706500005502104474616e676c655f7072696d697469766573106a6f6273187a6b73616173545a6b53616153506861736554776f5265717565737404404d61785375626d697373696f6e4c656e01110201041c47726f7468313604005902019447726f7468313650726f7665526571756573743c4d61785375626d697373696f6e4c656e3e000000005902104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c47726f7468313650726f76655265717565737404404d61785375626d697373696f6e4c656e011102001001307075626c69635f696e7075742d020180426f756e6465645665633c75382c204d61785375626d697373696f6e4c656e3e000120615f7368617265735d0201e4426f756e6465645665633c4879706572446174613c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e00012461785f7368617265735d0201e4426f756e6465645665633c4879706572446174613c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e0001287161705f736861726573650201e0426f756e6465645665633c51415053686172653c4d61785375626d697373696f6e4c656e3e2c204d61785375626d697373696f6e4c656e3e00005d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400610201185665633c543e000061020000024d020065020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540169020453000004006d0201185665633c543e00006902104474616e676c655f7072696d697469766573106a6f6273187a6b7361617320514150536861726504404d61785375626d697373696f6e4c656e011102000c0104614d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000104624d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e000104634d02016c4879706572446174613c4d61785375626d697373696f6e4c656e3e00006d0200000269020071020c4474616e676c655f7072696d697469766573106a6f62733c46616c6c6261636b4f7074696f6e730001081c44657374726f790000005c526567656e6572617465576974685468726573686f6c64040008010875380001000075020c4474616e676c655f7072696d697469766573106a6f62731c4a6f62496e666f18244163636f756e74496401002c426c6f636b4e756d626572012c1c42616c616e636501183c4d61785061727469636970616e7473010d02404d61785375626d697373696f6e4c656e011102584d61784164646974696f6e616c506172616d734c656e011502001801146f776e65720001244163636f756e7449640001186578706972792c012c426c6f636b4e756d62657200010c74746c2c012c426c6f636b4e756d6265720001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e00010c66656518011c42616c616e636500012066616c6c6261636b7102013c46616c6c6261636b4f7074696f6e73000079020c2870616c6c65745f646b671870616c6c6574144576656e74040454000108284665655570646174656404007d020130466565496e666f4f663c543e0000049446656520686173206265656e207570646174656420746f20746865206e65772076616c7565284b6579526f74617465640c012c66726f6d5f6a6f625f69642c01144a6f624964000124746f5f6a6f625f69642c01144a6f6249640001247369676e617475726534011c5665633c75383e0001045c4120444b4720686173206265656e20726f74617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747d020c2870616c6c65745f646b671474797065731c466565496e666f041c42616c616e6365011800180120626173655f66656518011c42616c616e6365000144646b675f76616c696461746f725f66656518011c42616c616e63650001447369675f76616c696461746f725f66656518011c42616c616e6365000154726566726573685f76616c696461746f725f66656518011c42616c616e636500015073746f726167655f6665655f7065725f6279746518011c42616c616e636500015473746f726167655f6665655f7065725f626c6f636b18011c42616c616e6365000081020c3470616c6c65745f7a6b736161731870616c6c6574144576656e740404540001042846656555706461746564040085020130466565496e666f4f663c543e0000049446656520686173206265656e207570646174656420746f20746865206e65772076616c7565047c54686520604576656e746020656e756d206f6620746869732070616c6c657485020c3470616c6c65745f7a6b736161731474797065731c466565496e666f041c42616c616e6365011800100120626173655f66656518011c42616c616e636500012c636972637569745f66656518011c42616c616e636500012470726f76655f66656518011c42616c616e636500015073746f726167655f6665655f7065725f6279746518011c42616c616e6365000089020c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c748001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789102010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736830013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d02085874616e676c655f746573746e65745f72756e74696d652450726f7879547970650001100c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002001c5374616b696e67000300009102000005040095020c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c6574144576656e74040454000154384f70657261746f724a6f696e656404010c77686f000130543a3a4163636f756e7449640000045c416e206f70657261746f7220686173206a6f696e65642e604f70657261746f724c656176696e675363686564756c656404010c77686f000130543a3a4163636f756e7449640001048c416e206f70657261746f7220686173207363686564756c656420746f206c656176652e584f70657261746f724c6561766543616e63656c6c656404010c77686f000130543a3a4163636f756e744964000204b8416e206f70657261746f72206861732063616e63656c6c6564207468656972206c6561766520726571756573742e544f70657261746f724c65617665457865637574656404010c77686f000130543a3a4163636f756e744964000304b4416e206f70657261746f7220686173206578656375746564207468656972206c6561766520726571756573742e404f70657261746f72426f6e644d6f726508010c77686f000130543a3a4163636f756e74496400013c6164646974696f6e616c5f626f6e6418013042616c616e63654f663c543e00040498416e206f70657261746f722068617320696e63726561736564207468656972207374616b652e644f70657261746f72426f6e644c6573735363686564756c656408010c77686f000130543a3a4163636f756e744964000138756e7374616b655f616d6f756e7418013042616c616e63654f663c543e000504c8416e206f70657261746f7220686173207363686564756c656420746f206465637265617365207468656972207374616b652e604f70657261746f72426f6e644c657373457865637574656404010c77686f000130543a3a4163636f756e744964000604b8416e206f70657261746f7220686173206578656375746564207468656972207374616b652064656372656173652e644f70657261746f72426f6e644c65737343616e63656c6c656404010c77686f000130543a3a4163636f756e744964000704dc416e206f70657261746f72206861732063616e63656c6c6564207468656972207374616b6520646563726561736520726571756573742e4c4f70657261746f7257656e744f66666c696e6504010c77686f000130543a3a4163636f756e74496400080474416e206f70657261746f722068617320676f6e65206f66666c696e652e484f70657261746f7257656e744f6e6c696e6504010c77686f000130543a3a4163636f756e74496400090470416e206f70657261746f722068617320676f6e65206f6e6c696e652e244465706f73697465640c010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000a046041206465706f73697420686173206265656e206d6164652e445363686564756c656477697468647261770c010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000b047c416e20776974686472617720686173206265656e207363686564756c65642e404578656375746564776974686472617704010c77686f000130543a3a4163636f756e744964000c0478416e20776974686472617720686173206265656e2065786563757465642e4443616e63656c6c6564776974686472617704010c77686f000130543a3a4163636f756e744964000d047c416e20776974686472617720686173206265656e2063616e63656c6c65642e2444656c65676174656410010c77686f000130543a3a4163636f756e7449640001206f70657261746f72000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000e046c412064656c65676174696f6e20686173206265656e206d6164652e685363686564756c656444656c656761746f72426f6e644c65737310010c77686f000130543a3a4163636f756e7449640001206f70657261746f72000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00012061737365745f6964180128543a3a41737365744964000f04bc412064656c656761746f7220756e7374616b65207265717565737420686173206265656e207363686564756c65642e64457865637574656444656c656761746f72426f6e644c65737304010c77686f000130543a3a4163636f756e744964001004b8412064656c656761746f7220756e7374616b65207265717565737420686173206265656e2065786563757465642e6843616e63656c6c656444656c656761746f72426f6e644c65737304010c77686f000130543a3a4163636f756e744964001104bc412064656c656761746f7220756e7374616b65207265717565737420686173206265656e2063616e63656c6c65642e54496e63656e74697665415059416e644361705365740c011c706f6f6c5f6964180124543a3a506f6f6c496400010c6170799902014c73705f72756e74696d653a3a50657263656e7400010c63617018013042616c616e63654f663c543e00120415014576656e7420656d6974746564207768656e20616e20696e63656e746976652041505920616e6420636170206172652073657420666f7220612072657761726420706f6f6c50426c75657072696e7457686974656c6973746564040130626c75657072696e745f696410010c753332001304e44576656e7420656d6974746564207768656e206120626c75657072696e742069732077686974656c697374656420666f72207265776172647348417373657455706461746564496e506f6f6c10010c77686f000130543a3a4163636f756e74496400011c706f6f6c5f6964180124543a3a506f6f6c496400012061737365745f6964180128543a3a41737365744964000118616374696f6e9d02012c4173736574416374696f6e00140494417373657420686173206265656e207570646174656420746f2072657761726420706f6f6c04744576656e747320656d6974746564206279207468652070616c6c65742e99020c3473705f61726974686d65746963287065725f7468696e67731c50657263656e7400000400080108753800009d02107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c726577617264732c4173736574416374696f6e0001080c4164640000001852656d6f766500010000a1020c5c7379676d615f6163636573735f73656772656761746f721870616c6c6574144576656e74040454000104344163636573734772616e7465640c013070616c6c65745f696e646578080108753800013865787472696e7369635f6e616d6534011c5665633c75383e00010c77686f000130543a3a4163636f756e7449640000088445787472696e73696320616363657373206772616e7420746f20736f6d656f6e65a4617267733a205b70616c6c65745f696e6465782c2065787472696e7369635f6e616d652c2077686f5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a5020c587379676d615f62617369635f66656568616e646c65721870616c6c6574144576656e74040454000104184665655365740c0118646f6d61696e080120446f6d61696e49440001146173736574a902011c41737365744964000118616d6f756e7418011075313238000008704665652073657420666f72206120737065636966696320617373657474617267733a205b646f6d61696e2c2061737365742c20616d6f756e745d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a902102c73746167696e675f78636d0876341461737365741c4173736574496400000400ad0201204c6f636174696f6e0000ad02102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72b10201244a756e6374696f6e730000b102102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400b50201484172633c5b4a756e6374696f6e3b20315d3e0001000858320400d10201484172633c5b4a756e6374696f6e3b20325d3e0002000858330400d50201484172633c5b4a756e6374696f6e3b20335d3e0003000858340400d90201484172633c5b4a756e6374696f6e3b20345d3e0004000858350400dd0201484172633c5b4a756e6374696f6e3b20355d3e0005000858360400e10201484172633c5b4a756e6374696f6e3b20365d3e0006000858370400e50201484172633c5b4a756e6374696f6e3b20375d3e0007000858380400e90201484172633c5b4a756e6374696f6e3b20385d3e00080000b50200000301000000b90200b902102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400bd02010c7533320000002c4163636f756e744964333208011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726bc10201444f7074696f6e3c4e6574776f726b49643e00010c6b65799d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040075010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964c9020118426f6479496400011070617274cd020120426f6479506172740008003c476c6f62616c436f6e73656e7375730400c50201244e6574776f726b496400090000bd020000061000c10204184f7074696f6e04045401c5020108104e6f6e6500000010536f6d650400c5020000010000c502102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d6265722c010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f696428010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000c902100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400bd02010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000cd02100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74bd02010c753332000100204672616374696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dbd02010c75333200011464656e6f6dbd02010c75333200040000d10200000302000000b90200d50200000303000000b90200d90200000304000000b90200dd0200000305000000b90200e10200000306000000b90200e50200000307000000b90200e90200000308000000b90200ed020c607379676d615f6665655f68616e646c65725f726f757465721870616c6c6574144576656e740404540001043446656548616e646c65725365740c0118646f6d61696e080120446f6d61696e49440001146173736574a902011c4173736574496400013068616e646c65725f74797065f102013846656548616e646c657254797065000008f05768656e206665652068616e646c6572207761732073657420666f7220612073706563696669632028646f6d61696e2c206173736574292070616972b8617267733a205b646573745f646f6d61696e5f69642c2061737365745f69642c2068616e646c65725f747970655d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f1020c607379676d615f6665655f68616e646c65725f726f757465721870616c6c65743846656548616e646c65725479706500010c3c426173696346656548616e646c65720000005050657263656e7461676546656548616e646c65720001004444796e616d696346656548616e646c657200020000f5020c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c6574144576656e740404540001042846656552617465536574140118646f6d61696e080120446f6d61696e49440001146173736574a902011c41737365744964000140726174655f62617369735f706f696e7410010c75333200013c6665655f6c6f7765725f626f756e641801107531323800013c6665655f75707065725f626f756e6418011075313238000008b046656520736574207261746520666f72206120737065636966696320617373657420616e6420646f6d61696e2501617267733a205b646f6d61696e2c2061737365742c20726174655f62617369735f706f696e742c206665655f6c6f7765725f626f756e642c206665655f75707065725f626f756e645d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f9020c307379676d615f6272696467651870616c6c6574144576656e7404045400012c1c4465706f7369741c0138646573745f646f6d61696e5f6964080120446f6d61696e494400012c7265736f757263655f69640401285265736f7572636549640001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e636500011873656e646572000130543a3a4163636f756e7449640001347472616e736665725f74797065fd0201305472616e73666572547970650001306465706f7369745f6461746134011c5665633c75383e00014068616e646c65725f726573706f6e736534011c5665633c75383e00000cc05768656e20696e697469616c20627269646765207472616e736665722073656e6420746f206465737420646f6d61696e2501617267733a205b646573745f646f6d61696e5f69642c207265736f757263655f69642c206465706f7369745f6e6f6e63652c2073656e6465722c207472616e736665725f747970652c846465706f7369745f646174612c2068616e646c65725f726573706f6e73652c205d4450726f706f73616c457865637574696f6e0c01406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e6365000124646174615f686173680401205b75383b2033325d0001049c5768656e2070726f706f73616c20776173206578656375746564207375636365737366756c6c79584661696c656448616e646c6572457865637574696f6e0c01146572726f7234011c5665633c75383e0001406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e6365000204885768656e2070726f706f73616c20776173206661696c6420746f20657865637574651452657472790c015c6465706f7369745f6f6e5f626c6f636b5f68656967687418011075313238000138646573745f646f6d61696e5f6964080120446f6d61696e494400011873656e646572000130543a3a4163636f756e744964000308b45768656e207573657220697320676f696e6720746f207265747279206120627269646765207472616e73666572dc617267733a205b6465706f7369745f6f6e5f626c6f636b5f6865696768742c20646573745f646f6d61696e5f69642c2073656e6465725d30427269646765506175736564040138646573745f646f6d61696e5f6964080120446f6d61696e4944000408545768656e206272696467652069732070617573656458617267733a205b646573745f646f6d61696e5f69645d38427269646765556e706175736564040138646573745f646f6d61696e5f6964080120446f6d61696e49440005085c5768656e2062726964676520697320756e70617573656458617267733a205b646573745f646f6d61696e5f69645d48526567697374657244657374446f6d61696e0c011873656e646572000130543a3a4163636f756e744964000124646f6d61696e5f6964080120446f6d61696e4944000120636861696e5f6964d101011c436861696e49440006040d015768656e207265676973746572696e672061206e6577206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e494450556e726567697374657244657374446f6d61696e0c011873656e646572000130543a3a4163636f756e744964000124646f6d61696e5f6964080120446f6d61696e4944000120636861696e5f6964d101011c436861696e494400070405015768656e20756e7265676973746572696e672061206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e494430466565436f6c6c65637465641401246665655f7061796572000130543a3a4163636f756e744964000138646573745f646f6d61696e5f6964080120446f6d61696e494400012c7265736f757263655f69640401285265736f7572636549640001286665655f616d6f756e74180110753132380001306665655f61737365745f6964a902011c41737365744964000804705768656e206272696467652066656520697320636f6c6c65637465643c416c6c42726964676550617573656404011873656e646572000130543a3a4163636f756e7449640009046c5768656e20616c6c2062726964676573206172652070617573656444416c6c427269646765556e70617573656404011873656e646572000130543a3a4163636f756e744964000a04745768656e20616c6c20627269646765732061726520756e706175736564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fd0208307379676d615f747261697473305472616e736665725479706500010c4046756e6769626c655472616e736665720000004c4e6f6e46756e6769626c655472616e736665720001003c47656e657269635472616e7366657200020000010308306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000005030000023d0100090308306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ebd02014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65b501016473705f72756e74696d653a3a52756e74696d65537472696e6700000d0308306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6e780110626f6f6c000011030c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b34011c5665633c75383e0000045c536565205b6050616c6c65743a3a72656d61726b605d2e387365745f686561705f706167657304011470616765732c010c7536340001047c536565205b6050616c6c65743a3a7365745f686561705f7061676573605d2e207365745f636f6465040110636f646534011c5665633c75383e00020464536565205b6050616c6c65743a3a7365745f636f6465605d2e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304a0536565205b6050616c6c65743a3a7365745f636f64655f776974686f75745f636865636b73605d2e2c7365745f73746f726167650401146974656d73150301345665633c4b657956616c75653e00040470536565205b6050616c6c65743a3a7365745f73746f72616765605d2e306b696c6c5f73746f726167650401106b6579731d0301205665633c4b65793e00050474536565205b6050616c6c65743a3a6b696c6c5f73746f72616765605d2e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797310010c75333200060470536565205b6050616c6c65743a3a6b696c6c5f707265666978605d2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e00070488536565205b6050616c6c65743a3a72656d61726b5f776974685f6576656e74605d2e44617574686f72697a655f75706772616465040124636f64655f6861736830011c543a3a4861736800090488536565205b6050616c6c65743a3a617574686f72697a655f75706772616465605d2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736830011c543a3a48617368000a04c4536565205b6050616c6c65743a3a617574686f72697a655f757067726164655f776974686f75745f636865636b73605d2e606170706c795f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000b04a4536565205b6050616c6c65743a3a6170706c795f617574686f72697a65645f75706772616465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15030000021903001903000004083434001d03000002340021030c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373250301845065724469737061746368436c6173733c57656967687473506572436c6173733e000025030c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454012903000c01186e6f726d616c290301045400012c6f7065726174696f6e616c29030104540001246d616e6461746f72792903010454000029030c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e7369632d0301384f7074696f6e3c5765696768743e0001246d61785f746f74616c2d0301384f7074696f6e3c5765696768743e00012072657365727665642d0301384f7074696f6e3c5765696768743e00002d0304184f7074696f6e04045401240108104e6f6e6500000010536f6d65040024000001000031030c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178350301545065724469737061746368436c6173733c7533323e000035030c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400003903082873705f776569676874733c52756e74696d6544625765696768740000080110726561642c010c75363400011477726974652c010c75363400003d03082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65b501013452756e74696d65537472696e67000124696d706c5f6e616d65b501013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069734103011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800004103040c436f77040454014503000400450300000045030000024903004903000004084d0310004d0300000308000000080051030c306672616d655f73797374656d1870616c6c6574144572726f720404540001203c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e444e6f7468696e67417574686f72697a6564000604584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400070494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c657455030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400000450536565205b6050616c6c65743a3a736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59030c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000454536565205b6050616c6c65743a3a7375646f605d2e547375646f5f756e636865636b65645f77656967687408011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687424011857656967687400010498536565205b6050616c6c65743a3a7375646f5f756e636865636b65645f776569676874605d2e1c7365745f6b657904010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e00020460536565205b6050616c6c65743a3a7365745f6b6579605d2e1c7375646f5f617308010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030460536565205b6050616c6c65743a3a7375646f5f6173605d2e2872656d6f76655f6b65790004046c536565205b6050616c6c65743a3a72656d6f76655f6b6579605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d03085874616e676c655f746573746e65745f72756e74696d652c52756e74696d6543616c6c0001b01853797374656d0400110301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400550301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e000100105375646f0400590301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000200184173736574730400610301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574732c2052756e74696d653e0004002042616c616e6365730400690301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e00050010426162650400710301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0008001c4772616e6470610400950301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0009001c496e64696365730400c90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e000a002444656d6f63726163790400cd0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e000b001c436f756e63696c0400e90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e000c001c56657374696e670400ed0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e000d0024456c656374696f6e730400f50301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e732c2052756e74696d653e000e0068456c656374696f6e50726f76696465724d756c746950686173650400fd0301fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e000f001c5374616b696e670400e50401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0010001c53657373696f6e0400050501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0011002054726561737572790400190501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e00130020426f756e746965730400210501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426f756e746965732c2052756e74696d653e001400344368696c64426f756e746965730400250501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4368696c64426f756e746965732c2052756e74696d653e00150020426167734c6973740400290501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426167734c6973742c2052756e74696d653e0016003c4e6f6d696e6174696f6e506f6f6c7304002d0501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f6d696e6174696f6e506f6f6c732c2052756e74696d653e001700245363686564756c65720400490501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e00180020507265696d6167650400510501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e0019001c547850617573650400550501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547850617573652c2052756e74696d653e001b0020496d4f6e6c696e650400590501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e001c00204964656e746974790400690501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e001d001c5574696c6974790400110601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e001e00204d756c74697369670400290601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e001f0020457468657265756d0400310601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d2c2052756e74696d653e0020000c45564d0400590601a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d2c2052756e74696d653e0021002844796e616d69634665650400690601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44796e616d69634665652c2052756e74696d653e0023001c4261736546656504006d0601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426173654665652c2052756e74696d653e00240044486f7466697853756666696369656e74730400710601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c486f7466697853756666696369656e74732c2052756e74696d653e00250018436c61696d730400790601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436c61696d732c2052756e74696d653e00260014526f6c65730400a50601a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526f6c65732c2052756e74696d653e002700104a6f62730400c50601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4a6f62732c2052756e74696d653e0028000c446b670400690701a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446b672c2052756e74696d653e002900185a6b5361615304006d0701ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5a6b536161532c2052756e74696d653e002a001450726f78790400710701a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b00504d756c7469417373657444656c65676174696f6e0400790701e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c7469417373657444656c65676174696f6e2c2052756e74696d653e002c00545379676d6141636365737353656772656761746f7204007d0701e90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6141636365737353656772656761746f722c2052756e74696d653e002d00505379676d61426173696346656548616e646c65720400810701e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d61426173696346656548616e646c65722c2052756e74696d653e002e00545379676d6146656548616e646c6572526f757465720400850701e90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6146656548616e646c6572526f757465722c2052756e74696d653e002f00645379676d6150657263656e7461676546656548616e646c65720400890701f90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d6150657263656e7461676546656548616e646c65722c2052756e74696d653e0030002c5379676d6142726964676504008d0701c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5379676d614272696467652c2052756e74696d653e0031000061030c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c010869647501014c543a3a41737365744964506172616d6574657200011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e63650000045c536565205b6050616c6c65743a3a637265617465605d2e30666f7263655f63726561746510010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74780110626f6f6c00012c6d696e5f62616c616e636575010128543a3a42616c616e636500010474536565205b6050616c6c65743a3a666f7263655f637265617465605d2e3473746172745f64657374726f7904010869647501014c543a3a41737365744964506172616d6574657200020478536565205b6050616c6c65743a3a73746172745f64657374726f79605d2e4064657374726f795f6163636f756e747304010869647501014c543a3a41737365744964506172616d6574657200030484536565205b6050616c6c65743a3a64657374726f795f6163636f756e7473605d2e4464657374726f795f617070726f76616c7304010869647501014c543a3a41737365744964506172616d6574657200040488536565205b6050616c6c65743a3a64657374726f795f617070726f76616c73605d2e3866696e6973685f64657374726f7904010869647501014c543a3a41737365744964506172616d657465720005047c536565205b6050616c6c65743a3a66696e6973685f64657374726f79605d2e106d696e740c010869647501014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500060454536565205b6050616c6c65743a3a6d696e74605d2e106275726e0c010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500070454536565205b6050616c6c65743a3a6275726e605d2e207472616e736665720c010869647501014c543a3a41737365744964506172616d65746572000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500080464536565205b6050616c6c65743a3a7472616e73666572605d2e4c7472616e736665725f6b6565705f616c6976650c010869647501014c543a3a41737365744964506172616d65746572000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500090490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e38666f7263655f7472616e7366657210010869647501014c543a3a41737365744964506172616d65746572000118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e00011064657374650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e6365000a047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a6508010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000b045c536565205b6050616c6c65743a3a667265657a65605d2e107468617708010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000c0454536565205b6050616c6c65743a3a74686177605d2e30667265657a655f617373657404010869647501014c543a3a41737365744964506172616d65746572000d0474536565205b6050616c6c65743a3a667265657a655f6173736574605d2e28746861775f617373657404010869647501014c543a3a41737365744964506172616d65746572000e046c536565205b6050616c6c65743a3a746861775f6173736574605d2e487472616e736665725f6f776e65727368697008010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e000f048c536565205b6050616c6c65743a3a7472616e736665725f6f776e657273686970605d2e207365745f7465616d10010869647501014c543a3a41737365744964506172616d65746572000118697373756572650301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572650301504163636f756e7449644c6f6f6b75704f663c543e00100464536565205b6050616c6c65743a3a7365745f7465616d605d2e307365745f6d6574616461746110010869647501014c543a3a41737365744964506172616d657465720001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800110474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e38636c6561725f6d6574616461746104010869647501014c543a3a41737365744964506172616d657465720012047c536565205b6050616c6c65743a3a636c6561725f6d65746164617461605d2e48666f7263655f7365745f6d6574616461746114010869647501014c543a3a41737365744964506172616d657465720001106e616d6534011c5665633c75383e00011873796d626f6c34011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c0013048c536565205b6050616c6c65743a3a666f7263655f7365745f6d65746164617461605d2e50666f7263655f636c6561725f6d6574616461746104010869647501014c543a3a41737365744964506172616d6574657200140494536565205b6050616c6c65743a3a666f7263655f636c6561725f6d65746164617461605d2e48666f7263655f61737365745f73746174757320010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572650301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696e650301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572650301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e636575010128543a3a42616c616e636500013469735f73756666696369656e74780110626f6f6c00012469735f66726f7a656e780110626f6f6c0015048c536565205b6050616c6c65743a3a666f7263655f61737365745f737461747573605d2e40617070726f76655f7472616e736665720c010869647501014c543a3a41737365744964506172616d6574657200012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500160484536565205b6050616c6c65743a3a617070726f76655f7472616e73666572605d2e3c63616e63656c5f617070726f76616c08010869647501014c543a3a41737365744964506172616d6574657200012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00170480536565205b6050616c6c65743a3a63616e63656c5f617070726f76616c605d2e54666f7263655f63616e63656c5f617070726f76616c0c010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00180498536565205b6050616c6c65743a3a666f7263655f63616e63656c5f617070726f76616c605d2e447472616e736665725f617070726f76656410010869647501014c543a3a41737365744964506172616d657465720001146f776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6e650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e7475010128543a3a42616c616e636500190488536565205b6050616c6c65743a3a7472616e736665725f617070726f766564605d2e14746f75636804010869647501014c543a3a41737365744964506172616d65746572001a0458536565205b6050616c6c65743a3a746f756368605d2e18726566756e6408010869647501014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e780110626f6f6c001b045c536565205b6050616c6c65743a3a726566756e64605d2e3c7365745f6d696e5f62616c616e636508010869647501014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c0480536565205b6050616c6c65743a3a7365745f6d696e5f62616c616e6365605d2e2c746f7563685f6f7468657208010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001d0470536565205b6050616c6c65743a3a746f7563685f6f74686572605d2e30726566756e645f6f7468657208010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001e0474536565205b6050616c6c65743a3a726566756e645f6f74686572605d2e14626c6f636b08010869647501014c543a3a41737365744964506172616d6574657200010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e001f0458536565205b6050616c6c65743a3a626c6f636b605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e65030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780110011408496404000001244163636f756e74496400000014496e6465780400bd0201304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d0003002441646472657373323004009d0101205b75383b2032305d0004000069030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f646561746808011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e636500000494536565205b6050616c6c65743a3a7472616e736665725f616c6c6f775f6465617468605d2e38666f7263655f7472616e736665720c0118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e00011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e63650002047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e4c7472616e736665725f6b6565705f616c69766508011064657374650301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756575010128543a3a42616c616e636500030490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e307472616e736665725f616c6c08011064657374650301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665780110626f6f6c00040474536565205b6050616c6c65743a3a7472616e736665725f616c6c605d2e3c666f7263655f756e7265736572766508010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050480536565205b6050616c6c65743a3a666f7263655f756e72657365727665605d2e40757067726164655f6163636f756e747304010c77686f250201445665633c543a3a4163636f756e7449643e00060484536565205b6050616c6c65743a3a757067726164655f6163636f756e7473605d2e44666f7263655f7365745f62616c616e636508010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656575010128543a3a42616c616e636500080488536565205b6050616c6c65743a3a666f7263655f7365745f62616c616e6365605d2e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e6d03014c41646a7573746d656e74446972656374696f6e00011464656c746175010128543a3a42616c616e6365000904b0536565205b6050616c6c65743a3a666f7263655f61646a7573745f746f74616c5f69737375616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d030c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e6372656173650000002044656372656173650001000071030c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6675030190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6685030140543a3a4b65794f776e657250726f6f6600000490536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e605d2e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6675030190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6685030140543a3a4b65794f776e657250726f6f66000104b4536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e5f756e7369676e6564605d2e48706c616e5f636f6e6669675f6368616e6765040118636f6e666967890301504e657874436f6e66696744657363726970746f720002048c536565205b6050616c6c65743a3a706c616e5f636f6e6669675f6368616e6765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7503084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572017903084964017d03001001206f6666656e6465727d0301084964000110736c6f7481030110536c6f7400013066697273745f686561646572790301184865616465720001347365636f6e645f6865616465727903011848656164657200007903102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d626572012c1048617368000014012c706172656e745f68617368300130486173683a3a4f75747075740001186e756d6265722801184e756d62657200012873746174655f726f6f74300130486173683a3a4f757470757400013c65787472696e736963735f726f6f74300130486173683a3a4f757470757400011864696765737438011844696765737400007d030c4473705f636f6e73656e7375735f626162650c617070185075626c6963000004006501013c737232353531393a3a5075626c696300008103084873705f636f6e73656e7375735f736c6f747310536c6f74000004002c010c75363400008503082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f6465731d0301305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e74000089030c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f72000104085631080104638d030128287536342c2075363429000134616c6c6f7765645f736c6f747391030130416c6c6f776564536c6f7473000100008d03000004082c2c009103084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000095030c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66990301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66c5030140543a3a4b65794f776e657250726f6f6600000490536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e605d2e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66990301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66c5030140543a3a4b65794f776e657250726f6f66000104b4536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e5f756e7369676e6564605d2e306e6f74655f7374616c6c656408011464656c61792c0144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d6265722c0144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a6e6f74655f7374616c6c6564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9903085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480130044e012c000801187365745f69642c0114536574496400013065717569766f636174696f6e9d03014845717569766f636174696f6e3c482c204e3e00009d03085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480130044e012c01081c507265766f74650400a1030139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d69740400b9030141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e00010000a103084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401a8045601a503045301a90300100130726f756e645f6e756d6265722c010c7536340001206964656e74697479a8010849640001146669727374b503011828562c2053290001187365636f6e64b503011828562c2053290000a503084066696e616c6974795f6772616e6470611c507265766f74650804480130044e012c0008012c7461726765745f68617368300104480001347461726765745f6e756d6265722c01044e0000a9030c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400ad030148656432353531393a3a5369676e61747572650000ad030c1c73705f636f72651c65643235353139245369676e617475726500000400b10301205b75383b2036345d0000b103000003400000000800b50300000408a503a90300b903084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401a8045601bd03045301a90300100130726f756e645f6e756d6265722c010c7536340001206964656e74697479a8010849640001146669727374c103011828562c2053290001187365636f6e64c103011828562c2053290000bd03084066696e616c6974795f6772616e64706124507265636f6d6d69740804480130044e012c0008012c7461726765745f68617368300104480001347461726765745f6e756d6265722c01044e0000c10300000408bd03a90300c503081c73705f636f726510566f696400010000c9030c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e64657800000458536565205b6050616c6c65743a3a636c61696d605d2e207472616e7366657208010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e64657800010464536565205b6050616c6c65743a3a7472616e73666572605d2e1066726565040114696e64657810013c543a3a4163636f756e74496e64657800020454536565205b6050616c6c65743a3a66726565605d2e38666f7263655f7472616e736665720c010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65780110626f6f6c0003047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004045c536565205b6050616c6c65743a3a667265657a65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e00011476616c75657501013042616c616e63654f663c543e00000460536565205b6050616c6c65743a3a70726f706f7365605d2e187365636f6e6404012070726f706f73616cbd02012450726f70496e6465780001045c536565205b6050616c6c65743a3a7365636f6e64605d2e10766f74650801247265665f696e646578bd02013c5265666572656e64756d496e646578000110766f7465bc01644163636f756e74566f74653c42616c616e63654f663c543e3e00020454536565205b6050616c6c65743a3a766f7465605d2e40656d657267656e63795f63616e63656c0401247265665f696e64657810013c5265666572656e64756d496e64657800030484536565205b6050616c6c65743a3a656d657267656e63795f63616e63656c605d2e4065787465726e616c5f70726f706f736504012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e00040484536565205b6050616c6c65743a3a65787465726e616c5f70726f706f7365605d2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e000504a8536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f6d616a6f72697479605d2e6065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616cd1030140426f756e64656443616c6c4f663c543e000604a4536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f64656661756c74605d2e28666173745f747261636b0c013470726f706f73616c5f6861736830011c543a3a48617368000134766f74696e675f706572696f642c0144426c6f636b4e756d626572466f723c543e00011464656c61792c0144426c6f636b4e756d626572466f723c543e0007046c536565205b6050616c6c65743a3a666173745f747261636b605d2e347665746f5f65787465726e616c04013470726f706f73616c5f6861736830011c543a3a4861736800080478536565205b6050616c6c65743a3a7665746f5f65787465726e616c605d2e4463616e63656c5f7265666572656e64756d0401247265665f696e646578bd02013c5265666572656e64756d496e64657800090488536565205b6050616c6c65743a3a63616e63656c5f7265666572656e64756d605d2e2064656c65676174650c0108746f650301504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6edd030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a0464536565205b6050616c6c65743a3a64656c6567617465605d2e28756e64656c6567617465000b046c536565205b6050616c6c65743a3a756e64656c6567617465605d2e58636c6561725f7075626c69635f70726f706f73616c73000c049c536565205b6050616c6c65743a3a636c6561725f7075626c69635f70726f706f73616c73605d2e18756e6c6f636b040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000d045c536565205b6050616c6c65743a3a756e6c6f636b605d2e2c72656d6f76655f766f7465040114696e64657810013c5265666572656e64756d496e646578000e0470536565205b6050616c6c65743a3a72656d6f76655f766f7465605d2e4472656d6f76655f6f746865725f766f7465080118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c5265666572656e64756d496e646578000f0488536565205b6050616c6c65743a3a72656d6f76655f6f746865725f766f7465605d2e24626c61636b6c69737408013470726f706f73616c5f6861736830011c543a3a4861736800013c6d617962655f7265665f696e646578e103015c4f7074696f6e3c5265666572656e64756d496e6465783e00100468536565205b6050616c6c65743a3a626c61636b6c697374605d2e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578bd02012450726f70496e64657800110480536565205b6050616c6c65743a3a63616e63656c5f70726f706f73616c605d2e307365745f6d657461646174610801146f776e6572c401344d657461646174614f776e65720001286d617962655f68617368e503013c4f7074696f6e3c543a3a486173683e00120474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564080454015d03044801d503010c184c656761637904011068617368300124483a3a4f757470757400000018496e6c696e650400d9030134426f756e646564496e6c696e65000100184c6f6f6b757008011068617368300124483a3a4f757470757400010c6c656e10010c75333200020000d5030c2873705f72756e74696d65187472616974732c426c616b6554776f32353600000000d9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000dd030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000e10304184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000e50304184f7074696f6e04045401300108104e6f6e6500000010536f6d650400300000010000e9030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273250201445665633c543a3a4163636f756e7449643e0001147072696d658801504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c5d03017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64bd02010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64bd02012c4d656d626572436f756e7400012070726f706f73616c5d03017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64bd02010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578bd02013450726f706f73616c496e64657800011c617070726f7665780110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578bd02013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64bd02010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eed030c3870616c6c65745f76657374696e671870616c6c65741043616c6c040454000118107665737400000454536565205b6050616c6c65743a3a76657374605d2e28766573745f6f74686572040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001046c536565205b6050616c6c65743a3a766573745f6f74686572605d2e3c7665737465645f7472616e73666572080118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65f10301b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00020480536565205b6050616c6c65743a3a7665737465645f7472616e73666572605d2e54666f7263655f7665737465645f7472616e736665720c0118736f75726365650301504163636f756e7449644c6f6f6b75704f663c543e000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65f10301b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00030498536565205b6050616c6c65743a3a666f7263655f7665737465645f7472616e73666572605d2e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c75333200040480536565205b6050616c6c65743a3a6d657267655f7363686564756c6573605d2e74666f7263655f72656d6f76655f76657374696e675f7363686564756c650801187461726765746503018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001387363686564756c655f696e64657810010c753332000504b8536565205b6050616c6c65743a3a666f7263655f72656d6f76655f76657374696e675f7363686564756c65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef1030c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d626572012c000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b2c012c426c6f636b4e756d6265720000f5030c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c65741043616c6c04045400011810766f7465080114766f746573250201445665633c543a3a4163636f756e7449643e00011476616c75657501013042616c616e63654f663c543e00000454536565205b6050616c6c65743a3a766f7465605d2e3072656d6f76655f766f74657200010474536565205b6050616c6c65743a3a72656d6f76655f766f746572605d2e407375626d69745f63616e64696461637904013c63616e6469646174655f636f756e74bd02010c75333200020484536565205b6050616c6c65743a3a7375626d69745f63616e646964616379605d2e4872656e6f756e63655f63616e64696461637904012872656e6f756e63696e67f903012852656e6f756e63696e670003048c536565205b6050616c6c65743a3a72656e6f756e63655f63616e646964616379605d2e3472656d6f76655f6d656d6265720c010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000128736c6173685f626f6e64780110626f6f6c000138726572756e5f656c656374696f6e780110626f6f6c00040478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e50636c65616e5f646566756e63745f766f746572730801286e756d5f766f7465727310010c75333200012c6e756d5f646566756e637410010c75333200050494536565205b6050616c6c65743a3a636c65616e5f646566756e63745f766f74657273605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef903086470616c6c65745f656c656374696f6e735f70687261676d656e2852656e6f756e63696e6700010c184d656d6265720000002052756e6e657255700001002443616e6469646174650400bd02010c75333200020000fd030c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6e010401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e657373d1040158536f6c7574696f6e4f72536e617073686f7453697a6500000480536565205b6050616c6c65743a3a7375626d69745f756e7369676e6564605d2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265d50401544f7074696f6e3c456c656374696f6e53636f72653e000104b0536565205b6050616c6c65743a3a7365745f6d696e696d756d5f756e747275737465645f73636f7265605d2e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f727473d9040158537570706f7274733c543a3a4163636f756e7449643e000204b8536565205b6050616c6c65743a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e187375626d69740401307261775f736f6c7574696f6e010401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003045c536565205b6050616c6c65743a3a7375626d6974605d2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f74657273e103012c4f7074696f6e3c7533323e0001446d617962655f6d61785f74617267657473e103012c4f7074696f6e3c7533323e00040490536565205b6050616c6c65743a3a676f7665726e616e63655f66616c6c6261636b605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e040453010504000c0120736f6c7574696f6e050401045300011473636f7265e40134456c656374696f6e53636f7265000114726f756e6410010c75333200000504085874616e676c655f746573746e65745f72756e74696d65384e706f73536f6c7574696f6e31360000400118766f74657331090400000118766f74657332150400000118766f74657333290400000118766f74657334350400000118766f74657335410400000118766f746573364d0400000118766f74657337590400000118766f74657338650400000118766f7465733971040000011c766f74657331307d040000011c766f746573313189040000011c766f746573313295040000011c766f7465733133a1040000011c766f7465733134ad040000011c766f7465733135b9040000011c766f7465733136c50400000009040000020d04000d0400000408bd021104001104000006910200150400000219040019040000040cbd021d041104001d04000004081104210400210400000625040025040c3473705f61726974686d65746963287065725f7468696e677318506572553136000004009102010c753136000029040000022d04002d040000040cbd0231041104003104000003020000001d0400350400000239040039040000040cbd023d041104003d04000003030000001d0400410400000245040045040000040cbd0249041104004904000003040000001d04004d0400000251040051040000040cbd0255041104005504000003050000001d040059040000025d04005d040000040cbd0261041104006104000003060000001d0400650400000269040069040000040cbd026d041104006d04000003070000001d0400710400000275040075040000040cbd0279041104007904000003080000001d04007d0400000281040081040000040cbd0285041104008504000003090000001d040089040000028d04008d040000040cbd02910411040091040000030a0000001d0400950400000299040099040000040cbd029d041104009d040000030b0000001d0400a104000002a50400a5040000040cbd02a904110400a9040000030c0000001d0400ad04000002b10400b1040000040cbd02b504110400b5040000030d0000001d0400b904000002bd0400bd040000040cbd02c104110400c1040000030e0000001d0400c504000002c90400c9040000040cbd02cd04110400cd040000030f0000001d0400d104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f74657273bd02010c75333200011c74617267657473bd02010c7533320000d50404184f7074696f6e04045401e40108104e6f6e6500000010536f6d650400e40000010000d904000002dd0400dd040000040800e10400e104084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273d401845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e0000e504103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400017410626f6e6408011476616c75657501013042616c616e63654f663c543e0001147061796565f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00000454536565205b6050616c6c65743a3a626f6e64605d2e28626f6e645f65787472610401386d61785f6164646974696f6e616c7501013042616c616e63654f663c543e0001046c536565205b6050616c6c65743a3a626f6e645f6578747261605d2e18756e626f6e6404011476616c75657501013042616c616e63654f663c543e0002045c536565205b6050616c6c65743a3a756e626f6e64605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c75333200030488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e2076616c69646174650401147072656673fc013856616c696461746f72507265667300040464536565205b6050616c6c65743a3a76616c6964617465605d2e206e6f6d696e61746504011c74617267657473e90401645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00050464536565205b6050616c6c65743a3a6e6f6d696e617465605d2e146368696c6c00060458536565205b6050616c6c65743a3a6368696c6c605d2e247365745f70617965650401147061796565f4017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00070468536565205b6050616c6c65743a3a7365745f7061796565605d2e387365745f636f6e74726f6c6c65720008047c536565205b6050616c6c65743a3a7365745f636f6e74726f6c6c6572605d2e4c7365745f76616c696461746f725f636f756e7404010c6e6577bd02010c75333200090490536565205b6050616c6c65743a3a7365745f76616c696461746f725f636f756e74605d2e60696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616cbd02010c753332000a04a4536565205b6050616c6c65743a3a696e6372656173655f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f729902011c50657263656e74000b0498536565205b6050616c6c65743a3a7363616c655f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c0478536565205b6050616c6c65743a3a666f7263655f6e6f5f65726173605d2e34666f7263655f6e65775f657261000d0478536565205b6050616c6c65743a3a666f7263655f6e65775f657261605d2e447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573250201445665633c543a3a4163636f756e7449643e000e0488536565205b6050616c6c65743a3a7365745f696e76756c6e657261626c6573605d2e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0478536565205b6050616c6c65743a3a666f7263655f756e7374616b65605d2e50666f7263655f6e65775f6572615f616c7761797300100494536565205b6050616c6c65743a3a666f7263655f6e65775f6572615f616c77617973605d2e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573ed0401205665633c7533323e00110498536565205b6050616c6c65743a3a63616e63656c5f64656665727265645f736c617368605d2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780012047c536565205b6050616c6c65743a3a7061796f75745f7374616b657273605d2e187265626f6e6404011476616c75657501013042616c616e63654f663c543e0013045c536565205b6050616c6c65743a3a7265626f6e64605d2e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014046c536565205b6050616c6c65743a3a726561705f7374617368605d2e106b69636b04010c77686fe90401645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00150454536565205b6050616c6c65743a3a6b69636b605d2e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e64f1040158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e64f1040158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e74f5040134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e74f5040134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c64f9040144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6efd040144436f6e6669674f703c50657262696c6c3e00160490536565205b6050616c6c65743a3a7365745f7374616b696e675f636f6e66696773605d2e2c6368696c6c5f6f746865720401147374617368000130543a3a4163636f756e74496400170470536565205b6050616c6c65743a3a6368696c6c5f6f74686572605d2e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e744964001804ac536565205b6050616c6c65743a3a666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e605d2e487365745f6d696e5f636f6d6d697373696f6e04010c6e6577f8011c50657262696c6c0019048c536565205b6050616c6c65743a3a7365745f6d696e5f636f6d6d697373696f6e605d2e587061796f75745f7374616b6572735f62795f706167650c013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780001107061676510011050616765001a049c536565205b6050616c6c65743a3a7061796f75745f7374616b6572735f62795f70616765605d2e307570646174655f7061796565040128636f6e74726f6c6c6572000130543a3a4163636f756e744964001b0474536565205b6050616c6c65743a3a7570646174655f7061796565605d2e686465707265636174655f636f6e74726f6c6c65725f626174636804012c636f6e74726f6c6c657273010501f4426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d6178436f6e74726f6c6c657273496e4465707265636174696f6e42617463683e001c04ac536565205b6050616c6c65743a3a6465707265636174655f636f6e74726f6c6c65725f6261746368605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee904000002650300ed040000021000f104103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f766500020000f504103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f766500020000f904103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454019902010c104e6f6f700000000c536574040099020104540001001852656d6f766500020000fd04103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f7004045401f8010c104e6f6f700000000c5365740400f80104540001001852656d6f76650002000001050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e000005050c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579730905011c543a3a4b65797300011470726f6f6634011c5665633c75383e00000464536565205b6050616c6c65743a3a7365745f6b657973605d2e2870757267655f6b6579730001046c536565205b6050616c6c65743a3a70757267655f6b657973605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e09050c5874616e676c655f746573746e65745f72756e74696d65186f70617175652c53657373696f6e4b6579730000100110626162657d0301c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011c6772616e647061a801d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65610101d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000110726f6c650d0501c83c526f6c6573206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300000d050c6074616e676c655f63727970746f5f7072696d6974697665731863727970746f185075626c6963000004001105013465636473613a3a5075626c6963000011050c1c73705f636f7265146563647361185075626c696300000400150501805b75383b205055424c49435f4b45595f53455249414c495a45445f53495a455d0000150500000321000000080019050c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001243470726f706f73655f7370656e6408011476616c75657501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a70726f706f73655f7370656e64605d2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800010480536565205b6050616c6c65743a3a72656a6563745f70726f706f73616c605d2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800020484536565205b6050616c6c65743a3a617070726f76655f70726f706f73616c605d2e2c7370656e645f6c6f63616c080118616d6f756e747501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00030470536565205b6050616c6c65743a3a7370656e645f6c6f63616c605d2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964bd02013450726f706f73616c496e64657800040480536565205b6050616c6c65743a3a72656d6f76655f617070726f76616c605d2e147370656e6410012861737365745f6b696e64840144426f783c543a3a41737365744b696e643e000118616d6f756e7475010150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279000178426f783c42656e65666963696172794c6f6f6b75704f663c542c20493e3e00012876616c69645f66726f6d1d0501644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e00050458536565205b6050616c6c65743a3a7370656e64605d2e187061796f7574040114696e6465781001285370656e64496e6465780006045c536565205b6050616c6c65743a3a7061796f7574605d2e30636865636b5f737461747573040114696e6465781001285370656e64496e64657800070474536565205b6050616c6c65743a3a636865636b5f737461747573605d2e28766f69645f7370656e64040114696e6465781001285370656e64496e6465780008046c536565205b6050616c6c65743a3a766f69645f7370656e64605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1d0504184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c000001000021050c3c70616c6c65745f626f756e746965731870616c6c65741043616c6c0804540004490001243870726f706f73655f626f756e747908011476616c75657501013c42616c616e63654f663c542c20493e00012c6465736372697074696f6e34011c5665633c75383e0000047c536565205b6050616c6c65743a3a70726f706f73655f626f756e7479605d2e38617070726f76655f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e6465780001047c536565205b6050616c6c65743a3a617070726f76655f626f756e7479605d2e3c70726f706f73655f63757261746f720c0124626f756e74795f6964bd02012c426f756e7479496e64657800011c63757261746f72650301504163636f756e7449644c6f6f6b75704f663c543e00010c6665657501013c42616c616e63654f663c542c20493e00020480536565205b6050616c6c65743a3a70726f706f73655f63757261746f72605d2e40756e61737369676e5f63757261746f72040124626f756e74795f6964bd02012c426f756e7479496e64657800030484536565205b6050616c6c65743a3a756e61737369676e5f63757261746f72605d2e386163636570745f63757261746f72040124626f756e74795f6964bd02012c426f756e7479496e6465780004047c536565205b6050616c6c65743a3a6163636570745f63757261746f72605d2e3061776172645f626f756e7479080124626f756e74795f6964bd02012c426f756e7479496e64657800012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e00050474536565205b6050616c6c65743a3a61776172645f626f756e7479605d2e30636c61696d5f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e64657800060474536565205b6050616c6c65743a3a636c61696d5f626f756e7479605d2e30636c6f73655f626f756e7479040124626f756e74795f6964bd02012c426f756e7479496e64657800070474536565205b6050616c6c65743a3a636c6f73655f626f756e7479605d2e50657874656e645f626f756e74795f657870697279080124626f756e74795f6964bd02012c426f756e7479496e64657800011872656d61726b34011c5665633c75383e00080494536565205b6050616c6c65743a3a657874656e645f626f756e74795f657870697279605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e25050c5470616c6c65745f6368696c645f626f756e746965731870616c6c65741043616c6c04045400011c406164645f6368696c645f626f756e74790c0140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800011476616c75657501013042616c616e63654f663c543e00012c6465736372697074696f6e34011c5665633c75383e00000484536565205b6050616c6c65743a3a6164645f6368696c645f626f756e7479605d2e3c70726f706f73655f63757261746f72100140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800011c63757261746f72650301504163636f756e7449644c6f6f6b75704f663c543e00010c6665657501013042616c616e63654f663c543e00010480536565205b6050616c6c65743a3a70726f706f73655f63757261746f72605d2e386163636570745f63757261746f72080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780002047c536565205b6050616c6c65743a3a6163636570745f63757261746f72605d2e40756e61737369676e5f63757261746f72080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800030484536565205b6050616c6c65743a3a756e61737369676e5f63757261746f72605d2e4861776172645f6368696c645f626f756e74790c0140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e64657800012c62656e6566696369617279650301504163636f756e7449644c6f6f6b75704f663c543e0004048c536565205b6050616c6c65743a3a61776172645f6368696c645f626f756e7479605d2e48636c61696d5f6368696c645f626f756e7479080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780005048c536565205b6050616c6c65743a3a636c61696d5f6368696c645f626f756e7479605d2e48636c6f73655f6368696c645f626f756e7479080140706172656e745f626f756e74795f6964bd02012c426f756e7479496e64657800013c6368696c645f626f756e74795f6964bd02012c426f756e7479496e6465780006048c536565205b6050616c6c65743a3a636c6f73655f6368696c645f626f756e7479605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e29050c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c08045400044900010c1472656261670401286469736c6f6361746564650301504163636f756e7449644c6f6f6b75704f663c543e00000458536565205b6050616c6c65743a3a7265626167605d2e3c7075745f696e5f66726f6e745f6f6604011c6c696768746572650301504163636f756e7449644c6f6f6b75704f663c543e00010480536565205b6050616c6c65743a3a7075745f696e5f66726f6e745f6f66605d2e547075745f696e5f66726f6e745f6f665f6f7468657208011c68656176696572650301504163636f756e7449644c6f6f6b75704f663c543e00011c6c696768746572650301504163636f756e7449644c6f6f6b75704f663c543e00020498536565205b6050616c6c65743a3a7075745f696e5f66726f6e745f6f665f6f74686572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d050c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c65741043616c6c04045400015c106a6f696e080118616d6f756e747501013042616c616e63654f663c543e00011c706f6f6c5f6964100118506f6f6c496400000454536565205b6050616c6c65743a3a6a6f696e605d2e28626f6e645f657874726104011465787472613105015c426f6e6445787472613c42616c616e63654f663c543e3e0001046c536565205b6050616c6c65743a3a626f6e645f6578747261605d2e30636c61696d5f7061796f757400020474536565205b6050616c6c65743a3a636c61696d5f7061796f7574605d2e18756e626f6e640801386d656d6265725f6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e000140756e626f6e64696e675f706f696e74737501013042616c616e63654f663c543e0003045c536565205b6050616c6c65743a3a756e626f6e64605d2e58706f6f6c5f77697468647261775f756e626f6e64656408011c706f6f6c5f6964100118506f6f6c49640001486e756d5f736c617368696e675f7370616e7310010c7533320004049c536565205b6050616c6c65743a3a706f6f6c5f77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640801386d656d6265725f6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e0001486e756d5f736c617368696e675f7370616e7310010c75333200050488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e18637265617465100118616d6f756e747501013042616c616e63654f663c543e000110726f6f74650301504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72650301504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572650301504163636f756e7449644c6f6f6b75704f663c543e0006045c536565205b6050616c6c65743a3a637265617465605d2e4c6372656174655f776974685f706f6f6c5f6964140118616d6f756e747501013042616c616e63654f663c543e000110726f6f74650301504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72650301504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572650301504163636f756e7449644c6f6f6b75704f663c543e00011c706f6f6c5f6964100118506f6f6c496400070490536565205b6050616c6c65743a3a6372656174655f776974685f706f6f6c5f6964605d2e206e6f6d696e61746508011c706f6f6c5f6964100118506f6f6c496400012876616c696461746f7273250201445665633c543a3a4163636f756e7449643e00080464536565205b6050616c6c65743a3a6e6f6d696e617465605d2e247365745f737461746508011c706f6f6c5f6964100118506f6f6c4964000114737461746521010124506f6f6c537461746500090468536565205b6050616c6c65743a3a7365745f7374617465605d2e307365745f6d6574616461746108011c706f6f6c5f6964100118506f6f6c49640001206d6574616461746134011c5665633c75383e000a0474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e2c7365745f636f6e666967731801346d696e5f6a6f696e5f626f6e6435050158436f6e6669674f703c42616c616e63654f663c543e3e00013c6d696e5f6372656174655f626f6e6435050158436f6e6669674f703c42616c616e63654f663c543e3e0001246d61785f706f6f6c7339050134436f6e6669674f703c7533323e00012c6d61785f6d656d6265727339050134436f6e6669674f703c7533323e0001506d61785f6d656d626572735f7065725f706f6f6c39050134436f6e6669674f703c7533323e000154676c6f62616c5f6d61785f636f6d6d697373696f6e3d050144436f6e6669674f703c50657262696c6c3e000b0470536565205b6050616c6c65743a3a7365745f636f6e66696773605d2e307570646174655f726f6c657310011c706f6f6c5f6964100118506f6f6c49640001206e65775f726f6f7441050158436f6e6669674f703c543a3a4163636f756e7449643e0001346e65775f6e6f6d696e61746f7241050158436f6e6669674f703c543a3a4163636f756e7449643e00012c6e65775f626f756e63657241050158436f6e6669674f703c543a3a4163636f756e7449643e000c0474536565205b6050616c6c65743a3a7570646174655f726f6c6573605d2e146368696c6c04011c706f6f6c5f6964100118506f6f6c4964000d0458536565205b6050616c6c65743a3a6368696c6c605d2e40626f6e645f65787472615f6f746865720801186d656d626572650301504163636f756e7449644c6f6f6b75704f663c543e00011465787472613105015c426f6e6445787472613c42616c616e63654f663c543e3e000e0484536565205b6050616c6c65743a3a626f6e645f65787472615f6f74686572605d2e507365745f636c61696d5f7065726d697373696f6e0401287065726d697373696f6e4505013c436c61696d5065726d697373696f6e000f0494536565205b6050616c6c65743a3a7365745f636c61696d5f7065726d697373696f6e605d2e48636c61696d5f7061796f75745f6f746865720401146f74686572000130543a3a4163636f756e7449640010048c536565205b6050616c6c65743a3a636c61696d5f7061796f75745f6f74686572605d2e387365745f636f6d6d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001386e65775f636f6d6d697373696f6e2501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e0011047c536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e605d2e487365745f636f6d6d697373696f6e5f6d617808011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6ef8011c50657262696c6c0012048c536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f6d6178605d2e687365745f636f6d6d697373696f6e5f6368616e67655f7261746508011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f726174652d01019c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e001304ac536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f6368616e67655f72617465605d2e40636c61696d5f636f6d6d697373696f6e04011c706f6f6c5f6964100118506f6f6c496400140484536565205b6050616c6c65743a3a636c61696d5f636f6d6d697373696f6e605d2e4c61646a7573745f706f6f6c5f6465706f73697404011c706f6f6c5f6964100118506f6f6c496400150490536565205b6050616c6c65743a3a61646a7573745f706f6f6c5f6465706f736974605d2e7c7365745f636f6d6d697373696f6e5f636c61696d5f7065726d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001287065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e001604c0536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f636c61696d5f7065726d697373696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324426f6e644578747261041c42616c616e6365011801082c4672656542616c616e6365040018011c42616c616e63650000001c52657761726473000100003505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200003905085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200003d05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f7004045401f8010c104e6f6f700000000c5365740400f80104540001001852656d6f7665000200004105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540100010c104e6f6f700000000c5365740400000104540001001852656d6f7665000200004505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c436c61696d5065726d697373696f6e000110305065726d697373696f6e6564000000585065726d697373696f6e6c657373436f6d706f756e64000100585065726d697373696f6e6c6573735769746864726177000200445065726d697373696f6e6c657373416c6c0003000049050c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e2c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000464536565205b6050616c6c65743a3a7363686564756c65605d2e1863616e63656c0801107768656e2c0144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001045c536565205b6050616c6c65743a3a63616e63656c605d2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e2c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0002047c536565205b6050616c6c65743a3a7363686564756c655f6e616d6564605d2e3063616e63656c5f6e616d656404010869640401205461736b4e616d6500030474536565205b6050616c6c65743a3a63616e63656c5f6e616d6564605d2e387363686564756c655f616674657210011461667465722c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004047c536565205b6050616c6c65743a3a7363686564756c655f6166746572605d2e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d6500011461667465722c0144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f6469634d0501ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050494536565205b6050616c6c65743a3a7363686564756c655f6e616d65645f6166746572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d0504184f7074696f6e040454013d010108104e6f6e6500000010536f6d6504003d01000001000051050c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000114346e6f74655f707265696d616765040114627974657334011c5665633c75383e00000478536565205b6050616c6c65743a3a6e6f74655f707265696d616765605d2e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a4861736800010480536565205b6050616c6c65743a3a756e6e6f74655f707265696d616765605d2e40726571756573745f707265696d6167650401106861736830011c543a3a4861736800020484536565205b6050616c6c65743a3a726571756573745f707265696d616765605d2e48756e726571756573745f707265696d6167650401106861736830011c543a3a486173680003048c536565205b6050616c6c65743a3a756e726571756573745f707265696d616765605d2e38656e737572655f75706461746564040118686173686573c90101305665633c543a3a486173683e0004047c536565205b6050616c6c65743a3a656e737572655f75706461746564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e55050c3c70616c6c65745f74785f70617573651870616c6c65741043616c6c04045400010814706175736504012466756c6c5f6e616d655501015052756e74696d6543616c6c4e616d654f663c543e00000458536565205b6050616c6c65743a3a7061757365605d2e1c756e70617573650401146964656e745501015052756e74696d6543616c6c4e616d654f663c543e00010460536565205b6050616c6c65743a3a756e7061757365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59050c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c040454000104246865617274626561740801246865617274626561745d0501704865617274626561743c426c6f636b4e756d626572466f723c543e3e0001247369676e6174757265610501bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500000468536565205b6050616c6c65743a3a686561727462656174605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d05084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572012c00100130626c6f636b5f6e756d6265722c012c426c6f636b4e756d62657200013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c75333200006105104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e61747572650000040065050148737232353531393a3a5369676e6174757265000065050c1c73705f636f72651c73723235353139245369676e617475726500000400b10301205b75383b2036345d000069050c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c040454000158346164645f72656769737472617204011c6163636f756e74650301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a6164645f726567697374726172605d2e307365745f6964656e74697479040110696e666f6d05016c426f783c543a3a4964656e74697479496e666f726d6174696f6e3e00010474536565205b6050616c6c65743a3a7365745f6964656e74697479605d2e207365745f7375627304011073756273f50501645665633c28543a3a4163636f756e7449642c2044617461293e00020464536565205b6050616c6c65743a3a7365745f73756273605d2e38636c6561725f6964656e746974790003047c536565205b6050616c6c65743a3a636c6561725f6964656e74697479605d2e44726571756573745f6a756467656d656e740801247265675f696e646578bd020138526567697374726172496e64657800011c6d61785f6665657501013042616c616e63654f663c543e00040488536565205b6050616c6c65743a3a726571756573745f6a756467656d656e74605d2e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e6465780005047c536565205b6050616c6c65743a3a63616e63656c5f72657175657374605d2e1c7365745f666565080114696e646578bd020138526567697374726172496e64657800010c6665657501013042616c616e63654f663c543e00060460536565205b6050616c6c65743a3a7365745f666565605d2e387365745f6163636f756e745f6964080114696e646578bd020138526567697374726172496e64657800010c6e6577650301504163636f756e7449644c6f6f6b75704f663c543e0007047c536565205b6050616c6c65743a3a7365745f6163636f756e745f6964605d2e287365745f6669656c6473080114696e646578bd020138526567697374726172496e6465780001186669656c64732c0129013c543a3a4964656e74697479496e666f726d6174696f6e206173204964656e74697479496e666f726d6174696f6e50726f76696465723e3a3a0a4669656c64734964656e7469666965720008046c536565205b6050616c6c65743a3a7365745f6669656c6473605d2e4470726f766964655f6a756467656d656e741001247265675f696e646578bd020138526567697374726172496e646578000118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e74fd05015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e7469747930011c543a3a4861736800090488536565205b6050616c6c65743a3a70726f766964655f6a756467656d656e74605d2e346b696c6c5f6964656e74697479040118746172676574650301504163636f756e7449644c6f6f6b75704f663c543e000a0478536565205b6050616c6c65743a3a6b696c6c5f6964656e74697479605d2e1c6164645f73756208010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000110646174617905011044617461000b0460536565205b6050616c6c65743a3a6164645f737562605d2e2872656e616d655f73756208010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000110646174617905011044617461000c046c536565205b6050616c6c65743a3a72656e616d655f737562605d2e2872656d6f76655f73756204010c737562650301504163636f756e7449644c6f6f6b75704f663c543e000d046c536565205b6050616c6c65743a3a72656d6f76655f737562605d2e20717569745f737562000e0464536565205b6050616c6c65743a3a717569745f737562605d2e586164645f757365726e616d655f617574686f726974790c0124617574686f72697479650301504163636f756e7449644c6f6f6b75704f663c543e00011873756666697834011c5665633c75383e000128616c6c6f636174696f6e10010c753332000f049c536565205b6050616c6c65743a3a6164645f757365726e616d655f617574686f72697479605d2e6472656d6f76655f757365726e616d655f617574686f72697479040124617574686f72697479650301504163636f756e7449644c6f6f6b75704f663c543e001004a8536565205b6050616c6c65743a3a72656d6f76655f757365726e616d655f617574686f72697479605d2e407365745f757365726e616d655f666f720c010c77686f650301504163636f756e7449644c6f6f6b75704f663c543e000120757365726e616d6534011c5665633c75383e0001247369676e6174757265010601704f7074696f6e3c543a3a4f6666636861696e5369676e61747572653e00110484536565205b6050616c6c65743a3a7365745f757365726e616d655f666f72605d2e3c6163636570745f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e00120480536565205b6050616c6c65743a3a6163636570745f757365726e616d65605d2e5c72656d6f76655f657870697265645f617070726f76616c040120757365726e616d658501012c557365726e616d653c543e001304a0536565205b6050616c6c65743a3a72656d6f76655f657870697265645f617070726f76616c605d2e507365745f7072696d6172795f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e00140494536565205b6050616c6c65743a3a7365745f7072696d6172795f757365726e616d65605d2e6072656d6f76655f64616e676c696e675f757365726e616d65040120757365726e616d658501012c557365726e616d653c543e001504a4536565205b6050616c6c65743a3a72656d6f76655f64616e676c696e675f757365726e616d65605d2e04704964656e746974792070616c6c6574206465636c61726174696f6e2e6d050c3c70616c6c65745f6964656e74697479186c6567616379304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c71050190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617979050110446174610001146c6567616c790501104461746100010c776562790501104461746100011072696f747905011044617461000114656d61696c790501104461746100013c7067705f66696e6765727072696e74f10501404f7074696f6e3c5b75383b2032305d3e000114696d616765790501104461746100011c747769747465727905011044617461000071050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017505045300000400ed0501185665633c543e0000750500000408790579050079050c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e65000000105261773004007d0500000100105261773104008105000002001052617732040085050000030010526177330400890500000400105261773404004400000500105261773504008d05000006001052617736040091050000070010526177370400950500000800105261773804004d030000090010526177390400990500000a0014526177313004009d0500000b001452617731310400a10500000c001452617731320400a50500000d001452617731330400a90500000e001452617731340400ad0500000f001452617731350400b1050000100014526177313604004d01000011001452617731370400b505000012001452617731380400b905000013001452617731390400bd050000140014526177323004009d01000015001452617732310400c105000016001452617732320400c505000017001452617732330400c905000018001452617732340400cd05000019001452617732350400d10500001a001452617732360400d50500001b001452617732370400d90500001c001452617732380400dd0500001d001452617732390400e10500001e001452617733300400e50500001f001452617733310400e90500002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c536861546872656532353604000400002500007d050000030000000008008105000003010000000800850500000302000000080089050000030300000008008d050000030500000008009105000003060000000800950500000307000000080099050000030900000008009d050000030a0000000800a1050000030b0000000800a5050000030c0000000800a9050000030d0000000800ad050000030e0000000800b1050000030f0000000800b505000003110000000800b905000003120000000800bd05000003130000000800c105000003150000000800c505000003160000000800c905000003170000000800cd05000003180000000800d105000003190000000800d5050000031a0000000800d9050000031b0000000800dd050000031c0000000800e1050000031d0000000800e5050000031e0000000800e9050000031f0000000800ed05000002750500f10504184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d010000010000f505000002f90500f9050000040800790500fd050c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000010604184f7074696f6e0404540105060108104e6f6e6500000010536f6d650400050600000100000506082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400ad030148656432353531393a3a5369676e61747572650000001c53723235353139040065050148737232353531393a3a5369676e617475726500010014456364736104000906014065636473613a3a5369676e61747572650002000009060c1c73705f636f7265146563647361245369676e6174757265000004000d06017c5b75383b205349474e41545552455f53455249414c495a45445f53495a455d00000d0600000341000000080011060c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a6261746368605d2e3461735f64657269766174697665080114696e6465789102010c75313600011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00010478536565205b6050616c6c65743a3a61735f64657269766174697665605d2e2462617463685f616c6c04011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00020468536565205b6050616c6c65743a3a62617463685f616c6c605d2e2c64697370617463685f617308012461735f6f726967696e19060154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030470536565205b6050616c6c65743a3a64697370617463685f6173605d2e2c666f7263655f626174636804011463616c6c731506017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00040470536565205b6050616c6c65743a3a666f7263655f6261746368605d2e2c776974685f77656967687408011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687424011857656967687400050470536565205b6050616c6c65743a3a776974685f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15060000025d03001906085874616e676c655f746573746e65745f72756e74696d65304f726967696e43616c6c65720001101873797374656d04001d0601746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400210601010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e000c0020457468657265756d04002506015c70616c6c65745f657468657265756d3a3a4f726967696e00200010566f69640400c50301410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f6964000300001d060c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200002106084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200002506083c70616c6c65745f657468657265756d245261774f726967696e0001044c457468657265756d5472616e73616374696f6e040099010110483136300000000029060c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000494536565205b6050616c6c65743a3a61735f6d756c74695f7468726573686f6c645f31605d2e2061735f6d756c74691401247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e742d0601904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687424011857656967687400010464536565205b6050616c6c65743a3a61735f6d756c7469605d2e40617070726f76655f61735f6d756c74691401247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e742d0601904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687424011857656967687400020484536565205b6050616c6c65743a3a617070726f76655f61735f6d756c7469605d2e3c63616e63656c5f61735f6d756c74691001247468726573686f6c649102010c7531360001446f746865725f7369676e61746f72696573250201445665633c543a3a4163636f756e7449643e00012474696d65706f696e749101017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d00030480536565205b6050616c6c65743a3a63616e63656c5f61735f6d756c7469605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d0604184f7074696f6e0404540191010108104e6f6e6500000010536f6d6504009101000001000031060c3c70616c6c65745f657468657265756d1870616c6c65741043616c6c040454000104207472616e7361637404012c7472616e73616374696f6e3506012c5472616e73616374696f6e00000464536565205b6050616c6c65743a3a7472616e73616374605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e35060c20657468657265756d2c7472616e73616374696f6e345472616e73616374696f6e563200010c184c65676163790400390601444c65676163795472616e73616374696f6e0000001c45495032393330040049060148454950323933305472616e73616374696f6e0001001c45495031353539040055060148454950313535395472616e73616374696f6e0002000039060c20657468657265756d2c7472616e73616374696f6e444c65676163795472616e73616374696f6e00001c01146e6f6e6365d1010110553235360001246761735f7072696365d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e70757434011442797465730001247369676e6174757265410601505472616e73616374696f6e5369676e617475726500003d060c20657468657265756d2c7472616e73616374696f6e445472616e73616374696f6e416374696f6e0001081043616c6c04009901011048313630000000184372656174650001000041060c20657468657265756d2c7472616e73616374696f6e505472616e73616374696f6e5369676e617475726500000c010476450601545472616e73616374696f6e5265636f76657279496400010472300110483235360001047330011048323536000045060c20657468657265756d2c7472616e73616374696f6e545472616e73616374696f6e5265636f766572794964000004002c010c753634000049060c20657468657265756d2c7472616e73616374696f6e48454950323933305472616e73616374696f6e00002c0120636861696e5f69642c010c7536340001146e6f6e6365d1010110553235360001246761735f7072696365d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e707574340114427974657300012c6163636573735f6c6973744d0601284163636573734c6973740001306f64645f795f706172697479780110626f6f6c0001047230011048323536000104733001104832353600004d0600000251060051060c20657468657265756d2c7472616e73616374696f6e384163636573734c6973744974656d000008011c616464726573739901011c4164647265737300013073746f726167655f6b657973c90101245665633c483235363e000055060c20657468657265756d2c7472616e73616374696f6e48454950313535395472616e73616374696f6e0000300120636861696e5f69642c010c7536340001146e6f6e6365d1010110553235360001606d61785f7072696f726974795f6665655f7065725f676173d10101105532353600013c6d61785f6665655f7065725f676173d1010110553235360001246761735f6c696d6974d101011055323536000118616374696f6e3d0601445472616e73616374696f6e416374696f6e00011476616c7565d101011055323536000114696e707574340114427974657300012c6163636573735f6c6973744d0601284163636573734c6973740001306f64645f795f706172697479780110626f6f6c00010472300110483235360001047330011048323536000059060c2870616c6c65745f65766d1870616c6c65741043616c6c04045400011020776974686472617708011c61646472657373990101104831363000011476616c756518013042616c616e63654f663c543e00000464536565205b6050616c6c65743a3a7769746864726177605d2e1063616c6c240118736f7572636599010110483136300001187461726765749901011048313630000114696e70757434011c5665633c75383e00011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e00010454536565205b6050616c6c65743a3a63616c6c605d2e18637265617465200118736f757263659901011048313630000110696e697434011c5665633c75383e00011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e0002045c536565205b6050616c6c65743a3a637265617465605d2e1c63726561746532240118736f757263659901011048313630000110696e697434011c5665633c75383e00011073616c743001104832353600011476616c7565d1010110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f676173d1010110553235360001606d61785f7072696f726974795f6665655f7065725f6761735d0601304f7074696f6e3c553235363e0001146e6f6e63655d0601304f7074696f6e3c553235363e00012c6163636573735f6c697374610601585665633c28483136302c205665633c483235363e293e00030460536565205b6050616c6c65743a3a63726561746532605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d0604184f7074696f6e04045401d1010108104e6f6e6500000010536f6d650400d101000001000061060000026506006506000004089901c9010069060c4870616c6c65745f64796e616d69635f6665651870616c6c65741043616c6c040454000104646e6f74655f6d696e5f6761735f70726963655f746172676574040118746172676574d101011055323536000004a8536565205b6050616c6c65743a3a6e6f74655f6d696e5f6761735f70726963655f746172676574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d060c3c70616c6c65745f626173655f6665651870616c6c65741043616c6c040454000108507365745f626173655f6665655f7065725f67617304010c666565d10101105532353600000494536565205b6050616c6c65743a3a7365745f626173655f6665655f7065725f676173605d2e387365745f656c6173746963697479040128656c6173746963697479d901011c5065726d696c6c0001047c536565205b6050616c6c65743a3a7365745f656c6173746963697479605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71060c6470616c6c65745f686f746669785f73756666696369656e74731870616c6c65741043616c6c04045400010478686f746669785f696e635f6163636f756e745f73756666696369656e7473040124616464726573736573750601245665633c483136303e000004bc536565205b6050616c6c65743a3a686f746669785f696e635f6163636f756e745f73756666696369656e7473605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750600000299010079060c5470616c6c65745f61697264726f705f636c61696d731870616c6c65741043616c6c04045400011814636c61696d0c0110646573747d0601504f7074696f6e3c4d756c7469416464726573733e0001187369676e65727d0601504f7074696f6e3c4d756c7469416464726573733e0001247369676e6174757265810601544d756c7469416464726573735369676e617475726500000458536565205b6050616c6c65743a3a636c61696d605d2e286d696e745f636c61696d10010c77686fe10101304d756c74694164647265737300011476616c756518013042616c616e63654f663c543e00014076657374696e675f7363686564756c658d060179014f7074696f6e3c426f756e6465645665633c0a2842616c616e63654f663c543e2c2042616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e292c20543a3a0a4d617856657374696e675363686564756c65733e2c3e00012473746174656d656e749d0601544f7074696f6e3c53746174656d656e744b696e643e0001046c536565205b6050616c6c65743a3a6d696e745f636c61696d605d2e30636c61696d5f617474657374100110646573747d0601504f7074696f6e3c4d756c7469416464726573733e0001187369676e65727d0601504f7074696f6e3c4d756c7469416464726573733e0001247369676e6174757265810601544d756c7469416464726573735369676e617475726500012473746174656d656e7434011c5665633c75383e00020474536565205b6050616c6c65743a3a636c61696d5f617474657374605d2e286d6f76655f636c61696d08010c6f6c64e10101304d756c74694164647265737300010c6e6577e10101304d756c7469416464726573730004046c536565205b6050616c6c65743a3a6d6f76655f636c61696d605d2e5c666f7263655f7365745f6578706972795f636f6e6669670801306578706972795f626c6f636b2c0144426c6f636b4e756d626572466f723c543e00011064657374e10101304d756c746941646472657373000504a0536565205b6050616c6c65743a3a666f7263655f7365745f6578706972795f636f6e666967605d2e30636c61696d5f7369676e6564040110646573747d0601504f7074696f6e3c4d756c7469416464726573733e00060474536565205b6050616c6c65743a3a636c61696d5f7369676e6564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7d0604184f7074696f6e04045401e1010108104e6f6e6500000010536f6d650400e101000001000081060c5470616c6c65745f61697264726f705f636c61696d73147574696c73544d756c7469416464726573735369676e61747572650001080c45564d04008506013845636473615369676e6174757265000000184e6174697665040089060140537232353531395369676e6174757265000100008506105470616c6c65745f61697264726f705f636c61696d73147574696c7340657468657265756d5f616464726573733845636473615369676e6174757265000004000d0601205b75383b2036355d000089060c5470616c6c65745f61697264726f705f636c61696d73147574696c7340537232353531395369676e617475726500000400650501245369676e617475726500008d0604184f7074696f6e0404540191060108104e6f6e6500000010536f6d6504009106000001000091060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019506045300000400990601185665633c543e000095060000040c18182c0099060000029506009d0604184f7074696f6e04045401a1060108104e6f6e6500000010536f6d650400a1060000010000a106085470616c6c65745f61697264726f705f636c61696d733453746174656d656e744b696e640001081c526567756c6172000000105361666500010000a5060c3070616c6c65745f726f6c65731870616c6c65741043616c6c040454000120386372656174655f70726f66696c6508011c70726f66696c65a906012850726f66696c653c543e00014c6d61785f6163746976655f7365727669636573e103012c4f7074696f6e3c7533323e0000047c536565205b6050616c6c65743a3a6372656174655f70726f66696c65605d2e387570646174655f70726f66696c6504013c757064617465645f70726f66696c65a906012850726f66696c653c543e0001047c536565205b6050616c6c65743a3a7570646174655f70726f66696c65605d2e3864656c6574655f70726f66696c650002047c536565205b6050616c6c65743a3a64656c6574655f70726f66696c65605d2e146368696c6c00030458536565205b6050616c6c65743a3a6368696c6c605d2e30756e626f6e645f66756e6473040118616d6f756e747501013042616c616e63654f663c543e00040474536565205b6050616c6c65743a3a756e626f6e645f66756e6473605d2e4477697468647261775f756e626f6e64656400050488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780006047c536565205b6050616c6c65743a3a7061796f75745f7374616b657273605d2e587365745f6d696e5f72657374616b696e675f626f6e640401486d696e5f72657374616b696e675f626f6e6418013042616c616e63654f663c543e0007049c536565205b6050616c6c65743a3a7365745f6d696e5f72657374616b696e675f626f6e64605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea9060c3070616c6c65745f726f6c65731c70726f66696c651c50726f66696c650404540001082c496e646570656e64656e740400ad060170496e646570656e64656e7452657374616b6550726f66696c653c543e000000185368617265640400c106015c53686172656452657374616b6550726f66696c653c543e00010000ad060c3070616c6c65745f726f6c65731c70726f66696c6564496e646570656e64656e7452657374616b6550726f66696c65040454000004011c7265636f726473b10601b0426f756e6465645665633c5265636f72643c543e2c20543a3a4d6178526f6c65735065724163636f756e743e0000b1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b506045300000400bd0601185665633c543e0000b5060c3070616c6c65745f726f6c65731c70726f66696c65185265636f72640404540000080110726f6c65ed010120526f6c6554797065000118616d6f756e74b90601504f7074696f6e3c42616c616e63654f663c543e3e0000b90604184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000bd06000002b50600c1060c3070616c6c65745f726f6c65731c70726f66696c655053686172656452657374616b6550726f66696c65040454000008011c7265636f726473b10601b0426f756e6465645665633c5265636f72643c543e2c20543a3a4d6178526f6c65735065724163636f756e743e000118616d6f756e7418013042616c616e63654f663c543e0000c5060c2c70616c6c65745f6a6f6273186d6f64756c651043616c6c040454000120287375626d69745f6a6f6204010c6a6f62090201484a6f625375626d697373696f6e4f663c543e0000046c536565205b6050616c6c65743a3a7375626d69745f6a6f62605d2e447375626d69745f6a6f625f726573756c740c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f624964000118726573756c74c90601384a6f62526573756c744f663c543e00010488536565205b6050616c6c65743a3a7375626d69745f6a6f625f726573756c74605d2e4077697468647261775f7265776172647300020484536565205b6050616c6c65743a3a77697468647261775f72657761726473605d2e647265706f72745f696e6163746976655f76616c696461746f72140124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f62496400012476616c696461746f72000130543a3a4163636f756e74496400011c6f6666656e63652907015056616c696461746f724f6666656e6365547970650001287369676e6174757265731d0301305665633c5665633c75383e3e000304a8536565205b6050616c6c65743a3a7265706f72745f696e6163746976655f76616c696461746f72605d2e507365745f7065726d69747465645f63616c6c65720c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f6249640001506e65775f7065726d69747465645f63616c6c6572000130543a3a4163636f756e74496400040494536565205b6050616c6c65743a3a7365745f7065726d69747465645f63616c6c6572605d2e307365745f74696d655f66656504011c6e65775f66656518013042616c616e63654f663c543e00050474536565205b6050616c6c65743a3a7365745f74696d655f666565605d2e487375626d69745f6d69736265686176696f7204012c6d69736265686176696f722d0701544d69736265686176696f725375626d697373696f6e0006048c536565205b6050616c6c65743a3a7375626d69745f6d69736265686176696f72605d2e54657874656e645f6a6f625f726573756c745f74746c0c0124726f6c655f74797065ed010120526f6c65547970650001186a6f625f69642c01144a6f624964000124657874656e645f62792c0144426c6f636b4e756d626572466f723c543e00070498536565205b6050616c6c65743a3a657874656e645f6a6f625f726573756c745f74746c605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9060c4474616e676c655f7072696d697469766573106a6f6273244a6f62526573756c74183c4d61785061727469636970616e7473010d02244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106284d6178446174614c656e01d5062c4d617850726f6f664c656e01d906584d61784164646974696f6e616c506172616d734c656e01150201182c444b4750686173654f6e650400dd06011901444b475453534b65795375626d697373696f6e526573756c743c4d61784b65794c656e2c204d61785061727469636970616e74732c204d61785369676e61747572654c656e3e0000002c444b47506861736554776f0400fd06015501444b475453535369676e6174757265526573756c743c4d6178446174614c656e2c204d61784b65794c656e2c204d61785369676e61747572654c656e2c0a4d61784164646974696f6e616c506172616d734c656e3e00010034444b4750686173655468726565040005070158444b475453534b657952656672657368526573756c7400020030444b475068617365466f757204000907012d01444b475453534b6579526f746174696f6e526573756c743c4d61784b65794c656e2c204d61785369676e61747572654c656e2c204d61784164646974696f6e616c506172616d734c656e3e000300385a6b5361615350686173654f6e6504000d0701905a6b5361615343697263756974526573756c743c4d61785061727469636970616e74733e000400385a6b53616153506861736554776f0400190701785a6b5361615350726f6f66526573756c743c4d617850726f6f664c656e3e00050000cd06085874616e676c655f746573746e65745f72756e74696d65244d61784b65794c656e00000000d106085874616e676c655f746573746e65745f72756e74696d653c4d61785369676e61747572654c656e00000000d506085874616e676c655f746573746e65745f72756e74696d65284d6178446174614c656e00000000d906085874616e676c655f746573746e65745f72756e74696d652c4d617850726f6f664c656e00000000dd06104474616e676c655f7072696d697469766573106a6f62730c74737364444b475453534b65795375626d697373696f6e526573756c740c244d61784b65794c656e01cd063c4d61785061727469636970616e7473010d023c4d61785369676e61747572654c656e01d106001801407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500010c6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e0001307061727469636970616e7473e90601d8426f756e6465645665633c426f756e6465645665633c75382c204d61784b65794c656e3e2c204d61785061727469636970616e74733e0001287369676e617475726573f10601f0426f756e6465645665633c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e2c204d61785061727469636970616e74733e0001247468726573686f6c6408010875380000e106104474616e676c655f7072696d697469766573106a6f62730c747373584469676974616c5369676e6174757265536368656d65000130384563647361536563703235366b31000000384563647361536563703235367231000100284563647361537461726b0002002c5363686e6f7272503235360003002c5363686e6f727250333834000400405363686e6f7272536563703235366b31000500385363686e6f7272537232353531390006004c5363686e6f727252697374726574746f323535000700385363686e6f727245643235353139000800305363686e6f72724564343438000900385363686e6f7272546170726f6f74000a0018426c73333831000b0000e5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000e9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e506045300000400ed0601185665633c543e0000ed06000002e50600f1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f506045300000400f90601185665633c543e0000f5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000f906000002f50600fd06104474616e676c655f7072696d697469766573106a6f62730c74737354444b475453535369676e6174757265526573756c7410284d6178446174614c656e01d506244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106584d61784164646974696f6e616c506172616d734c656e011502001801407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d650001106461746101070168426f756e6465645665633c75382c204d6178446174614c656e3e0001247369676e6174757265f506017c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e000134766572696679696e675f6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e00013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e000001070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00000507104474616e676c655f7072696d697469766573106a6f62730c74737358444b475453534b657952656672657368526573756c7400000401407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500000907104474616e676c655f7072696d697469766573106a6f62730c7473735c444b475453534b6579526f746174696f6e526573756c740c244d61784b65794c656e01cd063c4d61785369676e61747572654c656e01d106584d61784164646974696f6e616c506172616d734c656e0115020020013070686173655f6f6e655f69642c01144a6f6249640001406e65775f70686173655f6f6e655f69642c01144a6f62496400011c6e65775f6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e00010c6b6579e5060164426f756e6465645665633c75382c204d61784b65794c656e3e0001247369676e6174757265f506017c426f756e6465645665633c75382c204d61785369676e61747572654c656e3e0001407369676e61747572655f736368656d65e10601584469676974616c5369676e6174757265536368656d6500013c64657269766174696f6e5f70617468310201b84f7074696f6e3c426f756e6465645665633c75382c204d61784164646974696f6e616c506172616d734c656e3e3e000128636861696e5f636f6465410101404f7074696f6e3c5b75383b2033325d3e00000d07104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c5a6b5361615343697263756974526573756c74043c4d61785061727469636970616e7473010d02000801186a6f625f69642c01144a6f6249640001307061727469636970616e7473110701a8426f756e6465645665633c65636473613a3a5075626c69632c204d61785061727469636970616e74733e000011070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011105045300000400150701185665633c543e000015070000021105001907104474616e676c655f7072696d697469766573106a6f6273187a6b73616173445a6b5361615350726f6f66526573756c74042c4d617850726f6f664c656e01d90601082041726b776f726b7304001d07018041726b776f726b7350726f6f66526573756c743c4d617850726f6f664c656e3e00000018436972636f6d040025070178436972636f6d50726f6f66526573756c743c4d617850726f6f664c656e3e000100001d07104474616e676c655f7072696d697469766573106a6f6273187a6b736161734c41726b776f726b7350726f6f66526573756c74042c4d617850726f6f664c656e01d9060004011470726f6f662107016c426f756e6465645665633c75382c204d617850726f6f664c656e3e000021070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00002507104474616e676c655f7072696d697469766573106a6f6273187a6b7361617344436972636f6d50726f6f66526573756c74042c4d617850726f6f664c656e01d9060004011470726f6f662107016c426f756e6465645665633c75382c204d617850726f6f664c656e3e000029070c4474616e676c655f7072696d697469766573106a6f62735056616c696461746f724f6666656e63655479706500011028496e616374697669747900000064496e76616c69645369676e61747572655375626d69747465640001004c52656a656374656456616c6964416374696f6e00020054417070726f766564496e76616c6964416374696f6e000300002d070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72544d69736265686176696f725375626d697373696f6e0000100124726f6c655f74797065ed010120526f6c65547970650001206f6666656e646572150501205b75383b2033335d0001186a6f625f69642c01144a6f6249640001346a757374696669636174696f6e310701604d69736265686176696f724a757374696669636174696f6e000031070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72604d69736265686176696f724a757374696669636174696f6e00010818444b4754535304003507014c444b475453534a757374696669636174696f6e000000185a6b5361615304006507014c5a6b536161534a757374696669636174696f6e0001000035070c4474616e676c655f7072696d6974697665732c6d69736265686176696f724c444b475453534a757374696669636174696f6e0001082c44666e734347474d50323104003907019864666e735f6367676d7032313a3a44666e734347474d5032314a757374696669636174696f6e000000285a4361736846726f73740400590701907a636173685f66726f73743a3a5a4361736846726f73744a757374696669636174696f6e000100003907104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d7032316044666e734347474d5032314a757374696669636174696f6e00010c184b657967656e0c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e410701344b657967656e41626f72746564000000284b6579526566726573680c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e4d0701444b65795265667265736841626f727465640001001c5369676e696e670c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e550701385369676e696e6741626f72746564000200003d070000021505004107104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231344b657967656e41626f727465640001104c496e76616c69644465636f6d6d69746d656e74080118726f756e6431450701485369676e6564526f756e644d65737361676500011c726f756e643261450701485369676e6564526f756e644d6573736167650000004c496e76616c69645363686e6f727250726f6f6608011c726f756e6432614907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e6433450701485369676e6564526f756e644d6573736167650001006446656c646d616e566572696669636174696f6e4661696c656408011c726f756e643261450701485369676e6564526f756e644d65737361676500011c726f756e643262450701485369676e6564526f756e644d6573736167650002003c496e76616c69644461746153697a6504011c726f756e643261450701485369676e6564526f756e644d6573736167650003000045070c4474616e676c655f7072696d6974697665732c6d69736265686176696f72485369676e6564526f756e644d65737361676500000c011873656e6465729102010c75313600011c6d65737361676534011c5665633c75383e0001247369676e617475726534011c5665633c75383e000049070000024507004d07104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231444b65795265667265736841626f727465640001244c496e76616c69644465636f6d6d69746d656e74080118726f756e6431450701485369676e6564526f756e644d657373616765000118726f756e6432450701485369676e6564526f756e644d6573736167650000004c496e76616c69645363686e6f727250726f6f660001003c496e76616c69644d6f6450726f6f660c0118726561736f6e51070148496e76616c696450726f6f66526561736f6e000118726f756e64324907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e6433450701485369676e6564526f756e644d6573736167650002003c496e76616c696446616350726f6f6600030074496e76616c696452696e67506564657273656e506172616d6574657273040118726f756e6432450701485369676e6564526f756e644d65737361676500040020496e76616c69645800050034496e76616c69645853686172650006003c496e76616c69644461746153697a650007002c5061696c6c696572446563000800005107104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d70323148496e76616c696450726f6f66526561736f6e00012834457175616c697479436865636b040008010875380000002852616e6765436865636b0400080108753800010028456e6372797074696f6e0002002c5061696c6c696572456e63000300285061696c6c6965724f70000400184d6f64506f77000500384d6f64756c757349735072696d65000600344d6f64756c757349734576656e00070040496e636f72726563744e7468526f6f74040008010875380008004c496e636f7272656374466f75727468526f6f7404000801087538000900005507104474616e676c655f7072696d6974697665732c6d69736265686176696f723064666e735f6367676d703231385369676e696e6741626f727465640001102c456e6350726f6f664f664b00000028496e76616c696450736900010050496e76616c69645073695072696d655072696d650002003c4d69736d61746368656444656c7461000300005907104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f73745c5a4361736846726f73744a757374696669636174696f6e000108184b657967656e0c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e5d0701344b657967656e41626f727465640000001c5369676e696e670c01307061727469636970616e74733d0701345665633c5b75383b2033335d3e000104749102010c753136000118726561736f6e610701385369676e696e6741626f72746564000100005d07104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f7374344b657967656e41626f727465640001085c496e76616c696450726f6f664f664b6e6f776c65646765040118726f756e6431450701485369676e6564526f756e644d65737361676500000048496e76616c69645365637265745368617265080118726f756e6431450701485369676e6564526f756e644d657373616765000118726f756e6432450701485369676e6564526f756e644d657373616765000100006107104474616e676c655f7072696d6974697665732c6d69736265686176696f722c7a636173685f66726f7374385369676e696e6741626f7274656400010454496e76616c69645369676e61747572655368617265080118726f756e64314907015c5665633c5369676e6564526f756e644d6573736167653e000118726f756e64324907015c5665633c5369676e6564526f756e644d6573736167653e0000000065070c4474616e676c655f7072696d6974697665732c6d69736265686176696f724c5a6b536161534a757374696669636174696f6e0001000069070c2870616c6c65745f646b671870616c6c65741043616c6c0404540001041c7365745f6665650401206665655f696e666f7d020130466565496e666f4f663c543e00000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d070c3470616c6c65745f7a6b736161731870616c6c65741043616c6c0404540001041c7365745f6665650401206665655f696e666f85020130466565496e666f4f663c543e00000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71070c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c650301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065750701504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a70726f7879605d2e246164645f70726f78790c012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00010468536565205b6050616c6c65743a3a6164645f70726f7879605d2e3072656d6f76655f70726f78790c012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a72656d6f76655f70726f7879605d2e3872656d6f76655f70726f786965730003047c536565205b6050616c6c65743a3a72656d6f76655f70726f78696573605d2e2c6372656174655f707572650c012870726f78795f747970658d020130543a3a50726f78795479706500011464656c61792c0144426c6f636b4e756d626572466f723c543e000114696e6465789102010c75313600040470536565205b6050616c6c65743a3a6372656174655f70757265605d2e246b696c6c5f7075726514011c737061776e6572650301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f747970658d020130543a3a50726f787954797065000114696e6465789102010c753136000118686569676874280144426c6f636b4e756d626572466f723c543e0001246578745f696e646578bd02010c75333200050468536565205b6050616c6c65743a3a6b696c6c5f70757265605d2e20616e6e6f756e63650801107265616c650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00060464536565205b6050616c6c65743a3a616e6e6f756e6365605d2e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00070490536565205b6050616c6c65743a3a72656d6f76655f616e6e6f756e63656d656e74605d2e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00080490536565205b6050616c6c65743a3a72656a6563745f616e6e6f756e63656d656e74605d2e3c70726f78795f616e6e6f756e63656410012064656c6567617465650301504163636f756e7449644c6f6f6b75704f663c543e0001107265616c650301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065750701504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5d03017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00090480536565205b6050616c6c65743a3a70726f78795f616e6e6f756e636564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750704184f7074696f6e040454018d020108104e6f6e6500000010536f6d6504008d02000001000079070c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c65741043616c6c040454000154386a6f696e5f6f70657261746f727304012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0000047c536565205b6050616c6c65743a3a6a6f696e5f6f70657261746f7273605d2e607363686564756c655f6c656176655f6f70657261746f7273000104a4536565205b6050616c6c65743a3a7363686564756c655f6c656176655f6f70657261746f7273605d2e5863616e63656c5f6c656176655f6f70657261746f72730002049c536565205b6050616c6c65743a3a63616e63656c5f6c656176655f6f70657261746f7273605d2e5c657865637574655f6c656176655f6f70657261746f7273000304a0536565205b6050616c6c65743a3a657865637574655f6c656176655f6f70657261746f7273605d2e486f70657261746f725f626f6e645f6d6f726504013c6164646974696f6e616c5f626f6e6418013042616c616e63654f663c543e0004048c536565205b6050616c6c65743a3a6f70657261746f725f626f6e645f6d6f7265605d2e647363686564756c655f6f70657261746f725f756e7374616b65040138756e7374616b655f616d6f756e7418013042616c616e63654f663c543e000504a8536565205b6050616c6c65743a3a7363686564756c655f6f70657261746f725f756e7374616b65605d2e60657865637574655f6f70657261746f725f756e7374616b65000604a4536565205b6050616c6c65743a3a657865637574655f6f70657261746f725f756e7374616b65605d2e5c63616e63656c5f6f70657261746f725f756e7374616b65000704a0536565205b6050616c6c65743a3a63616e63656c5f6f70657261746f725f756e7374616b65605d2e28676f5f6f66666c696e650008046c536565205b6050616c6c65743a3a676f5f6f66666c696e65605d2e24676f5f6f6e6c696e6500090468536565205b6050616c6c65743a3a676f5f6f6e6c696e65605d2e1c6465706f73697408012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000a0460536565205b6050616c6c65743a3a6465706f736974605d2e447363686564756c655f776974686472617708012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000b0488536565205b6050616c6c65743a3a7363686564756c655f7769746864726177605d2e40657865637574655f7769746864726177000c0484536565205b6050616c6c65743a3a657865637574655f7769746864726177605d2e3c63616e63656c5f776974686472617708012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000d0480536565205b6050616c6c65743a3a63616e63656c5f7769746864726177605d2e2064656c65676174650c01206f70657261746f72000130543a3a4163636f756e74496400012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000e0464536565205b6050616c6c65743a3a64656c6567617465605d2e687363686564756c655f64656c656761746f725f756e7374616b650c01206f70657261746f72000130543a3a4163636f756e74496400012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000f04ac536565205b6050616c6c65743a3a7363686564756c655f64656c656761746f725f756e7374616b65605d2e64657865637574655f64656c656761746f725f756e7374616b65001004a8536565205b6050616c6c65743a3a657865637574655f64656c656761746f725f756e7374616b65605d2e6063616e63656c5f64656c656761746f725f756e7374616b6508012061737365745f6964180128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e001104a4536565205b6050616c6c65743a3a63616e63656c5f64656c656761746f725f756e7374616b65605d2e647365745f696e63656e746976655f6170795f616e645f6361700c011c706f6f6c5f6964180124543a3a506f6f6c496400010c6170799902014c73705f72756e74696d653a3a50657263656e7400010c63617018013042616c616e63654f663c543e001304a8536565205b6050616c6c65743a3a7365745f696e63656e746976655f6170795f616e645f636170605d2e7c77686974656c6973745f626c75657072696e745f666f725f72657761726473040130626c75657072696e745f696410010c753332001404c0536565205b6050616c6c65743a3a77686974656c6973745f626c75657072696e745f666f725f72657761726473605d2e506d616e6167655f61737365745f696e5f706f6f6c0c011c706f6f6c5f6964180124543a3a506f6f6c496400012061737365745f6964180128543a3a41737365744964000118616374696f6e9d02012c4173736574416374696f6e00150494536565205b6050616c6c65743a3a6d616e6167655f61737365745f696e5f706f6f6c605d2e04c85468652063616c6c61626c652066756e6374696f6e73202865787472696e7369637329206f66207468652070616c6c65742e7d070c5c7379676d615f6163636573735f73656772656761746f721870616c6c65741043616c6c040454000104306772616e745f6163636573730c013070616c6c65745f696e646578080108753800013865787472696e7369635f6e616d6534011c5665633c75383e00010c77686f000130543a3a4163636f756e74496400000474536565205b6050616c6c65743a3a6772616e745f616363657373605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81070c587379676d615f62617369635f66656568616e646c65721870616c6c65741043616c6c0404540001041c7365745f6665650c0118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e000118616d6f756e741801107531323800000460536565205b6050616c6c65743a3a7365745f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e85070c607379676d615f6665655f68616e646c65725f726f757465721870616c6c65741043616c6c0404540001043c7365745f6665655f68616e646c65720c0118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e00013068616e646c65725f74797065f102013846656548616e646c65725479706500000480536565205b6050616c6c65743a3a7365745f6665655f68616e646c6572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89070c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c65741043616c6c040454000104307365745f6665655f72617465140118646f6d61696e080120446f6d61696e49440001146173736574a9020130426f783c417373657449643e0001506665655f726174655f62617369735f706f696e7410010c75333200013c6665655f6c6f7765725f626f756e641801107531323800013c6665655f75707065725f626f756e641801107531323800000474536565205b6050616c6c65743a3a7365745f6665655f72617465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d070c307379676d615f6272696467651870616c6c65741043616c6c0404540001283070617573655f627269646765040138646573745f646f6d61696e5f6964080120446f6d61696e494400000474536565205b6050616c6c65743a3a70617573655f627269646765605d2e38756e70617573655f627269646765040138646573745f646f6d61696e5f6964080120446f6d61696e49440001047c536565205b6050616c6c65743a3a756e70617573655f627269646765605d2e3c7365745f6d70635f6164647265737304011061646472910701284d70634164647265737300020480536565205b6050616c6c65743a3a7365745f6d70635f61646472657373605d2e3c72656769737465725f646f6d61696e080138646573745f646f6d61696e5f6964080120446f6d61696e4944000134646573745f636861696e5f6964d101011c436861696e494400030480536565205b6050616c6c65743a3a72656769737465725f646f6d61696e605d2e44756e72656769737465725f646f6d61696e080138646573745f646f6d61696e5f6964080120446f6d61696e4944000134646573745f636861696e5f6964d101011c436861696e494400040488536565205b6050616c6c65743a3a756e72656769737465725f646f6d61696e605d2e1c6465706f736974080114617373657495070128426f783c41737365743e00011064657374ad020134426f783c4c6f636174696f6e3e00050460536565205b6050616c6c65743a3a6465706f736974605d2e14726574727908015c6465706f7369745f6f6e5f626c6f636b5f68656967687418011075313238000138646573745f646f6d61696e5f6964080120446f6d61696e494400060458536565205b6050616c6c65743a3a7265747279605d2e40657865637574655f70726f706f73616c08012470726f706f73616c73a10701345665633c50726f706f73616c3e0001247369676e617475726534011c5665633c75383e00070484536565205b6050616c6c65743a3a657865637574655f70726f706f73616c605d2e4470617573655f616c6c5f6272696467657300080488536565205b6050616c6c65743a3a70617573655f616c6c5f62726964676573605d2e4c756e70617573655f616c6c5f6272696467657300090490536565205b6050616c6c65743a3a756e70617573655f616c6c5f62726964676573605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e910708307379676d615f747261697473284d706341646472657373000004009d0101205b75383b2032305d00009507102c73746167696e675f78636d08763414617373657414417373657400000801086964a902011c4173736574496400010c66756e9907012c46756e676962696c69747900009907102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c65040075010110753132380000002c4e6f6e46756e6769626c6504009d0701344173736574496e7374616e6365000100009d07102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400750101107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804004d03011c5b75383b20385d0003001c4172726179313604004d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000a107000002a50700a5070c307379676d615f6272696467651870616c6c65742050726f706f73616c00001001406f726967696e5f646f6d61696e5f6964080120446f6d61696e49440001346465706f7369745f6e6f6e63652c01304465706f7369744e6f6e636500012c7265736f757263655f69640401285265736f7572636549640001106461746134011c5665633c75383e0000a9070c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742ead070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400c90101185665633c543e0000b1070c3470616c6c65745f61737365747314747970657330417373657444657461696c730c1c42616c616e63650118244163636f756e7449640100384465706f73697442616c616e63650118003001146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000118737570706c7918011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e636500012c6d696e5f62616c616e636518011c42616c616e636500013469735f73756666696369656e74780110626f6f6c0001206163636f756e747310010c75333200012c73756666696369656e747310010c753332000124617070726f76616c7310010c753332000118737461747573b507012c41737365745374617475730000b5070c3470616c6c65745f6173736574731474797065732c417373657453746174757300010c104c6976650000001846726f7a656e0001002844657374726f79696e6700020000b90700000408180000bd070c3470616c6c65745f6173736574731474797065733041737365744163636f756e74101c42616c616e63650118384465706f73697442616c616e636501181445787472610184244163636f756e74496401000010011c62616c616e636518011c42616c616e6365000118737461747573c10701344163636f756e74537461747573000118726561736f6ec50701a84578697374656e6365526561736f6e3c4465706f73697442616c616e63652c204163636f756e7449643e000114657874726184011445787472610000c1070c3470616c6c65745f617373657473147479706573344163636f756e7453746174757300010c184c69717569640000001846726f7a656e0001001c426c6f636b656400020000c5070c3470616c6c65745f6173736574731474797065733c4578697374656e6365526561736f6e081c42616c616e63650118244163636f756e7449640100011420436f6e73756d65720000002853756666696369656e740001002c4465706f73697448656c64040018011c42616c616e63650002003c4465706f736974526566756e6465640003002c4465706f73697446726f6d08000001244163636f756e744964000018011c42616c616e636500040000c9070000040c18000000cd070c3470616c6c65745f61737365747314747970657320417070726f76616c081c42616c616e63650118384465706f73697442616c616e6365011800080118616d6f756e7418011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e63650000d1070c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e6701d5070014011c6465706f7369741801384465706f73697442616c616e63650001106e616d65d5070134426f756e646564537472696e6700011873796d626f6cd5070134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e780110626f6f6c0000d5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000d9070c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742edd070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401e107045300000400e90701185665633c543e0000e1070c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c010869644d0301384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73e507011c526561736f6e730000e5070c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000e907000002e10700ed070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f107045300000400f50701185665633c543e0000f1070c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e746966696572014d031c42616c616e636501180008010869644d030144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000f507000002f10700f9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401fd07045300000400090801185665633c543e0000fd070c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640101081c42616c616e63650118000801086964010801084964000118616d6f756e7418011c42616c616e636500000108085874616e676c655f746573746e65745f72756e74696d654452756e74696d65486f6c64526561736f6e00010420507265696d61676504000508016c70616c6c65745f707265696d6167653a3a486f6c64526561736f6e0019000005080c3c70616c6c65745f707265696d6167651870616c6c657428486f6c64526561736f6e00010420507265696d616765000000000908000002fd07000d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540111080453000004001d0801185665633c543e000011080c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640115081c42616c616e63650118000801086964150801084964000118616d6f756e7418011c42616c616e636500001508085874616e676c655f746573746e65745f72756e74696d654c52756e74696d65467265657a65526561736f6e0001043c4e6f6d696e6174696f6e506f6f6c7304001908019470616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a467265657a65526561736f6e0017000019080c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657430467265657a65526561736f6e00010438506f6f6c4d696e42616c616e6365000000001d0800000211080021080c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e25080c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800002908086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100002d080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013108045300000400350801185665633c543e00003108000004087d032c00350800000231080039080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401040453000004003d0801185665633c543e00003d080000020400410804184f7074696f6e0404540145080108104e6f6e6500000010536f6d6504004508000001000045080c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400490801405072696d617279507265446967657374000100385365636f6e64617279506c61696e04005108015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400550801545365636f6e646172795652465072654469676573740003000049080c4473705f636f6e73656e7375735f626162651c64696765737473405072696d61727950726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f740001347672665f7369676e61747572654d0801305672665369676e617475726500004d08101c73705f636f72651c737232353531390c767266305672665369676e617475726500000801287072655f6f75747075740401305672665072654f757470757400011470726f6f66b103012056726650726f6f66000051080c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f74000055080c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e6461727956524650726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7481030110536c6f740001347672665f7369676e61747572654d0801305672665369676e617475726500005908084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e0000080104638d030128287536342c2075363429000134616c6c6f7765645f736c6f747391030130416c6c6f776564536c6f747300005d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013d01045300000400050301185665633c543e000061080c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6508083870616c6c65745f6772616e6470612c53746f726564537461746504044e012c0110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61742c01044e00011464656c61792c01044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61742c01044e00011464656c61792c01044e000300006908083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e012c144c696d697400001001307363686564756c65645f61742c01044e00011464656c61792c01044e0001406e6578745f617574686f7269746965736d08016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f726365641d0501244f7074696f6e3c4e3e00006d080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a4045300000400a001185665633c543e000071080c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e75080000040c0018780079080c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018108045300000400850801185665633c543e000081080000040c10d10300008508000002810800890800000408010518008d080c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d626572012c2050726f706f73616c01d1031c42616c616e6365011801081c4f6e676f696e670400910801c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564780110626f6f6c00010c656e642c012c426c6f636b4e756d6265720001000091080c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d626572012c2050726f706f73616c01d1031c42616c616e636501180014010c656e642c012c426c6f636b4e756d62657200012070726f706f73616cd103012050726f706f73616c0001247468726573686f6c64b80134566f74655468726573686f6c6400011464656c61792c012c426c6f636b4e756d62657200011474616c6c799508013854616c6c793c42616c616e63653e000095080c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e6365000099080c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d626572012c204d6178566f746573000108184469726563740c0114766f7465739d0801f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e73a908015044656c65676174696f6e733c42616c616e63653e0001147072696f72ad08017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6edd030128436f6e76696374696f6e00012c64656c65676174696f6e73a908015044656c65676174696f6e733c42616c616e63653e0001147072696f72ad08017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e000100009d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a108045300000400a50801185665633c543e0000a1080000040810bc00a508000002a10800a9080c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000ad080c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d626572012c1c42616c616e636501180008002c012c426c6f636b4e756d626572000018011c42616c616e63650000b10800000408d103b800b508000004082c010500b9080c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400c90101185665633c543e0000c108084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572012c00140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e7400011061796573250201385665633c4163636f756e7449643e0001106e617973250201385665633c4163636f756e7449643e00010c656e642c012c426c6f636b4e756d6265720000c5080c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f7208045400044900012c244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e545072696d654163636f756e744e6f744d656d626572000a04745072696d65206163636f756e74206973206e6f742061206d656d626572048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f103045300000400cd0801185665633c543e0000cd08000002f10300d108083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000d5080c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742ed908000002dd0800dd08086470616c6c65745f656c656374696f6e735f70687261676d656e2853656174486f6c64657208244163636f756e74496401001c42616c616e63650118000c010c77686f0001244163636f756e7449640001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e63650000e108086470616c6c65745f656c656374696f6e735f70687261676d656e14566f74657208244163636f756e74496401001c42616c616e63650118000c0114766f746573250201385665633c4163636f756e7449643e0001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e63650000e5080c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144572726f7204045400014430556e61626c65546f566f7465000004c043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e1c4e6f566f746573000104944d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e30546f6f4d616e79566f7465730002048443616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e504d6178696d756d566f74657345786365656465640003049843616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e284c6f7742616c616e6365000404c443616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e3c556e61626c65546f506179426f6e6400050478566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2c4d7573744265566f746572000604404d757374206265206120766f7465722e4c4475706c69636174656443616e646964617465000704804475706c6963617465642063616e646964617465207375626d697373696f6e2e44546f6f4d616e7943616e6469646174657300080498546f6f206d616e792063616e646964617465732068617665206265656e20637265617465642e304d656d6265725375626d6974000904884d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e3852756e6e657255705375626d6974000a048852756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e68496e73756666696369656e7443616e64696461746546756e6473000b049443616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e244e6f744d656d626572000c04344e6f742061206d656d6265722e48496e76616c69645769746e65737344617461000d04e05468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e40496e76616c6964566f7465436f756e74000e04cc5468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e44496e76616c696452656e6f756e63696e67000f04fc5468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e48496e76616c69645265706c6163656d656e74001004fc50726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee908089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e08244163636f756e74496400284d617857696e6e65727300000c0120737570706f727473ed080198426f756e646564537570706f7274733c4163636f756e7449642c204d617857696e6e6572733e00011473636f7265e40134456c656374696f6e53636f726500011c636f6d70757465e0013c456c656374696f6e436f6d707574650000ed080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401dd04045300000400d90401185665633c543e0000f108089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f7408244163636f756e7449640100304461746150726f766964657201f50800080118766f74657273fd0801445665633c4461746150726f76696465723e00011c74617267657473250201385665633c4163636f756e7449643e0000f5080000040c002cf90800f9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e0000fd08000002f5080001090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010509045300000400090901185665633c543e000005090000040ce42c100009090000020509000d090c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e0105040010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6e01040154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e6365000011090c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f7204045400013c6850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273645072654469737061746368446966666572656e74526f756e64000e04b453756d697373696f6e2077617320707265706172656420666f72206120646966666572656e7420726f756e642e040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732e1509083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616c7501013042616c616e63654f663c543e0001186163746976657501013042616c616e63654f663c543e000124756e6c6f636b696e67190901f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e0001586c65676163795f636c61696d65645f7265776172647325090194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e000019090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d09045300000400210901185665633c543e00001d09083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c75657501011c42616c616e636500010c657261bd020120457261496e646578000021090000021d090025090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400ed0401185665633c543e00002909083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473f90801b4426f756e6465645665633c543a3a4163636f756e7449642c204d61784e6f6d696e6174696f6e734f663c543e3e0001307375626d69747465645f696e100120457261496e64657800012873757070726573736564780110626f6f6c00002d09083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172741d05012c4f7074696f6e3c7536343e00003109000004081000003509082873705f7374616b696e675450616765644578706f737572654d65746164617461041c42616c616e6365011800100114746f74616c7501011c42616c616e636500010c6f776e7501011c42616c616e636500013c6e6f6d696e61746f725f636f756e7410010c753332000128706167655f636f756e7410011050616765000039090000040c100010003d09082873705f7374616b696e67304578706f737572655061676508244163636f756e74496401001c42616c616e6365011800080128706167655f746f74616c7501011c42616c616e63650001186f7468657273790101ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e00004109083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c4509018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00004509042042547265654d617008044b010004560110000400490900000049090000024d09004d090000040800100051090000025509005509083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273d401645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273250201385665633c4163636f756e7449643e0001187061796f757418011c42616c616e6365000059090000025d09005d0900000408101000610900000408f8180065090c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72ed0401345665633c457261496e6465783e000069090c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e636500006d090000027109007109000004081078007509103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000170344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e2c496e76616c696450616765000f04844e6f206e6f6d696e61746f7273206578697374206f6e207468697320706167652e54496e636f7272656374486973746f72794465707468001004c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001104b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650012043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300130494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740014043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001504550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730016084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001708550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001804e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400190458536f6d6520626f756e64206973206e6f74206d65742e50436f6e74726f6c6c657244657072656361746564001a04010155736564207768656e20617474656d7074696e6720746f20757365206465707265636174656420636f6e74726f6c6c6572206163636f756e74206c6f6769632e3452657374616b65416374697665001b046c546865207573657220686173206163746976652072657374616b65048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79090000027d09007d0900000408000905008109000004088509340085090c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d000089090c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e8d09000004083010009109083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e6365000095090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400ed0401185665633c543e00009909083c70616c6c65745f74726561737572792c5370656e64537461747573142441737365744b696e64018430417373657442616c616e636501182c42656e656669636961727901002c426c6f636b4e756d626572012c245061796d656e74496401840018012861737365745f6b696e6484012441737365744b696e64000118616d6f756e74180130417373657442616c616e636500012c62656e656669636961727900012c42656e656669636961727900012876616c69645f66726f6d2c012c426c6f636b4e756d6265720001246578706972655f61742c012c426c6f636b4e756d6265720001187374617475739d09015c5061796d656e7453746174653c5061796d656e7449643e00009d09083c70616c6c65745f7472656173757279305061796d656e745374617465040849640184010c1c50656e64696e6700000024417474656d7074656404010869648401084964000100184661696c656400020000a10908346672616d655f737570706f72742050616c6c65744964000004004d03011c5b75383b20385d0000a5090c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900013070496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104ac4e6f2070726f706f73616c2c20626f756e7479206f72207370656e64206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e584661696c6564546f436f6e7665727442616c616e636500050451015468652062616c616e6365206f6620746865206173736574206b696e64206973206e6f7420636f6e7665727469626c6520746f207468652062616c616e6365206f6620746865206e61746976652061737365742e305370656e6445787069726564000604b0546865207370656e6420686173206578706972656420616e642063616e6e6f7420626520636c61696d65642e2c4561726c795061796f7574000704a4546865207370656e64206973206e6f742079657420656c696769626c6520666f72207061796f75742e40416c7265616479417474656d707465640008049c546865207061796d656e742068617320616c7265616479206265656e20617474656d707465642e2c5061796f75744572726f72000904cc54686572652077617320736f6d65206973737565207769746820746865206d656368616e69736d206f66207061796d656e742e304e6f74417474656d70746564000a04a4546865207061796f757420776173206e6f742079657420617474656d707465642f636c61696d65642e30496e636f6e636c7573697665000b04c4546865207061796d656e7420686173206e656974686572206661696c6564206e6f7220737563636565646564207965742e04784572726f7220666f72207468652074726561737572792070616c6c65742ea909083c70616c6c65745f626f756e7469657318426f756e74790c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572012c0018012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500010c66656518011c42616c616e636500013c63757261746f725f6465706f73697418011c42616c616e6365000110626f6e6418011c42616c616e6365000118737461747573ad090190426f756e74795374617475733c4163636f756e7449642c20426c6f636b4e756d6265723e0000ad09083c70616c6c65745f626f756e7469657330426f756e747953746174757308244163636f756e74496401002c426c6f636b4e756d626572012c01182050726f706f73656400000020417070726f7665640001001846756e6465640002003c43757261746f7250726f706f73656404011c63757261746f720001244163636f756e7449640003001841637469766508011c63757261746f720001244163636f756e7449640001287570646174655f6475652c012c426c6f636b4e756d6265720004003450656e64696e675061796f75740c011c63757261746f720001244163636f756e74496400012c62656e65666963696172790001244163636f756e744964000124756e6c6f636b5f61742c012c426c6f636b4e756d62657200050000b1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b5090c3c70616c6c65745f626f756e746965731870616c6c6574144572726f7208045400044900012c70496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e30526561736f6e546f6f4269670002048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e40556e65787065637465645374617475730003048054686520626f756e74792073746174757320697320756e65787065637465642e385265717569726543757261746f720004045c5265717569726520626f756e74792063757261746f722e30496e76616c696456616c756500050454496e76616c696420626f756e74792076616c75652e28496e76616c69644665650006044c496e76616c696420626f756e7479206665652e3450656e64696e675061796f75740007086c4120626f756e7479207061796f75742069732070656e64696e672ef8546f2063616e63656c2074686520626f756e74792c20796f75206d75737420756e61737369676e20616e6420736c617368207468652063757261746f722e245072656d6174757265000804450154686520626f756e746965732063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e504861734163746976654368696c64426f756e7479000904050154686520626f756e74792063616e6e6f7420626520636c6f73656420626563617573652069742068617320616374697665206368696c6420626f756e746965732e34546f6f4d616e79517565756564000a0498546f6f206d616e7920617070726f76616c732061726520616c7265616479207175657565642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb909085470616c6c65745f6368696c645f626f756e746965732c4368696c64426f756e74790c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572012c00140134706172656e745f626f756e747910012c426f756e7479496e64657800011476616c756518011c42616c616e636500010c66656518011c42616c616e636500013c63757261746f725f6465706f73697418011c42616c616e6365000118737461747573bd0901a44368696c64426f756e74795374617475733c4163636f756e7449642c20426c6f636b4e756d6265723e0000bd09085470616c6c65745f6368696c645f626f756e74696573444368696c64426f756e747953746174757308244163636f756e74496401002c426c6f636b4e756d626572012c01101441646465640000003c43757261746f7250726f706f73656404011c63757261746f720001244163636f756e7449640001001841637469766504011c63757261746f720001244163636f756e7449640002003450656e64696e675061796f75740c011c63757261746f720001244163636f756e74496400012c62656e65666963696172790001244163636f756e744964000124756e6c6f636b5f61742c012c426c6f636b4e756d62657200030000c1090c5470616c6c65745f6368696c645f626f756e746965731870616c6c6574144572726f7204045400010c54506172656e74426f756e74794e6f74416374697665000004a454686520706172656e7420626f756e7479206973206e6f7420696e206163746976652073746174652e64496e73756666696369656e74426f756e747942616c616e6365000104e454686520626f756e74792062616c616e6365206973206e6f7420656e6f75676820746f20616464206e6577206368696c642d626f756e74792e50546f6f4d616e794368696c64426f756e746965730002040d014e756d626572206f66206368696c6420626f756e746965732065786365656473206c696d697420604d61784163746976654368696c64426f756e7479436f756e74602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec5090c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e744964000110707265768801504f7074696f6e3c543a3a4163636f756e7449643e0001106e6578748801504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f75707065722c0120543a3a53636f726500011473636f72652c0120543a3a53636f72650000c9090c4070616c6c65745f626167735f6c697374106c6973740c4261670804540004490000080110686561648801504f7074696f6e3c543a3a4163636f756e7449643e0001107461696c8801504f7074696f6e3c543a3a4163636f756e7449643e0000cd090000022c00d1090c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400d50901244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed5090c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e6400030000d909085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328506f6f6c4d656d626572040454000010011c706f6f6c5f6964100118506f6f6c4964000118706f696e747318013042616c616e63654f663c543e0001706c6173745f7265636f726465645f7265776172645f636f756e74657225080140543a3a526577617264436f756e746572000138756e626f6e64696e675f65726173dd0901e0426f756e64656442547265654d61703c457261496e6465782c2042616c616e63654f663c543e2c20543a3a4d6178556e626f6e64696e673e0000dd090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560118045300000400e109013842547265654d61703c4b2c20563e0000e109042042547265654d617008044b011004560118000400e509000000e509000002e90900e90900000408101800ed09085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c426f6e646564506f6f6c496e6e65720404540000140128636f6d6d697373696f6ef1090134436f6d6d697373696f6e3c543e0001386d656d6265725f636f756e74657210010c753332000118706f696e747318013042616c616e63654f663c543e000114726f6c6573fd09015c506f6f6c526f6c65733c543a3a4163636f756e7449643e000114737461746521010124506f6f6c53746174650000f109085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328436f6d6d697373696f6e040454000014011c63757272656e742501017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e00010c6d6178f509013c4f7074696f6e3c50657262696c6c3e00012c6368616e67655f72617465f90901bc4f7074696f6e3c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e3e0001347468726f74746c655f66726f6d1d0501644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000140636c61696d5f7065726d697373696f6e310101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e0000f50904184f7074696f6e04045401f80108104e6f6e6500000010536f6d650400f80000010000f90904184f7074696f6e040454012d010108104e6f6e6500000010536f6d6504002d010000010000fd09085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c526f6c657304244163636f756e7449640100001001246465706f7369746f720001244163636f756e744964000110726f6f748801444f7074696f6e3c4163636f756e7449643e0001246e6f6d696e61746f728801444f7074696f6e3c4163636f756e7449643e00011c626f756e6365728801444f7074696f6e3c4163636f756e7449643e0000010a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328526577617264506f6f6c04045400001401706c6173745f7265636f726465645f7265776172645f636f756e74657225080140543a3a526577617264436f756e74657200016c6c6173745f7265636f726465645f746f74616c5f7061796f75747318013042616c616e63654f663c543e000154746f74616c5f726577617264735f636c61696d656418013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f70656e64696e6718013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f636c61696d656418013042616c616e63654f663c543e0000050a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320537562506f6f6c7304045400000801186e6f5f657261090a0134556e626f6e64506f6f6c3c543e000120776974685f6572610d0a010101426f756e64656442547265654d61703c457261496e6465782c20556e626f6e64506f6f6c3c543e2c20546f74616c556e626f6e64696e67506f6f6c733c543e3e0000090a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328556e626f6e64506f6f6c0404540000080118706f696e747318013042616c616e63654f663c543e00011c62616c616e636518013042616c616e63654f663c543e00000d0a0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601090a045300000400110a013842547265654d61703c4b2c20563e0000110a042042547265654d617008044b0110045601090a000400150a000000150a000002190a00190a0000040810090a001d0a0c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144572726f7204045400018030506f6f6c4e6f74466f756e6400000488412028626f6e6465642920706f6f6c20696420646f6573206e6f742065786973742e48506f6f6c4d656d6265724e6f74466f756e640001046c416e206163636f756e74206973206e6f742061206d656d6265722e48526577617264506f6f6c4e6f74466f756e640002042101412072657761726420706f6f6c20646f6573206e6f742065786973742e20496e20616c6c206361736573207468697320697320612073797374656d206c6f676963206572726f722e40537562506f6f6c734e6f74466f756e6400030468412073756220706f6f6c20646f6573206e6f742065786973742e644163636f756e7442656c6f6e6773546f4f74686572506f6f6c0004084d01416e206163636f756e7420697320616c72656164792064656c65676174696e6720696e20616e6f7468657220706f6f6c2e20416e206163636f756e74206d6179206f6e6c792062656c6f6e6720746f206f6e653c706f6f6c20617420612074696d652e3846756c6c79556e626f6e64696e670005083d01546865206d656d6265722069732066756c6c7920756e626f6e6465642028616e6420746875732063616e6e6f74206163636573732074686520626f6e64656420616e642072657761726420706f6f6ca8616e796d6f726520746f2c20666f72206578616d706c652c20636f6c6c6563742072657761726473292e444d6178556e626f6e64696e674c696d69740006040901546865206d656d6265722063616e6e6f7420756e626f6e642066757274686572206368756e6b732064756520746f207265616368696e6720746865206c696d69742e4443616e6e6f745769746864726177416e790007044d014e6f6e65206f66207468652066756e64732063616e2062652077697468647261776e2079657420626563617573652074686520626f6e64696e67206475726174696f6e20686173206e6f74207061737365642e444d696e696d756d426f6e644e6f744d6574000814290154686520616d6f756e7420646f6573206e6f74206d65657420746865206d696e696d756d20626f6e6420746f20656974686572206a6f696e206f7220637265617465206120706f6f6c2e005501546865206465706f7369746f722063616e206e6576657220756e626f6e6420746f20612076616c7565206c657373207468616e206050616c6c65743a3a6465706f7369746f725f6d696e5f626f6e64602e205468655d0163616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e204d656d626572732063616e206e6576657220756e626f6e6420746f20616876616c75652062656c6f7720604d696e4a6f696e426f6e64602e304f766572666c6f775269736b0009042101546865207472616e73616374696f6e20636f756c64206e6f742062652065786563757465642064756520746f206f766572666c6f77207269736b20666f722074686520706f6f6c2e344e6f7444657374726f79696e67000a085d014120706f6f6c206d75737420626520696e205b60506f6f6c53746174653a3a44657374726f79696e67605d20696e206f7264657220666f7220746865206465706f7369746f7220746f20756e626f6e64206f7220666f72b86f74686572206d656d6265727320746f206265207065726d697373696f6e6c6573736c7920756e626f6e6465642e304e6f744e6f6d696e61746f72000b04f45468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e544e6f744b69636b65724f7244657374726f79696e67000c043d01456974686572206129207468652063616c6c65722063616e6e6f74206d616b6520612076616c6964206b69636b206f722062292074686520706f6f6c206973206e6f742064657374726f79696e672e1c4e6f744f70656e000d047054686520706f6f6c206973206e6f74206f70656e20746f206a6f696e204d6178506f6f6c73000e04845468652073797374656d206973206d61786564206f7574206f6e20706f6f6c732e384d6178506f6f6c4d656d62657273000f049c546f6f206d616e79206d656d6265727320696e2074686520706f6f6c206f722073797374656d2e4443616e4e6f744368616e676553746174650010048854686520706f6f6c732073746174652063616e6e6f74206265206368616e6765642e54446f65734e6f74486176655065726d697373696f6e001104b85468652063616c6c657220646f6573206e6f742068617665206164657175617465207065726d697373696f6e732e544d65746164617461457863656564734d61784c656e001204ac4d657461646174612065786365656473205b60436f6e6669673a3a4d61784d657461646174614c656e605d24446566656e736976650400210a0138446566656e736976654572726f720013083101536f6d65206572726f72206f6363757272656420746861742073686f756c64206e657665722068617070656e2e20546869732073686f756c64206265207265706f7274656420746f20746865306d61696e7461696e6572732e9c5061727469616c556e626f6e644e6f74416c6c6f7765645065726d697373696f6e6c6573736c79001404bc5061727469616c20756e626f6e64696e67206e6f7720616c6c6f776564207065726d697373696f6e6c6573736c792e5c4d6178436f6d6d697373696f6e526573747269637465640015041d0154686520706f6f6c2773206d617820636f6d6d697373696f6e2063616e6e6f742062652073657420686967686572207468616e20746865206578697374696e672076616c75652e60436f6d6d697373696f6e457863656564734d6178696d756d001604ec54686520737570706c69656420636f6d6d697373696f6e206578636565647320746865206d617820616c6c6f77656420636f6d6d697373696f6e2e78436f6d6d697373696f6e45786365656473476c6f62616c4d6178696d756d001704e854686520737570706c69656420636f6d6d697373696f6e206578636565647320676c6f62616c206d6178696d756d20636f6d6d697373696f6e2e64436f6d6d697373696f6e4368616e67655468726f74746c656400180409014e6f7420656e6f75676820626c6f636b732068617665207375727061737365642073696e636520746865206c61737420636f6d6d697373696f6e207570646174652e78436f6d6d697373696f6e4368616e6765526174654e6f74416c6c6f7765640019040101546865207375626d6974746564206368616e67657320746f20636f6d6d697373696f6e206368616e6765207261746520617265206e6f7420616c6c6f7765642e4c4e6f50656e64696e67436f6d6d697373696f6e001a04a05468657265206973206e6f2070656e64696e6720636f6d6d697373696f6e20746f20636c61696d2e584e6f436f6d6d697373696f6e43757272656e74536574001b048c4e6f20636f6d6d697373696f6e2063757272656e7420686173206265656e207365742e2c506f6f6c4964496e557365001c0464506f6f6c2069642063757272656e746c7920696e207573652e34496e76616c6964506f6f6c4964001d049c506f6f6c2069642070726f7669646564206973206e6f7420636f72726563742f757361626c652e4c426f6e64457874726152657374726963746564001e04fc426f6e64696e67206578747261206973207265737472696374656420746f207468652065786163742070656e64696e672072657761726420616d6f756e742e3c4e6f7468696e67546f41646a757374001f04b04e6f20696d62616c616e636520696e20746865204544206465706f73697420666f722074686520706f6f6c2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e210a0c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657438446566656e736976654572726f72000114684e6f74456e6f7567685370616365496e556e626f6e64506f6f6c00000030506f6f6c4e6f74466f756e6400010048526577617264506f6f6c4e6f74466f756e6400020040537562506f6f6c734e6f74466f756e6400030070426f6e64656453746173684b696c6c65645072656d61747572656c7900040000250a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401290a045300000400310a01185665633c543e0000290a04184f7074696f6e040454012d0a0108104e6f6e6500000010536f6d6504002d0a00000100002d0a084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01d1032c426c6f636b4e756d626572012c3450616c6c6574734f726967696e011906244163636f756e7449640100001401206d617962655f6964410101304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cd103011043616c6c0001386d617962655f706572696f6469634d0501944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e1906013450616c6c6574734f726967696e0000310a000002290a00350a0c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e390a083c70616c6c65745f707265696d616765404f6c645265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974d80150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f7369743d0a01704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656ee103012c4f7074696f6e3c7533323e000100003d0a04184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d80000010000410a083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e7449640100185469636b6574018401082c556e7265717565737465640801187469636b6574450a014c284163636f756e7449642c205469636b65742900010c6c656e10010c753332000000245265717565737465640c01306d617962655f7469636b6574490a016c4f7074696f6e3c284163636f756e7449642c205469636b6574293e000114636f756e7410010c7533320001246d617962655f6c656ee103012c4f7074696f6e3c7533323e00010000450a00000408008400490a04184f7074696f6e04045401450a0108104e6f6e6500000010536f6d650400450a00000100004d0a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000510a0c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400012018546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e1c546f6f4d616e7900060455014d6f7265207468616e20604d41585f484153485f555047524144455f42554c4b5f434f554e54602068617368657320776572652072657175657374656420746f206265207570677261646564206174206f6e63652e18546f6f466577000704e4546f6f206665772068617368657320776572652072657175657374656420746f2062652075706772616465642028692e652e207a65726f292e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e550a0c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e646572016d01000801206f6666656e6465726d0101204f6666656e6465720001247265706f7274657273250201345665633c5265706f727465723e0000590a000004084d0134005d0a0c3c70616c6c65745f74785f70617573651870616c6c6574144572726f720404540001102049735061757365640000044c5468652063616c6c206973207061757365642e284973556e706175736564000104545468652063616c6c20697320756e7061757365642e28556e7061757361626c65000204b45468652063616c6c2069732077686974656c697374656420616e642063616e6e6f74206265207061757365642e204e6f74466f756e64000300048054686520604572726f726020656e756d206f6620746869732070616c6c65742e610a0c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454016101045300000400650a01185665633c543e0000650a000002610100690a0c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6d0a00000408710a810a00710a0c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e747300304964656e74697479496e666f016d05000c01286a756467656d656e7473750a01fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f6d0501304964656e74697479496e666f0000750a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401790a0453000004007d0a01185665633c543e0000790a0000040810fd05007d0a000002790a00810a04184f7074696f6e0404540185010108104e6f6e6500000010536f6d65040085010000010000850a0000040818890a00890a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400250201185665633c543e00008d0a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401910a045300000400990a01185665633c543e0000910a04184f7074696f6e04045401950a0108104e6f6e6500000010536f6d650400950a0000010000950a0c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f0c1c42616c616e63650118244163636f756e74496401001c49644669656c64012c000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c64732c011c49644669656c640000990a000002910a009d0a0c3c70616c6c65745f6964656e746974791474797065734c417574686f7269747950726f70657274696573041853756666697801a10a00080118737566666978a10a0118537566666978000128616c6c6f636174696f6e100128416c6c6f636174696f6e0000a10a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000a50a00000408002c00a90a0c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400016848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e44546f6f4d616e7952656769737472617273000b04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000c04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000d047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000e04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479000f04d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001004f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e34496e76616c6964537566666978001104805468652070726f76696465642073756666697820697320746f6f206c6f6e672e504e6f74557365726e616d65417574686f72697479001204e05468652073656e64657220646f6573206e6f742068617665207065726d697373696f6e20746f206973737565206120757365726e616d652e304e6f416c6c6f636174696f6e001304c454686520617574686f726974792063616e6e6f7420616c6c6f6361746520616e79206d6f726520757365726e616d65732e40496e76616c69645369676e6174757265001404a8546865207369676e6174757265206f6e206120757365726e616d6520776173206e6f742076616c69642e4452657175697265735369676e6174757265001504090153657474696e67207468697320757365726e616d652072657175697265732061207369676e61747572652c20627574206e6f6e65207761732070726f76696465642e3c496e76616c6964557365726e616d65001604b054686520757365726e616d6520646f6573206e6f74206d6565742074686520726571756972656d656e74732e34557365726e616d6554616b656e0017047854686520757365726e616d6520697320616c72656164792074616b656e2e284e6f557365726e616d65001804985468652072657175657374656420757365726e616d6520646f6573206e6f742065786973742e284e6f74457870697265640019042d0154686520757365726e616d652063616e6e6f7420626520666f72636566756c6c792072656d6f76656420626563617573652069742063616e207374696c6c2062652061636365707465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ead0a0c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb10a00000408000400b50a083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d626572012c1c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e9101015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c730105018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000b90a0c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd0a000002c10a00c10a0000040c3506c50ad90a00c50a081866705f727063445472616e73616374696f6e53746174757300001c01407472616e73616374696f6e5f68617368300110483235360001447472616e73616374696f6e5f696e64657810010c75333200011066726f6d9901011048313630000108746fc90a01304f7074696f6e3c483136303e000140636f6e74726163745f61646472657373c90a01304f7074696f6e3c483136303e0001106c6f6773cd0a01205665633c4c6f673e0001286c6f67735f626c6f6f6dd10a0114426c6f6f6d0000c90a04184f7074696f6e0404540199010108104e6f6e6500000010536f6d65040099010000010000cd0a000002c50100d10a0820657468626c6f6f6d14426c6f6f6d00000400d50a01405b75383b20424c4f4f4d5f53495a455d0000d50a000003000100000800d90a0c20657468657265756d1c726563656970742452656365697074563300010c184c65676163790400dd0a014445495036353852656365697074446174610000001c454950323933300400dd0a01484549503239333052656365697074446174610001001c454950313535390400dd0a014845495031353539526563656970744461746100020000dd0a0c20657468657265756d1c72656365697074444549503635385265636569707444617461000010012c7374617475735f636f64650801087538000120757365645f676173d1010110553235360001286c6f67735f626c6f6f6dd10a0114426c6f6f6d0001106c6f6773cd0a01205665633c4c6f673e0000e10a0c20657468657265756d14626c6f636b14426c6f636b040454013506000c0118686561646572e50a01184865616465720001307472616e73616374696f6e73ed0a01185665633c543e0001186f6d6d657273f10a012c5665633c4865616465723e0000e50a0c20657468657265756d186865616465721848656164657200003c012c706172656e745f686173683001104832353600012c6f6d6d6572735f686173683001104832353600012c62656e6566696369617279990101104831363000012873746174655f726f6f74300110483235360001447472616e73616374696f6e735f726f6f743001104832353600013472656365697074735f726f6f74300110483235360001286c6f67735f626c6f6f6dd10a0114426c6f6f6d000128646966666963756c7479d1010110553235360001186e756d626572d1010110553235360001246761735f6c696d6974d1010110553235360001206761735f75736564d10101105532353600012474696d657374616d702c010c75363400012865787472615f6461746134011442797465730001206d69785f68617368300110483235360001146e6f6e6365e90a010c4836340000e90a0c38657468657265756d5f747970657310686173680c483634000004004d03011c5b75383b20385d0000ed0a000002350600f10a000002e50a00f50a000002d90a00f90a000002c50a00fd0a0c3c70616c6c65745f657468657265756d1870616c6c6574144572726f7204045400010840496e76616c69645369676e6174757265000004545369676e617475726520697320696e76616c69642e305072654c6f67457869737473000104d85072652d6c6f672069732070726573656e742c207468657265666f7265207472616e73616374206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e010b082870616c6c65745f65766d30436f64654d65746164617461000008011073697a652c010c75363400011068617368300110483235360000050b0000040899013000090b0c2870616c6c65745f65766d1870616c6c6574144572726f720404540001342842616c616e63654c6f77000004904e6f7420656e6f7567682062616c616e636520746f20706572666f726d20616374696f6e2c4665654f766572666c6f770001048043616c63756c6174696e6720746f74616c20666565206f766572666c6f7765643c5061796d656e744f766572666c6f770002049043616c63756c6174696e6720746f74616c207061796d656e74206f766572666c6f7765643857697468647261774661696c65640003044c576974686472617720666565206661696c6564384761735072696365546f6f4c6f770004045447617320707269636520697320746f6f206c6f772e30496e76616c69644e6f6e6365000504404e6f6e636520697320696e76616c6964384761734c696d6974546f6f4c6f7700060454476173206c696d697420697320746f6f206c6f772e3c4761734c696d6974546f6f4869676800070458476173206c696d697420697320746f6f20686967682e38496e76616c6964436861696e49640008046054686520636861696e20696420697320696e76616c69642e40496e76616c69645369676e617475726500090464746865207369676e617475726520697320696e76616c69642e285265656e7472616e6379000a043845564d207265656e7472616e6379685472616e73616374696f6e4d757374436f6d6546726f6d454f41000b04244549502d333630372c24556e646566696e6564000c0440556e646566696e6564206572726f722e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0d0b0c6470616c6c65745f686f746669785f73756666696369656e74731870616c6c6574144572726f720404540001045c4d617841646472657373436f756e744578636565646564000004784d6178696d756d206164647265737320636f756e74206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e110b000004082ce10100150b0c5470616c6c65745f61697264726f705f636c61696d731870616c6c6574144572726f7204045400012060496e76616c6964457468657265756d5369676e61747572650000046c496e76616c696420457468657265756d207369676e61747572652e58496e76616c69644e61746976655369676e617475726500010488496e76616c6964204e617469766520287372323535313929207369676e617475726550496e76616c69644e61746976654163636f756e740002047c496e76616c6964204e6174697665206163636f756e74206465636f64696e67405369676e65724861734e6f436c61696d00030478457468657265756d206164647265737320686173206e6f20636c61696d2e4053656e6465724861734e6f436c61696d000404b04163636f756e742049442073656e64696e67207472616e73616374696f6e20686173206e6f20636c61696d2e30506f74556e646572666c6f77000508490154686572652773206e6f7420656e6f75676820696e2074686520706f7420746f20706179206f757420736f6d6520756e76657374656420616d6f756e742e2047656e6572616c6c7920696d706c6965732061306c6f676963206572726f722e40496e76616c696453746174656d656e740006049041206e65656465642073746174656d656e7420776173206e6f7420696e636c756465642e4c56657374656442616c616e6365457869737473000704a4546865206163636f756e7420616c7265616479206861732061207665737465642062616c616e63652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e190b0c3070616c6c65745f726f6c65731474797065733c52657374616b696e674c656467657204045400002001147374617368000130543a3a4163636f756e744964000114746f74616c7501013042616c616e63654f663c543e00011c70726f66696c65a906012850726f66696c653c543e000114726f6c65731d0b01f4426f756e64656442547265654d61703c526f6c65547970652c205265636f72643c543e2c20543a3a4d6178526f6c657350657256616c696461746f723e000120726f6c655f6b6579e5060170426f756e6465645665633c75382c20543a3a4d61784b65794c656e3e000124756e6c6f636b696e672d0b01f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f7265776172647325090194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e00014c6d61785f6163746976655f736572766963657310010c75333200001d0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01ed01045601b506045300000400210b013842547265654d61703c4b2c20563e0000210b042042547265654d617008044b01ed01045601b506000400250b000000250b000002290b00290b00000408ed01b506002d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401310b045300000400350b01185665633c543e0000310b0c3070616c6c65745f726f6c65731474797065732c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c75657501011c42616c616e636500010c657261bd020120457261496e6465780000350b000002310b00390b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ed01045300000400f90101185665633c543e00003d0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0100045601100453000004004509013842547265654d61703c4b2c20563e0000410b0c3070616c6c65745f726f6c65731870616c6c6574144572726f7204045400014c304e6f7456616c696461746f72000004404e6f7420612076616c696461746f722e3c486173526f6c6541737369676e65640001048c56616c696461746f72206861732061637469766520726f6c652061737369676e65642e3c526f6c654e6f7441737369676e6564000204b0476976656e20726f6c65206973206e6f742061737369676e656420746f207468652076616c696461746f722e204d6178526f6c65730003049c4d617820726f6c65206c696d6974207265616368656420666f7220746865206163636f756e742e4c526f6c6543616e6e6f74426552656d6f7665640004042101526f6c652063616e6e6f742064756520746f2070656e64696e67206a6f62732c2077686963682063616e2774206265206f70746564206f757420617420746865206d6f6d656e742e7852657374616b696e67416d6f756e7443616e6e6f744265557064617465640005045d0152657374616b696e6720616d6f756e742063616e6e6f74206265206c6f77657265642069662074686572652061726520616e792070656e64696e67206a6f62732e20596f752063616e206f6e6c7920616464206d6f726558457863656564734d617852657374616b6556616c75650006040101496e76616c69642052657374616b696e6720616d6f756e742c2073686f756c64206e6f742065786365656420746f74616c207374616b656420616d6f756e742e64496e73756666696369656e7452657374616b696e67426f6e6400070431015265207374616b696e6720616d6f756e742073686f756c642062652067726561746572207468616e206d696e696d756d2052657374616b696e6720626f6e6420726571756972656d656e742e4c50726f66696c655570646174654661696c65640008045850726f66696c6520557064617465206661696c65642e5050726f66696c65416c7265616479457869737473000904cc50726f66696c6520616c72656164792065786973747320666f7220676976656e2076616c696461746f72206163636f756e742e384e6f50726f66696c65466f756e64000a04cc537461736820636f6e74726f6c6c6572206163636f756e74206e6f7420666f756e6420696e20526f6c6573204c65646765722e6850726f66696c6544656c657465526571756573744661696c6564000b08490150726f66696c652064656c6574652072657175657374206661696c65642064756520746f2070656e64696e67206a6f62732c2077686963682063616e2774206265206f70746564206f7574206174207468651c6d6f6d656e742e5853657373696f6e4b6579734e6f7450726f7669646564000c046053657373696f6e4b657973206e6f742070726f76696465643c4b657953697a654578636565646564000d04444b65792073697a652065786365656465644c43616e6e6f7447657443757272656e74457261000e045c43616e6e6f742066696e642043757272656e742065726148496e76616c6964457261546f526577617264000f0440496e76616c69642065726120696e666f2c426f756e644e6f744d65740010044c4f7574206f6620626f756e647320696e70757438416c7265616479436c61696d65640011045c5265776172647320616c726561647920636c61696d6564304e6f4d6f72654368756e6b7300120470556e6c6f636b206368756e6b7320616c72656164792066696c6c6564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e450b0c4474616e676c655f7072696d697469766573106a6f62732c5068617365526573756c7424244163636f756e74496401002c426c6f636b4e756d626572012c3c4d61785061727469636970616e7473010d02244d61784b65794c656e01cd06284d6178446174614c656e01d5063c4d61785369676e61747572654c656e01d106404d61785375626d697373696f6e4c656e0111022c4d617850726f6f664c656e01d906584d61784164646974696f6e616c506172616d734c656e011502001401146f776e65720001244163636f756e744964000118726573756c74c90601a1014a6f62526573756c743c4d61785061727469636970616e74732c204d61784b65794c656e2c204d61785369676e61747572654c656e2c204d6178446174614c656e2c0a4d617850726f6f664c656e2c204d61784164646974696f6e616c506172616d734c656e2c3e00010c74746c2c012c426c6f636b4e756d6265720001407065726d69747465645f63616c6c65728801444f7074696f6e3c4163636f756e7449643e0001206a6f625f7479706519020139014a6f62547970653c4163636f756e7449642c204d61785061727469636970616e74732c204d61785375626d697373696f6e4c656e2c204d61784164646974696f6e616c506172616d734c656e0a3e0000490b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010102045300000400fd0101185665633c543e00004d0b0c2c70616c6c65745f6a6f6273186d6f64756c65144572726f720404540001483c496e76616c69644a6f62506861736500000458696e76616c69642070686173652070726f766964656440496e76616c696456616c696461746f7200010498476976656e2076616c696461746f72206e6f742076616c696420666f72206a6f62207479706540496e76616c69644a6f62506172616d730002048c696e76616c696420706172616d732c2063616e6e6f742065786563757465206a6f62735850726576696f7573526573756c744e6f74466f756e640003046863616e6e6f742066696e64207068617365203120726573756c7434526573756c74457870697265640004046c5468652070726576696f757320726573756c742065787069726564444a6f62416c72656164794578706972656400050460496e76616c6964206a6f622065787069727920696e7075742c4a6f624e6f74466f756e640006047c54686520726571756573746564206a6f6220776173206e6f7420666f756e645850686173654f6e65526573756c744e6f74466f756e640007044c503120726573756c74206e6f7420666f756e64244e6f52657761726473000804786e6f207265776172647320666f756e6420666f722076616c696461746f724c4e6f74456e6f75676856616c696461746f7273000904744e6f7420656e6f7567682076616c696461746f727320746f20657869742c456d707479526573756c74000a0430656d70747920726573756c7420456d7074794a6f62000b0424656d707479206a6f626056616c696461746f72526f6c654b65794e6f74466f756e64000c047456616c696461746f7220726f6c65206b6579206e6f7420666f756e642e54526573756c744e6f74457870656374656454797065000d0468556e657870656374656420726573756c742070726f7669646564304e6f5065726d697373696f6e000e04a04e6f207065726d697373696f6e20746f206368616e6765207065726d69747465642063616c6c65724c546f6f4d616e795061727469636970616e7473000f047845786365656473206d6178207061727469636970616e74206c696d69747344457863656564734d61784b657953697a6500100440496e76616c6964204b65792073697a655c546f6f4d616e794a6f6273466f7256616c696461746f72001104a856616c696461746f722065786365656473206c696d6974206f66206d617820616374697665206a6f6273048054686520604572726f726020656e756d206f6620746869732070616c6c65742e510b0c2870616c6c65745f646b671870616c6c6574144572726f720404540001c05043616e6e6f7452657472656976655369676e6572000004a843616e6e6f74207265747265697665207369676e6572732066726f6d20746865207369676e6174757265404e6f74456e6f7567685369676e657273000104804e6f7420656e6f756768207369676e65727320666f72207468726573686f6c6450496e76616c69645369676e61747572654461746100020498546865207369676e6572732068617665207369676e656420646966666572656e7420646174614c4e6f5061727469636970616e7473466f756e64000304544e6f207061727469636970616e747320666f756e64444e6f5369676e617475726573466f756e640004044c4e6f207369676e61747572657320666f756e6438496e76616c69644a6f62547970650005044c556e6578706563746564206a6f622074797065484475706c69636174655369676e61747572650006049c4475706c6963617465207369676e617475726520666f756e6420696e207375626d697373696f6e40496e76616c69645369676e61747572650007046c496e76616c6964207369676e6174757265207375626d697474656458496e76616c69645369676e6174757265536368656d6500080460496e76616c6964207369676e617475726520736368656d657c496e76616c69645369676e6174757265446573657269616c697a6174696f6e00090484496e76616c6964207369676e617475726520646573657269616c697a6174696f6e4c496e76616c6964566572696679696e674b6579000a047c496e76616c696420766572696679696e67206b6579207375626d697474656488496e76616c6964566572696679696e674b6579446573657269616c697a6174696f6e000b0494496e76616c696420766572696679696e67206b657920646573657269616c697a6174696f6e485369676e696e674b65794d69736d61746368000c046c5369676e65642077697468206120646966666572656e74206b65796c496e76616c69645061727469636970616e745075626c69634b6579000d0478496e76616c6964207061727469636970616e74207075626c6963206b65794c496e76616c6964426c735075626c69634b6579000e0458496e76616c696420424c53207075626c6963206b65793c496e76616c6964526f6c6554797065000f0478496e76616c6964204d69736265686176696f7220526f6c6520747970652e50496e76616c69644a757374696669636174696f6e0010046c496e76616c6964204a757374696669636174696f6e20747970652e544d616c666f726d6564526f756e644d657373616765001104a0436f756c64206e6f7420646573657269616c697a652074686520726f756e64206d6573736167652e4c4e6f745369676e656442794f6666656e646572001204c05369676e656420526f756e64204d657373616765206e6f74207369676e656420627920746865206f6666656e6465722e4456616c69644465636f6d6d69746d656e7400131090546865207375626d6974746564206465636f6d6d69746d656e742069732076616c69642e00d454686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e742069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964213456616c69644461746153697a65001410b8546865207375626d6974746564206465636f6d6d69746d656e7420646174612073697a652069732076616c69642e00fc54686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e7420646174612073697a652069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964216056616c696446656c646d616e566572696669636174696f6e001510cc546865207375626d6974746564206d65737361676573207061737365642046656c646d616e20766572696669636174696f6e2e00110154686973206572726f722069732072657475726e6564207768656e20746865206d65737361676573207061737365642046656c646d616e20766572696669636174696f6e90627574207468652063616c6c657220636c61696d7320697420697320696e76616c6964214456616c69645363686e6f727250726f6f6600161494546865207375626d6974746564205363686e6f72722050726f6f662069732076616c69642e00d054686973206572726f722069732072657475726e6564207768656e20746865206465636f6d6d69746d656e7420616e6420697473845363686e6f7272206172652076616c69642e20627574207468652063616c6c657254636c61696d7320697420697320696e76616c69642e6c56616c696452696e67506564657273656e506172616d6574657273001710c4546865207375626d69747465642072696e6720706564657273656e20706172616d6574657273206172652076616c69642e00090154686973206572726f722069732072657475726e6564207768656e207468652072696e6720706564657273656e20706172616d6574657273206172652076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c69642e3456616c69644d6f6450726f6f6600181084546865207375626d6974746564204d6f642050726f6f662069732076616c69642e00c854686973206572726f722069732072657475726e6564207768656e20746865204d6f642050726f6f662069732076616c696490627574207468652063616c6c657220636c61696d7320697420697320696e76616c69642e6056616c696446726f73745369676e6174757265536861726500191001012d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202f2f2f010120202020202020202020202020202020202020202020202046524f5354204552524f5253202020202020202020202020202020202020202020202020202f2f2f01012d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202f2f2f6c56616c69642046524f5354207369676e617475726520736861726580496e76616c696446726f73744d65737361676553657269616c697a6174696f6e001a048c496e76616c69642046524f5354206d6573736167652073657269616c697a6174696f6e88496e76616c696446726f73744d657373616765446573657269616c697a6174696f6e001b0494496e76616c69642046524f5354206d65737361676520646573657269616c697a6174696f6e80496e76616c69644964656e746966696572446573657269616c697a6174696f6e001c0488496e76616c6964206964656e74696669657220646573657269616c697a6174696f6e4c56616c696446726f73745369676e6174757265001d04d056616c69642046524f5354207369676e6174757265206572726f7220666f722061206d69736265686176696f72207265706f727444556e6b6e6f776e4964656e746966696572001e0448556e6b6e6f776e206964656e7469666965724c4475706c69636174654964656e746966696572001f04504475706c6963617465206964656e74696669657270496e636f72726563744e756d6265724f664964656e746966696572730020047c496e636f7272656374206e756d626572206f66206964656e74696669657273804964656e74696669657244657269766174696f6e4e6f74537570706f727465640021048c4964656e7469666965722064657269766174696f6e206e6f7420737570706f727465645c4d616c666f726d656446726f73745369676e61747572650022044c4d616c666f726d6564207369676e617475726554496e76616c696446726f73745369676e61747572650023045c496e76616c69642046524f5354207369676e617475726568496e76616c696446726f73745369676e6174757265536861726500240474496e76616c69642046524f5354207369676e61747572652073686172656c496e76616c696446726f73745369676e6174757265536368656d6500250478496e76616c69642046524f5354207369676e617475726520736368656d65684d616c666f726d656446726f7374566572696679696e674b6579002604744d616c666f726d65642046524f535420766572696679696e67206b6579604d616c666f726d656446726f73745369676e696e674b65790027046c4d616c666f726d65642046524f5354207369676e696e67206b6579584d697373696e6746726f7374436f6d6d69746d656e74002804604d697373696e672046524f535420636f6d6d69746d656e74484964656e74697479436f6d6d69746d656e7400290460496e76616c69642046524f535420636f6d6d69746d656e743c46726f73744669656c644572726f72002a046046524f5354204669656c64207363616c6172206572726f723c46726f737447726f75704572726f72002b046446524f53542047726f757020656c656d656e74206572726f72444669656c64456c656d656e744572726f72002c044c4669656c6420656c656d656e74206572726f7240496e76616c69645075626c69634b6579002d0460496e76616c6964207075626c6963206b6579206572726f7238496e76616c69644d657373616765002e043c496e76616c6964206d6573736167655c4d616c666f726d6564537461726b5369676e6174757265002f04644d616c666f726d656420537461726b207369676e6174757265048054686520604572726f726020656e756d206f6620746869732070616c6c65742e550b0c3470616c6c65745f7a6b736161731870616c6c6574144572726f7204045400010c38496e76616c69644a6f62547970650000044c556e6578706563746564206a6f62207479706530496e76616c696450726f6f6600010434496e76616c69642070726f6f66384d616c666f726d656450726f6f660002083c4d616c666f726d65642050726f6f66886966207468652070726f6f66206279746573206973206e6f7420636f72726563742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e590b000004085d0b18005d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401610b045300000400650b01185665633c543e0000610b083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f787954797065018d022c426c6f636b4e756d626572012c000c012064656c65676174650001244163636f756e74496400012870726f78795f747970658d02012450726f78795479706500011464656c61792c012c426c6f636b4e756d6265720000650b000002610b00690b000004086d0b18006d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401710b045300000400750b01185665633c543e0000710b083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801302c426c6f636b4e756d626572012c000c01107265616c0001244163636f756e74496400012463616c6c5f68617368300110486173680001186865696768742c012c426c6f636b4e756d6265720000750b000002710b00790b0c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72404f70657261746f724d657461646174610c244163636f756e74496401001c42616c616e636501181c417373657449640118001401147374616b6518011c42616c616e636500014064656c65676174696f6e5f636f756e7410010c75333200011c72657175657374810b01a04f7074696f6e3c4f70657261746f72426f6e644c657373526571756573743c42616c616e63653e3e00012c64656c65676174696f6e73890b01bc5665633c44656c656761746f72426f6e643c4163636f756e7449642c2042616c616e63652c20417373657449643e3e000118737461747573910b01384f70657261746f725374617475730000810b04184f7074696f6e04045401850b0108104e6f6e6500000010536f6d650400850b0000010000850b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f725c4f70657261746f72426f6e644c65737352657175657374041c42616c616e6365011800080118616d6f756e7418011c42616c616e6365000130726571756573745f74696d65100128526f756e64496e6465780000890b0000028d0b008d0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f723444656c656761746f72426f6e640c244163636f756e74496401001c42616c616e636501181c417373657449640118000c012464656c656761746f720001244163636f756e744964000118616d6f756e7418011c42616c616e636500012061737365745f696418011c417373657449640000910b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72384f70657261746f7253746174757300010c1841637469766500000020496e6163746976650001001c4c656176696e670400100128526f756e64496e64657800020000950b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e147479706573206f70657261746f72404f70657261746f72536e617073686f740c244163636f756e74496401001c42616c616e636501181c417373657449640118000801147374616b6518011c42616c616e636500012c64656c65676174696f6e73890b01bc5665633c44656c656761746f72426f6e643c4163636f756e7449642c2042616c616e63652c20417373657449643e3e0000990b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f724444656c656761746f724d657461646174610c244163636f756e74496401001c42616c616e636501181c417373657449640118001401206465706f736974739d0b016842547265654d61703c417373657449642c2042616c616e63653e00014477697468647261775f7265717565737473a90b01985665633c5769746864726177526571756573743c417373657449642c2042616c616e63653e3e00012c64656c65676174696f6e73b10b01cc5665633c426f6e64496e666f44656c656761746f723c4163636f756e7449642c2042616c616e63652c20417373657449643e3e00016864656c656761746f725f756e7374616b655f7265717565737473b90b01c45665633c426f6e644c657373526571756573743c4163636f756e7449642c20417373657449642c2042616c616e63653e3e000118737461747573c10b013c44656c656761746f7253746174757300009d0b042042547265654d617008044b011804560118000400a10b000000a10b000002a50b00a50b00000408181800a90b000002ad0b00ad0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c576974686472617752657175657374081c4173736574496401181c42616c616e63650118000c012061737365745f696418011c41737365744964000118616d6f756e7418011c42616c616e636500013c7265717565737465645f726f756e64100128526f756e64496e6465780000b10b000002b50b00b50b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f7244426f6e64496e666f44656c656761746f720c244163636f756e74496401001c42616c616e636501181c417373657449640118000c01206f70657261746f720001244163636f756e744964000118616d6f756e7418011c42616c616e636500012061737365745f696418011c417373657449640000b90b000002bd0b00bd0b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c426f6e644c657373526571756573740c244163636f756e74496401001c4173736574496401181c42616c616e63650118001001206f70657261746f720001244163636f756e74496400012061737365745f696418011c41737365744964000118616d6f756e7418011c42616c616e636500013c7265717565737465645f726f756e64100128526f756e64496e6465780000c10b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065732464656c656761746f723c44656c656761746f7253746174757300010818416374697665000000404c656176696e675363686564756c65640400100128526f756e64496e64657800010000c50b0000021800c90b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c7265776172647330526577617264436f6e6669670818506f6f6c496401181c42616c616e636501180008011c636f6e66696773cd0b01cc42547265654d61703c506f6f6c49642c20526577617264436f6e666967466f724173736574506f6f6c3c42616c616e63653e3e00016477686974656c69737465645f626c75657072696e745f696473ed0401205665633c7533323e0000cd0b042042547265654d617008044b0118045601d10b000400d50b000000d10b107470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1474797065731c7265776172647360526577617264436f6e666967466f724173736574506f6f6c041c42616c616e636501180008010c6170799902011c50657263656e7400010c63617018011c42616c616e63650000d50b000002d90b00d90b0000040818d10b00dd0b0c7470616c6c65745f6d756c74695f61737365745f64656c65676174696f6e1870616c6c6574144572726f720404540001783c416c72656164794f70657261746f720000048c546865206163636f756e7420697320616c726561647920616e206f70657261746f722e28426f6e64546f6f4c6f7700010470546865207374616b6520616d6f756e7420697320746f6f206c6f772e344e6f74416e4f70657261746f720002047c546865206163636f756e74206973206e6f7420616e206f70657261746f722e2843616e6e6f744578697400030460546865206163636f756e742063616e6e6f7420657869742e38416c72656164794c656176696e6700040480546865206f70657261746f7220697320616c7265616479206c656176696e672e484e6f744c656176696e674f70657261746f72000504a8546865206163636f756e74206973206e6f74206c656176696e6720617320616e206f70657261746f722e3c4e6f744c656176696e67526f756e64000604cc54686520726f756e6420646f6573206e6f74206d6174636820746865207363686564756c6564206c6561766520726f756e642e4c4e6f5363686564756c6564426f6e644c657373000704985468657265206973206e6f207363686564756c656420756e7374616b6520726571756573742e6c426f6e644c657373526571756573744e6f745361746973666965640008049454686520756e7374616b652072657175657374206973206e6f74207361746973666965642e444e6f744163746976654f70657261746f720009046c546865206f70657261746f72206973206e6f74206163746976652e484e6f744f66666c696e654f70657261746f72000a0470546865206f70657261746f72206973206e6f74206f66666c696e652e40416c726561647944656c656761746f72000b048c546865206163636f756e7420697320616c726561647920612064656c656761746f722e304e6f7444656c656761746f72000c047c546865206163636f756e74206973206e6f7420612064656c656761746f722e70576974686472617752657175657374416c7265616479457869737473000d048841207769746864726177207265717565737420616c7265616479206578697374732e4c496e73756666696369656e7442616c616e6365000e0494546865206163636f756e742068617320696e73756666696369656e742062616c616e63652e444e6f576974686472617752657175657374000f04745468657265206973206e6f20776974686472617720726571756573742e444e6f426f6e644c65737352657175657374001004705468657265206973206e6f20756e7374616b6520726571756573742e40426f6e644c6573734e6f7452656164790011048454686520756e7374616b652072657175657374206973206e6f742072656164792e70426f6e644c65737352657175657374416c7265616479457869737473001204844120756e7374616b65207265717565737420616c7265616479206578697374732e6041637469766553657276696365735573696e674173736574001304a854686572652061726520616374697665207365727669636573207573696e67207468652061737365742e484e6f41637469766544656c65676174696f6e001404785468657265206973206e6f74206163746976652064656c65676174696f6e4c41737365744e6f7457686974656c697374656400150470546865206173736574206973206e6f742077686974656c6973746564344e6f74417574686f72697a6564001604cc546865206f726967696e206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e3441737365744e6f74466f756e6400170464546865206173736574204944206973206e6f7420666f756e646c426c75657072696e74416c726561647957686974656c69737465640018049c54686520626c75657072696e7420494420697320616c72656164792077686974656c6973746564484e6f77697468647261775265717565737473001904684e6f20776974686472617720726571756573747320666f756e64644e6f4d61746368696e67776974686472617752657175657374001a04884e6f206d61746368696e67207769746864726177207265716573747320666f756e64484173736574416c7265616479496e506f6f6c001b0494417373657420616c72656164792065786973747320696e20612072657761726420706f6f6c3841737365744e6f74496e506f6f6c001c04784173736574206e6f7420666f756e6420696e2072657761726420706f6f6c30506f6f6c4e6f74466f756e64001d04785468652072657761726420706f6f6c20646f6573206e6f7420657869737404744572726f727320656d6974746564206279207468652070616c6c65742ee10b00000408083400e50b0c5c7379676d615f6163636573735f73656772656761746f721870616c6c6574144572726f7204045400010834556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e746564444772616e744163636573734661696c6564000104e44661696c656420746f206772616e742065787472696e73696320616363657373207065726d697373696f6e20746f20616e206163636f756e74048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee90b0000040808a90200ed0b0c587379676d615f62617369635f66656568616e646c65721870616c6c6574144572726f7204045400010834556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e7465643041636365737344656e696564000104a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef10b0c607379676d615f6665655f68616e646c65725f726f757465721870616c6c6574144572726f720404540001083041636365737344656e696564000004a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e34556e696d706c656d656e7465640001045846756e6374696f6e20756e696d706c656d656e746564048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef50b0000040c10181800f90b0c6c7379676d615f70657263656e746167655f66656568616e646c65721870616c6c6574144572726f7204045400011034556e696d706c656d656e7465640000045846756e6374696f6e20756e696d706c656d656e7465643041636365737344656e696564000104a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e44466565526174654f75744f6652616e67650002048c4665652072617465206973206f7574206f662072616e6765205b302c203130303030293c496e76616c6964466565426f756e640003047c50657263656e746167652066656520626f756e6420697320696e76616c6964048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd0b00000408082c00010c042042547265654d617008044b01a90204560100000400050c000000050c000002090c00090c00000408a90200000d0c000002110c00110c00000408a9020400150c0c307379676d615f6272696467651870616c6c6574144572726f720404540001783041636365737344656e696564000004a04163636f756e7420686173206e6f74206761696e656420616363657373207065726d697373696f6e3c4261644d70635369676e6174757265000104c450726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792072656c617965724c496e73756666696369656e7442616c616e636500020498496e73756666696369656e742062616c616e6365206f6e2073656e646572206163636f756e74545472616e736163744661696c65644465706f736974000304844173736574207472616e736163746f7220657865637574696f6e206661696c6564585472616e736163744661696c65645769746864726177000400605472616e736163744661696c65644665654465706f736974000500705472616e736163744661696c6564486f6c64496e5265736572766564000600845472616e736163744661696c656452656c6561736546726f6d52657365727665640007003c466565546f6f457870656e73697665000804c85468652077697468647261776e20616d6f756e742063616e206e6f7420636f7665722074686520666565207061796d656e74444d697373696e674d7063416464726573730009044c4d50432061646472657373206e6f74207365744c4d7063416464724e6f74557064617461626c65000a04784d504320616464726573732063616e206e6f74206265207570646174656430427269646765506175736564000b04404272696467652069732070617573656438427269646765556e706175736564000c044842726964676520697320756e706175736564404d697373696e67466565436f6e666967000d046446656520636f6e666967206f7074696f6e206d697373696e673441737365744e6f74426f756e64000e04804173736574206e6f7420626f756e6420746f2061207265736f757263652069645c50726f706f73616c416c7265616479436f6d706c657465000f049c50726f706f73616c2068617320656974686572206661696c6564206f722073756363656564656444456d70747950726f706f73616c4c6973740010044c50726f706f73616c206c69737420656d707479405472616e736163746f724661696c65640011046c5472616e736163746f72206f7065726174696f6e206661696c65647c496e76616c69644465706f73697444617461496e76616c69644c656e677468001204604465706f7369742064617461206e6f7420636f72726563747c496e76616c69644465706f73697444617461496e76616c6964416d6f756e74001300a0496e76616c69644465706f73697444617461496e76616c6964526563697069656e744c656e677468001400a4496e76616c69644465706f73697444617461526563697069656e744c656e6774684e6f744d6174636800150088496e76616c69644465706f73697444617461496e76616c6964526563697069656e740016005844657374446f6d61696e4e6f74537570706f72746564001704644465737420646f6d61696e206e6f7420737570706f727465644c44657374436861696e49444e6f744d617463680018045c4465737420636861696e206964206e6f74206d61746368544578747261637444657374446174614661696c6564001904884661696c656420746f20657874726163742064657374696e6174696f6e206461746154446563696d616c436f6e76657273696f6e4661696c001a047c4661696c6564206f6e2074686520646563696d616c20636f6e766572746572504465706f7369744e6f6e63654f766572666c6f77001b04ac4465706f736974206e6f6e6365206861732072656163686564206d617820696e74656765722076616c7565744e6f4c6971756964697479486f6c6465724163636f756e74426f756e64001c04b44173736574206e6f7420626f756e6420746f2061206c697175696469747920686f6c646572206163636f756e7434556e696d706c656d656e746564001d045846756e6374696f6e20756e696d706c656d656e746564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e190c0c4466705f73656c665f636f6e7461696e65644c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730165031043616c6c015d03245369676e6174757265010506144578747261011d0c0004004d0c01250173705f72756e74696d653a3a67656e657269633a3a556e636865636b656445787472696e7369633c416464726573732c2043616c6c2c205369676e61747572652c2045787472610a3e00001d0c00000424210c250c290c2d0c310c390c3d0c410c450c00210c10306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000250c10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000290c10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000002d0c10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000310c10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400350c010c4572610000350c102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000390c10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400bd020120543a3a4e6f6e636500003d0c10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000410c086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e74040454000004007501013042616c616e63654f663c543e0000450c08746672616d655f6d657461646174615f686173685f657874656e73696f6e44436865636b4d657461646174614861736804045400000401106d6f6465490c01104d6f64650000490c08746672616d655f6d657461646174615f686173685f657874656e73696f6e104d6f64650001082044697361626c65640000001c456e61626c6564000100004d0c102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730165031043616c6c015d03245369676e6174757265010506144578747261011d0c00040034000000510c085874616e676c655f746573746e65745f72756e74696d651c52756e74696d6500000000c81853797374656d011853797374656d441c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b48617368010104052c308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d62657201002c200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023005030400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000090304000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100780400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100780400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500000103040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500000d03040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01110301541830426c6f636b576569676874732103f901025b1f5d000b00204aa9d10113ffffffffffffffffc2a0a91d00010bd05f9fa62e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf010000c2a0a91d00010bd0e7f110a3011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a74130000000000000040c2a0a91d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746831033000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e742c200001000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687439034040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e3d03c1033874616e676c652d746573746e65743874616e676c652d746573746e6574010000004c0400000100000040df6acb689907609b0400000037e397fc7c91f5e40200000040fe3ad401f8959a060000007ee4fdd3f4b9d4d001000000b18f582993e030f401000000582211f65bb14b8905000000e65b00e46cedd0aa02000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000cbca25e39f14238702000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000ed99c5acb25eedf503000000bd78255d4feeea1f04000000a33d43f58731ad840200000001000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669789102082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e015103002454696d657374616d70012454696d657374616d70080c4e6f7701002c20000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010078040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e0155030004344d696e696d756d506572696f642c20b80b000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e0001105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e015903017c0001a907026052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100ad0704000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e0000000003184173736574730118417373657473101441737365740001040218b107040004542044657461696c73206f6620616e2061737365742e1c4163636f756e740001080202b907bd07040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c020202c907cd0704000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d657461646174610101040218d1075000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e016103018c1c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f73697418400000e8890423c78a000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f73697418400000e8890423c78a00000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f736974426173651840000054129336377505000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f7369745065724279746518400000c16ff2862300000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f736974184000e40b540200000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e01d907042042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200dd07040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200ed07040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c64730101040200f9070400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a657301010402000d080400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e016903019010484578697374656e7469616c4465706f736974184000e40b5402000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e284d6178467265657a657310103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01210805485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100250840000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100290804000000019804604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000628417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000071042616265011042616265442845706f6368496e64657801002c20000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f72697469657301002d080400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100810320000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100810320000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e67650000890304000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f72697469657301002d0804000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510390804000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a65640000410804000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100410104001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f6368537461727401008d034000000000000000000000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e65737301002c20000000000000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000590804000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e666967000059080400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f63687301005d0804002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e01710300103445706f63684475726174696f6e2c20b0040000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652c20701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010e80300000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f776564344d61784e6f6d696e61746f727310100001000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e016108081c4772616e647061011c4772616e6470611c1453746174650100650804000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006908040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f7263656400002c040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c656400008d030400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e74536574496401002c200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e000104052c1004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e2c417574686f72697469657301006d0804000484205468652063757272656e74206c697374206f6620617574686f7269746965732e019503019c0c384d6178417574686f7269746965731010e8030000045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310100001000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e74726965732c20000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e017108091c496e6469636573011c496e646963657304204163636f756e7473000104021075080400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01c90301b0041c4465706f7369741840000064a7b3b6e00d000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e0179080a2444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010010100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301007d08040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040510890804000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010010100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f6600010405108d0804000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405009908e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100780400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000b108040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630b50804000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040630780400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402c430040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e490120546865206048617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01cd0301b4303c456e6163746d656e74506572696f642c20c0a800000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f642c20201c00000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f642c20c08901000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f642c20c0a8000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400000a0dec5adc935360000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f7765647804010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f642c20807000000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f642c20c0a800000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657310106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73101064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473101064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656410106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01b9080b1c436f756e63696c011c436f756e63696c182450726f706f73616c730100bd08040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406305d03040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001040630c108040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010025020400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01e90301c804444d617850726f706f73616c576569676874243c070010a5d4e813ffffffffffffff7f04250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e01c5080c1c56657374696e67011c56657374696e67081c56657374696e670001040200c908040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100d10804000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01ed0301cc08444d696e5665737465645472616e736665721840000010632d5ec76b050000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c0000000001d5080d24456c656374696f6e730124456c656374696f6e73141c4d656d626572730100d90804000c74205468652063757272656e7420656c6563746564206d656d626572732e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100d90804001084205468652063757272656e742072657365727665642072756e6e6572732d75702e00590120496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865bc206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e2843616e646964617465730100d40400185901205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f72d020616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e007c205365636f6e6420656c656d656e7420697320746865206465706f7369742e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e38456c656374696f6e526f756e647301001010000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e18566f74696e670101040500e108840000000000000000000000000000000000000000000000000000000000000000000cb820566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e00c42054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e01f50301d0282050616c6c657449644d0320706872656c65637404d0204964656e74696669657220666f722074686520656c656374696f6e732d70687261676d656e2070616c6c65742773206c6f636b3443616e646964616379426f6e6418400000a0dec5adc935360000000000000004050120486f77206d7563682073686f756c64206265206c6f636b656420757020696e206f7264657220746f207375626d6974206f6e6527732063616e6469646163792e38566f74696e67426f6e6442617365184000005053c91aa974050000000000000010942042617365206465706f736974206173736f636961746564207769746820766f74696e672e00550120546869732073686f756c642062652073656e7369626c79206869676820746f2065636f6e6f6d6963616c6c7920656e73757265207468652070616c6c65742063616e6e6f742062652061747461636b656420627994206372656174696e67206120676967616e746963206e756d626572206f6620766f7465732e40566f74696e67426f6e64466163746f721840000020f84dde700400000000000000000411012054686520616d6f756e74206f6620626f6e642074686174206e65656420746f206265206c6f636b656420666f72206561636820766f746520283332206279746573292e38446573697265644d656d626572731010050000000470204e756d626572206f66206d656d6265727320746f20656c6563742e404465736972656452756e6e65727355701010030000000478204e756d626572206f662072756e6e6572735f757020746f206b6565702e305465726d4475726174696f6e2c20c0890100000000000c510120486f77206c6f6e6720656163682073656174206973206b6570742e205468697320646566696e657320746865206e65787420626c6f636b206e756d62657220617420776869636820616e20656c656374696f6e5d0120726f756e642077696c6c2068617070656e2e2049662073657420746f207a65726f2c206e6f20656c656374696f6e732061726520657665722074726967676572656420616e6420746865206d6f64756c652077696c6c5020626520696e2070617373697665206d6f64652e344d617843616e6469646174657310104000000018e420546865206d6178696d756d206e756d626572206f662063616e6469646174657320696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e003101205768656e2074686973206c696d69742069732072656163686564206e6f206d6f72652063616e646964617465732061726520616363657074656420696e2074686520656c656374696f6e2e244d6178566f7465727310100002000018f820546865206d6178696d756d206e756d626572206f6620766f7465727320746f20616c6c6f7720696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e00d8205768656e20746865206c696d6974206973207265616368656420746865206e657720766f74657273206172652069676e6f7265642e404d6178566f746573506572566f7465721010640000001090204d6178696d756d206e756d62657273206f6620766f7465732070657220766f7465722e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e01e5080e68456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e7450686173650100e80400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e0000e90804000c3d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e006020416c7761797320736f727465642062792073636f72652e20536e617073686f740000f1080400107020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e384465736972656454617267657473000010040010cc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e40536e617073686f744d657461646174610000d1040400109820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e6469636573010001090400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d617000010405100d0904001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f72650000e40400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e01fd0301dc4034556e7369676e656450686173652c2058020000000000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173652c2058020000000000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c64f81000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e384f6666636861696e5265706561742c20050000000000000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792c20feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e7310100a0000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d617857656967687424400b1089578f2e011366666666666666a61494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100300000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e6564526577617264426173651840000064a7b3b6e00d0000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f73697442797465184000008a5d78456301000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e284d617857696e6e6572731010e803000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e67746810100000360000384d696e65724d617857656967687424400b1089578f2e011366666666666666a600544d696e65724d6178566f746573506572566f746572101010000000003c4d696e65724d617857696e6e6572731010e8030000000111090f1c5374616b696e67011c5374616b696e67a03856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100250204000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e0100f810000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c6564676572000104020015090400104501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e007501204e6f74653a20416c6c2074686520726561647320616e64206d75746174696f6e7320746f20746869732073746f72616765202a4d5553542a20626520646f6e65207468726f75676820746865206d6574686f6473206578706f736564e8206279205b605374616b696e674c6564676572605d20746f20656e73757265206461746120616e64206c6f636b20636f6e73697374656e63792e1450617965650001040500f404000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f72730101040500fc0800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f72730001040500290904004c750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468652d01206163636f756e742773205b604e6f6d696e6174696f6e7351756f74613a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e9020496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e2441637469766545726100002d09040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400105501205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b6572730101080505310971010c0000002078204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e002901204e6f74653a20446570726563617465642073696e6365207631342e205573652060457261496e666f6020696e737465616420746f20776f726b2077697468206578706f73757265732e4c457261735374616b6572734f76657276696577000108050531093509040030b82053756d6d617279206f662076616c696461746f72206578706f73757265206174206120676976656e206572612e007101205468697320636f6e7461696e732074686520746f74616c207374616b6520696e20737570706f7274206f66207468652076616c696461746f7220616e64207468656972206f776e207374616b652e20496e206164646974696f6e2c75012069742063616e20616c736f206265207573656420746f2067657420746865206e756d626572206f66206e6f6d696e61746f7273206261636b696e6720746869732076616c696461746f7220616e6420746865206e756d626572206f666901206578706f73757265207061676573207468657920617265206469766964656420696e746f2e20546865207061676520636f756e742069732075736566756c20746f2064657465726d696e6520746865206e756d626572206f66ac207061676573206f6620726577617264732074686174206e6565647320746f20626520636c61696d65642e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742eac2053686f756c64206f6e6c79206265206163636573736564207468726f7567682060457261496e666f602e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206f766572766965772069732072657475726e65642e48457261735374616b657273436c69707065640101080505310971010c000000409820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e006501204e6f74653a205468697320697320646570726563617465642c2073686f756c64206265207573656420617320726561642d6f6e6c7920616e642077696c6c2062652072656d6f76656420696e20746865206675747572652e3101204e657720604578706f737572656073206172652073746f72656420696e2061207061676564206d616e6e657220696e2060457261735374616b65727350616765646020696e73746561642e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865a82060543a3a4d61784578706f737572655061676553697a65602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049742069732072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e002901204e6f74653a20446570726563617465642073696e6365207631342e205573652060457261496e666f6020696e737465616420746f20776f726b2077697468206578706f73757265732e40457261735374616b657273506167656400010c05050539093d09040018c020506167696e61746564206578706f73757265206f6620612076616c696461746f7220617420676976656e206572612e0071012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e2c207468656e207374617368206163636f756e7420616e642066696e616c6c79d42074686520706167652e2053686f756c64206f6e6c79206265206163636573736564207468726f7567682060457261496e666f602e00d4205468697320697320636c6561726564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e38436c61696d65645265776172647301010805053109ed04040018dc20486973746f7279206f6620636c61696d656420706167656420726577617264732062792065726120616e642076616c696461746f722e0069012054686973206973206b657965642062792065726120616e642076616c696461746f72207374617368207768696368206d61707320746f2074686520736574206f66207061676520696e6465786573207768696368206861766538206265656e20636c61696d65642e00cc2049742069732072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e484572617356616c696461746f72507265667301010805053109fc0800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4c4572617356616c696461746f7252657761726400010405101804000c2d012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510410914000000000008d0205265776172647320666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b6501010405101840000000000000000000000000000000000811012054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100050104000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e0100f810000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405105109040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100590904001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e457261000108050531096109040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505310918040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e73000104050065090400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c617368010104054d096909800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301006d09040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c640000990204000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e01e50401f01830486973746f72794465707468101050000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602c4501206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c2060436c61696d656452657761726473602c2060457261735374616b6572735061676564602c5c2060457261735374616b6572734f76657276696577602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563602d01206974656d20605374616b696e674c65646765722e6c65676163795f636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010030000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10100e00000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e10100a000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e4c4d61784578706f737572655061676553697a651010400000002cb020546865206d6178696d756d2073697a65206f6620656163682060543a3a4578706f7375726550616765602e00290120416e20604578706f737572655061676560206973207765616b6c7920626f756e64656420746f2061206d6178696d756d206f6620604d61784578706f737572655061676553697a656030206e6f6d696e61746f72732e00210120466f72206f6c646572206e6f6e2d7061676564206578706f737572652c206120726577617264207061796f757420776173207265737472696374656420746f2074686520746f70210120604d61784578706f737572655061676553697a6560206e6f6d696e61746f72732e205468697320697320746f206c696d69742074686520692f6f20636f737420666f722074686548206e6f6d696e61746f72207061796f75742e005901204e6f74653a20604d61784578706f737572655061676553697a6560206973207573656420746f20626f756e642060436c61696d6564526577617264736020616e6420697320756e7361666520746f207265647563659020776974686f75742068616e646c696e6720697420696e2061206d6967726174696f6e2e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e017509101c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010025020400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010078040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010079090400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100ed040400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050009050400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405810900040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e010505010901000189091128486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e7300010405108d090400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e676500005d09040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c61737429000000001220547265617375727901205472656173757279183450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051091090400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301009509040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e285370656e64436f756e74010010100000000004a42054686520636f756e74206f66207370656e647320746861742068617665206265656e206d6164652e185370656e647300010405109909040004d0205370656e647320746861742068617665206265656e20617070726f76656420616e64206265696e672070726f6365737365642e011905010d01203050726f706f73616c426f6e64d9011050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d18400000a0dec5adc9353600000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756db9060400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f642c204038000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726ed90110000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964a1092070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e305061796f7574506572696f642c200a000000000000000419012054686520706572696f6420647572696e6720776869636820616e20617070726f766564207472656173757279207370656e642068617320746f20626520636c61696d65642e01a5091320426f756e746965730120426f756e74696573102c426f756e7479436f756e74010010100000000004c0204e756d626572206f6620626f756e74792070726f706f73616c7320746861742068617665206265656e206d6164652e20426f756e746965730001040510a9090400047820426f756e7469657320746861742068617665206265656e206d6164652e48426f756e74794465736372697074696f6e730001040510b1090400048020546865206465736372697074696f6e206f66206561636820626f756e74792e3c426f756e7479417070726f76616c7301009509040004ec20426f756e747920696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f74207965742066756e6465642e0121050111012444426f756e74794465706f736974426173651840000064a7b3b6e00d000000000000000004e82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120626f756e74792070726f706f73616c2e60426f756e74794465706f7369745061796f757444656c61792c204038000000000000045901205468652064656c617920706572696f6420666f72207768696368206120626f756e74792062656e6566696369617279206e65656420746f2077616974206265666f726520636c61696d20746865207061796f75742e48426f756e7479557064617465506572696f642c208013030000000000046c20426f756e7479206475726174696f6e20696e20626c6f636b732e6043757261746f724465706f7369744d756c7469706c696572d9011020a10700101901205468652063757261746f72206465706f7369742069732063616c63756c6174656420617320612070657263656e74616765206f66207468652063757261746f72206665652e0039012054686973206465706f73697420686173206f7074696f6e616c20757070657220616e64206c6f77657220626f756e64732077697468206043757261746f724465706f7369744d61786020616e6454206043757261746f724465706f7369744d696e602e4443757261746f724465706f7369744d6178b9064401000010632d5ec76b0500000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4443757261746f724465706f7369744d696eb9064401000064a7b3b6e00d0000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e48426f756e747956616c75654d696e696d756d18400000f4448291634500000000000000000470204d696e696d756d2076616c756520666f72206120626f756e74792e48446174614465706f73697450657242797465184000008a5d7845630100000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e4c4d6178696d756d526561736f6e4c656e67746810102c0100000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756501b50914344368696c64426f756e7469657301344368696c64426f756e7469657314404368696c64426f756e7479436f756e7401001010000000000480204e756d626572206f6620746f74616c206368696c6420626f756e746965732e4c506172656e744368696c64426f756e74696573010104051010100000000008b0204e756d626572206f66206368696c6420626f756e746965732070657220706172656e7420626f756e74792ee0204d6170206f6620706172656e7420626f756e747920696e64657820746f206e756d626572206f66206368696c6420626f756e746965732e344368696c64426f756e7469657300010805055d09b90904000494204368696c6420626f756e7469657320746861742068617665206265656e2061646465642e5c4368696c64426f756e74794465736372697074696f6e730001040510b1090400049820546865206465736372697074696f6e206f662065616368206368696c642d626f756e74792e4c4368696c6472656e43757261746f72466565730101040510184000000000000000000000000000000000040101205468652063756d756c6174697665206368696c642d626f756e74792063757261746f722066656520666f72206561636820706172656e7420626f756e74792e01250501150108644d61784163746976654368696c64426f756e7479436f756e74101005000000041d01204d6178696d756d206e756d626572206f66206368696c6420626f756e7469657320746861742063616e20626520616464656420746f206120706172656e7420626f756e74792e5c4368696c64426f756e747956616c75654d696e696d756d1840000064a7b3b6e00d00000000000000000488204d696e696d756d2076616c756520666f722061206368696c642d626f756e74792e01c1091520426167734c6973740120426167734c6973740c244c6973744e6f6465730001040500c50904000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c69737442616773000104052cc90904000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01290501190104344261675468726573686f6c6473cd090919210300407a10f35a00006a70ccd4a96000009ef3397fbc660000a907ccd5306d00003d9a67fb0c740000a9bfa275577b0000a6fdf73217830000034f5d91538b0000132445651494000078081001629d00000302f63c45a70000392e6f7fc7b10000f59c23c6f2bc00004ae76aafd1c80000598a64846fd50000129fb243d8e200003f22e1ac18f1000033a4844c3e000100e2e51b895710010076a2c0b0732101006789b407a3330100793ed8d7f646010078131b81815b01000c1cf38a567101004437eeb68a8801009eb56d1434a10100335e9f156abb010067c3c7a545d701003218f340e1f40100de0b230d59140200699c11f5ca350200ad50a2c4565902009ae41c471e7f0200d0244e6745a70200f984ad51f2d10200ace7a7984dff0200a118325b822f0300ffa4c76dbe620300580bfd8532990300a9afce6812d30300109ad81b95100400d9caa519f551040038df488970970400bee1727949e10400cc73401fc62f0500b304f91831830500828bffb4d9db05001235383d143a0600a5b42a473a9e060036662d09ab080700f73aeab4cb790700b87e93d707f20700ffec23c0d1710800b84b0beca2f90800c9dcae7afc89090091752ba867230a0064f1cd4f76c60a003609be76c3730b0078655fdff32b0c00a407f5a5b6ef0c0052f61be7c5bf0d00da71bb70e79c0e000de9127eed870f001477987fb7811000ebee65ef328b11001269fe325ca5120033f8428b3fd113008ba57a13fa0f15001b2b60d0ba6216000d1d37d0c3ca17006c64fa5c6b4919002622c7411de01a00045bb9245c901c00233d83f6c25b1e00c8771c79064420003013fddef64a2200aa8b6e848172240082c096c4b2bc260016a3faebb72b29008296524ae1c12b00a636a865a4812e00d0e2d4509e6d31009c0a9a2796883400e4faafb27fd53700e6e64d367e573b000e4bd66de7113f0088b17db746084300b07def72603e470034de249635b84b00d48bd57b077a5000d0bd20ef5b885500b8f0467801e85a0010f88aee139e60003892925301b066009c95e4fc8e236d00b4126d10dffe730028b43e5976487b00a08a1c7a42078300b09ab083a0428b002846b2f463029400c861a42ade4e9d0050d23d4ae630a700805101a7e1b1b10038e501b2ccdbbc002016527844b9c800388924ba9055d50070ca35a4aebce200805fb1355cfbf0008035685d241f0001a0c3dcd96b361001d07862e87e50210160e852d09f7d330190662c5816cf460110274c3340575b01804be277a22971013082b92dfc5a880180d276075a01a101b0f511592b34bb014031745f580cd701802f6cee59a4f40140ff799b521814026075607d2986350260fde999a60d590200e5e71c91d07e02c0df2575cff2a602a07fd975899ad102a067009d4cf0fe0220dc29a1321f2f0320ff526b0a5562038088caa383c29803e05683fb5c9bd203401dd75d9516100400317e39a06e5104c0b071129de1960480b48c9192b1e00480e8124aad242f05c007ca7082858205007c13c45623db0540836fe869523906c0700f81466c9d0640f09c5017d00707c0e624b301e37807c0332ac78510f10780074ca1e4ca700800d5a9eb8c8bf80800a849588ed3880900804254142c220a80a25170e826c50a00e8d5fafc5e720b801df64e00792a0c80d4fe64f923ee0c006dd038ee19be0d001e90a494209b0e0010bf570e0a860f00da6a9db0b57f1000bf64afd810891100bb5b60cd17a31200f963f3aed6ce1300d5f004766a0d1500e099770202601600103d663bdfc71700de3e2d4158461900ecdbadb2d8dc1a0045c70007e38c1c00b8bde0fc11581e00ba5c2a211a402000407de46dcb462200dea55b03136e2400aaf1f3fcfcb7260014226f63b62629006492803e8fbc2b008486a6c7fc7b2e002cf05fc09b673100da63f7ed32823400f0b13fbdb5ce3700f291c41047503b00422a1a3c3c0a3f002c24212f20004300ac9342d4b6354700cc6ed7a400af4b00c4d022773e70500020017d89f57d5500f86387cef3dc5a008c4c7f7e54926000206207f284a36600cc1e05cb49166d00b42a7a70c4f07300d43a90e278397b0038f461ec53f78200a07264b9b1318b0048c9b3d464f09300007fe998bd3b9d0010058f17921ca70000dfaf7f469cb100e80c880bd6c4bc0058bdcb7ddca0c80038d18d37a03bd50030d55bf01ca1e200704ac01a0fdef0ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01d109163c4e6f6d696e6174696f6e506f6f6c73013c4e6f6d696e6174696f6e506f6f6c735440546f74616c56616c75654c6f636b65640100184000000000000000000000000000000000148c205468652073756d206f662066756e6473206163726f737320616c6c20706f6f6c732e0071012054686973206d69676874206265206c6f77657220627574206e6576657220686967686572207468616e207468652073756d206f662060746f74616c5f62616c616e636560206f6620616c6c205b60506f6f6c4d656d62657273605d590120626563617573652063616c6c696e672060706f6f6c5f77697468647261775f756e626f6e64656460206d696768742064656372656173652074686520746f74616c207374616b65206f662074686520706f6f6c277329012060626f6e6465645f6163636f756e746020776974686f75742061646a757374696e67207468652070616c6c65742d696e7465726e616c2060556e626f6e64696e67506f6f6c6027732e2c4d696e4a6f696e426f6e640100184000000000000000000000000000000000049c204d696e696d756d20616d6f756e7420746f20626f6e6420746f206a6f696e206120706f6f6c2e344d696e437265617465426f6e6401001840000000000000000000000000000000001ca0204d696e696d756d20626f6e6420726571756972656420746f20637265617465206120706f6f6c2e00650120546869732069732074686520616d6f756e74207468617420746865206465706f7369746f72206d7573742070757420617320746865697220696e697469616c207374616b6520696e2074686520706f6f6c2c20617320616e8820696e6469636174696f6e206f662022736b696e20696e207468652067616d65222e0069012054686973206973207468652076616c756520746861742077696c6c20616c7761797320657869737420696e20746865207374616b696e67206c6564676572206f662074686520706f6f6c20626f6e646564206163636f756e7480207768696c6520616c6c206f74686572206163636f756e7473206c656176652e204d6178506f6f6c730000100400086901204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e20706f6f6c7320746861742063616e2065786973742e20496620604e6f6e65602c207468656e20616e20756e626f756e646564206e756d626572206f664420706f6f6c732063616e2065786973742e384d6178506f6f6c4d656d626572730000100400084901204d6178696d756d206e756d626572206f66206d656d6265727320746861742063616e20657869737420696e207468652073797374656d2e20496620604e6f6e65602c207468656e2074686520636f756e74b8206d656d6265727320617265206e6f7420626f756e64206f6e20612073797374656d20776964652062617369732e544d6178506f6f6c4d656d62657273506572506f6f6c0000100400084101204d6178696d756d206e756d626572206f66206d656d626572732074686174206d61792062656c6f6e6720746f20706f6f6c2e20496620604e6f6e65602c207468656e2074686520636f756e74206f66a8206d656d62657273206973206e6f7420626f756e64206f6e20612070657220706f6f6c2062617369732e4c476c6f62616c4d6178436f6d6d697373696f6e0000f804000c690120546865206d6178696d756d20636f6d6d697373696f6e20746861742063616e2062652063686172676564206279206120706f6f6c2e2055736564206f6e20636f6d6d697373696f6e207061796f75747320746f20626f756e64250120706f6f6c20636f6d6d697373696f6e73207468617420617265203e2060476c6f62616c4d6178436f6d6d697373696f6e602c206e65636573736172792069662061206675747572650d012060476c6f62616c4d6178436f6d6d697373696f6e60206973206c6f776572207468616e20736f6d652063757272656e7420706f6f6c20636f6d6d697373696f6e732e2c506f6f6c4d656d626572730001040500d90904000c4020416374697665206d656d626572732e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e54436f756e746572466f72506f6f6c4d656d62657273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c426f6e646564506f6f6c730001040510ed09040004682053746f7261676520666f7220626f6e64656420706f6f6c732e54436f756e746572466f72426f6e646564506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c526577617264506f6f6c730001040510010a04000875012052657761726420706f6f6c732e2054686973206973207768657265207468657265207265776172647320666f72206561636820706f6f6c20616363756d756c6174652e205768656e2061206d656d62657273207061796f7574206973590120636c61696d65642c207468652062616c616e636520636f6d6573206f757420666f207468652072657761726420706f6f6c2e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e54436f756e746572466f72526577617264506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c537562506f6f6c7353746f726167650001040510050a04000819012047726f757073206f6620756e626f6e64696e6720706f6f6c732e20456163682067726f7570206f6620756e626f6e64696e6720706f6f6c732062656c6f6e677320746f2061290120626f6e64656420706f6f6c2c2068656e636520746865206e616d65207375622d706f6f6c732e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e64436f756e746572466f72537562506f6f6c7353746f72616765010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204d65746164617461010104051059010400045c204d6574616461746120666f722074686520706f6f6c2e48436f756e746572466f724d65746164617461010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170284c617374506f6f6c4964010010100000000004d0204576657220696e6372656173696e67206e756d626572206f6620616c6c20706f6f6c73206372656174656420736f206661722e4c52657665727365506f6f6c49644c6f6f6b7570000104050010040010dc20412072657665727365206c6f6f6b75702066726f6d2074686520706f6f6c2773206163636f756e7420696420746f206974732069642e0055012054686973206973206f6e6c79207573656420666f7220736c617368696e672e20496e20616c6c206f7468657220696e7374616e6365732c2074686520706f6f6c20696420697320757365642c20616e6420746865c0206163636f756e7473206172652064657465726d696e6973746963616c6c7920646572697665642066726f6d2069742e74436f756e746572466f7252657665727365506f6f6c49644c6f6f6b7570010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617040436c61696d5065726d697373696f6e73010104050045050400040101204d61702066726f6d206120706f6f6c206d656d626572206163636f756e7420746f207468656972206f7074656420636c61696d207065726d697373696f6e2e012d05011d010c2050616c6c65744964a1092070792f6e6f706c73048420546865206e6f6d696e6174696f6e20706f6f6c27732070616c6c65742069642e484d6178506f696e7473546f42616c616e636508040a301d0120546865206d6178696d756d20706f6f6c20706f696e74732d746f2d62616c616e636520726174696f207468617420616e20606f70656e6020706f6f6c2063616e20686176652e005501205468697320697320696d706f7274616e7420696e20746865206576656e7420736c617368696e672074616b657320706c61636520616e642074686520706f6f6c277320706f696e74732d746f2d62616c616e63657c20726174696f206265636f6d65732064697370726f706f7274696f6e616c2e006501204d6f72656f7665722c20746869732072656c6174657320746f207468652060526577617264436f756e7465726020747970652061732077656c6c2c206173207468652061726974686d65746963206f7065726174696f6e7355012061726520612066756e6374696f6e206f66206e756d626572206f6620706f696e74732c20616e642062792073657474696e6720746869732076616c756520746f20652e672e2031302c20796f7520656e73757265650120746861742074686520746f74616c206e756d626572206f6620706f696e747320696e207468652073797374656d20617265206174206d6f73742031302074696d65732074686520746f74616c5f69737375616e6365206f669c2074686520636861696e2c20696e20746865206162736f6c75746520776f72736520636173652e00490120466f7220612076616c7565206f662031302c20746865207468726573686f6c6420776f756c64206265206120706f6f6c20706f696e74732d746f2d62616c616e636520726174696f206f662031303a312e310120537563682061207363656e6172696f20776f756c6420616c736f20626520746865206571756976616c656e74206f662074686520706f6f6c206265696e672039302520736c61736865642e304d6178556e626f6e64696e67101008000000043d0120546865206d6178696d756d206e756d626572206f662073696d756c74616e656f757320756e626f6e64696e67206368756e6b7320746861742063616e20657869737420706572206d656d6265722e011d0a17245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e636500002c040000184167656e6461010104052c250a0400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b757000010405043d01040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01490501390108344d6178696d756d57656967687424400b00806e87740113cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101000020000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e01350a1820507265696d6167650120507265696d6167650c24537461747573466f720001040630390a0400049020546865207265717565737420737461747573206f66206120676976656e20686173682e4052657175657374537461747573466f720001040630410a0400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104068d094d0a0400000151050145010001510a19204f6666656e63657301204f6666656e636573081c5265706f7274730001040530550a040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e6465780101080505590ac9010400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e0001490100001a1c54785061757365011c54785061757365042c50617573656443616c6c7300010402550184040004b42054686520736574206f662063616c6c73207468617420617265206578706c696369746c79207061757365642e01550501510104284d61784e616d654c656e1010000100000c2501204d6178696d756d206c656e67746820666f722070616c6c6574206e616d6520616e642063616c6c206e616d65205343414c4520656e636f64656420737472696e67206e616d65732e00a820544f4f204c4f4e47204e414d45532057494c4c2042452054524541544544204153205041555345442e015d0a1b20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201002c2000000000000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b6579730100610a040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e4852656365697665644865617274626561747300010805055d0978040004350120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e646578602e38417574686f726564426c6f636b730101080505310910100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e015905015d010440556e7369676e65645072696f726974792c20ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01690a1c204964656e7469747901204964656e746974791c284964656e746974794f6600010405006d0a040010690120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e204669727374206974656d20697320746865e020726567697374726174696f6e2c207365636f6e6420697320746865206163636f756e742773207072696d61727920757365726e616d652e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f660001040200f9050400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500850a44000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e285265676973747261727301008d0a0400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e4c557365726e616d65417574686f72697469657300010405009d0a040004f42041206d6170206f6620746865206163636f756e74732077686f2061726520617574686f72697a656420746f206772616e7420757365726e616d65732e444163636f756e744f66557365726e616d65000104028501000400146d012052657665727365206c6f6f6b75702066726f6d2060757365726e616d656020746f2074686520604163636f756e7449646020746861742068617320726567697374657265642069742e205468652076616c75652073686f756c6465012062652061206b657920696e2074686520604964656e746974794f6660206d61702c20627574206974206d6179206e6f742069662074686520757365722068617320636c6561726564207468656972206964656e746974792e006901204d756c7469706c6520757365726e616d6573206d6179206d617020746f207468652073616d6520604163636f756e744964602c2062757420604964656e746974794f66602077696c6c206f6e6c79206d617020746f206f6e6548207072696d61727920757365726e616d652e4050656e64696e67557365726e616d6573000104028501a50a0400186d0120557365726e616d6573207468617420616e20617574686f7269747920686173206772616e7465642c20627574207468617420746865206163636f756e7420636f6e74726f6c6c657220686173206e6f7420636f6e6669726d65647101207468617420746865792077616e742069742e2055736564207072696d6172696c7920696e2063617365732077686572652074686520604163636f756e744964602063616e6e6f742070726f766964652061207369676e61747572655d012062656361757365207468657920617265206120707572652070726f78792c206d756c74697369672c206574632e20496e206f7264657220746f20636f6e6669726d2069742c20746865792073686f756c642063616c6c6c205b6043616c6c3a3a6163636570745f757365726e616d65605d2e001d01204669727374207475706c65206974656d20697320746865206163636f756e7420616e64207365636f6e642069732074686520616363657074616e636520646561646c696e652e016905018101203042617369634465706f7369741840000064a7b3b6e00d000000000000000004d82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e746974792e2c427974654465706f7369741840000064a7b3b6e00d0000000000000000041d012054686520616d6f756e742068656c64206f6e206465706f7369742070657220656e636f646564206279746520666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f73697418400000d1d21fe5ea6b05000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e344d617852656769737472617273101014000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e6450656e64696e67557365726e616d6545787069726174696f6e2c20c08901000000000004150120546865206e756d626572206f6620626c6f636b732077697468696e207768696368206120757365726e616d65206772616e74206d7573742062652061636365707465642e3c4d61785375666669784c656e677468101007000000048020546865206d6178696d756d206c656e677468206f662061207375666669782e444d6178557365726e616d654c656e67746810102000000004610120546865206d6178696d756d206c656e677468206f66206120757365726e616d652c20696e636c7564696e67206974732073756666697820616e6420616e792073797374656d2d61646465642064656c696d69746572732e01a90a1d1c5574696c69747900011106018901044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01ad0a1e204d756c746973696701204d756c746973696704244d756c7469736967730001080502b10ab50a040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e012906018d010c2c4465706f736974426173651840000068cd83c1fd77050000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f721840000020f84dde700400000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01b90a1f20457468657265756d0120457468657265756d141c50656e64696e670100bd0a040004d02043757272656e74206275696c64696e6720626c6f636b2773207472616e73616374696f6e7320616e642072656365697074732e3043757272656e74426c6f636b0000e10a04000470205468652063757272656e7420457468657265756d20626c6f636b2e3c43757272656e7452656365697074730000f50a0400047c205468652063757272656e7420457468657265756d2072656365697074732e6843757272656e745472616e73616374696f6e53746174757365730000f90a04000488205468652063757272656e74207472616e73616374696f6e2073746174757365732e24426c6f636b4861736801010405d10130800000000000000000000000000000000000000000000000000000000000000000000131060195010001fd0a200c45564d010c45564d10304163636f756e74436f64657301010402990134040000504163636f756e74436f6465734d65746164617461000104029901010b0400003c4163636f756e7453746f72616765730101080202050b30800000000000000000000000000000000000000000000000000000000000000000002053756963696465640001040299018404000001590601c1010001090b212845564d436861696e4964012845564d436861696e4964041c436861696e496401002c2000000000000000000448205468652045564d20636861696e2049442e00000000222844796e616d6963466565012844796e616d6963466565082c4d696e47617350726963650100d10180000000000000000000000000000000000000000000000000000000000000000000445461726765744d696e47617350726963650000d101040000016906000000231c42617365466565011c426173654665650834426173654665655065724761730100d1018040420f00000000000000000000000000000000000000000000000000000000000028456c61737469636974790100d9011048e8010000016d0601cd0100002444486f7466697853756666696369656e7473000171060000010d0b2518436c61696d730118436c61696d731418436c61696d7300010406e1011804000014546f74616c01001840000000000000000000000000000000000030457870697279436f6e6669670000110b040004c82045787069727920626c6f636b20616e64206163636f756e7420746f206465706f73697420657870697265642066756e64731c56657374696e6700010406e1019106040010782056657374696e67207363686564756c6520666f72206120636c61696d2e0d012046697273742062616c616e63652069732074686520746f74616c20616d6f756e7420746861742073686f756c642062652068656c6420666f722076657374696e672ee4205365636f6e642062616c616e636520697320686f77206d7563682073686f756c6420626520756e6c6f636b65642070657220626c6f636b2ecc2054686520626c6f636b206e756d626572206973207768656e207468652076657374696e672073686f756c642073746172742e1c5369676e696e6700010406e101a106040004c0205468652073746174656d656e74206b696e642074686174206d757374206265207369676e65642c20696620616e792e01790601dd010418507265666978346c68436c61696d20544e547320746f20746865206163636f756e743a0001150b2614526f6c65730114526f6c65731c184c65646765720001040200190b0400041901204d61702066726f6d20616c6c2022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e4c4163636f756e74526f6c65734d617070696e670101040200390b04000490204d617070696e67206f66207265736f7572636520746f2062726964676520696e646578404d696e52657374616b696e67426f6e6401001840e803000000000000000000000000000004f420546865206d696e696d756d207265207374616b696e6720626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c652e30546f74616c52657374616b650100184000000000000000000000000000000000049c2054686520746f74616c2072657374616b6520616d6f756e7420696e207468652073797374656d4856616c696461746f724a6f6273496e45726101003d0b040004cc20546865206e756d626572206f66206a6f627320636f6d706c6574656420627920612076616c696461746f7220696e206572615c4572617352657374616b65526577617264506f696e74730101040510410914000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e4441637469766552657374616b657245726100002d0904000cd820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e00d02054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e01a50601e90104484d6178526f6c65735065724163636f756e74101002000000045c204d617820726f6c657320706572206163636f756e742e01410b27104a6f627301104a6f62731c345375626d69747465644a6f6273000108050201027502040000445375626d69747465644a6f6273526f6c65000104052ced01040000304b6e6f776e526573756c747300010805020102450b0400005056616c696461746f724a6f6249644c6f6f6b75700001040500490b0400004056616c696461746f7252657761726473000104050018040000244e6578744a6f62496401002c200000000000000000044c20546865206a6f622d69642073746f726167653c54696d65466565506572426c6f636b01001840000000000000000000000000000000000001c506010502042050616c6c65744964a1092070792f6a6f6273730480206050616c6c657449646020666f7220746865206a6f62732070616c6c65742e014d0b280c446b67010c446b67041c466565496e666f01007d028101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000169070179020001510b29185a6b5361615301185a6b53616153041c466565496e666f0100850201010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016d070181020001550b2a1450726f7879011450726f7879081c50726f786965730101040500590b4400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500690b44000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e017107018902184050726f78794465706f736974426173651840000018e1c095e36c050000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f7218400000e16740659404000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840000018e1c095e36c050000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f7218400000c2cf80ca2809000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e01790b2b504d756c7469417373657444656c65676174696f6e01504d756c7469417373657444656c65676174696f6e1c244f70657261746f727300010405007d0b040004882053746f7261676520666f72206f70657261746f7220696e666f726d6174696f6e2e3043757272656e74526f756e640100101000000000047c2053746f7261676520666f72207468652063757272656e7420726f756e642e1c41745374616b6500010805053109950b040004050120536e617073686f74206f6620636f6c6c61746f722064656c65676174696f6e207374616b6520617420746865207374617274206f662074686520726f756e642e2844656c656761746f72730001040500990b0400048c2053746f7261676520666f722064656c656761746f7220696e666f726d6174696f6e2e2c526577617264506f6f6c730001040518c50b040004742053746f7261676520666f72207468652072657761726420706f6f6c735841737365744c6f6f6b7570526577617264506f6f6c73000104051818040004742053746f7261676520666f72207468652072657761726420706f6f6c734c526577617264436f6e66696753746f726167650000c90b04000499012053746f7261676520666f72207468652072657761726420636f6e66696775726174696f6e2c20776869636820696e636c75646573204150592c2063617020666f72206173736574732c20616e642077686974656c697374656420626c75657072696e74732e0179070195021c544d696e4f70657261746f72426f6e64416d6f756e7418401027000000000000000000000000000004d820546865206d696e696d756d20616d6f756e74206f66207374616b6520726571756972656420666f7220616e206f70657261746f722e444d696e44656c6567617465416d6f756e741840e803000000000000000000000000000004d420546865206d696e696d756d20616d6f756e74206f66207374616b6520726571756972656420666f7220612064656c65676174652e30426f6e644475726174696f6e10100a00000004b020546865206475726174696f6e20666f7220776869636820746865207374616b65206973206c6f636b65642e4c4c656176654f70657261746f727344656c617910100a000000045501204e756d626572206f6620726f756e64732074686174206f70657261746f72732072656d61696e20626f6e646564206265666f726520746865206578697420726571756573742069732065786563757461626c652e544f70657261746f72426f6e644c65737344656c6179101001000000045901204e756d626572206f6620726f756e6473206f70657261746f7220726571756573747320746f2064656372656173652073656c662d7374616b65206d757374207761697420746f2062652065786563757461626c652e504c6561766544656c656761746f727344656c6179101001000000045901204e756d626572206f6620726f756e647320746861742064656c656761746f72732072656d61696e20626f6e646564206265666f726520746865206578697420726571756573742069732065786563757461626c652e5c44656c65676174696f6e426f6e644c65737344656c6179101005000000045501204e756d626572206f6620726f756e647320746861742064656c65676174696f6e20756e7374616b65207265717565737473206d7573742077616974206265666f7265206265696e672065786563757461626c652e01dd0b2c545379676d6141636365737353656772656761746f7201545379676d6141636365737353656772656761746f72043c45787472696e73696341636365737300010405e10b00040008d4204d617070696e67207369676e6174757265206f662065787472696e73696320746f206163636f756e742068617320616363657373a8202870616c6c65745f696e6465782c2065787472696e7369635f6e616d6529203d3e206163636f756e74017d0701a1020001e50b2d505379676d61426173696346656548616e646c657201505379676d61426173696346656548616e646c6572042441737365744665657300010405e90b18040004d8204d617070696e672066756e6769626c6520617373657420696420746f20636f72726573706f6e64696e672066656520616d6f756e7401810701a5020001ed0b2e545379676d6146656548616e646c6572526f7574657201545379676d6146656548616e646c6572526f75746572042c48616e646c65725479706500010405e90bf102040004e82052657475726e20746865204665652068616e646c65722074797065206261736564206f6e20646f6d61696e494420616e64206173736574494401850701ed020001f10b2f645379676d6150657263656e7461676546656548616e646c657201645379676d6150657263656e7461676546656548616e646c6572043041737365744665655261746500010405e90bf50b0400045501204d617070696e672066756e6769626c65206173736574206964207769746820646f6d61696e20696420746f20666565207261746520616e6420697473206c6f77657220626f756e642c207570706572626f756e6401890701f5020001f90b302c5379676d61427269646765012c5379676d6142726964676518344465706f736974436f756e747301010405082c200000000000000000047c204465706f73697420636f756e746572206f66206465737420646f6d61696e20497350617573656401010405087804000c5c2042726964676520506175736520696e64696361746f72a82042726964676520697320756e70617573656420696e697469616c6c792c20756e74696c2070617573652101204166746572206d706320616464726573732073657475702c206272696467652073686f756c642062652070617573656420756e74696c20726561647920746f20756e70617573651c4d706341646472010091075000000000000000000000000000000000000000000450205072652d736574204d5043206164647265737328557365644e6f6e6365730101080505fd0b2c200000000000000000045101204d61726b20776865746865722061206465706f736974206e6f6e63652077617320757365642e205573656420746f206d61726b20657865637574696f6e20737461747573206f6620612070726f706f73616c2e3444657374446f6d61696e49647301010405087804000474204d61726b20737570706f72746564206465737420646f6d61696e49443044657374436861696e4964730001040508d10104000c2901204d61726b2074686520706169727320666f7220737570706f72746564206465737420646f6d61696e494420776974682069747320636f72726573706f6e64696e6720636861696e49446d012054686520636861696e4944206973206e6f74206469726563746c79207573656420696e2070616c6c65742c2074686973206d61702069732064657369676e6564206d6f72652061626f7574207265636865636b696e67207468652420646f6d61696e4944018d0701f902145c5472616e73666572526573657276654163636f756e7473010cd5030c00006d6f646c7379676d612f30310000000000000000000000000000000000000000010300a10f06057379676d61000000000000000000000000000000000000000000000000000000060673796775736400000000000000000000000000000000000000000000000000006d6f646c7379676d612f30310100000000000000000000000000000000000000010300511f06057379676d61000000000000000000000000000000000000000000000000000000060370686100000000000000000000000000000000000000000000000000000000006d6f646c7379676d612f3031010000000000000000000000000000000000000004010120427269646765207472616e736665722072657365727665206163636f756e7473206d617070696e6720776974682064657369676e61746564206173736574737044657374566572696679696e67436f6e7472616374416464726573739901506cde2cd82a4f8b74693ff5e194c19ca08c2d1c6808882045495037313220566572696679696e6720636f6e74726163742061646472657373a42054686973206973207573656420696e20454950373132207479706564206461746120646f6d61696e34454950373132436861696e4944d10180d70e000000000000000000000000000000000000000000000000000000000000083c2050616c6c657420436861696e4944a42054686973206973207573656420696e20454950373132207479706564206461746120646f6d61696e44466565526573657276654163636f756e74008064646464646464646464646464646464646464646464646464646464646464640450204665652072657365727665206163636f756e74345265736f7572636550616972730d0cd5030c00000000000000000000000000000000000000000000000000000000000000002000010300a10f06057379676d61000000000000000000000000000000000000000000000000000000060673796775736400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010300511f06057379676d610000000000000000000000000000000000000000000000000000000603706861000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000474204173736574496420616e64205265736f75726365496420706169727301150c31190c042448436865636b4e6f6e5a65726f53656e646572210c8440436865636b5370656356657273696f6e250c1038436865636b547856657273696f6e290c1030436865636b47656e657369732d0c3038436865636b4d6f7274616c697479310c3028436865636b4e6f6e6365390c842c436865636b5765696768743d0c84604368617267655472616e73616374696f6e5061796d656e74410c8444436865636b4d6574616461746148617368450c4101510c' diff --git a/types/src/metadata/static-type.ts b/types/src/metadata/static-type.ts deleted file mode 100644 index 3c2445a03..000000000 --- a/types/src/metadata/static-type.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default - '0x6d6574610e1d0a000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000200c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6524010c75363400012870726f6f665f73697a6524010c75363400002400000628002800000506002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c011470686173652102011450686173650001146576656e744c010445000118746f70696373250201185665633c543e00004c086474616e676c655f7374616e64616c6f6e655f72756e74696d653052756e74696d654576656e740001b41853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e000000105375646f040074016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0002002042616c616e636573040084017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000400485472616e73616374696f6e5061796d656e7404008c01a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0005001c4772616e647061040090015470616c6c65745f6772616e6470613a3a4576656e740008000c444b470400a4018c70616c6c65745f646b675f6d657461646174613a3a4576656e743c52756e74696d653e00090030444b4750726f706f73616c730400c0019070616c6c65745f646b675f70726f706f73616c733a3a4576656e743c52756e74696d653e000a0048444b4750726f706f73616c48616e646c65720400d001ac70616c6c65745f646b675f70726f706f73616c5f68616e646c65723a3a4576656e743c52756e74696d653e000b003842726964676552656769737472790400e401290170616c6c65745f6272696467655f72656769737472793a3a4576656e743c52756e74696d652c2070616c6c65745f6272696467655f72656769737472793a3a496e7374616e6365310a3e000c001c496e64696365730400e8017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e000d002444656d6f63726163790400ec018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e000e001c436f756e63696c0400010101fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e000f001c56657374696e6704000501017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e00100018436c61696d7304000901018c70616c6c65745f65636473615f636c61696d733a3a4576656e743c52756e74696d653e00110024456c656374696f6e730400150101a470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4576656e743c52756e74696d653e00120068456c656374696f6e50726f76696465724d756c746950686173650400210101d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e0013001c5374616b696e6704003501017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e0014001c53657373696f6e04004901015470616c6c65745f73657373696f6e3a3a4576656e7400150020547265617375727904004d01017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e00170020426f756e7469657304005101017c70616c6c65745f626f756e746965733a3a4576656e743c52756e74696d653e001800344368696c64426f756e7469657304005501019470616c6c65745f6368696c645f626f756e746965733a3a4576656e743c52756e74696d653e00190020426167734c69737404005901018070616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d653e001a003c4e6f6d696e6174696f6e506f6f6c7304005d01019c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a4576656e743c52756e74696d653e001b00245363686564756c657204006501018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e001c0020507265696d61676504007101017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e001d00204f6666656e63657304007501015870616c6c65745f6f6666656e6365733a3a4576656e74001e002c486173686572426e32353404007d0101dc70616c6c65745f6861736865723a3a4576656e743c52756e74696d652c2070616c6c65745f6861736865723a3a496e7374616e6365313e001f00344173736574526567697374727904008101019470616c6c65745f61737365745f72656769737472793a3a4576656e743c52756e74696d653e00200018546f6b656e7304009901016c6f726d6c5f746f6b656e733a3a4576656e743c52756e74696d653e00220030546f6b656e577261707065720400a101019070616c6c65745f746f6b656e5f777261707065723a3a4576656e743c52756e74696d653e002300484d697865725665726966696572426e3235340400a50101ec70616c6c65745f76657269666965723a3a4576656e743c52756e74696d652c2070616c6c65745f76657269666965723a3a496e7374616e6365313e0024003c4d65726b6c6554726565426e3235340400a90101bc70616c6c65745f6d743a3a4576656e743c52756e74696d652c2070616c6c65745f6d743a3a496e7374616e6365313e002500444c696e6b61626c6554726565426e3235340400b10101150170616c6c65745f6c696e6b61626c655f747265653a3a4576656e743c52756e74696d652c2070616c6c65745f6c696e6b61626c655f747265653a3a496e7374616e6365313e002600284d69786572426e3235340400b50101d470616c6c65745f6d697865723a3a4576656e743c52756e74696d652c2070616c6c65745f6d697865723a3a496e7374616e6365313e0027003c5369676e61747572654272696467650400b90101310170616c6c65745f7369676e61747572655f6272696467653a3a4576656e743c52756e74696d652c2070616c6c65745f7369676e61747572655f6272696467653a3a0a496e7374616e6365313e0028003056416e63686f72426e3235340400c10101e470616c6c65745f76616e63686f723a3a4576656e743c52756e74696d652c2070616c6c65745f76616e63686f723a3a496e7374616e6365313e0029004c56416e63686f7248616e646c6572426e3235340400cd0101290170616c6c65745f76616e63686f725f68616e646c65723a3a4576656e743c52756e74696d652c2070616c6c65745f76616e63686f725f68616e646c65723a3a496e7374616e6365310a3e002a004c546f6b656e5772617070657248616e646c65720400d10101b070616c6c65745f746f6b656e5f777261707065725f68616e646c65723a3a4576656e743c52756e74696d653e002b00284b657953746f726167650400d50101050170616c6c65745f6b65795f73746f726167653a3a4576656e743c52756e74696d652c2070616c6c65745f6b65795f73746f726167653a3a496e7374616e6365313e002c003c56416e63686f7256657269666965720400dd01019c70616c6c65745f76616e63686f725f76657269666965723a3a4576656e743c52756e74696d653e002d00405472616e73616374696f6e50617573650400e10101a070616c6c65745f7472616e73616374696f6e5f70617573653a3a4576656e743c52756e74696d653e002e0020496d4f6e6c696e650400e501018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e002f00204964656e7469747904000902017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e0030001c5574696c69747904000d02015470616c6c65745f7574696c6974793a3a4576656e740031002845746832436c69656e740400110201a070616c6c65745f657468325f6c696768745f636c69656e743a3a4576656e743c52756e74696d653e00320000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c747801384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f65728001504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c747801384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780418526573756c74080454017c044501600108084f6b04007c000000000c45727204006000000100007c00000400008004184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000840c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738801185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098814346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e63655374617475730001081046726565000000205265736572766564000100008c0c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909900c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574940134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090994000002980098000004089c28009c0c4c73705f66696e616c6974795f6772616e6470610c617070185075626c696300000400a0013c656432353531393a3a5075626c69630000a00c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000a40c4c70616c6c65745f646b675f6d657461646174611870616c6c6574144576656e74040454000138485075626c69634b65795375626d6974746564080148636f6d707265737365645f7075625f6b657930011c5665633c75383e000150756e636f6d707265737365645f7075625f6b657930011c5665633c75383e0000047043757272656e74207075626c6963206b6579207375626d6974746564584e6578745075626c69634b65795375626d6974746564080148636f6d707265737365645f7075625f6b657930011c5665633c75383e000150756e636f6d707265737365645f7075625f6b657930011c5665633c75383e000104644e657874207075626c6963206b6579207375626d69747465647c4e6578745075626c69634b65795369676e61747572655375626d697474656410012c7075625f6b65795f73696730011c5665633c75383e000148636f6d707265737365645f7075625f6b657930011c5665633c75383e000150756e636f6d707265737365645f7075625f6b657930011c5665633c75383e0001146e6f6e636510010c7533320002048c4e657874207075626c6963206b6579207369676e6174757265207375626d6974746564405075626c69634b65794368616e676564080148636f6d707265737365645f7075625f6b657930011c5665633c75383e000150756e636f6d707265737365645f7075625f6b657930011c5665633c75383e0003046c43757272656e74205075626c6963204b6579204368616e6765642e645075626c69634b65795369676e61747572654368616e67656410012c7075625f6b65795f73696730011c5665633c75383e000148636f6d707265737365645f7075625f6b657930011c5665633c75383e000150756e636f6d707265737365645f7075625f6b657930011c5665633c75383e0001146e6f6e636510010c7533320004049443757272656e74205075626c6963204b6579205369676e6174757265204368616e6765642e704d69736265686176696f75725265706f7274735375626d69747465640c01446d69736265686176696f75725f74797065a801404d69736265686176696f7572547970650001247265706f7274657273ac01345665633c543a3a444b4749643e0001206f6666656e646572b00120543a3a444b474964000504784d69736265686176696f7572207265706f727473207375626d69747465644c526566726573684b65797346696e69736865640401546e6578745f617574686f726974795f7365745f6964280198646b675f72756e74696d655f7072696d6974697665733a3a417574686f7269747953657449640006049c5265667265736820444b47204b6579732046696e69736865642028666f72636566756c6c79292e684e6578744b657967656e5468726573686f6c64557064617465640401546e6578745f6b657967656e5f7468726573686f6c64bc010c7531360007046c4e6578744b657967656e5468726573686f6c642075706461746564744e6578745369676e61747572655468726573686f6c64557064617465640401606e6578745f7369676e61747572655f7468726573686f6c64bc010c753136000804784e6578745369676e61747572655468726573686f6c6420757064617465647450656e64696e674b657967656e5468726573686f6c645570646174656404016070656e64696e675f6b657967656e5f7468726573686f6c64bc010c7531360009047850656e64696e674b657967656e5468726573686f6c6420757064617465648050656e64696e675369676e61747572655468726573686f6c645570646174656404016c70656e64696e675f7369676e61747572655f7468726573686f6c64bc010c753136000a048450656e64696e675369676e61747572655468726573686f6c64207570646174656460456d657267656e63794b657967656e547269676765726564000b04ac416e20456d657267656e6379204b657967656e2050726f746f636f6c20776173207472696767657265642e3c417574686f726974794a61696c65640801446d69736265686176696f75725f74797065a801404d69736265686176696f757254797065000124617574686f72697479b00120543a3a444b474964000c04b4416e20617574686f7269747920686173206265656e206a61696c656420666f72206d69736265686176696f757244417574686f72697479556e4a61696c6564040124617574686f72697479b00120543a3a444b474964000d0478416e20617574686f7269747920686173206265656e20756e6a61696c656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a80858646b675f72756e74696d655f7072696d697469766573404d69736265686176696f757254797065000108184b657967656e000000105369676e00010000ac000002b000b00c58646b675f72756e74696d655f7072696d6974697665731863727970746f185075626c696300000400b4013465636473613a3a5075626c69630000b40c1c73705f636f7265146563647361185075626c696300000400b801205b75383b2033335d0000b8000003210000000800bc0000050400c00c5070616c6c65745f646b675f70726f706f73616c731870616c6c6574144576656e7404045400012c6050726f706f7365725468726573686f6c644368616e6765640401346e65775f7468726573686f6c6410010c753332000004a8566f7465207468726573686f6c6420686173206368616e67656420286e65775f7468726573686f6c642940436861696e57686974656c6973746564040120636861696e5f6964c401305479706564436861696e4964000104b0436861696e206e6f7720617661696c61626c6520666f72207472616e73666572732028636861696e5f6964293450726f706f736572416464656404012c70726f706f7365725f6964000130543a3a4163636f756e7449640002045450726f706f73657220616464656420746f207365743c50726f706f73657252656d6f76656404012c70726f706f7365725f6964000130543a3a4163636f756e7449640003046450726f706f7365722072656d6f7665642066726f6d207365741c566f7465466f720c0120636861696e5f6964c401305479706564436861696e496400013870726f706f73616c5f6e6f6e6365c8013450726f706f73616c4e6f6e636500010c77686f000130543a3a4163636f756e74496400040490566f7465207375626d697474656420696e206661766f7572206f662070726f706f73616c2c566f7465416761696e73740c0120636861696e5f6964c401305479706564436861696e496400013870726f706f73616c5f6e6f6e6365c8013450726f706f73616c4e6f6e636500010c77686f000130543a3a4163636f756e74496400050478566f74207375626d697474656420616761696e73742070726f706f73616c4050726f706f73616c417070726f766564080120636861696e5f6964c401305479706564436861696e496400013870726f706f73616c5f6e6f6e6365c8013450726f706f73616c4e6f6e636500060480566f74696e67207375636365737366756c20666f7220612070726f706f73616c4050726f706f73616c52656a6563746564080120636861696e5f6964c401305479706564436861696e496400013870726f706f73616c5f6e6f6e6365c8013450726f706f73616c4e6f6e636500070468566f74696e672072656a656374656420612070726f706f73616c4450726f706f73616c537563636565646564080120636861696e5f6964c401305479706564436861696e496400013870726f706f73616c5f6e6f6e6365c8013450726f706f73616c4e6f6e63650008046c457865637574696f6e206f662063616c6c207375636365656465643850726f706f73616c4661696c6564080120636861696e5f6964c401305479706564436861696e496400013870726f706f73616c5f6e6f6e6365c8013450726f706f73616c4e6f6e636500090460457865637574696f6e206f662063616c6c206661696c65645c417574686f7269747950726f706f73657273526573657404012470726f706f73657273cc01445665633c543a3a4163636f756e7449643e000a046450726f706f736572732068617665206265656e20726573657404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c40c38776562625f70726f706f73616c7318686561646572305479706564436861696e4964000124104e6f6e650000000c45766d040010010c75333200010024537562737472617465040010010c75333200020044506f6c6b61646f7450617261636861696e040010010c7533320003003c4b7573616d6150617261636861696e040010010c7533320004003c526f636f636f50617261636861696e040010010c75333200050018436f736d6f73040010010c75333200060018536f6c616e61040010010c7533320007000c496e6b040010010c75333200080000c80c38776562625f70726f706f73616c73146e6f6e6365144e6f6e63650000040010010c7533320000cc0000020000d00c6c70616c6c65745f646b675f70726f706f73616c5f68616e646c65721870616c6c6574144576656e7404045400011060496e76616c696450726f706f73616c5369676e61747572651401106b696e64d4013050726f706f73616c4b696e6404645468652054797065206f66207468652050726f706f73616c2e01106461746130011c5665633c75383e044450726f706f73616c205061796c6f61642e0144696e76616c69645f7369676e617475726530011c5665633c75383e045854686520496e76616c6964205369676e61747572652e014c65787065637465645f7075626c69635f6b6579d8013c4f7074696f6e3c5665633c75383e3e04f0457870656374656420444b47205075626c6963204b65792028746865206f6e652063757272656e746c792073746f726564206f6e20636861696e292e014461637475616c5f7075626c69635f6b6579d8013c4f7074696f6e3c5665633c75383e3e04e05468652061637475616c206f6e65207765207265636f76657265642066726f6d20746865206461746120616e64207369676e61747572652e0004250152756e74696d654576656e7420456d6974746564207768656e20776520656e636f756e74657220612050726f706f73616c207769746820696e76616c6964205369676e61747572652e3450726f706f73616c41646465640c010c6b6579dc0134444b475061796c6f61644b65790470546865205061796c6f61642054797065206f7220746865204b65792e01307461726765745f636861696ec401305479706564436861696e496404445468652054617267657420436861696e2e01106461746130011c5665633c75383e04485468652050726f706f73616c20446174612e0104fc52756e74696d654576656e74205768656e20612050726f706f73616c20697320616464656420746f20556e7369676e656450726f706f73616c51756575652e3c50726f706f73616c52656d6f7665640c010c6b6579dc0134444b475061796c6f61644b65790470546865205061796c6f61642054797065206f7220746865204b65792e01307461726765745f636861696ec401305479706564436861696e496404445468652054617267657420436861696e2e011c65787069726564e00110626f6f6c04a457686574686572207468652070726f706f73616c2069732064756520746f2065787069726174696f6e02040d0152756e74696d654576656e74205768656e20612050726f706f73616c2069732072656d6f7665642066726f6d20556e7369676e656450726f706f73616c51756575652e3850726f706f73616c5369676e656410010c6b6579dc0134444b475061796c6f61644b65790470546865205061796c6f61642054797065206f7220746865204b65792e01307461726765745f636861696ec401305479706564436861696e496404445468652054617267657420436861696e2e01106461746130011c5665633c75383e04485468652050726f706f73616c20446174612e01247369676e617475726530011c5665633c75383e04ac5369676e6174757265206f66207468652068617368206f66207468652070726f706f73616c20646174612e0304c052756e74696d654576656e74205768656e20612050726f706f73616c2047657473205369676e656420627920444b472e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d40c38776562625f70726f706f73616c732070726f706f73616c3050726f706f73616c4b696e6400013c1c526566726573680000004450726f706f7365725365745570646174650001000c45564d00020030416e63686f7243726561746500030030416e63686f7255706461746500040020546f6b656e4164640005002c546f6b656e52656d6f7665000600445772617070696e67466565557064617465000700405265736f75726365496455706461746500080030526573637565546f6b656e73000900544d61784465706f7369744c696d6974557064617465000a00604d696e5769746864726177616c4c696d6974557064617465000b002c5365745665726966696572000c0048536574547265617375727948616e646c6572000d0048466565526563697069656e74557064617465000e0000d804184f7074696f6e04045401300108104e6f6e6500000010536f6d650400300000010000dc0c58646b675f72756e74696d655f7072696d6974697665732070726f706f73616c34444b475061796c6f61644b657900013c2c45564d50726f706f73616c0400c8013450726f706f73616c4e6f6e63650000002c52656672657368566f74650400c8013450726f706f73616c4e6f6e63650001006450726f706f73657253657455706461746550726f706f73616c0400c8013450726f706f73616c4e6f6e636500020050416e63686f7243726561746550726f706f73616c0400c8013450726f706f73616c4e6f6e636500030050416e63686f7255706461746550726f706f73616c0400c8013450726f706f73616c4e6f6e636500040040546f6b656e41646450726f706f73616c0400c8013450726f706f73616c4e6f6e63650005004c546f6b656e52656d6f766550726f706f73616c0400c8013450726f706f73616c4e6f6e6365000600645772617070696e6746656555706461746550726f706f73616c0400c8013450726f706f73616c4e6f6e6365000700605265736f75726365496455706461746550726f706f73616c0400c8013450726f706f73616c4e6f6e636500080050526573637565546f6b656e7350726f706f73616c0400c8013450726f706f73616c4e6f6e6365000900744d61784465706f7369744c696d697455706461746550726f706f73616c0400c8013450726f706f73616c4e6f6e6365000a00804d696e5769746864726177616c4c696d697455706461746550726f706f73616c0400c8013450726f706f73616c4e6f6e6365000b004c536574566572696669657250726f706f73616c0400c8013450726f706f73616c4e6f6e6365000c0068536574547265617375727948616e646c657250726f706f73616c0400c8013450726f706f73616c4e6f6e6365000d0068466565526563697069656e7455706461746550726f706f73616c0400c8013450726f706f73616c4e6f6e6365000e0000e00000050000e40c5870616c6c65745f6272696467655f72656769737472791870616c6c6574144576656e7408045400044900010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657810013c5265666572656e64756d496e6465780001247468726573686f6c64f00134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657810013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f686173682c011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657810013c5265666572656e64756d496e646578000110766f7465f401644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657810012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657810012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572fc01344d657461646174614f776e6572043c4d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572fc01344d657461646174614f776e6572043c4d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572fc01344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572fc01344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f00c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000f40c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465f80110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000f80c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000fc0c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040010012450726f70496e646578000100285265666572656e64756d040010013c5265666572656e64756d496e6465780002000001010c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564e00110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c747801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c747801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090905010c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c4c70616c6c65745f65636473615f636c61696d731870616c6c6574144576656e740404540001041c436c61696d65640c010c77686f000130543a3a4163636f756e744964000140657468657265756d5f616464726573730d01013c457468657265756d41646472657373000118616d6f756e7418013042616c616e63654f663c543e0000046c536f6d656f6e6520636c61696d656420736f6d652057454242732e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d01084c70616c6c65745f65636473615f636c61696d733c457468657265756d4164647265737300000400110101205b75383b2032305d0000110100000314000000080015010c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144576656e7404045400011c1c4e65775465726d04012c6e65775f6d656d62657273190101ec5665633c283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c2042616c616e63654f663c543e293e000014450141206e6577207465726d2077697468206e65775f6d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e550174686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e65644501666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e645501736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f2c626567696e20776974682e24456d7074795465726d00010831014e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6dc8604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e34456c656374696f6e4572726f72000204e4496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e304d656d6265724b69636b65640401186d656d6265720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000308410141206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f723060456d7074795465726d602e2452656e6f756e63656404012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400040498536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e4043616e646964617465536c617368656408012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0005103901412063616e6469646174652077617320736c617368656420627920616d6f756e742064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722872756e6e65722d75702e00e44e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e4453656174486f6c646572536c617368656408012c736561745f686f6c6465720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000604350141207365617420686f6c6465722077617320736c617368656420627920616d6f756e74206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090919010000021d01001d010000040800180021010c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d707574652501013c456c656374696f6e436f6d707574650001186f726967696e8001504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a6563746564e00110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c55017468652073746f72656420736f6c7574696f6e20776173207375626d6974656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d707574652501013c456c656374696f6e436f6d7075746500011473636f726529010134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6d2d01015450686173653c543a3a426c6f636b4e756d6265723e000108746f2d01015450686173653c543a3a426c6f636b4e756d6265723e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909092501089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e6379000400002901084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e636500002d01089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e011001100c4f6666000000185369676e656400010020556e7369676e656404003101012828626f6f6c2c20426e2900020024456d657267656e637900030000310100000408e010003501103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e7404045400013c1c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104bc546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e742e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6e3901011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e74496400011470726566733d01013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e20466f7263654572610401106d6f64654501011c466f7263696e67000e047441206e657720666f72636520657261206d6f646520776173207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090939010c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c75333200003d01083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e4101011c50657262696c6c00011c626c6f636b6564e00110626f6f6c000041010000063901004501083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c776179730003000049010c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909094d010c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090951010c3c70616c6c65745f626f756e746965731870616c6c6574144576656e7408045400044900011c38426f756e747950726f706f736564040114696e64657810012c426f756e7479496e646578000004504e657720626f756e74792070726f706f73616c2e38426f756e747952656a6563746564080114696e64657810012c426f756e7479496e646578000110626f6e6418013c42616c616e63654f663c542c20493e000104cc4120626f756e74792070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e48426f756e7479426563616d65416374697665040114696e64657810012c426f756e7479496e646578000204b84120626f756e74792070726f706f73616c2069732066756e64656420616e6420626563616d65206163746976652e34426f756e747941776172646564080114696e64657810012c426f756e7479496e64657800012c62656e6566696369617279000130543a3a4163636f756e744964000304944120626f756e7479206973206177617264656420746f20612062656e65666963696172792e34426f756e7479436c61696d65640c0114696e64657810012c426f756e7479496e6465780001187061796f757418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640004048c4120626f756e747920697320636c61696d65642062792062656e65666963696172792e38426f756e747943616e63656c6564040114696e64657810012c426f756e7479496e646578000504584120626f756e74792069732063616e63656c6c65642e38426f756e7479457874656e646564040114696e64657810012c426f756e7479496e646578000604704120626f756e74792065787069727920697320657874656e6465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090955010c5470616c6c65745f6368696c645f626f756e746965731870616c6c6574144576656e74040454000110144164646564080114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780000046041206368696c642d626f756e74792069732061646465642e1c417761726465640c0114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e64657800012c62656e6566696369617279000130543a3a4163636f756e744964000104ac41206368696c642d626f756e7479206973206177617264656420746f20612062656e65666963696172792e1c436c61696d6564100114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780001187061796f757418013042616c616e63654f663c543e00012c62656e6566696369617279000130543a3a4163636f756e744964000204a441206368696c642d626f756e747920697320636c61696d65642062792062656e65666963696172792e2043616e63656c6564080114696e64657810012c426f756e7479496e64657800012c6368696c645f696e64657810012c426f756e7479496e6465780003047041206368696c642d626f756e74792069732063616e63656c6c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090959010c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d280120543a3a53636f7265000108746f280120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f7265280120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909095d010c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144576656e7404045400012c1c437265617465640801246465706f7369746f72000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000004604120706f6f6c20686173206265656e20637265617465642e18426f6e6465641001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000118626f6e64656418013042616c616e63654f663c543e0001186a6f696e6564e00110626f6f6c0001049441206d656d6265722068617320626563616d6520626f6e64656420696e206120706f6f6c2e1c506169644f75740c01186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c49640001187061796f757418013042616c616e63654f663c543e0002048c41207061796f757420686173206265656e206d61646520746f2061206d656d6265722e20556e626f6e6465641401186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e00010c657261100120457261496e64657800032c9841206d656d6265722068617320756e626f6e6465642066726f6d20746865697220706f6f6c2e0039012d206062616c616e6365602069732074686520636f72726573706f6e64696e672062616c616e6365206f6620746865206e756d626572206f6620706f696e7473207468617420686173206265656e5501202072657175657374656420746f20626520756e626f6e646564202874686520617267756d656e74206f66207468652060756e626f6e6460207472616e73616374696f6e292066726f6d2074686520626f6e6465641c2020706f6f6c2e45012d2060706f696e74736020697320746865206e756d626572206f6620706f696e747320746861742061726520697373756564206173206120726573756c74206f66206062616c616e636560206265696e67c0646973736f6c76656420696e746f2074686520636f72726573706f6e64696e6720756e626f6e64696e6720706f6f6c2ee42d206065726160206973207468652065726120696e207768696368207468652062616c616e63652077696c6c20626520756e626f6e6465642e5501496e2074686520616273656e6365206f6620736c617368696e672c2074686573652076616c7565732077696c6c206d617463682e20496e207468652070726573656e6365206f6620736c617368696e672c207468654d016e756d626572206f6620706f696e74732074686174206172652069737375656420696e2074686520756e626f6e64696e6720706f6f6c2077696c6c206265206c657373207468616e2074686520616d6f756e746472657175657374656420746f20626520756e626f6e6465642e2457697468647261776e1001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e0004189c41206d656d626572206861732077697468647261776e2066726f6d20746865697220706f6f6c2e00210154686520676976656e206e756d626572206f662060706f696e7473602068617665206265656e20646973736f6c76656420696e2072657475726e206f66206062616c616e6365602e00590153696d696c617220746f2060556e626f6e64656460206576656e742c20696e2074686520616273656e6365206f6620736c617368696e672c2074686520726174696f206f6620706f696e7420746f2062616c616e63652877696c6c20626520312e2444657374726f79656404011c706f6f6c5f6964100118506f6f6c4964000504684120706f6f6c20686173206265656e2064657374726f7965642e3053746174654368616e67656408011c706f6f6c5f6964100118506f6f6c49640001246e65775f737461746561010124506f6f6c53746174650006047c546865207374617465206f66206120706f6f6c20686173206368616e676564344d656d62657252656d6f76656408011c706f6f6c5f6964100118506f6f6c49640001186d656d626572000130543a3a4163636f756e74496400070c9841206d656d62657220686173206265656e2072656d6f7665642066726f6d206120706f6f6c2e0051015468652072656d6f76616c2063616e20626520766f6c756e74617279202877697468647261776e20616c6c20756e626f6e6465642066756e647329206f7220696e766f6c756e7461727920286b69636b6564292e30526f6c6573557064617465640c0110726f6f748001504f7074696f6e3c543a3a4163636f756e7449643e00011c626f756e6365728001504f7074696f6e3c543a3a4163636f756e7449643e0001246e6f6d696e61746f728001504f7074696f6e3c543a3a4163636f756e7449643e000808550154686520726f6c6573206f66206120706f6f6c2068617665206265656e207570646174656420746f2074686520676976656e206e657720726f6c65732e204e6f7465207468617420746865206465706f7369746f724463616e206e65766572206368616e67652e2c506f6f6c536c617368656408011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e0009040d01546865206163746976652062616c616e6365206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e50556e626f6e64696e67506f6f6c536c61736865640c011c706f6f6c5f6964100118506f6f6c496400010c657261100120457261496e64657800011c62616c616e636518013042616c616e63654f663c543e000a04250154686520756e626f6e6420706f6f6c206174206065726160206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e04584576656e7473206f6620746869732070616c6c65742e6101085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c537461746500010c104f70656e0000001c426c6f636b65640001002844657374726f79696e670002000065010c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736b6901016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e00010869646d0101404f7074696f6e3c5461736b4e616d653e000118726573756c747801384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736b6901016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e00010869646d0101404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736b6901016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e00010869646d0101404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736b6901016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e00010869646d0101404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652e6901000004081010006d0104184f7074696f6e04045401040108104e6f6e6500000010536f6d65040004000001000071010c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090975010c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e64790101104b696e6400012074696d65736c6f743001384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652e79010000031000000008007d010c3470616c6c65745f6861736865721870616c6c6574144576656e7408045400044900010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090981010c5470616c6c65745f61737365745f72656769737472791870616c6c6574144576656e7404045400011028526567697374657265640c012061737365745f6964100128543a3a417373657449640001106e616d6585010178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012861737365745f74797065890101384173736574547970654f663c543e0000045441737365742077617320726567697374657265642e1c557064617465640c012061737365745f6964100128543a3a417373657449640001106e616d6585010178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012861737365745f74797065890101384173736574547970654f663c543e0001044841737365742077617320757064617465642e2c4d657461646174615365740c012061737365745f6964100128543a3a4173736574496400011873796d626f6c85010178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e000120646563696d616c730801087538000204684d657461646174612073657420666f7220616e2061737365742e2c4c6f636174696f6e53657408012061737365745f6964100128543a3a417373657449640001206c6f636174696f6e7c0158543a3a41737365744e61746976654c6f636174696f6e000304844e6174697665206c6f636174696f6e2073657420666f7220616e2061737365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090985010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000089010c5470616c6c65745f61737365745f726567697374727914747970657324417373657454797065081c417373657449640110404d617841737365744964496e506f6f6c018d01010814546f6b656e00000024506f6f6c5368617265040091010194426f756e6465645665633c417373657449642c204d617841737365744964496e506f6f6c3e000100008d010c6474616e676c655f7374616e64616c6f6e655f72756e74696d656470726f746f636f6c5f7375627374726174655f636f6e666967404d617841737365744964496e506f6f6c0000000091010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400950101185665633c543e00009501000002100099010c2c6f726d6c5f746f6b656e73186d6f64756c65144576656e7404045400013c1c456e646f7765640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f73740c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000108ec416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77c84578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e7366657210012c63757272656e63795f6964100134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2052657365727665640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000304e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e72657365727665640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656414012c63757272656e63795f6964100134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500011873746174757388013442616c616e6365537461747573000508f4536f6d652072657365727665642062616c616e63652077617320726570617472696174656420286d6f7665642066726f6d20726573657276656420746f44616e6f74686572206163636f756e74292e2842616c616e636553657410012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500060468412062616c616e6365207761732073657420627920726f6f742e40546f74616c49737375616e636553657408012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000704b854686520746f74616c2069737375616e6365206f6620616e2063757272656e637920686173206265656e207365742457697468647261776e0c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000804ec536f6d652062616c616e63657320776572652077697468647261776e2028652e672e2070617920666f72207472616e73616374696f6e20666565291c536c617368656410012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400012c667265655f616d6f756e74180128543a3a42616c616e636500013c72657365727665645f616d6f756e74180128543a3a42616c616e6365000904d4536f6d652062616c616e636573207765726520736c61736865642028652e672e2064756520746f206d69732d6265686176696f7229244465706f73697465640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a04984465706f736974656420736f6d652062616c616e636520696e746f20616e206163636f756e741c4c6f636b53657410011c6c6f636b5f69649d0101384c6f636b4964656e74696669657200012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b0454536f6d652066756e647320617265206c6f636b65642c4c6f636b52656d6f7665640c011c6c6f636b5f69649d0101384c6f636b4964656e74696669657200012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000c047c536f6d65206c6f636b65642066756e6473207765726520756e6c6f636b6564184c6f636b65640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d0474536f6d6520667265652062616c616e636520776173206c6f636b65642e20556e6c6f636b65640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000e0478536f6d65206c6f636b65642062616c616e6365207761732066726565642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099d01000003080000000800a1010c5070616c6c65745f746f6b656e5f777261707065721870616c6c6574144576656e740404540001143057726170706564546f6b656e100140706f6f6c5f73686172655f6173736574100128543a3a4173736574496400012061737365745f6964100128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e74000130543a3a4163636f756e74496400000038556e77726170706564546f6b656e100140706f6f6c5f73686172655f6173736574100128543a3a4173736574496400012061737365745f6964100128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e74000130543a3a4163636f756e74496400010064557064617465645772617070696e6746656550657263656e74080148696e746f5f706f6f6c5f73686172655f6964100128543a3a417373657449640001507772617070696e675f6665655f70657263656e7418013042616c616e63654f663c543e0002004c55706461746564466565526563697069656e740801346665655f726563697069656e74000130543a3a4163636f756e744964000134706f6f6c5f73686172655f6964100128543a3a4173736574496400030034546f6b656e735265736375656410014866726f6d5f706f6f6c5f73686172655f6964100128543a3a4173736574496400012061737365745f6964100128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e74000130543a3a4163636f756e74496400040004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a5010c3c70616c6c65745f76657269666965721870616c6c6574144576656e7408045400044900010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a9010c2470616c6c65745f6d741870616c6c6574144576656e7408045400044900010830547265654372656174696f6e08011c747265655f6964100124543a3a54726565496400010c77686f000130543a3a4163636f756e744964000004404e657720747265652063726561746564344c656166496e73657274696f6e0c011c747265655f6964100124543a3a5472656549640001286c6561665f696e646578100130543a3a4c656166496e6465780001106c656166ad010128543a3a456c656d656e74000104444e6577206c65616620696e73657274656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ad010c6474616e676c655f7374616e64616c6f6e655f72756e74696d656470726f746f636f6c5f7375627374726174655f636f6e6669671c456c656d656e74000004000401205b75383b2033325d0000b1010c5070616c6c65745f6c696e6b61626c655f747265651870616c6c6574144576656e74080454000449000104504c696e6b61626c65547265654372656174696f6e04011c747265655f6964100124543a3a547265654964000004404e65772074726565206372656174656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b5010c3070616c6c65745f6d697865721870616c6c6574144576656e7408045400044900010c344d697865724372656174696f6e04011c747265655f6964100124543a3a547265654964000004404e6577207472656520637265617465641c4465706f73697408011c747265655f6964100124543a3a5472656549640001106c656166ad010128543a3a456c656d656e7400010020576974686472617708011c747265655f6964100124543a3a547265654964000124726563697069656e74000130543a3a4163636f756e74496400020004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b9010c5c70616c6c65745f7369676e61747572655f6272696467651870616c6c6574144576656e74080454000449000114344d61696e7461696e65725365740801386f6c645f6d61696e7461696e6572bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e0001386e65775f6d61696e7461696e6572bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e000004444d61696e7461696e65722069732073657440436861696e57686974656c6973746564040120636861696e5f6964280128543a3a436861696e4964000104b0436861696e206e6f7720617661696c61626c6520666f72207472616e73666572732028636861696e5f6964294050726f706f73616c417070726f766564080120636861696e5f6964280128543a3a436861696e496400013870726f706f73616c5f6e6f6e6365100140543a3a50726f706f73616c4e6f6e63650002046850726f706f73616c20686173206265656e20617070726f7665644450726f706f73616c537563636565646564080120636861696e5f6964280128543a3a436861696e496400013870726f706f73616c5f6e6f6e6365100140543a3a50726f706f73616c4e6f6e63650003046c457865637574696f6e206f662063616c6c207375636365656465643850726f706f73616c4661696c6564080120636861696e5f6964280128543a3a436861696e496400013870726f706f73616c5f6e6f6e6365100140543a3a50726f706f73616c4e6f6e636500040460457865637574696f6e206f662063616c6c206661696c656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000c1010c3870616c6c65745f76616e63686f721870616c6c6574144576656e740804540004490001143c56416e63686f724372656174696f6e04011c747265655f6964100124543a3a547265654964000004404e6577207472656520637265617465642c5472616e73616374696f6e1801287472616e736163746f72000130543a3a4163636f756e74496400011c747265655f6964100124543a3a5472656549640001146c65616673c501013c5665633c543a3a456c656d656e743e000144656e637279707465645f6f75747075743130011c5665633c75383e000144656e637279707465645f6f75747075743230011c5665633c75383e000118616d6f756e74c9010138416d6f756e744f663c542c20493e000104645472616e73616374696f6e20686173206265656e206d6164651c4465706f7369740c01246465706f7369746f72000130543a3a4163636f756e74496400011c747265655f6964100124543a3a5472656549640001106c656166ad010128543a3a456c656d656e74000204984465706f73697420686f6f6b20686173206578656375746564207375636365737366756c6c795c4d61784465706f736974416d6f756e744368616e6765640401486d61785f6465706f7369745f616d6f756e7418013c42616c616e63654f663c542c20493e000300604d696e5769746864726177416d6f756e744368616e67656404014c6d696e5f77697468647261775f616d6f756e7418013c42616c616e63654f663c542c20493e00040004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c501000002ad0100c9010000050d00cd010c5870616c6c65745f76616e63686f725f68616e646c65721870616c6c6574144576656e7408045400044900011034416e63686f72437265617465640000003c416e63686f7245646765416464656400010044416e63686f724564676555706461746564000200405265736f75726365416e63686f72656400030004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d1010c7070616c6c65745f746f6b656e5f777261707065725f68616e646c65721870616c6c6574144576656e7404045400010464557064617465645772617070696e6746656550657263656e740401507772617070696e675f6665655f70657263656e7418013042616c616e63654f663c543e00000004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d5010c4870616c6c65745f6b65795f73746f726167651870616c6c6574144576656e74080454000449000104545075626c69634b6579526567697374726174696f6e0801146f776e6572000130543a3a4163636f756e7449640001287075626c69635f6b6579d9010188426f756e6465645665633c75382c20543a3a4d61785075626b65794c656e6774683e0000045c5075626c6963206b657920726567697374726174696f6e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d9010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000dd010c5c70616c6c65745f76616e63686f725f76657269666965721870616c6c6574144576656e7408045400044900010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e1010c6070616c6c65745f7472616e73616374696f6e5f7061757365186d6f64756c65144576656e74040454000108445472616e73616374696f6e50617573656408014470616c6c65745f6e616d655f627974657330011c5665633c75383e00014c66756e6374696f6e5f6e616d655f627974657330011c5665633c75383e00000448506175736564207472616e73616374696f6e4c5472616e73616374696f6e556e70617573656408014470616c6c65745f6e616d655f627974657330011c5665633c75383e00014c66756e6374696f6e5f6e616d655f627974657330011c5665633c75383e00010450556e706175736564207472616e73616374696f6e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e5010c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f6964e9010138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e65f101016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e901104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c696300000400ed01013c737232353531393a3a5075626c69630000ed010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000f101000002f50100f5010000040800f90100f901083870616c6c65745f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616cfd01011c42616c616e636500010c6f776efd01011c42616c616e63650001186f7468657273010201ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000fd01000006180001020000020502000502083870616c6c65745f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565fd01011c42616c616e6365000009020c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001282c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d020c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c747801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090911020c6070616c6c65745f657468325f6c696768745f636c69656e741870616c6c6574144576656e7404045400011810496e697408013874797065645f636861696e5f6964c401305479706564436861696e496400012c6865616465725f696e666f15020184457865637574696f6e486561646572496e666f3c543a3a4163636f756e7449643e0000004452656769737465725375626d697474657208013874797065645f636861696e5f6964c401305479706564436861696e49640001247375626d6974746572000130543a3a4163636f756e7449640001004c556e72656769737465725375626d697474657208013874797065645f636861696e5f6964c401305479706564436861696e49640001247375626d6974746572000130543a3a4163636f756e744964000200885375626d6974426561636f6e436861696e4c69676874436c69656e745570646174650c013874797065645f636861696e5f6964c401305479706564436861696e49640001247375626d6974746572000130543a3a4163636f756e74496400014c626561636f6e5f626c6f636b5f68656164657219020144426561636f6e426c6f636b486561646572000300545375626d6974457865637574696f6e48656164657208013874797065645f636861696e5f6964c401305479706564436861696e496400012c6865616465725f696e666f15020184457865637574696f6e486561646572496e666f3c543a3a4163636f756e7449643e0004004c557064617465547275737465645369676e6572040138747275737465645f7369676e6572000130543a3a4163636f756e74496400050004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090915020c246574685f74797065731870616c6c65744c457865637574696f6e486561646572496e666f04244163636f756e7449640100000c012c706172656e745f686173682c011048323536000130626c6f636b5f6e756d62657228010c7536340001247375626d69747465720001244163636f756e744964000019020c246574685f7479706573106574683244426561636f6e426c6f636b4865616465720000140110736c6f74280110536c6f7400013870726f706f7365725f696e64657828010c75363400012c706172656e745f726f6f741d0201104832353600012873746174655f726f6f741d02011048323536000124626f64795f726f6f741d0201104832353600001d0208246574685f74797065731048323536000004002c0150657468657265756d5f74797065733a3a483235360000210208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000025020000022c0029020000026901002d0208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6e3102014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d653502016473705f72756e74696d653a3a52756e74696d65537472696e670000310200000610003502000005020039020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f7061676573040114706167657328010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d733d0201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973450201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3d020000024102004102000004083030004502000002300049020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c6173734d0201845065724469737061746368436c6173733c57656967687473506572436c6173733e00004d020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454015102000c01186e6f726d616c510201045400012c6f7065726174696f6e616c51020104540001246d616e6461746f72795102010454000051020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963550201384f7074696f6e3c5765696768743e0001246d61785f746f74616c550201384f7074696f6e3c5765696768743e0001207265736572766564550201384f7074696f6e3c5765696768743e0000550204184f7074696f6e04045401200108104e6f6e6500000010536f6d65040020000001000059020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d61785d0201545065724469737061746368436c6173733c7533323e00005d020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400006102082873705f776569676874733c52756e74696d65446257656967687400000801107265616428010c753634000114777269746528010c75363400006502082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d653502013452756e74696d65537472696e67000124696d706c5f6e616d653502013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069736902011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800006902040c436f77040454016d020004006d020000006d020000027102007102000004089d01100075020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657479020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77240124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7d020c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000018350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e547375646f5f756e636865636b65645f77656967687408011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000120350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7365745f6b657904010c6e6577890201504163636f756e7449644c6f6f6b75704f663c543e00021c5d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7375646f5f617308010c77686f890201504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00031c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8102086474616e676c655f7374616e64616c6f6e655f72756e74696d652c52756e74696d6543616c6c0001b41853797374656d0400390201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400790201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e000100105375646f04007d0201a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0002002042616c616e6365730400850201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0004001c4772616e64706104008d0201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0008000c444b470400c10201a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c444b472c2052756e74696d653e00090030444b4750726f706f73616c730400e90201c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c444b4750726f706f73616c732c2052756e74696d653e000a0048444b4750726f706f73616c48616e646c65720400f50201dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c444b4750726f706f73616c48616e646c65722c2052756e74696d653e000b003842726964676552656769737472790400050301cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42726964676552656769737472792c2052756e74696d653e000c001c496e64696365730400950301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e000d002444656d6f63726163790400990301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e000e001c436f756e63696c0400b10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e000f001c56657374696e670400bd0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e00100018436c61696d730400c50301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436c61696d732c2052756e74696d653e00110024456c656374696f6e730400e10301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e732c2052756e74696d653e00120068456c656374696f6e50726f76696465724d756c746950686173650400e90301fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e0013001c5374616b696e670400d10401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0014001c53657373696f6e0400f10401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0015002054726561737572790400fd0401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e00170020426f756e746965730400010501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426f756e746965732c2052756e74696d653e001800344368696c64426f756e746965730400050501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4368696c64426f756e746965732c2052756e74696d653e00190020426167734c6973740400090501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426167734c6973742c2052756e74696d653e001a003c4e6f6d696e6174696f6e506f6f6c7304000d0501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f6d696e6174696f6e506f6f6c732c2052756e74696d653e001b00245363686564756c65720400250501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e001c0020507265696d61676504002d0501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e001d002c486173686572426e3235340400310501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c486173686572426e3235342c2052756e74696d653e001f0034417373657452656769737472790400390501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417373657452656769737472792c2052756e74696d653e0020002843757272656e636965730400410501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43757272656e636965732c2052756e74696d653e00210018546f6b656e730400450501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f6b656e732c2052756e74696d653e00220030546f6b656e577261707065720400490501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f6b656e577261707065722c2052756e74696d653e002300484d697865725665726966696572426e32353404004d0501dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d697865725665726966696572426e3235342c2052756e74696d653e0024003c4d65726b6c6554726565426e3235340400550501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d65726b6c6554726565426e3235342c2052756e74696d653e002500444c696e6b61626c6554726565426e32353404005d0501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4c696e6b61626c6554726565426e3235342c2052756e74696d653e002600284d69786572426e3235340400610501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d69786572426e3235342c2052756e74696d653e0027003c5369676e61747572654272696467650400650501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5369676e61747572654272696467652c2052756e74696d653e0028003056416e63686f72426e32353404006d0501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56416e63686f72426e3235342c2052756e74696d653e0029004c56416e63686f7248616e646c6572426e3235340400790501e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56416e63686f7248616e646c6572426e3235342c2052756e74696d653e002a004c546f6b656e5772617070657248616e646c657204007d0501e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f6b656e5772617070657248616e646c65722c2052756e74696d653e002b00284b657953746f726167650400810501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4b657953746f726167652c2052756e74696d653e002c003c56416e63686f7256657269666965720400850501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56416e63686f7256657269666965722c2052756e74696d653e002d00405472616e73616374696f6e506175736504008d0501d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5472616e73616374696f6e50617573652c2052756e74696d653e002e0020496d4f6e6c696e650400910501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e002f00204964656e746974790400b10501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e0030001c5574696c6974790400dd0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0031002845746832436c69656e740400f50501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45746832436c69656e742c2052756e74696d653e0032000085020c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374890201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565fd010128543a3a42616c616e6365000058d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e0034232320436f6d706c657869747961012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e2c7365745f62616c616e63650c010c77686f890201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565fd010128543a3a42616c616e63650001306e65775f7265736572766564fd010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365890201504163636f756e7449644c6f6f6b75704f663c543e00011064657374890201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565fd010128543a3a42616c616e63650002144d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e34232320436f6d706c65786974794d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e4c7472616e736665725f6b6565705f616c69766508011064657374890201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565fd010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374890201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665e00110626f6f6c00044005015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fd420206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e20232320436f6d706c657869747939012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e3c666f7263655f756e7265736572766508010c77686f890201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e89020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780110011408496404000001244163636f756e74496400000014496e6465780400310201304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400110101205b75383b2032305d000400008d020c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66910201bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f66bd020140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66910201bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f66bd020140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9102084c73705f66696e616c6974795f6772616e6470614445717569766f636174696f6e50726f6f66080448012c044e0110000801187365745f6964280114536574496400013065717569766f636174696f6e9502014845717569766f636174696f6e3c482c204e3e00009502084c73705f66696e616c6974795f6772616e6470613045717569766f636174696f6e080448012c044e011001081c507265766f7465040099020139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d69740400b1020141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100009902084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c084964019c0456019d02045301a10200100130726f756e645f6e756d62657228010c7536340001206964656e746974799c010849640001146669727374ad02011828562c2053290001187365636f6e64ad02011828562c20532900009d02084066696e616c6974795f6772616e6470611c507265766f7465080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e0000a1020c4c73705f66696e616c6974795f6772616e6470610c617070245369676e617475726500000400a5020148656432353531393a3a5369676e61747572650000a5020c1c73705f636f72651c65643235353139245369676e617475726500000400a90201205b75383b2036345d0000a902000003400000000800ad02000004089d02a10200b102084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c084964019c045601b502045301a10200100130726f756e645f6e756d62657228010c7536340001206964656e746974799c010849640001146669727374b902011828562c2053290001187365636f6e64b902011828562c2053290000b502084066696e616c6974795f6772616e64706124507265636f6d6d6974080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e0000b90200000408b502a10200bd02082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573450201305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e740000c1020c4c70616c6c65745f646b675f6d657461646174611870616c6c65741043616c6c0404540001305c7365745f7369676e61747572655f7468726573686f6c640401346e65775f7468726573686f6c64bc010c7531360000243d01536574207468652070656e64696e67207369676e6174757265207468726573686f6c6420666f72207468652073657373696f6e20666f6c6c6f77696e6720746865206e6578742073657373696f6e2e00110157652063616e6e6f7420617373756d65207468617420746865206e65787420444b4720686173206e6f7420616c726561647920636f6d706c65746564206b657967656e2e3901416674657220616c6c2c2069662077652061726520696e2061206e65772073657373696f6e20746865206e65787420444b47206d6179206861766520616c726561647920636f6d706c657465642e11015468657265666f72652c207768656e2077652075706461746520746865207468726573686f6c647320776520617265207570646174696e672061207468726573686f6c640901746861742077696c6c206265636f6d6520746865206e657874207468726573686f6c6420616674657220746865206e6578742073657373696f6e207570646174652e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2ef02a20606e65775f7468726573686f6c6460202d20546865206e6577207369676e6174757265207468726573686f6c6420666f722074686520444b472e507365745f6b657967656e5f7468726573686f6c640401346e65775f7468726573686f6c64bc010c7531360001243101536574207468652070656e64696e67206b657967656e207468726573686f6c6420666f72207468652073657373696f6e20666f6c6c6f77696e6720746865206e6578742073657373696f6e2e00110157652063616e6e6f7420617373756d65207468617420746865206e65787420444b4720686173206e6f7420616c726561647920636f6d706c65746564206b657967656e2e3901416674657220616c6c2c2069662077652061726520696e2061206e65772073657373696f6e20746865206e65787420444b47206d6179206861766520616c726561647920636f6d706c657465642e11015468657265666f72652c207768656e2077652075706461746520746865207468726573686f6c647320776520617265207570646174696e672061207468726573686f6c640901746861742077696c6c206265636f6d6520746865206e657874207468726573686f6c6420616674657220746865206e6578742073657373696f6e207570646174652e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2ee42a20606e65775f7468726573686f6c6460202d20546865206e6577206b657967656e207468726573686f6c6420666f722074686520444b472e447365745f726566726573685f64656c61790401246e65775f64656c61790801087538000218390153657473207468652064656c6179207768656e206120756e7369676e656420605265667265736850726f706f73616c602077696c6c20626520616464656420746f2074686520756e7369676e65643c70726f706f73616c2071756575652e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2e4d012a20606e65775f64656c617960202d205468652070657263656e74616765206f6620656c61707365642073657373696f6e206475726174696f6e20746f2077616974206265666f726520616464696e6720616eec2020756e7369676e656420726566726573682070726f706f73616c20746f2074686520756e7369676e65642070726f706f73616c2071756575652e447375626d69745f7075626c69635f6b657904014c6b6579735f616e645f7369676e617475726573c5020150416767726567617465645075626c69634b65797300032c49015375626d69747320616e642073746f7265732074686520616374697665207075626c6963206b657920666f72207468652067656e657369732073657373696f6e20696e746f20746865206f6e2d636861696e490173746f726167652e2054686973206973207072696d6172696c79207573656420746f207365706172617465207468652067656e65736973207075626c6963206b6579207375626d697373696f6e2066726f6d4c6e6f6e2d67656e6573697320726f756e64732e00310143616e206f6e6c79206265207375626d6974746564206279207468652063757272656e7420617574686f7269746965732e20497420697320616c736f207265717569726564207468617420611d01605369676e61747572655468726573686f6c6460206f66207375626d697373696f6e73206973207265616368656420696e206f7264657220746f207375636365737366756c6c797873746f726520746865207075626c6963206b6579206f6e2d636861696e2e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2e61012a20606b6579735f616e645f7369676e61747572657360202d205468652061676772656761746564207075626c6963206b65797320616e64207369676e61747572657320666f7220706f737369626c652063757272656e74482020444b47207075626c6963206b6579732e587375626d69745f6e6578745f7075626c69635f6b657904014c6b6579735f616e645f7369676e617475726573c5020150416767726567617465645075626c69634b65797300042459015375626d69747320616e642073746f72657320746865206e657874207075626c6963206b657920666f7220746865206e6578742073657373696f6e20696e746f20746865206f6e2d636861696e2073746f726167652e00250143616e206f6e6c79206265207375626d697474656420627920746865206e65787420617574686f7269746965732e20497420697320616c736f207265717569726564207468617420612d01604e6578745369676e61747572655468726573686f6c6460206f66207375626d697373696f6e73206973207265616368656420696e206f7264657220746f207375636365737366756c6c797873746f726520746865207075626c6963206b6579206f6e2d636861696e2e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2e55012a20606b6579735f616e645f7369676e61747572657360202d205468652061676772656761746564207075626c6963206b65797320616e64207369676e61747572657320666f7220706f737369626c65206e657874482020444b47207075626c6963206b6579732e6c7375626d69745f7075626c69635f6b65795f7369676e61747572650401487369676e61747572655f70726f706f73616cc90201545265667265736850726f706f73616c5369676e656400053819015375626d69747320746865207075626c6963206b6579207369676e617475726520666f7220746865206b657920726566726573682f726f746174696f6e2070726f636573732e005901546865207369676e617475726520697320746865207369676e6174757265206f6620746865206e657874207075626c6963206b657920605265667265736850726f706f73616c602c207369676e6564206279207468655d0163757272656e7420444b472e2049742069732073746f726564206f6e2d636861696e206f6e6c79206966206974207665726966696573207375636365737366756c6c7920616761696e7374207468652063757272656e743901444b472773207075626c6963206b65792e205375636365737366756c2073746f72616765206f662074686973207075626c6963206b6579207369676e617475726520616c736f2072656d6f766573dc74686520756e7369676e656420605265667265736850726f706f73616c602066726f6d2074686520756e7369676e65642071756575652e002d01466f72206d616e75616c207265667265736865732c20616674657220746865207369676e6174757265206973207375626d697474656420616e642073746f726564206f6e2d636861696e2c3d01746865206b6579732061726520696d6d6564696174656c792072656672657368656420616e642074686520617574686f726974792073657420697320696d6d6564696174656c7920726f746174656440616e6420696e6372656d656e7465642e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2e61012a20607369676e61747572655f70726f706f73616c60202d20546865207369676e656420726566726573682070726f706f73616c20636f6e7461696e696e6720746865207075626c6963206b6579207369676e6174757265302020616e64206e6f6e63652e6c7375626d69745f6d69736265686176696f75725f7265706f72747304011c7265706f727473cd02014501416767726567617465644d69736265686176696f75725265706f7274733c543a3a444b4749642c20543a3a4d61785369676e61747572654c656e6774682c20543a3a0a4d61785265706f72746572732c3e00064841015375626d697473206d69736265686176696f7572207265706f727473206f6e20636861696e2e205369676e617475726573206f6620746865206f6666656e64696e6720617574686f72697479206172655d01766572696669656420616761696e7374207468652063757272656e74206f72206e65787420617574686f72697469657320646570656e64696e67206f6e207468652074797065206f66206d69736265686176696f75722e35012d204b657967656e3a20566572696669657320616761696e737420746865206e65787420617574686f7269746965732c2073696e636520746865792061726520646f696e67206b657967656e2e49012d205369676e696e673a20566572696669657320616761696e7374207468652063757272656e7420617574686f7269746965732c2073696e636520746865792061726520646f696e67207369676e696e672e005101566572696669657320746865207265706f72747320616761696e7374207468652072657370656374697665207468726573686f6c647320616e6420696620656e6f756768207265706f72747320617265206d65741901626567696e7320746f206a61696c20616e64206465637265617365207468652072657075746174696f6e206f6620746865206f6666656e64696e6720617574686f726974792e0098546865206d69736265686176696f75722072657075746174696f6e207570646174652069733afc09415554484f524954595f52455055544154494f4e203d2044454341595f50455243454e54414745202a20415554484f524954595f52455055544154494f4e005901496620746865726520617265206e6f7420656e6f75676820756e6a61696c6564206b657967656e20617574686f72697469657320746f20706572666f726d2061206b657967656e20616674657220746865206e657874510173657373696f6e2c207468656e20776520646564756374207468652070656e64696e67206b657967656e207468726573686f6c642028616e642070656e64696e67207369676e696e67207468726573686f6c6429306163636f7264696e676c792e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2e5d012a20607265706f72747360202d205468652061676772656761746564206d69736265686176696f7572207265706f72747320636f6e7461696e696e67207369676e617475726573206f6620616e206f6666656e64696e672c2020617574686f7269747918756e6a61696c0007202d01417474656d70747320746f2072656d6f766520616e20617574686f726974792066726f6d20616c6c20706f737369626c65206a61696c7320286b657967656e2026207369676e696e67292e1d01546869732063616e206f6e6c792062652063616c6c65642062792074686520636f6e74726f6c6c6572206f662074686520617574686f7269747920696e206a61696c2e20546865c86f726967696e206d757374206d6170206469726563746c7920746f2074686520617574686f7269747920696e206a61696c2e00290154686520617574686f726974792773206a61696c2073656e74656e636520666f7220656974686572206b657967656e206f72207369676e696e67206d75737420626520656c6170736564b8666f722074686520617574686f7269747920746f2062652072656d6f7665642066726f6d20746865206a61696c2e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2e4c666f7263655f756e6a61696c5f6b657967656e040124617574686f72697479b00120543a3a444b474964000814b0466f7263652072656d6f76657320616e20617574686f726974792066726f6d206b657967656e206a61696c2e006443616e206f6e6c792062652063616c6c656420627920444b47802a20606f726967696e60202d20546865206163636f756e74206f726967696e2e05012a2060617574686f7269747960202d2054686520617574686f7269747920746f2062652072656d6f7665642066726f6d20746865206b657967656e206a61696c2e50666f7263655f756e6a61696c5f7369676e696e67040124617574686f72697479b00120543a3a444b474964000918b4466f7263652072656d6f76657320616e20617574686f726974792066726f6d207369676e696e67206a61696c2e009843616e206f6e6c792062652063616c6c65642062792074686520726f6f74206f726967696e2e00802a20606f726967696e60202d20546865206163636f756e74206f726967696e2e09012a2060617574686f7269747960202d2054686520617574686f7269747920746f2062652072656d6f7665642066726f6d20746865207369676e696e67206a61696c2e60666f7263655f6368616e67655f617574686f726974696573000a1464466f72636566756c6c7920726f746174652074686520444b470011015468697320666f7263657320746865206e65787420617574686f72697469657320696e746f207468652063757272656e7420617574686f726974792073706f7420616e641d016175746f6d61746963616c6c7920696e6372656d656e74732074686520617574686f726974792049442e204974207573657320606368616e67655f617574686f726974696573608c746f20657865637574652074686520726f746174696f6e20666f72636566756c6c792e60747269676765725f656d657267656e63795f6b657967656e000b189c547269676765727320616e20456d657267656e6379204b657967656e20506f726f746f636f6c2e006101546865206b657967656e2070726f746f636f6c2077696c6c207468656e20626520657865637574656420616e642074686520726573756c742077696c6c2062652073746f72656420696e20746865206f666620636861696e310173746f726167652c2077686963682077696c6c206265207069636b656420757020627920746865206f6e20636861696e20776f726b657220616e642073746f726564206f6e20636861696e2e0025014e6f746520746861742c20746869732077696c6c20636c65617220746865206e657874207075626c6963206b657920616e6420697473207369676e61747572652c20696620616e792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec5020858646b675f72756e74696d655f7072696d69746976657350416767726567617465645075626c69634b657973000004014c6b6579735f616e645f7369676e6174757265733d0201685665633c5075626c69634b6579416e645369676e61747572653e0000c9020c58646b675f72756e74696d655f7072696d6974697665732070726f706f73616c545265667265736850726f706f73616c5369676e656400000801146e6f6e6365c8013450726f706f73616c4e6f6e63650001247369676e617475726530011c5665633c75383e0000cd020858646b675f72756e74696d655f7072696d69746976657374416767726567617465644d69736265686176696f75725265706f7274730c14444b47496401b0484d61785369676e61747572654c656e67746801d102304d61785265706f727465727301d502001401446d69736265686176696f75725f74797065a801404d69736265686176696f75725479706500012873657373696f6e5f696428010c7536340001206f6666656e646572b00114444b4749640001247265706f7274657273d902017c426f756e6465645665633c444b4749642c204d61785265706f72746572733e0001287369676e617475726573dd0201f0426f756e6465645665633c426f756e6465645665633c75382c204d61785369676e61747572654c656e6774683e2c204d61785265706f72746572733e0000d1020858646b675f72756e74696d655f7072696d6974697665733c437573746f6d55333247657474657200000000d5020858646b675f72756e74696d655f7072696d6974697665733c437573746f6d55333247657474657200000000d9020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b0045300000400ac01185665633c543e0000dd020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e102045300000400e50201185665633c543e0000e1020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000e502000002e10200e9020c5070616c6c65745f646b675f70726f706f73616c731870616c6c65741043616c6c040454000124347365745f7468726573686f6c640401247468726573686f6c6410010c75333200002098536574732074686520766f7465207468726573686f6c6420666f722070726f706f73616c732e00fc54686973207468726573686f6c64206973207573656420746f2064657465726d696e6520686f77206d616e7920766f74657320617265207265717569726564786265666f726520612070726f706f73616c2069732065786563757465642e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e307365745f7265736f757263650801086964ed0201285265736f7572636549640001186d6574686f6430011c5665633c75383e000114f853746f7265732061206d6574686f64206e616d65206f6e20636861696e20756e64657220616e206173736f636961746564207265736f757263652049442e002823203c7765696768743e302d204f2831292077726974652c23203c2f7765696768743e3c72656d6f76655f7265736f757263650401086964ed0201285265736f757263654964000220c052656d6f7665732061207265736f757263652049442066726f6d20746865207265736f75726365206d617070696e672e000501416674657220746869732063616c6c2c20627269646765207472616e7366657273207769746820746865206173736f636961746564207265736f757263652049444477696c6c2062652072656a65637465642e002823203c7765696768743e382d204f2831292072656d6f76616c2c23203c2f7765696768743e3c77686974656c6973745f636861696e040120636861696e5f6964c401305479706564436861696e49640003141101456e61626c6573206120636861696e204944206173206120736f75726365206f722064657374696e6174696f6e20666f72206120627269646765207472616e736665722e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e306164645f70726f706f7365720801386e61746976655f6163636f756e74000130543a3a4163636f756e74496400014065787465726e616c5f6163636f756e7430011c5665633c75383e000414a0416464732061206e65772070726f706f73657220746f207468652070726f706f736572207365742e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e3c72656d6f76655f70726f706f73657204010476000130543a3a4163636f756e744964000514a852656d6f76657320616e206578697374696e672070726f706f7365722066726f6d20746865207365742e002823203c7765696768743e642d204f283129206c6f6f6b757020616e642072656d6f76616c2c23203c2f7765696768743e5061636b6e6f776c656467655f70726f706f73616c1001146e6f6e6365c8013450726f706f73616c4e6f6e63650001307372635f636861696e5f6964c401305479706564436861696e4964000110725f6964ed0201285265736f75726365496400011070726f70f102012c543a3a50726f706f73616c000624c8436f6d6d697473206120766f746520696e206661766f7572206f66207468652070726f76696465642070726f706f73616c2e00fc496620612070726f706f73616c20776974682074686520676976656e206e6f6e636520616e6420736f7572636520636861696e20494420646f6573206e6f740101616c72656164792065786973742c2069742077696c6c2062652063726561746564207769746820616e20696e697469616c20766f746520696e206661766f75724066726f6d207468652063616c6c65722e002823203c7765696768743e1d012d20776569676874206f662070726f706f7365642063616c6c2c207265676172646c657373206f66207768657468657220657865637574696f6e20697320706572666f726d65642c23203c2f7765696768743e3c72656a6563745f70726f706f73616c1001146e6f6e6365c8013450726f706f73616c4e6f6e63650001307372635f636861696e5f6964c401305479706564436861696e4964000110725f6964ed0201285265736f75726365496400011070726f70f102012c543a3a50726f706f73616c000714ac436f6d6d697473206120766f746520616761696e737420612070726f76696465642070726f706f73616c2e002823203c7765696768743eec2d2046697865642c2073696e636520657865637574696f6e206f662070726f706f73616c2073686f756c64206e6f7420626520696e636c756465642c23203c2f7765696768743e3c6576616c5f766f74655f73746174650c01146e6f6e6365c8013450726f706f73616c4e6f6e63650001307372635f636861696e5f6964c401305479706564436861696e496400011070726f70f102012c543a3a50726f706f73616c00082009014576616c7561746520746865207374617465206f6620612070726f706f73616c20676976656e207468652063757272656e7420766f7465207468726573686f6c642e000901412070726f706f73616c207769746820656e6f75676820766f7465732077696c6c20626520656974686572206578656375746564206f722063616e63656c6c65642cac616e6420746865207374617475732077696c6c2062652075706461746564206163636f7264696e676c792e002823203c7765696768743e1d012d20776569676874206f662070726f706f7365642063616c6c2c207265676172646c657373206f66207768657468657220657865637574696f6e20697320706572666f726d65642c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed020c38776562625f70726f706f73616c7318686561646572285265736f757263654964000004000401205b75383b2033325d0000f1020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000f5020c6c70616c6c65745f646b675f70726f706f73616c5f68616e646c65721870616c6c65741043616c6c0404540001085c7375626d69745f7369676e65645f70726f706f73616c7304011470726f7073f902018c5665633c50726f706f73616c3c543a3a4d617850726f706f73616c4c656e6774683e3e00000078666f7263655f7375626d69745f756e7369676e65645f70726f706f73616c04011070726f70fd02017850726f706f73616c3c543a3a4d617850726f706f73616c4c656e6774683e000114b0466f726365207375626d697420616e20756e7369676e65642070726f706f73616c20746f2074686520444b4700ec546865726520617265206365727461696e2070726f706f73616c732077652764206c696b6520746f2062652070726f706f7361626c65206f6e6c79ec7468726f75676820726f6f7420616374696f6e732e205468652063757272656e746c7920737570706f727465642070726f706f73616c73206172653009312e205570646174696e67042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef902000002fd0200fd020c38776562625f70726f706f73616c732070726f706f73616c2050726f706f73616c04244d61784c656e6774680101030108185369676e65640c01106b696e64d4013050726f706f73616c4b696e6400011064617461f1020164426f756e6465645665633c75382c204d61784c656e6774683e0001247369676e6174757265f1020164426f756e6465645665633c75382c204d61784c656e6774683e00000020556e7369676e65640801106b696e64d4013050726f706f73616c4b696e6400011064617461f1020164426f756e6465645665633c75382c204d61784c656e6774683e0001000001030858646b675f72756e74696d655f7072696d6974697665733c437573746f6d5533324765747465720000000005030c5870616c6c65745f6272696467655f72656769737472791870616c6c65741043616c6c080454000449000108307365745f6d657461646174610801306272696467655f696e646578100138543a3a427269646765496e646578000110696e666f09030188427269646765496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e000028290153657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e005501496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7450666f7220746865206e6577206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e008c2d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e0088456d69747320605265736f7572636553657460206966207375636365737366756c2e4c666f7263655f72657365745f696e64696365730801307265736f757263655f6964739103013c5665633c5265736f7572636549643e0001306272696467655f696e646578100138543a3a427269646765496e646578000100042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e09030c5870616c6c65745f6272696467655f726567697374727914747970657328427269646765496e666f04284669656c644c696d697400000801286164646974696f6e616c0d0301b8426f756e6465645665633c285365726465446174612c20536572646544617461292c204669656c644c696d69743e00011c646973706c61791503012453657264654461746100000d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540111030453000004008d0301185665633c543e0000110300000408150315030015030c5870616c6c65745f6272696467655f726567697374727914747970657324536572646544617461000004001903011044617461000019030c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e65000000105261773004001d0300000100105261773104002103000002001052617732040025030000030010526177330400290300000400105261773404004000000500105261773504002d03000006001052617736040031030000070010526177370400350300000800105261773804009d010000090010526177390400390300000a0014526177313004003d0300000b001452617731310400410300000c001452617731320400450300000d001452617731330400490300000e0014526177313404004d0300000f00145261773135040051030000100014526177313604007901000011001452617731370400550300001200145261773138040059030000130014526177313904005d0300001400145261773230040011010000150014526177323104006103000016001452617732320400650300001700145261773233040069030000180014526177323404006d03000019001452617732350400710300001a001452617732360400750300001b001452617732370400790300001c0014526177323804007d0300001d001452617732390400810300001e001452617733300400850300001f001452617733310400890300002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c536861546872656532353604000400002500001d030000030000000008002103000003010000000800250300000302000000080029030000030300000008002d030000030500000008003103000003060000000800350300000307000000080039030000030900000008003d030000030a000000080041030000030b000000080045030000030c000000080049030000030d00000008004d030000030e000000080051030000030f0000000800550300000311000000080059030000031200000008005d030000031300000008006103000003150000000800650300000316000000080069030000031700000008006d03000003180000000800710300000319000000080075030000031a000000080079030000031b00000008007d030000031c000000080081030000031d000000080085030000031e000000080089030000031f00000008008d030000021103009103000002ed020095030c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000309841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e207472616e7366657208010c6e6577890201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001305d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000230944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e38666f7263655f7472616e736665720c010c6e6577890201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65e00110626f6f6c0003345501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004304101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e99030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616c9d030140426f756e64656443616c6c4f663c543e00011476616c7565fd01013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616c3102012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e6465783102013c5265666572656e64756d496e646578000110766f7465f401644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e64657810013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616c9d030140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616c9d030140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616c9d030140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f686173682c011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f686173682c011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e6465783102013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746f890201504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6ea5030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574890201504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e64657810013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574890201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173682c01104832353600013c6d617962655f7265665f696e646578a903015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e6465783102012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960307365745f6d657461646174610801146f776e6572fc01344d657461646174614f776e65720001286d617962655f68617368ad0301504f7074696f6e3c507265696d616765486173683e00123cd8536574206f7220636c6561722061206d65746164617461206f6620612070726f706f73616c206f722061207265666572656e64756d2e002c506172616d65746572733acc2d20606f726967696e603a204d75737420636f72726573706f6e6420746f2074686520604d657461646174614f776e6572602e3d01202020202d206045787465726e616c4f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479417070726f766560402020202020207468726573686f6c642e5901202020202d206045787465726e616c44656661756c744f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479416761696e737460402020202020207468726573686f6c642e4501202020202d206045787465726e616c4d616a6f726974794f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053696d706c654d616a6f7269747960402020202020207468726573686f6c642ec8202020202d20605369676e65646020627920612063726561746f7220666f722061207075626c69632070726f706f73616c2ef4202020202d20605369676e65646020746f20636c6561722061206d6574616461746120666f7220612066696e6973686564207265666572656e64756d2ee4202020202d2060526f6f746020746f207365742061206d6574616461746120666f7220616e206f6e676f696e67207265666572656e64756d2eb42d20606f776e6572603a20616e206964656e746966696572206f662061206d65746164617461206f776e65722e51012d20606d617962655f68617368603a205468652068617368206f6620616e206f6e2d636861696e2073746f72656420707265696d6167652e20604e6f6e656020746f20636c6561722061206d657461646174612e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9d0310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454018102010c184c6567616379040110686173682c01104861736800000018496e6c696e650400a1030134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e10010c75333200020000a1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000a5030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000a90304184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000ad0304184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c0000010000b1030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273cc01445665633c543a3a4163636f756e7449643e0001147072696d658001504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616c8102017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e643102010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c643102012c4d656d626572436f756e7400012070726f706f73616c8102017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e643102010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c2c011c543a3a48617368000114696e6465783102013450726f706f73616c496e64657800011c617070726f7665e00110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e6465642940636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e6465783102013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64b50301244f6c645765696768740001306c656e6774685f626f756e643102010c7533320004604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e6465783102013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642001185765696768740001306c656e6774685f626f756e643102010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb503000006b90300b903082873705f77656967687473244f6c645765696768740000040028010c7536340000bd030c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000024b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e28766573745f6f74686572040118746172676574890201504163636f756e7449644c6f6f6b75704f663c543e00012cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e3c7665737465645f7472616e73666572080118746172676574890201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65c10301a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00023464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e54666f7263655f7665737465645f7472616e736665720c0118736f75726365890201504163636f756e7449644c6f6f6b75704f663c543e000118746172676574890201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65c10301a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00033860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec1030c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d6265720000c5030c4c70616c6c65745f65636473615f636c61696d731870616c6c65741043616c6c04045400011814636c61696d08011064657374000130543a3a4163636f756e744964000148657468657265756d5f7369676e6174757265c903013845636473615369676e61747572650000608c4d616b65206120636c61696d20746f20636f6c6c65637420796f75722057454242732e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0050556e7369676e65642056616c69646174696f6e3a0501412063616c6c20746f20636c61696d206973206465656d65642076616c696420696620746865207369676e61747572652070726f7669646564206d6174636865737c746865206578706563746564207369676e6564206d657373616765206f663a00683e20457468657265756d205369676e6564204d6573736167653a943e2028636f6e666967757265642070726566697820737472696e672928616464726573732900a4616e6420606164647265737360206d6174636865732074686520606465737460206163636f756e742e002c506172616d65746572733ad82d206064657374603a205468652064657374696e6174696f6e206163636f756e7420746f207061796f75742074686520636c61696d2e5d012d2060657468657265756d5f7369676e6174757265603a20546865207369676e6174757265206f6620616e20657468657265756d207369676e6564206d657373616765206d61746368696e672074686520666f726d61744820206465736372696265642061626f76652e00203c7765696768743efc54686520776569676874206f6620746869732063616c6c20697320696e76617269616e74206f7665722074686520696e70757420706172616d65746572732ee057656967687420696e636c75646573206c6f67696320746f2076616c696461746520756e7369676e65642060636c61696d602063616c6c2e0058546f74616c20436f6d706c65786974793a204f283129243c2f7765696768743e286d696e745f636c61696d10010c77686f0d01013c457468657265756d4164647265737300011476616c756518013042616c616e63654f663c543e00014076657374696e675f7363686564756c65d10301d04f7074696f6e3c2842616c616e63654f663c543e2c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d626572293e00012473746174656d656e74d90301544f7074696f6e3c53746174656d656e744b696e643e00013c884d696e742061206e657720636c61696d20746f20636f6c6c6563742057454242732e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002c506172616d65746572733af02d206077686f603a2054686520457468657265756d206164647265737320616c6c6f77656420746f20636f6c6c656374207468697320636c61696d2ed02d206076616c7565603a20546865206e756d626572206f6620574542427320746861742077696c6c20626520636c61696d65642e0d012d206076657374696e675f7363686564756c65603a20416e206f7074696f6e616c2076657374696e67207363686564756c6520666f722074686573652057454242732e00203c7765696768743efc54686520776569676874206f6620746869732063616c6c20697320696e76617269616e74206f7665722074686520696e70757420706172616d65746572732e1d01576520617373756d6520776f7273742063617365207468617420626f74682076657374696e6720616e642073746174656d656e74206973206265696e6720696e7365727465642e0058546f74616c20436f6d706c65786974793a204f283129243c2f7765696768743e30636c61696d5f6174746573740c011064657374000130543a3a4163636f756e744964000148657468657265756d5f7369676e6174757265c903013845636473615369676e617475726500012473746174656d656e7430011c5665633c75383e00026ce84d616b65206120636c61696d20746f20636f6c6c65637420796f7572205745424273206279207369676e696e6720612073746174656d656e742e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0050556e7369676e65642056616c69646174696f6e3a2901412063616c6c20746f2060636c61696d5f61747465737460206973206465656d65642076616c696420696620746865207369676e61747572652070726f7669646564206d6174636865737c746865206578706563746564207369676e6564206d657373616765206f663a00683e20457468657265756d205369676e6564204d6573736167653ac03e2028636f6e666967757265642070726566697820737472696e67292861646472657373292873746174656d656e7429004901616e6420606164647265737360206d6174636865732074686520606465737460206163636f756e743b20746865206073746174656d656e7460206d757374206d617463682074686174207768696368206973c06578706563746564206163636f7264696e6720746f20796f757220707572636861736520617272616e67656d656e742e002c506172616d65746572733ad82d206064657374603a205468652064657374696e6174696f6e206163636f756e7420746f207061796f75742074686520636c61696d2e5d012d2060657468657265756d5f7369676e6174757265603a20546865207369676e6174757265206f6620616e20657468657265756d207369676e6564206d657373616765206d61746368696e672074686520666f726d61744820206465736372696265642061626f76652e39012d206073746174656d656e74603a20546865206964656e74697479206f66207468652073746174656d656e74207768696368206973206265696e6720617474657374656420746f20696e207468653020207369676e61747572652e00203c7765696768743efc54686520776569676874206f6620746869732063616c6c20697320696e76617269616e74206f7665722074686520696e70757420706172616d65746572732efc57656967687420696e636c75646573206c6f67696320746f2076616c696461746520756e7369676e65642060636c61696d5f617474657374602063616c6c2e0058546f74616c20436f6d706c65786974793a204f283129243c2f7765696768743e1861747465737404012473746174656d656e7430011c5665633c75383e00034cf441747465737420746f20612073746174656d656e742c206e656564656420746f2066696e616c697a652074686520636c61696d732070726f636573732e0019015741524e494e473a20496e73656375726520756e6c65737320796f757220636861696e20696e636c75646573206050726576616c69646174654174746573747360206173206148605369676e6564457874656e73696f6e602e0050556e7369676e65642056616c69646174696f6e3a2901412063616c6c20746f20617474657374206973206465656d65642076616c6964206966207468652073656e6465722068617320612060507265636c61696d602072656769737465726564f4616e642070726f76696465732061206073746174656d656e746020776869636820697320657870656374656420666f7220746865206163636f756e742e002c506172616d65746572733a39012d206073746174656d656e74603a20546865206964656e74697479206f66207468652073746174656d656e74207768696368206973206265696e6720617474657374656420746f20696e207468653020207369676e61747572652e00203c7765696768743efc54686520776569676874206f6620746869732063616c6c20697320696e76617269616e74206f7665722074686520696e70757420706172616d65746572732ef057656967687420696e636c75646573206c6f67696320746f20646f207072652d76616c69646174696f6e206f6e2060617474657374602063616c6c2e0058546f74616c20436f6d706c65786974793a204f283129243c2f7765696768743e286d6f76655f636c61696d0c010c6f6c640d01013c457468657265756d4164647265737300010c6e65770d01013c457468657265756d416464726573730001386d617962655f707265636c61696d8001504f7074696f6e3c543a3a4163636f756e7449643e0004005c666f7263655f7365745f6578706972795f636f6e6669670801306578706972795f626c6f636b100138543a3a426c6f636b4e756d62657200011064657374000130543a3a4163636f756e74496400050878536574207468652076616c756520666f7220657870697279636f6e6669678443616e206f6e6c792062652063616c6c656420627920466f7263654f726967696e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec903084c70616c6c65745f65636473615f636c61696d733845636473615369676e617475726500000400cd0301205b75383b2036355d0000cd03000003410000000800d10304184f7074696f6e04045401d5030108104e6f6e6500000010536f6d650400d5030000010000d5030000040c18181000d90304184f7074696f6e04045401dd030108104e6f6e6500000010536f6d650400dd030000010000dd03084c70616c6c65745f65636473615f636c61696d733453746174656d656e744b696e640001081c526567756c6172000000105361667400010000e1030c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c65741043616c6c04045400011810766f7465080114766f746573cc01445665633c543a3a4163636f756e7449643e00011476616c7565fd01013042616c616e63654f663c543e00004c5901566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e20546869732063616e2062652063616c6c656420746fe07365742074686520696e697469616c20766f7465732c206f722075706461746520616c7265616479206578697374696e6720766f7465732e005d0155706f6e20696e697469616c20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e642061206465706f73697420616d6f756e742069734d0172657365727665642e20546865206465706f736974206973206261736564206f6e20746865206e756d626572206f6620766f74657320616e642063616e2062652075706461746564206f7665722074696d652e004c5468652060766f746573602073686f756c643a4420202d206e6f7420626520656d7074792e550120202d206265206c657373207468616e20746865206e756d626572206f6620706f737369626c652063616e646964617465732e204e6f7465207468617420616c6c2063757272656e74206d656d6265727320616e6411012020202072756e6e6572732d75702061726520616c736f206175746f6d61746963616c6c792063616e6469646174657320666f7220746865206e65787420726f756e642e0049014966206076616c756560206973206d6f7265207468616e206077686f60277320667265652062616c616e63652c207468656e20746865206d6178696d756d206f66207468652074776f20697320757365642e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e002c232323205761726e696e6700550149742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f202a2a4e4f542a2a20706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865a86c6f636b20616e64206b65657020736f6d6520666f722066757274686572206f7065726174696f6e732e3072656d6f76655f766f7465720001146c52656d6f766520606f726967696e60206173206120766f7465722e00b8546869732072656d6f76657320746865206c6f636b20616e642072657475726e7320746865206465706f7369742e00fc546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e656420616e64206265206120766f7465722e407375626d69745f63616e64696461637904013c63616e6469646174655f636f756e743102010c75333200023c11015375626d6974206f6e6573656c6620666f722063616e6469646163792e204120666978656420616d6f756e74206f66206465706f736974206973207265636f726465642e005d01416c6c2063616e64696461746573206172652077697065642061742074686520656e64206f6620746865207465726d2e205468657920656974686572206265636f6d652061206d656d6265722f72756e6e65722d75702ccc6f72206c65617665207468652073797374656d207768696c65207468656972206465706f73697420697320736c61736865642e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e002c232323205761726e696e67005d014576656e20696620612063616e64696461746520656e6473207570206265696e672061206d656d6265722c2074686579206d7573742063616c6c205b6043616c6c3a3a72656e6f756e63655f63616e646964616379605d5901746f20676574207468656972206465706f736974206261636b2e204c6f73696e67207468652073706f7420696e20616e20656c656374696f6e2077696c6c20616c77617973206c65616420746f206120736c6173682e000901546865206e756d626572206f662063757272656e742063616e64696461746573206d7573742062652070726f7669646564206173207769746e65737320646174612e34232320436f6d706c6578697479a44f2843202b206c6f672843292920776865726520432069732063616e6469646174655f636f756e742e4872656e6f756e63655f63616e64696461637904012872656e6f756e63696e67e503012852656e6f756e63696e670003504d0152656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c3c6f7574636f6d65732065786973743a0049012d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c20746865206465706f736974206973f02020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e61012d20606f726967696e6020697320612063757272656e742072756e6e65722d75702e20496e207468697320636173652c20746865206465706f73697420697320756e72657365727665642c2072657475726e656420616e648c20206f726967696e2069732072656d6f76656420617320612072756e6e65722d75702e55012d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c20746865206465706f73697420697320756e726573657276656420616e64206f726967696e2069735501202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e6101202053696d696c617220746f205b6072656d6f76655f6d656d626572605d2853656c663a3a72656d6f76655f6d656d626572292c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865795901202061726520696d6d6564696174656c7920757365642e20496620746865207072696d652069732072656e6f756e63696e672c207468656e206e6f207072696d652077696c6c20657869737420756e74696c207468653420206e65787420726f756e642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642c20616e642068617665206f6e65206f66207468652061626f766520726f6c65732ee05468652074797065206f662072656e6f756e63696e67206d7573742062652070726f7669646564206173207769746e65737320646174612e0034232320436f6d706c6578697479dc20202d2052656e6f756e63696e673a3a43616e64696461746528636f756e74293a204f28636f756e74202b206c6f6728636f756e7429297020202d2052656e6f756e63696e673a3a4d656d6265723a204f2831297820202d2052656e6f756e63696e673a3a52756e6e657255703a204f2831293472656d6f76655f6d656d6265720c010c77686f890201504163636f756e7449644c6f6f6b75704f663c543e000128736c6173685f626f6e64e00110626f6f6c000138726572756e5f656c656374696f6ee00110626f6f6c000440590152656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f667c746865206f7574676f696e67206d656d62657220697320736c61736865642e005501496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c616365732074686555016f7574676f696e67206d656d6265722e204f74686572776973652c2069662060726572756e5f656c656374696f6e60206973206074727565602c2061206e65772070687261676d656e20656c656374696f6e2069737c737461727465642c20656c73652c206e6f7468696e672068617070656e732e00590149662060736c6173685f626f6e64602069732073657420746f20747275652c2074686520626f6e64206f6620746865206d656d626572206265696e672072656d6f76656420697320736c61736865642e20456c73652c3c69742069732072657475726e65642e00b8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e0041014e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e0034232320436f6d706c657869747905012d20436865636b2064657461696c73206f662072656d6f76655f616e645f7265706c6163655f6d656d626572282920616e6420646f5f70687261676d656e28292e50636c65616e5f646566756e63745f766f746572730801286e756d5f766f7465727310010c75333200012c6e756d5f646566756e637410010c7533320005244501436c65616e20616c6c20766f746572732077686f2061726520646566756e63742028692e652e207468657920646f206e6f7420736572766520616e7920707572706f736520617420616c6c292e20546865ac6465706f736974206f66207468652072656d6f76656420766f74657273206172652072657475726e65642e0001015468697320697320616e20726f6f742066756e6374696f6e20746f2062652075736564206f6e6c7920666f7220636c65616e696e67207468652073746174652e00b8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e0034232320436f6d706c65786974798c2d20436865636b2069735f646566756e63745f766f74657228292064657461696c732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee503086470616c6c65745f656c656374696f6e735f70687261676d656e2852656e6f756e63696e6700010c184d656d6265720000002052756e6e657255700001002443616e64696461746504003102010c75333200020000e9030c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6eed0301b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e657373bd040158536f6c7574696f6e4f72536e617073686f7453697a65000038a45375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e00c8546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e003d0154686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c79550176616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e735d0174686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617240746f20616e20696e686572656e74292e005901546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c4d0170616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c799c70757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e00e04e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265c10401544f7074696f6e3c456c656374696f6e53636f72653e000114b05365742061206e65772076616c756520666f7220604d696e696d756d556e7472757374656453636f7265602e00d84469737061746368206f726967696e206d75737420626520616c69676e656420776974682060543a3a466f7263654f726967696e602e00f05468697320636865636b2063616e206265207475726e6564206f66662062792073657474696e67207468652076616c756520746f20604e6f6e65602e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f727473c5040158537570706f7274733c543a3a4163636f756e7449643e0002205901536574206120736f6c7574696f6e20696e207468652071756575652c20746f2062652068616e646564206f757420746f2074686520636c69656e74206f6620746869732070616c6c657420696e20746865206e6578748863616c6c20746f2060456c656374696f6e50726f76696465723a3a656c656374602e004501546869732063616e206f6e6c79206265207365742062792060543a3a466f7263654f726967696e602c20616e64206f6e6c79207768656e207468652070686173652069732060456d657267656e6379602e00610154686520736f6c7574696f6e206973206e6f7420636865636b656420666f7220616e7920666561736962696c69747920616e6420697320617373756d656420746f206265207472757374776f727468792c20617320616e795101666561736962696c69747920636865636b20697473656c662063616e20696e207072696e6369706c652063617573652074686520656c656374696f6e2070726f6365737320746f206661696c202864756520746f686d656d6f72792f77656967687420636f6e73747261696e73292e187375626d69740401307261775f736f6c7574696f6eed0301b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003249c5375626d6974206120736f6c7574696f6e20666f7220746865207369676e65642070686173652e00d0546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f7369676e65645f5f2e005d0154686520736f6c7574696f6e20697320706f74656e7469616c6c79207175657565642c206261736564206f6e2074686520636c61696d65642073636f726520616e642070726f6365737365642061742074686520656e64506f6620746865207369676e65642070686173652e005d0141206465706f73697420697320726573657276656420616e64207265636f7264656420666f722074686520736f6c7574696f6e2e204261736564206f6e20746865206f7574636f6d652c2074686520736f6c7574696f6e15016d696768742062652072657761726465642c20736c61736865642c206f722067657420616c6c206f7220612070617274206f6620746865206465706f736974206261636b2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f74657273a903012c4f7074696f6e3c7533323e0001446d617962655f6d61785f74617267657473a903012c4f7074696f6e3c7533323e00041080547269676765722074686520676f7665726e616e63652066616c6c6261636b2e004901546869732063616e206f6e6c792062652063616c6c6564207768656e205b6050686173653a3a456d657267656e6379605d20697320656e61626c65642c20617320616e20616c7465726e617469766520746fc063616c6c696e67205b6043616c6c3a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed03089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e04045301f103000c0120736f6c7574696f6ef10301045300011473636f726529010134456c656374696f6e53636f7265000114726f756e6410010c7533320000f103086474616e676c655f7374616e64616c6f6e655f72756e74696d65384e706f73536f6c7574696f6e31360000400118766f74657331f50300000118766f74657332010400000118766f74657333150400000118766f74657334210400000118766f746573352d0400000118766f74657336390400000118766f74657337450400000118766f74657338510400000118766f746573395d040000011c766f746573313069040000011c766f746573313175040000011c766f746573313281040000011c766f74657331338d040000011c766f746573313499040000011c766f7465733135a5040000011c766f7465733136b104000000f503000002f90300f903000004083102fd0300fd03000006bc00010400000205040005040000040c31020904fd0300090400000408fd030d04000d0400000611040011040c3473705f61726974686d65746963287065725f7468696e67731850657255313600000400bc010c7531360000150400000219040019040000040c31021d04fd03001d0400000302000000090400210400000225040025040000040c31022904fd03002904000003030000000904002d0400000231040031040000040c31023504fd030035040000030400000009040039040000023d04003d040000040c31024104fd0300410400000305000000090400450400000249040049040000040c31024d04fd03004d0400000306000000090400510400000255040055040000040c31025904fd03005904000003070000000904005d0400000261040061040000040c31026504fd030065040000030800000009040069040000026d04006d040000040c31027104fd0300710400000309000000090400750400000279040079040000040c31027d04fd03007d040000030a000000090400810400000285040085040000040c31028904fd030089040000030b0000000904008d0400000291040091040000040c31029504fd030095040000030c00000009040099040000029d04009d040000040c3102a104fd0300a1040000030d000000090400a504000002a90400a9040000040c3102ad04fd0300ad040000030e000000090400b104000002b50400b5040000040c3102b904fd0300b9040000030f000000090400bd04089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f746572733102010c75333200011c746172676574733102010c7533320000c10404184f7074696f6e0404540129010108104e6f6e6500000010536f6d65040029010000010000c504000002c90400c9040000040800cd0400cd04084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273190101845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e0000d104103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400016810626f6e640c0128636f6e74726f6c6c6572890201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565fd01013042616c616e63654f663c543e0001147061796565d504017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00003c610154616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c80626520746865206163636f756e74207468617420636f6e74726f6c732069742e002d016076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e002101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e003c456d6974732060426f6e646564602e34232320436f6d706c6578697479d02d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e1c2d204f2831292e642d20546872656520657874726120444220656e74726965732e004d014e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e65643d01756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e28626f6e645f65787472610401386d61785f6164646974696f6e616cfd01013042616c616e63654f663c543e000138610141646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757030666f72207374616b696e672e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e004d01557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e5501556e6c696b65205b60626f6e64605d2853656c663a3a626f6e6429206f72205b60756e626f6e64605d2853656c663a3a756e626f6e642920746869732066756e6374696f6e20646f6573206e6f7420696d706f7365bc616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e003c456d6974732060426f6e646564602e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e1c2d204f2831292e18756e626f6e6404011476616c7565fd01013042616c616e63654f663c543e00024c51015363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64fc706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e2101543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0045014f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665bc7468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e0031014e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d6178556e6c6f636b696e674368756e6b736029410163616e20636f2d657869737473206174207468652073616d652074696d652e20496620746865726520617265206e6f20756e6c6f636b696e67206368756e6b7320736c6f747320617661696c61626c6545015b6043616c6c3a3a77697468647261775f756e626f6e646564605d2069732063616c6c656420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00390149662061207573657220656e636f756e74657273207468652060496e73756666696369656e74426f6e6460206572726f72207768656e2063616c6c696e6720746869732065787472696e7369632c1901746865792073686f756c642063616c6c20606368696c6c6020666972737420696e206f7264657220746f206672656520757020746865697220626f6e6465642066756e64732e0044456d6974732060556e626f6e646564602e009453656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c753332000338290152656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e0031015468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4877686174657665722069742077616e74732e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722e0048456d697473206057697468647261776e602e006853656520616c736f205b6043616c6c3a3a756e626f6e64605d2e0034232320436f6d706c6578697479d84f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f766509014e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e2076616c696461746504011470726566733d01013856616c696461746f725072656673000414e44465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e206e6f6d696e61746504011c74617267657473d90401645665633c4163636f756e7449644c6f6f6b75704f663c543e3e0005280d014465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c65786974792d012d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e29050177686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542028543a3a4d61784e6f6d696e6174696f6e73292ed42d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e146368696c6c000628c44465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e502d20436f6e7461696e73206f6e6520726561642ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e247365745f70617965650401147061796565d504017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000730b42852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479182d204f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e242d2d2d2d2d2d2d2d2d387365745f636f6e74726f6c6c6572040128636f6e74726f6c6c6572890201504163636f756e7449644c6f6f6b75704f663c543e00082c8c2852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479104f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e4c7365745f76616c696461746f725f636f756e7404010c6e65773102010c75333200091890536574732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c6578697479104f28312960696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616c3102010c753332000a1ce4496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f7273207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f72dd04011c50657263656e74000b1c0d015363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f72207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c34ac466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e3901546875732074686520656c656374696f6e2070726f63657373206d6179206265206f6e676f696e67207768656e20746869732069732063616c6c65642e20496e2074686973206361736520746865dc656c656374696f6e2077696c6c20636f6e74696e756520756e74696c20746865206e65787420657261206973207472696767657265642e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f28312934666f7263655f6e65775f657261000d384901466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c2062659c726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f283129447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573cc01445665633c543a3a4163636f756e7449643e000e0cc8536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0c0901466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e50666f7263655f6e65775f6572615f616c776179730010240101466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573950101205665633c7533323e0011149443616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e009843616e2062652063616c6c6564206279207468652060543a3a41646d696e4f726967696e602e000101506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e64657800122c0d01506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e0049012d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f2501202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e0034232320436f6d706c6578697479b82d204174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e187265626f6e6404011476616c7565fd01013042616c616e63654f663c543e00131cdc5265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e00d4546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479d02d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73882d20426f756e64656420627920604d6178556e6c6f636b696e674368756e6b73602e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014305d0152656d6f766520616c6c2064617461207374727563747572657320636f6e6365726e696e672061207374616b65722f7374617368206f6e636520697420697320617420612073746174652077686572652069742063616e0501626520636f6e736964657265642060647573746020696e20746865207374616b696e672073797374656d2e2054686520726571756972656d656e7473206172653a000501312e207468652060746f74616c5f62616c616e636560206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e1101322e206f722c2074686520606c65646765722e746f74616c60206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e00550154686520666f726d65722063616e2068617070656e20696e206361736573206c696b65206120736c6173683b20746865206c6174746572207768656e20612066756c6c7920756e626f6e646564206163636f756e7409016973207374696c6c20726563656976696e67207374616b696e67207265776172647320696e206052657761726444657374696e6174696f6e3a3a5374616b6564602e00310149742063616e2062652063616c6c656420627920616e796f6e652c206173206c6f6e672061732060737461736860206d65657473207468652061626f766520726571756972656d656e74732e00dc526566756e647320746865207472616e73616374696f6e20666565732075706f6e207375636365737366756c20657865637574696f6e2e106b69636b04010c77686fd90401645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00152ce052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e004d012d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f72207768696368c0202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e0055014e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f78626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e64e1040158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e64e1040158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e74e5040134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e74e5040134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c64e9040144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6eed040144436f6e6669674f703c50657262696c6c3e001644ac5570646174652074686520766172696f7573207374616b696e6720636f6e66696775726174696f6e73202e0025012a20606d696e5f6e6f6d696e61746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f2062652061206e6f6d696e61746f722e25012a20606d696e5f76616c696461746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f20626520612076616c696461746f722e55012a20606d61785f6e6f6d696e61746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e2062652061206e6f6d696e61746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e55012a20606d61785f76616c696461746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e20626520612076616c696461746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e59012a20606368696c6c5f7468726573686f6c64603a2054686520726174696f206f6620606d61785f6e6f6d696e61746f725f636f756e7460206f7220606d61785f76616c696461746f725f636f756e74602077686963681901202073686f756c642062652066696c6c656420696e206f7264657220666f722074686520606368696c6c5f6f7468657260207472616e73616374696f6e20746f20776f726b2e61012a20606d696e5f636f6d6d697373696f6e603a20546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e550120205468697320697320636865636b6564206f6e6c792075706f6e2063616c6c696e67206076616c6964617465602e204578697374696e672076616c696461746f727320617265206e6f742061666665637465642e00c452756e74696d654f726967696e206d75737420626520526f6f7420746f2063616c6c20746869732066756e6374696f6e2e0035014e4f54453a204578697374696e67206e6f6d696e61746f727320616e642076616c696461746f72732077696c6c206e6f742062652061666665637465642062792074686973207570646174652e1101746f206b69636b2070656f706c6520756e64657220746865206e6577206c696d6974732c20606368696c6c5f6f74686572602073686f756c642062652063616c6c65642e2c6368696c6c5f6f74686572040128636f6e74726f6c6c6572000130543a3a4163636f756e74496400176841014465636c61726520612060636f6e74726f6c6c65726020746f2073746f702070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e004101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2c206275742063616e2062652063616c6c656420627920616e796f6e652e0059014966207468652063616c6c6572206973207468652073616d652061732074686520636f6e74726f6c6c6572206265696e672074617267657465642c207468656e206e6f206675727468657220636865636b7320617265d8656e666f726365642c20616e6420746869732066756e6374696f6e2062656861766573206a757374206c696b6520606368696c6c602e005d014966207468652063616c6c657220697320646966666572656e74207468616e2074686520636f6e74726f6c6c6572206265696e672074617267657465642c2074686520666f6c6c6f77696e6720636f6e646974696f6e73306d757374206265206d65743a001d012a2060636f6e74726f6c6c657260206d7573742062656c6f6e6720746f2061206e6f6d696e61746f722077686f20686173206265636f6d65206e6f6e2d6465636f6461626c652c000c4f723a003d012a204120604368696c6c5468726573686f6c6460206d7573742062652073657420616e6420636865636b656420776869636820646566696e657320686f7720636c6f736520746f20746865206d6178550120206e6f6d696e61746f7273206f722076616c696461746f7273207765206d757374207265616368206265666f72652075736572732063616e207374617274206368696c6c696e67206f6e652d616e6f746865722e59012a204120604d61784e6f6d696e61746f72436f756e746020616e6420604d617856616c696461746f72436f756e7460206d75737420626520736574207768696368206973207573656420746f2064657465726d696e65902020686f7720636c6f73652077652061726520746f20746865207468726573686f6c642e5d012a204120604d696e4e6f6d696e61746f72426f6e646020616e6420604d696e56616c696461746f72426f6e6460206d7573742062652073657420616e6420636865636b65642c2077686963682064657465726d696e65735101202069662074686973206973206120706572736f6e20746861742073686f756c64206265206368696c6c6564206265636175736520746865792068617665206e6f74206d657420746865207468726573686f6c64402020626f6e642072657175697265642e005501546869732063616e2062652068656c7066756c20696620626f6e6420726571756972656d656e74732061726520757064617465642c20616e64207765206e65656420746f2072656d6f7665206f6c642075736572739877686f20646f206e6f74207361746973667920746865736520726571756972656d656e74732e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400180c4501466f72636520612076616c696461746f7220746f2068617665206174206c6561737420746865206d696e696d756d20636f6d6d697373696f6e2e20546869732077696c6c206e6f74206166666563742061610176616c696461746f722077686f20616c726561647920686173206120636f6d6d697373696f6e2067726561746572207468616e206f7220657175616c20746f20746865206d696e696d756d2e20416e79206163636f756e743863616e2063616c6c20746869732e487365745f6d696e5f636f6d6d697373696f6e04010c6e65773901011c50657262696c6c00191025015365747320746865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e005901546869732063616c6c20686173206c6f7765722070726976696c65676520726571756972656d656e7473207468616e20607365745f7374616b696e675f636f6e6669676020616e642063616e2062652063616c6c6564cc6279207468652060543a3a41646d696e4f726967696e602e20526f6f742063616e20616c776179732063616c6c20746869732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed504083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e6500040000d904000002890200dd040c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000e104103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f766500020000e504103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f766500020000e904103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f7004045401dd04010c104e6f6f700000000c5365740400dd040104540001001852656d6f766500020000ed04103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454013901010c104e6f6f700000000c536574040039010104540001001852656d6f766500020000f1040c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973f504011c543a3a4b65797300011470726f6f6630011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef5040c6474616e676c655f7374616e64616c6f6e655f72756e74696d65186f70617175652c53657373696f6e4b657973000010011061757261f90401c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011c6772616e6470619c01d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65e90101d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300010c646b67b001c03c444b47206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000f904104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c696300000400ed01013c737232353531393a3a5075626c69630000fd040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565fd01013c42616c616e63654f663c542c20493e00012c62656e6566696369617279890201504163636f756e7449644c6f6f6b75704f663c543e000018290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e0034232320436f6d706c6578697479182d204f2831293c72656a6563745f70726f706f73616c04012c70726f706f73616c5f69643102013450726f706f73616c496e646578000118f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e0034232320436f6d706c6578697479182d204f28312940617070726f76655f70726f706f73616c04012c70726f706f73616c5f69643102013450726f706f73616c496e64657800021c5901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e0034232320436f6d706c657869747920202d204f2831292e147370656e64080118616d6f756e74fd01013c42616c616e63654f663c542c20493e00012c62656e6566696369617279890201504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f69643102013450726f706f73616c496e6465780004342d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c0034232320436f6d706c6578697479ac2d204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e01050c3c70616c6c65745f626f756e746965731870616c6c65741043616c6c0804540004490001243870726f706f73655f626f756e747908011476616c7565fd01013c42616c616e63654f663c542c20493e00012c6465736372697074696f6e30011c5665633c75383e0000305450726f706f73652061206e657720626f756e74792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173510160446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e2049742077696c6c20626520756e72657365727665642075706f6e20617070726f76616c2c646f7220736c6173686564207768656e2072656a65637465642e00f82d206063757261746f72603a205468652063757261746f72206163636f756e742077686f6d2077696c6c206d616e616765207468697320626f756e74792e642d2060666565603a205468652063757261746f72206665652e25012d206076616c7565603a2054686520746f74616c207061796d656e7420616d6f756e74206f66207468697320626f756e74792c2063757261746f722066656520696e636c756465642ec02d20606465736372697074696f6e603a20546865206465736372697074696f6e206f66207468697320626f756e74792e38617070726f76655f626f756e7479040124626f756e74795f69643102012c426f756e7479496e64657800011c5d01417070726f7665206120626f756e74792070726f706f73616c2e2041742061206c617465722074696d652c2074686520626f756e74792077696c6c2062652066756e64656420616e64206265636f6d6520616374697665a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5370656e644f726967696e602e0034232320436f6d706c65786974791c2d204f2831292e3c70726f706f73655f63757261746f720c0124626f756e74795f69643102012c426f756e7479496e64657800011c63757261746f72890201504163636f756e7449644c6f6f6b75704f663c543e00010c666565fd01013c42616c616e63654f663c542c20493e0002189041737369676e20612063757261746f7220746f20612066756e64656420626f756e74792e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5370656e644f726967696e602e0034232320436f6d706c65786974791c2d204f2831292e40756e61737369676e5f63757261746f72040124626f756e74795f69643102012c426f756e7479496e6465780003447c556e61737369676e2063757261746f722066726f6d206120626f756e74792e001d01546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c656420627920746865206052656a6563744f726967696e602061207369676e6564206f726967696e2e003d01496620746869732066756e6374696f6e2069732063616c6c656420627920746865206052656a6563744f726967696e602c20776520617373756d652074686174207468652063757261746f7220697331016d616c6963696f7573206f7220696e6163746976652e204173206120726573756c742c2077652077696c6c20736c617368207468652063757261746f72207768656e20706f737369626c652e006101496620746865206f726967696e206973207468652063757261746f722c2077652074616b6520746869732061732061207369676e20746865792061726520756e61626c6520746f20646f207468656972206a6f6220616e645d01746865792077696c6c696e676c7920676976652075702e20576520636f756c6420736c617368207468656d2c2062757420666f72206e6f7720776520616c6c6f77207468656d20746f207265636f76657220746865697235016465706f73697420616e64206578697420776974686f75742069737375652e20285765206d61792077616e7420746f206368616e67652074686973206966206974206973206162757365642e29005d0146696e616c6c792c20746865206f726967696e2063616e20626520616e796f6e6520696620616e64206f6e6c79206966207468652063757261746f722069732022696e616374697665222e205468697320616c6c6f77736101616e796f6e6520696e2074686520636f6d6d756e69747920746f2063616c6c206f7574207468617420612063757261746f72206973206e6f7420646f696e67207468656972206475652064696c6967656e63652c20616e64390177652073686f756c64207069636b2061206e65772063757261746f722e20496e20746869732063617365207468652063757261746f722073686f756c6420616c736f20626520736c61736865642e0034232320436f6d706c65786974791c2d204f2831292e386163636570745f63757261746f72040124626f756e74795f69643102012c426f756e7479496e64657800041c94416363657074207468652063757261746f7220726f6c6520666f72206120626f756e74792e290141206465706f7369742077696c6c2062652072657365727665642066726f6d2063757261746f7220616e6420726566756e642075706f6e207375636365737366756c207061796f75742e00904d6179206f6e6c792062652063616c6c65642066726f6d207468652063757261746f722e0034232320436f6d706c65786974791c2d204f2831292e3061776172645f626f756e7479080124626f756e74795f69643102012c426f756e7479496e64657800012c62656e6566696369617279890201504163636f756e7449644c6f6f6b75704f663c543e0005285901417761726420626f756e747920746f20612062656e6566696369617279206163636f756e742e205468652062656e65666963696172792077696c6c2062652061626c6520746f20636c61696d207468652066756e647338616674657220612064656c61792e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652063757261746f72206f66207468697320626f756e74792e00882d2060626f756e74795f6964603a20426f756e747920494420746f2061776172642e19012d206062656e6566696369617279603a205468652062656e6566696369617279206163636f756e742077686f6d2077696c6c207265636569766520746865207061796f75742e0034232320436f6d706c65786974791c2d204f2831292e30636c61696d5f626f756e7479040124626f756e74795f69643102012c426f756e7479496e646578000620ec436c61696d20746865207061796f75742066726f6d20616e206177617264656420626f756e7479206166746572207061796f75742064656c61792e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652062656e6566696369617279206f66207468697320626f756e74792e00882d2060626f756e74795f6964603a20426f756e747920494420746f20636c61696d2e0034232320436f6d706c65786974791c2d204f2831292e30636c6f73655f626f756e7479040124626f756e74795f69643102012c426f756e7479496e646578000724390143616e63656c20612070726f706f736564206f722061637469766520626f756e74792e20416c6c207468652066756e64732077696c6c2062652073656e7420746f20747265617375727920616e64cc7468652063757261746f72206465706f7369742077696c6c20626520756e726573657276656420696620706f737369626c652e00c84f6e6c792060543a3a52656a6563744f726967696e602069732061626c6520746f2063616e63656c206120626f756e74792e008c2d2060626f756e74795f6964603a20426f756e747920494420746f2063616e63656c2e0034232320436f6d706c65786974791c2d204f2831292e50657874656e645f626f756e74795f657870697279080124626f756e74795f69643102012c426f756e7479496e64657800011872656d61726b30011c5665633c75383e000824ac457874656e6420746865206578706972792074696d65206f6620616e2061637469766520626f756e74792e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652063757261746f72206f66207468697320626f756e74792e008c2d2060626f756e74795f6964603a20426f756e747920494420746f20657874656e642e8c2d206072656d61726b603a206164646974696f6e616c20696e666f726d6174696f6e2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e05050c5470616c6c65745f6368696c645f626f756e746965731870616c6c65741043616c6c04045400011c406164645f6368696c645f626f756e74790c0140706172656e745f626f756e74795f69643102012c426f756e7479496e64657800011476616c7565fd01013042616c616e63654f663c543e00012c6465736372697074696f6e30011c5665633c75383e00004c5c4164642061206e6577206368696c642d626f756e74792e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652063757261746f72206f6620706172656e74dc626f756e747920616e642074686520706172656e7420626f756e7479206d75737420626520696e2022616374697665222073746174652e0005014368696c642d626f756e74792067657473206164646564207375636365737366756c6c7920262066756e642067657473207472616e736665727265642066726f6d0901706172656e7420626f756e747920746f206368696c642d626f756e7479206163636f756e742c20696620706172656e7420626f756e74792068617320656e6f7567686c66756e64732c20656c7365207468652063616c6c206661696c732e000d01557070657220626f756e6420746f206d6178696d756d206e756d626572206f662061637469766520206368696c6420626f756e7469657320746861742063616e206265a8616464656420617265206d616e61676564207669612072756e74696d6520747261697420636f6e666967985b60436f6e6669673a3a4d61784163746976654368696c64426f756e7479436f756e74605d2e0001014966207468652063616c6c20697320737563636573732c2074686520737461747573206f66206368696c642d626f756e7479206973207570646174656420746f20224164646564222e004d012d2060706172656e745f626f756e74795f6964603a20496e646578206f6620706172656e7420626f756e747920666f72207768696368206368696c642d626f756e7479206973206265696e672061646465642eb02d206076616c7565603a2056616c756520666f7220657865637574696e67207468652070726f706f73616c2edc2d20606465736372697074696f6e603a2054657874206465736372697074696f6e20666f7220746865206368696c642d626f756e74792e3c70726f706f73655f63757261746f72100140706172656e745f626f756e74795f69643102012c426f756e7479496e64657800013c6368696c645f626f756e74795f69643102012c426f756e7479496e64657800011c63757261746f72890201504163636f756e7449644c6f6f6b75704f663c543e00010c666565fd01013042616c616e63654f663c543e00013ca050726f706f73652063757261746f7220666f722066756e646564206368696c642d626f756e74792e000d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652063757261746f72206f6620706172656e7420626f756e74792e001101506172656e7420626f756e7479206d75737420626520696e206163746976652073746174652c20666f722074686973206368696c642d626f756e74792063616c6c20746f14776f726b2e000d014368696c642d626f756e7479206d75737420626520696e20224164646564222073746174652c20666f722070726f63657373696e67207468652063616c6c2e20416e6405017374617465206f66206368696c642d626f756e7479206973206d6f76656420746f202243757261746f7250726f706f73656422206f6e207375636365737366756c4063616c6c20636f6d706c6574696f6e2e00b42d2060706172656e745f626f756e74795f6964603a20496e646578206f6620706172656e7420626f756e74792eac2d20606368696c645f626f756e74795f6964603a20496e646578206f66206368696c6420626f756e74792eb42d206063757261746f72603a2041646472657373206f66206368696c642d626f756e74792063757261746f722eec2d2060666565603a207061796d656e742066656520746f206368696c642d626f756e74792063757261746f7220666f7220657865637574696f6e2e386163636570745f63757261746f72080140706172656e745f626f756e74795f69643102012c426f756e7479496e64657800013c6368696c645f626f756e74795f69643102012c426f756e7479496e64657800024cb4416363657074207468652063757261746f7220726f6c6520666f7220746865206368696c642d626f756e74792e00f4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652063757261746f72206f662074686973346368696c642d626f756e74792e00ec41206465706f7369742077696c6c2062652072657365727665642066726f6d207468652063757261746f7220616e6420726566756e642075706f6e887375636365737366756c207061796f7574206f722063616e63656c6c6174696f6e2e00f846656520666f722063757261746f722069732064656475637465642066726f6d2063757261746f7220666565206f6620706172656e7420626f756e74792e001101506172656e7420626f756e7479206d75737420626520696e206163746976652073746174652c20666f722074686973206368696c642d626f756e74792063616c6c20746f14776f726b2e000d014368696c642d626f756e7479206d75737420626520696e202243757261746f7250726f706f736564222073746174652c20666f722070726f63657373696e6720746865090163616c6c2e20416e64207374617465206f66206368696c642d626f756e7479206973206d6f76656420746f202241637469766522206f6e207375636365737366756c4063616c6c20636f6d706c6574696f6e2e00b42d2060706172656e745f626f756e74795f6964603a20496e646578206f6620706172656e7420626f756e74792eac2d20606368696c645f626f756e74795f6964603a20496e646578206f66206368696c6420626f756e74792e40756e61737369676e5f63757261746f72080140706172656e745f626f756e74795f69643102012c426f756e7479496e64657800013c6368696c645f626f756e74795f69643102012c426f756e7479496e64657800038894556e61737369676e2063757261746f722066726f6d2061206368696c642d626f756e74792e000901546865206469737061746368206f726967696e20666f7220746869732063616c6c2063616e20626520656974686572206052656a6563744f726967696e602c206f72dc7468652063757261746f72206f662074686520706172656e7420626f756e74792c206f7220616e79207369676e6564206f726967696e2e00f8466f7220746865206f726967696e206f74686572207468616e20543a3a52656a6563744f726967696e20616e6420746865206368696c642d626f756e7479010163757261746f722c20706172656e7420626f756e7479206d75737420626520696e206163746976652073746174652c20666f7220746869732063616c6c20746f0901776f726b2e20576520616c6c6f77206368696c642d626f756e74792063757261746f7220616e6420543a3a52656a6563744f726967696e20746f2065786563757465c8746869732063616c6c20697272657370656374697665206f662074686520706172656e7420626f756e74792073746174652e00dc496620746869732066756e6374696f6e2069732063616c6c656420627920746865206052656a6563744f726967696e60206f72207468650501706172656e7420626f756e74792063757261746f722c20776520617373756d65207468617420746865206368696c642d626f756e74792063757261746f722069730d016d616c6963696f7573206f7220696e6163746976652e204173206120726573756c742c206368696c642d626f756e74792063757261746f72206465706f73697420697320736c61736865642e000501496620746865206f726967696e20697320746865206368696c642d626f756e74792063757261746f722c2077652074616b6520746869732061732061207369676e09017468617420746865792061726520756e61626c6520746f20646f207468656972206a6f622c20616e64206172652077696c6c696e676c7920676976696e672075702e0901576520636f756c6420736c61736820746865206465706f7369742c2062757420666f72206e6f7720776520616c6c6f77207468656d20746f20756e7265736572766511017468656972206465706f73697420616e64206578697420776974686f75742069737375652e20285765206d61792077616e7420746f206368616e67652074686973206966386974206973206162757365642e2900050146696e616c6c792c20746865206f726967696e2063616e20626520616e796f6e652069666620746865206368696c642d626f756e74792063757261746f72206973090122696e616374697665222e204578706972792075706461746520647565206f6620706172656e7420626f756e7479206973207573656420746f20657374696d6174659c696e616374697665207374617465206f66206368696c642d626f756e74792063757261746f722e000d015468697320616c6c6f777320616e796f6e6520696e2074686520636f6d6d756e69747920746f2063616c6c206f757420746861742061206368696c642d626f756e7479090163757261746f72206973206e6f7420646f696e67207468656972206475652064696c6967656e63652c20616e642077652073686f756c64207069636b2061206e6577f86f6e652e20496e2074686973206361736520746865206368696c642d626f756e74792063757261746f72206465706f73697420697320736c61736865642e0001015374617465206f66206368696c642d626f756e7479206973206d6f76656420746f204164646564207374617465206f6e207375636365737366756c2063616c6c2c636f6d706c6574696f6e2e00b42d2060706172656e745f626f756e74795f6964603a20496e646578206f6620706172656e7420626f756e74792eac2d20606368696c645f626f756e74795f6964603a20496e646578206f66206368696c6420626f756e74792e4861776172645f6368696c645f626f756e74790c0140706172656e745f626f756e74795f69643102012c426f756e7479496e64657800013c6368696c645f626f756e74795f69643102012c426f756e7479496e64657800012c62656e6566696369617279890201504163636f756e7449644c6f6f6b75704f663c543e000444904177617264206368696c642d626f756e747920746f20612062656e65666963696172792e00f85468652062656e65666963696172792077696c6c2062652061626c6520746f20636c61696d207468652066756e647320616674657220612064656c61792e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652074686520706172656e742063757261746f72206f727463757261746f72206f662074686973206368696c642d626f756e74792e001101506172656e7420626f756e7479206d75737420626520696e206163746976652073746174652c20666f722074686973206368696c642d626f756e74792063616c6c20746f14776f726b2e0009014368696c642d626f756e7479206d75737420626520696e206163746976652073746174652c20666f722070726f63657373696e67207468652063616c6c2e20416e6411017374617465206f66206368696c642d626f756e7479206973206d6f76656420746f202250656e64696e675061796f757422206f6e207375636365737366756c2063616c6c2c636f6d706c6574696f6e2e00b42d2060706172656e745f626f756e74795f6964603a20496e646578206f6620706172656e7420626f756e74792eac2d20606368696c645f626f756e74795f6964603a20496e646578206f66206368696c6420626f756e74792e942d206062656e6566696369617279603a2042656e6566696369617279206163636f756e742e48636c61696d5f6368696c645f626f756e7479080140706172656e745f626f756e74795f69643102012c426f756e7479496e64657800013c6368696c645f626f756e74795f69643102012c426f756e7479496e6465780005400501436c61696d20746865207061796f75742066726f6d20616e2061776172646564206368696c642d626f756e7479206166746572207061796f75742064656c61792e00ec546865206469737061746368206f726967696e20666f7220746869732063616c6c206d617920626520616e79207369676e6564206f726967696e2e00050143616c6c20776f726b7320696e646570656e64656e74206f6620706172656e7420626f756e74792073746174652c204e6f206e65656420666f7220706172656e7474626f756e747920746f20626520696e206163746976652073746174652e0011015468652042656e65666963696172792069732070616964206f757420776974682061677265656420626f756e74792076616c75652e2043757261746f7220666565206973947061696420262063757261746f72206465706f73697420697320756e72657365727665642e0005014368696c642d626f756e7479206d75737420626520696e202250656e64696e675061796f7574222073746174652c20666f722070726f63657373696e6720746865fc63616c6c2e20416e6420696e7374616e6365206f66206368696c642d626f756e74792069732072656d6f7665642066726f6d20746865207374617465206f6e6c7375636365737366756c2063616c6c20636f6d706c6574696f6e2e00b42d2060706172656e745f626f756e74795f6964603a20496e646578206f6620706172656e7420626f756e74792eac2d20606368696c645f626f756e74795f6964603a20496e646578206f66206368696c6420626f756e74792e48636c6f73655f6368696c645f626f756e7479080140706172656e745f626f756e74795f69643102012c426f756e7479496e64657800013c6368696c645f626f756e74795f69643102012c426f756e7479496e646578000658110143616e63656c20612070726f706f736564206f7220616374697665206368696c642d626f756e74792e204368696c642d626f756e7479206163636f756e742066756e64730901617265207472616e7366657272656420746f20706172656e7420626f756e7479206163636f756e742e20546865206368696c642d626f756e74792063757261746f72986465706f736974206d617920626520756e726573657276656420696620706f737369626c652e000901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652065697468657220706172656e742063757261746f72206f724860543a3a52656a6563744f726967696e602e00f0496620746865207374617465206f66206368696c642d626f756e74792069732060416374697665602c2063757261746f72206465706f7369742069732c756e72657365727665642e00f4496620746865207374617465206f66206368696c642d626f756e7479206973206050656e64696e675061796f7574602c2063616c6c206661696c7320267872657475726e73206050656e64696e675061796f757460206572726f722e000d01466f7220746865206f726967696e206f74686572207468616e20543a3a52656a6563744f726967696e2c20706172656e7420626f756e7479206d75737420626520696ef06163746976652073746174652c20666f722074686973206368696c642d626f756e74792063616c6c20746f20776f726b2e20466f72206f726967696e90543a3a52656a6563744f726967696e20657865637574696f6e20697320666f726365642e000101496e7374616e6365206f66206368696c642d626f756e74792069732072656d6f7665642066726f6d20746865207374617465206f6e207375636365737366756c4063616c6c20636f6d706c6574696f6e2e00b42d2060706172656e745f626f756e74795f6964603a20496e646578206f6620706172656e7420626f756e74792eac2d20606368696c645f626f756e74795f6964603a20496e646578206f66206368696c6420626f756e74792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e09050c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c0804540004490001081472656261670401286469736c6f6361746564890201504163636f756e7449644c6f6f6b75704f663c543e00002859014465636c617265207468617420736f6d6520606469736c6f636174656460206163636f756e74206861732c207468726f7567682072657761726473206f722070656e616c746965732c2073756666696369656e746c7951016368616e676564206974732073636f726520746861742069742073686f756c642070726f7065726c792066616c6c20696e746f206120646966666572656e7420626167207468616e206974732063757272656e74106f6e652e001d01416e796f6e652063616e2063616c6c20746869732066756e6374696f6e2061626f757420616e7920706f74656e7469616c6c79206469736c6f6361746564206163636f756e742e00490157696c6c20616c7761797320757064617465207468652073746f7265642073636f7265206f6620606469736c6f63617465646020746f2074686520636f72726563742073636f72652c206261736564206f6e406053636f726550726f7669646572602e00d4496620606469736c6f63617465646020646f6573206e6f74206578697374732c2069742072657475726e7320616e206572726f722e3c7075745f696e5f66726f6e745f6f6604011c6c696768746572890201504163636f756e7449644c6f6f6b75704f663c543e000120d04d6f7665207468652063616c6c65722773204964206469726563746c7920696e2066726f6e74206f6620606c696768746572602e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642063616e206f6e6c792062652063616c6c656420627920746865204964206f66a0746865206163636f756e7420676f696e6720696e2066726f6e74206f6620606c696768746572602e00344f6e6c7920776f726b73206966942d20626f7468206e6f646573206172652077697468696e207468652073616d65206261672cd02d20616e6420606f726967696e602068617320612067726561746572206053636f726560207468616e20606c696768746572602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0d050c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c65741043616c6c040454000144106a6f696e080118616d6f756e74fd01013042616c616e63654f663c543e00011c706f6f6c5f6964100118506f6f6c496400002845015374616b652066756e64732077697468206120706f6f6c2e2054686520616d6f756e7420746f20626f6e64206973207472616e736665727265642066726f6d20746865206d656d62657220746f20746865dc706f6f6c73206163636f756e7420616e6420696d6d6564696174656c7920696e637265617365732074686520706f6f6c7320626f6e642e001823204e6f746500cc2a20416e206163636f756e742063616e206f6e6c792062652061206d656d626572206f6620612073696e676c6520706f6f6c2ed82a20416e206163636f756e742063616e6e6f74206a6f696e207468652073616d6520706f6f6c206d756c7469706c652074696d65732e41012a20546869732063616c6c2077696c6c202a6e6f742a206475737420746865206d656d626572206163636f756e742c20736f20746865206d656d626572206d7573742068617665206174206c65617374c82020606578697374656e7469616c206465706f736974202b20616d6f756e746020696e207468656972206163636f756e742ed02a204f6e6c79206120706f6f6c2077697468205b60506f6f6c53746174653a3a4f70656e605d2063616e206265206a6f696e656428626f6e645f657874726104011465787472611105015c426f6e6445787472613c42616c616e63654f663c543e3e00011c4501426f6e642060657874726160206d6f72652066756e64732066726f6d20606f726967696e6020696e746f2074686520706f6f6c20746f207768696368207468657920616c72656164792062656c6f6e672e0049014164646974696f6e616c2066756e64732063616e20636f6d652066726f6d206569746865722074686520667265652062616c616e6365206f6620746865206163636f756e742c206f662066726f6d207468659c616363756d756c6174656420726577617264732c20736565205b60426f6e644578747261605d2e003d01426f6e64696e672065787472612066756e647320696d706c69657320616e206175746f6d61746963207061796f7574206f6620616c6c2070656e64696e6720726577617264732061732077656c6c2e09015365652060626f6e645f65787472615f6f746865726020746f20626f6e642070656e64696e672072657761726473206f6620606f7468657260206d656d626572732e30636c61696d5f7061796f757400022055014120626f6e646564206d656d6265722063616e20757365207468697320746f20636c61696d207468656972207061796f7574206261736564206f6e20746865207265776172647320746861742074686520706f6f6c610168617320616363756d756c617465642073696e6365207468656972206c61737420636c61696d6564207061796f757420284f522073696e6365206a6f696e696e6720696620746869732069732074686572652066697273743d0174696d6520636c61696d696e672072657761726473292e20546865207061796f75742077696c6c206265207472616e7366657272656420746f20746865206d656d6265722773206163636f756e742e004901546865206d656d6265722077696c6c206561726e20726577617264732070726f2072617461206261736564206f6e20746865206d656d62657273207374616b65207673207468652073756d206f6620746865d06d656d6265727320696e2074686520706f6f6c73207374616b652e205265776172647320646f206e6f742022657870697265222e003d015365652060636c61696d5f7061796f75745f6f746865726020746f206361696d2072657761726473206f6e20626168616c66206f6620736f6d6520606f746865726020706f6f6c206d656d6265722e18756e626f6e640801386d656d6265725f6163636f756e74890201504163636f756e7449644c6f6f6b75704f663c543e000140756e626f6e64696e675f706f696e7473fd01013042616c616e63654f663c543e00037c4501556e626f6e6420757020746f2060756e626f6e64696e675f706f696e747360206f662074686520606d656d6265725f6163636f756e746027732066756e64732066726f6d2074686520706f6f6c2e2049744501696d706c696369746c7920636f6c6c65637473207468652072657761726473206f6e65206c6173742074696d652c2073696e6365206e6f7420646f696e6720736f20776f756c64206d65616e20736f6d656c7265776172647320776f756c6420626520666f726665697465642e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00ac2320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463682e005d012a2054686520706f6f6c20697320626c6f636b656420616e64207468652063616c6c6572206973206569746865722074686520726f6f74206f7220626f756e6365722e205468697320697320726566657265656420746f30202061732061206b69636b2ef42a2054686520706f6f6c2069732064657374726f79696e6720616e6420746865206d656d626572206973206e6f7420746865206465706f7369746f722e55012a2054686520706f6f6c2069732064657374726f79696e672c20746865206d656d62657220697320746865206465706f7369746f7220616e64206e6f206f74686572206d656d626572732061726520696e207468651c2020706f6f6c2e001101232320436f6e646974696f6e7320666f72207065726d697373696f6e65642064697370617463682028692e652e207468652063616c6c657220697320616c736f2074686548606d656d6265725f6163636f756e7460293a00882a205468652063616c6c6572206973206e6f7420746865206465706f7369746f722e55012a205468652063616c6c657220697320746865206465706f7369746f722c2074686520706f6f6c2069732064657374726f79696e6720616e64206e6f206f74686572206d656d626572732061726520696e207468651c2020706f6f6c2e001823204e6f7465001d0149662074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b7320746f20756e626f6e6420776974682074686520706f6f6c206163636f756e742c51015b6043616c6c3a3a706f6f6c5f77697468647261775f756e626f6e646564605d2063616e2062652063616c6c656420746f2074727920616e64206d696e696d697a6520756e6c6f636b696e67206368756e6b732e5901546865205b605374616b696e67496e746572666163653a3a756e626f6e64605d2077696c6c20696d706c696369746c792063616c6c205b6043616c6c3a3a706f6f6c5f77697468647261775f756e626f6e646564605d5501746f2074727920746f2066726565206368756e6b73206966206e6563657373617279202869652e20696620756e626f756e64207761732063616c6c656420616e64206e6f20756e6c6f636b696e67206368756e6b73610161726520617661696c61626c65292e20486f77657665722c206974206d6179206e6f7420626520706f737369626c6520746f2072656c65617365207468652063757272656e7420756e6c6f636b696e67206368756e6b732c5d01696e20776869636820636173652c2074686520726573756c74206f6620746869732063616c6c2077696c6c206c696b656c792062652074686520604e6f4d6f72654368756e6b7360206572726f722066726f6d207468653c7374616b696e672073797374656d2e58706f6f6c5f77697468647261775f756e626f6e64656408011c706f6f6c5f6964100118506f6f6c49640001486e756d5f736c617368696e675f7370616e7310010c753332000418550143616c6c206077697468647261775f756e626f6e6465646020666f722074686520706f6f6c73206163636f756e742e20546869732063616c6c2063616e206265206d61646520627920616e79206163636f756e742e004101546869732069732075736566756c2069662074686569722061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b7320746f2063616c6c2060756e626f6e64602c20616e6420736f6d65610163616e20626520636c6561726564206279207769746864726177696e672e20496e2074686520636173652074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b732c2074686520757365725101776f756c642070726f6261626c792073656520616e206572726f72206c696b6520604e6f4d6f72654368756e6b736020656d69747465642066726f6d20746865207374616b696e672073797374656d207768656e5c7468657920617474656d707420746f20756e626f6e642e4477697468647261775f756e626f6e6465640801386d656d6265725f6163636f756e74890201504163636f756e7449644c6f6f6b75704f663c543e0001486e756d5f736c617368696e675f7370616e7310010c75333200054c5501576974686472617720756e626f6e6465642066756e64732066726f6d20606d656d6265725f6163636f756e74602e204966206e6f20626f6e6465642066756e64732063616e20626520756e626f6e6465642c20616e486572726f722069732072657475726e65642e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00a82320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463680009012a2054686520706f6f6c20697320696e2064657374726f79206d6f646520616e642074686520746172676574206973206e6f7420746865206465706f7369746f722e31012a205468652074617267657420697320746865206465706f7369746f7220616e6420746865792061726520746865206f6e6c79206d656d62657220696e207468652073756220706f6f6c732e0d012a2054686520706f6f6c20697320626c6f636b656420616e64207468652063616c6c6572206973206569746865722074686520726f6f74206f7220626f756e6365722e00982320436f6e646974696f6e7320666f72207065726d697373696f6e656420646973706174636800e82a205468652063616c6c6572206973207468652074617267657420616e64207468657920617265206e6f7420746865206465706f7369746f722e001823204e6f746500ec4966207468652074617267657420697320746865206465706f7369746f722c2074686520706f6f6c2077696c6c2062652064657374726f7965642e18637265617465100118616d6f756e74fd01013042616c616e63654f663c543e000110726f6f74890201504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72890201504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572890201504163636f756e7449644c6f6f6b75704f663c543e000644744372656174652061206e65772064656c65676174696f6e20706f6f6c2e002c2320417267756d656e74730055012a2060616d6f756e7460202d2054686520616d6f756e74206f662066756e647320746f2064656c656761746520746f2074686520706f6f6c2e205468697320616c736f2061637473206f66206120736f7274206f664d0120206465706f7369742073696e63652074686520706f6f6c732063726561746f722063616e6e6f742066756c6c7920756e626f6e642066756e647320756e74696c2074686520706f6f6c206973206265696e6730202064657374726f7965642e51012a2060696e64657860202d204120646973616d626967756174696f6e20696e64657820666f72206372656174696e6720746865206163636f756e742e204c696b656c79206f6e6c792075736566756c207768656ec020206372656174696e67206d756c7469706c6520706f6f6c7320696e207468652073616d652065787472696e7369632ed42a2060726f6f7460202d20546865206163636f756e7420746f20736574206173205b60506f6f6c526f6c65733a3a726f6f74605d2e0d012a20606e6f6d696e61746f7260202d20546865206163636f756e7420746f2073657420617320746865205b60506f6f6c526f6c65733a3a6e6f6d696e61746f72605d2efc2a2060626f756e63657260202d20546865206163636f756e7420746f2073657420617320746865205b60506f6f6c526f6c65733a3a626f756e636572605d2e001823204e6f7465006101496e206164646974696f6e20746f2060616d6f756e74602c207468652063616c6c65722077696c6c207472616e7366657220746865206578697374656e7469616c206465706f7369743b20736f207468652063616c6c657211016e656564732061742068617665206174206c656173742060616d6f756e74202b206578697374656e7469616c5f6465706f73697460207472616e736665727261626c652e4c6372656174655f776974685f706f6f6c5f6964140118616d6f756e74fd01013042616c616e63654f663c543e000110726f6f74890201504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72890201504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572890201504163636f756e7449644c6f6f6b75704f663c543e00011c706f6f6c5f6964100118506f6f6c4964000718ec4372656174652061206e65772064656c65676174696f6e20706f6f6c207769746820612070726576696f75736c79207573656420706f6f6c206964002c2320417267756d656e7473009873616d6520617320606372656174656020776974682074686520696e636c7573696f6e206f66782a2060706f6f6c5f696460202d2060412076616c696420506f6f6c49642e206e6f6d696e61746508011c706f6f6c5f6964100118506f6f6c496400012876616c696461746f7273cc01445665633c543a3a4163636f756e7449643e00081c7c4e6f6d696e617465206f6e20626568616c66206f662074686520706f6f6c2e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206e6f6d696e61746f72206f722074686520706f6f6c28726f6f7420726f6c652e00490154686973206469726563746c7920666f7277617264207468652063616c6c20746f20746865207374616b696e672070616c6c65742c206f6e20626568616c66206f662074686520706f6f6c20626f6e646564206163636f756e742e247365745f737461746508011c706f6f6c5f6964100118506f6f6c4964000114737461746561010124506f6f6c5374617465000928745365742061206e657720737461746520666f722074686520706f6f6c2e0055014966206120706f6f6c20697320616c726561647920696e20746865206044657374726f79696e67602073746174652c207468656e20756e646572206e6f20636f6e646974696f6e2063616e20697473207374617465346368616e676520616761696e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206569746865723a00dc312e207369676e65642062792074686520626f756e6365722c206f722074686520726f6f7420726f6c65206f662074686520706f6f6c2c5d01322e2069662074686520706f6f6c20636f6e646974696f6e7320746f206265206f70656e20617265204e4f54206d6574202861732064657363726962656420627920606f6b5f746f5f62655f6f70656e60292c20616e6439012020207468656e20746865207374617465206f662074686520706f6f6c2063616e206265207065726d697373696f6e6c6573736c79206368616e67656420746f206044657374726f79696e67602e307365745f6d6574616461746108011c706f6f6c5f6964100118506f6f6c49640001206d6574616461746130011c5665633c75383e000a10805365742061206e6577206d6574616461746120666f722074686520706f6f6c2e004101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520626f756e6365722c206f722074686520726f6f7420726f6c65306f662074686520706f6f6c2e2c7365745f636f6e666967731401346d696e5f6a6f696e5f626f6e6415050158436f6e6669674f703c42616c616e63654f663c543e3e00013c6d696e5f6372656174655f626f6e6415050158436f6e6669674f703c42616c616e63654f663c543e3e0001246d61785f706f6f6c7319050134436f6e6669674f703c7533323e00012c6d61785f6d656d6265727319050134436f6e6669674f703c7533323e0001506d61785f6d656d626572735f7065725f706f6f6c19050134436f6e6669674f703c7533323e000b28410155706461746520636f6e66696775726174696f6e7320666f7220746865206e6f6d696e6174696f6e20706f6f6c732e20546865206f726967696e20666f7220746869732063616c6c206d75737420626514526f6f742e002c2320417267756d656e747300a02a20606d696e5f6a6f696e5f626f6e6460202d20536574205b604d696e4a6f696e426f6e64605d2eb02a20606d696e5f6372656174655f626f6e6460202d20536574205b604d696e437265617465426f6e64605d2e842a20606d61785f706f6f6c7360202d20536574205b604d6178506f6f6c73605d2ea42a20606d61785f6d656d6265727360202d20536574205b604d6178506f6f6c4d656d62657273605d2ee42a20606d61785f6d656d626572735f7065725f706f6f6c60202d20536574205b604d6178506f6f6c4d656d62657273506572506f6f6c605d2e307570646174655f726f6c657310011c706f6f6c5f6964100118506f6f6c49640001206e65775f726f6f741d050158436f6e6669674f703c543a3a4163636f756e7449643e0001346e65775f6e6f6d696e61746f721d050158436f6e6669674f703c543a3a4163636f756e7449643e00012c6e65775f626f756e6365721d050158436f6e6669674f703c543a3a4163636f756e7449643e000c1c745570646174652074686520726f6c6573206f662074686520706f6f6c2e003d0154686520726f6f7420697320746865206f6e6c7920656e7469747920746861742063616e206368616e676520616e79206f662074686520726f6c65732c20696e636c7564696e6720697473656c662cb86578636c7564696e6720746865206465706f7369746f722c2077686f2063616e206e65766572206368616e67652e005101497420656d69747320616e206576656e742c206e6f74696679696e6720554973206f662074686520726f6c65206368616e67652e2054686973206576656e742069732071756974652072656c6576616e7420746f1d016d6f737420706f6f6c206d656d6265727320616e6420746865792073686f756c6420626520696e666f726d6564206f66206368616e67657320746f20706f6f6c20726f6c65732e146368696c6c04011c706f6f6c5f6964100118506f6f6c4964000d1c704368696c6c206f6e20626568616c66206f662074686520706f6f6c2e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206e6f6d696e61746f72206f722074686520706f6f6ca0726f6f7420726f6c652c2073616d65206173205b6050616c6c65743a3a6e6f6d696e617465605d2e00490154686973206469726563746c7920666f7277617264207468652063616c6c20746f20746865207374616b696e672070616c6c65742c206f6e20626568616c66206f662074686520706f6f6c20626f6e646564206163636f756e742e40626f6e645f65787472615f6f746865720801186d656d626572890201504163636f756e7449644c6f6f6b75704f663c543e00011465787472611105015c426f6e6445787472613c42616c616e63654f663c543e3e000e245501606f726967696e6020626f6e64732066756e64732066726f6d206065787472616020666f7220736f6d6520706f6f6c206d656d62657220606d656d6265726020696e746f207468656972207265737065637469766518706f6f6c732e004901606f726967696e602063616e20626f6e642065787472612066756e64732066726f6d20667265652062616c616e6365206f722070656e64696e672072657761726473207768656e20606f726967696e203d3d1c6f74686572602e004501496e207468652063617365206f6620606f726967696e20213d206f74686572602c20606f726967696e602063616e206f6e6c7920626f6e642065787472612070656e64696e672072657761726473206f661501606f7468657260206d656d6265727320617373756d696e67207365745f636c61696d5f7065726d697373696f6e20666f722074686520676976656e206d656d626572206973c0605065726d697373696f6e6c657373416c6c60206f7220605065726d697373696f6e6c657373436f6d706f756e64602e507365745f636c61696d5f7065726d697373696f6e0401287065726d697373696f6e2105013c436c61696d5065726d697373696f6e000f304901416c6c6f7773206120706f6f6c206d656d62657220746f20736574206120636c61696d207065726d697373696f6e20746f20616c6c6f77206f7220646973616c6c6f77207065726d697373696f6e6c65737360626f6e64696e6720616e64207769746864726177696e672e00550142792064656661756c742c207468697320697320605065726d697373696f6e6564602c20776869636820696d706c696573206f6e6c792074686520706f6f6c206d656d626572207468656d73656c7665732063616e3501636c61696d2074686569722070656e64696e6720726577617264732e204966206120706f6f6c206d656d6265722077697368657320736f2c20746865792063616e20736574207468697320746f5501605065726d697373696f6e6c657373416c6c6020746f20616c6c6f7720616e79206163636f756e7420746f20636c61696d207468656972207265776172647320616e6420626f6e6420657874726120746f2074686514706f6f6c2e002c2320417267756d656e747300782a20606f726967696e60202d204d656d626572206f66206120706f6f6c2ed02a20606163746f7260202d204163636f756e7420746f20636c61696d207265776172642e202f2f20696d70726f7665207468697348636c61696d5f7061796f75745f6f746865720401146f74686572000130543a3a4163636f756e7449640010100101606f726967696e602063616e20636c61696d207061796f757473206f6e20736f6d6520706f6f6c206d656d62657220606f7468657260277320626568616c662e006101506f6f6c206d656d62657220606f7468657260206d7573742068617665206120605065726d697373696f6e6c657373416c6c60206f7220605065726d697373696f6e6c65737357697468647261776020696e206f726465727c666f7220746869732063616c6c20746f206265207375636365737366756c2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324426f6e644578747261041c42616c616e6365011801082c4672656542616c616e6365040018011c42616c616e63650000001c52657761726473000100001505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200001905085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200001d05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540100010c104e6f6f700000000c5365740400000104540001001852656d6f7665000200002105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c436c61696d5065726d697373696f6e000110305065726d697373696f6e6564000000585065726d697373696f6e6c657373436f6d706f756e64000100585065726d697373696f6e6c6573735769746864726177000200445065726d697373696f6e6c657373416c6c0003000025050c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963290501a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963290501a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963290501a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963290501a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e290504184f7074696f6e0404540169010108104e6f6e6500000010536f6d650400690100000100002d050c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d616765040110686173682c011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d616765040110686173682c011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e31050c3470616c6c65745f6861736865721870616c6c65741043616c6c08045400044900010450666f7263655f7365745f706172616d6574657273040128706172616d657465727335050194426f756e6465645665633c75382c20543a3a4d6178506172616d657465724c656e6774683e000000042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e35050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000039050c5470616c6c65745f61737365745f72656769737472791870616c6c65741043616c6c0404540001182072656769737465720c01106e616d6585010178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012861737365745f74797065890101384173736574547970654f663c543e00014c6578697374656e7469616c5f6465706f736974180128543a3a42616c616e63650000305452656769737465722061206e65772061737365742e00f84173736574206973206964656e74696669656420627920606e616d656020616e6420746865206e616d65206d757374206e6f74206265207573656420746f5c726567697374657220616e6f746865722061737365742e00d84e657720617373657420697320676976656e20604e6578744173736574496460202d2073657175656e7469616c206173736574206964000d0141646473206d617070696e67206265747765656e20606e616d656020616e642061737369676e6564206061737365745f69646020736f2061737365742069642063616ef0626520726574726965766564206279206e616d6520746f6f20284e6f74653a207468697320617070726f616368206973207573656420696e20414d4d54696d706c656d656e746174696f6e202878796b292900a4456d69747320275265676973746572656460206576656e74207768656e207375636365737366756c2e1875706461746510012061737365745f6964100128543a3a41737365744964000130626f756e6465645f6e616d6585010178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012861737365745f74797065890101384173736574547970654f663c543e00014c6578697374656e7469616c5f6465706f7369743d0501484f7074696f6e3c543a3a42616c616e63653e0001186055706461746520726567697374657265642061737365742e0009015570646174657320616c736f206d617070696e67206265747765656e206e616d6520616e642061737365742069642069662070726f7669646564206e616d6520697390646966666572656e74207468616e2063757272656e746c7920726567697374657265642e0098456d69747320605570646174656460206576656e74207768656e207375636365737366756c2e307365745f6d657461646174610c012061737365745f6964100128543a3a4173736574496400011873796d626f6c85010178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e000120646563696d616c73080108753800021c68536574206d6574616461746120666f7220616e2061737365742e007c2d206061737365745f6964603a204173736574206964656e7469666965722e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e00a8456d69747320604d6574616461746153657460206576656e74207768656e207375636365737366756c2e307365745f6c6f636174696f6e08012061737365745f6964100128543a3a417373657449640001206c6f636174696f6e7c0158543a3a41737365744e61746976654c6f636174696f6e00032068536574206173736574206e6174697665206c6f636174696f6e2e00010141646473206d617070696e67206265747765656e206e6174697665206c6f636174696f6e20616e64206c6f63616c20617373657420696420616e6420766963651876657273612e004c4d61696e6c79207573656420696e2058434d2e00a8456d69747320604c6f636174696f6e53657460206576656e74207768656e207375636365737366756c2e446164645f61737365745f746f5f706f6f6c080110706f6f6c85010178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012061737365745f6964100128543a3a417373657449640004048441646420616e20617373657420746f20616e206578697374696e6720706f6f6c2e5864656c6574655f61737365745f66726f6d5f706f6f6c080110706f6f6c85010178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012061737365745f6964100128543a3a417373657449640005049852656d6f766520616e2061737365742066726f6d20616e206578697374696e6720706f6f6c2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3d0504184f7074696f6e04045401180108104e6f6e6500000010536f6d65040018000001000041050c3c6f726d6c5f63757272656e63696573186d6f64756c651043616c6c04045400010c207472616e736665720c0110646573748902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696410013c43757272656e637949644f663c543e000118616d6f756e74fd01013042616c616e63654f663c543e000010f45472616e7366657220736f6d652062616c616e636520746f20616e6f74686572206163636f756e7420756e646572206063757272656e63795f6964602e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e607472616e736665725f6e61746976655f63757272656e6379080110646573748902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e74fd01013042616c616e63654f663c543e000110c45472616e7366657220736f6d65206e61746976652063757272656e637920746f20616e6f74686572206163636f756e742e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e387570646174655f62616c616e63650c010c77686f8902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696410013c43757272656e637949644f663c543e000118616d6f756e74c901012c416d6f756e744f663c543e00020ccc75706461746520616d6f756e74206f66206163636f756e74206077686f6020756e646572206063757272656e63795f6964602e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e45050c2c6f726d6c5f746f6b656e73186d6f64756c651043616c6c040454000114207472616e736665720c0110646573748902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74fd010128543a3a42616c616e6365000034d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722ee049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d20627920746865fc605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c01016465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e7c2d206063757272656e63795f6964603a2063757272656e637920747970652eac2d2060616d6f756e74603a20667265652062616c616e636520616d6f756e7420746f207472616e6665722e307472616e736665725f616c6c0c0110646573748902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e637949640001286b6565705f616c697665e00110626f6f6c00014cd05472616e7366657220616c6c2072656d61696e696e672062616c616e636520746f2074686520676976656e206163636f756e742e00f04e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655ff862616c616e6365732e2054686973206d65616e73207468617420616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c09016465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f74206265207472616e73666572726564206279fc746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564f86163636f756e742c20796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79b07265666572656e636520636f756e746572732c2073746f72616765206465706f736974732c206574632e2e2e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e7c2d206063757272656e63795f6964603a2063757272656e637920747970652ef02d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60050120206f7065726174696f6e2073686f756c642073656e6420616c6c206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67050120207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72207472616e736665722065766572797468696e6709012020657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e4c7472616e736665725f6b6565705f616c6976650c0110646573748902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74fd010128543a3a42616c616e636500022c050153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665728477696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e7c2d206063757272656e63795f6964603a2063757272656e637920747970652eac2d2060616d6f756e74603a20667265652062616c616e636520616d6f756e7420746f207472616e6665722e38666f7263655f7472616e73666572100118736f757263658902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000110646573748902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74fd010128543a3a42616c616e6365000324110145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365646163636f756e74206d6179206265207370656369666965642e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e009c2d2060736f75726365603a205468652073656e646572206f6620746865207472616e736665722ea02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e7c2d206063757272656e63795f6964603a2063757272656e637920747970652eac2d2060616d6f756e74603a20667265652062616c616e636520616d6f756e7420746f207472616e6665722e2c7365745f62616c616e636510010c77686f8902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e637949640001206e65775f66726565fd010128543a3a42616c616e63650001306e65775f7265736572766564fd010128543a3a42616c616e636500042090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e000901546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e206974cc77696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d0d012860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865d06578697374656e7469616c206465706f7369742c2069742077696c6c20726561702074686520604163636f756e74496e666f602e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e49050c5070616c6c65745f746f6b656e5f777261707065721870616c6c65741043616c6c040454000114407365745f7772617070696e675f6665650c010c66656518013042616c616e63654f663c543e000148696e746f5f706f6f6c5f73686172655f6964100128543a3a417373657449640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e6365000000447365745f6665655f726563697069656e740c0134706f6f6c5f73686172655f6964100128543a3a417373657449640001346665655f726563697069656e74000130543a3a4163636f756e7449640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e6365000100107772617010013466726f6d5f61737365745f6964100128543a3a41737365744964000148696e746f5f706f6f6c5f73686172655f6964100128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e74000130543a3a4163636f756e74496400020018756e7772617010014866726f6d5f706f6f6c5f73686172655f6964100128543a3a41737365744964000134696e746f5f61737365745f6964100128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e74000130543a3a4163636f756e744964000300347265736375655f746f6b656e7314014866726f6d5f706f6f6c5f73686172655f6964100128543a3a4173736574496400012061737365745f6964100128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e74000130543a3a4163636f756e7449640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e6365000400042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e4d050c3c70616c6c65745f76657269666965721870616c6c65741043616c6c08045400044900010450666f7263655f7365745f706172616d6574657273040128706172616d657465727351050194426f756e6465645665633c75382c20543a3a4d6178506172616d657465724c656e6774683e000000042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e51050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000055050c2470616c6c65745f6d741870616c6c65741043616c6c08045400044900010c186372656174650401146465707468080108753800000018696e7365727408011c747265655f6964100124543a3a5472656549640001106c656166ad010128543a3a456c656d656e7400010060666f7263655f7365745f64656661756c745f68617368657304013864656661756c745f686173686573590501ac426f756e6465645665633c543a3a456c656d656e742c20543a3a4d617844656661756c744861736865733e000200042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e59050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad01045300000400c50101185665633c543e00005d050c5070616c6c65745f6c696e6b61626c655f747265651870616c6c65741043616c6c080454000449000104186372656174650801246d61785f656467657310010c75333200011464657074680801087538000000042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e61050c3070616c6c65745f6d697865721870616c6c65741043616c6c08045400044900010c186372656174650c01306465706f7369745f73697a6518013c42616c616e63654f663c542c20493e00011464657074680801087538000114617373657410014843757272656e637949644f663c542c20493e0000001c6465706f73697408011c747265655f6964100124543a3a5472656549640001106c656166ad010128543a3a456c656d656e740001002077697468647261772001086964100124543a3a54726565496400012c70726f6f665f627974657330011c5665633c75383e000110726f6f74ad010128543a3a456c656d656e740001386e756c6c69666965725f68617368ad010128543a3a456c656d656e74000124726563697069656e74000130543a3a4163636f756e74496400011c72656c61796572000130543a3a4163636f756e74496400010c66656518013c42616c616e63654f663c542c20493e000118726566756e6418013c42616c616e63654f663c542c20493e000200042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e65050c5c70616c6c65745f7369676e61747572655f6272696467651870616c6c65741043616c6c08045400044900011c387365745f6d61696e7461696e657208011c6d657373616765bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e0001247369676e6174757265bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e000004505365747320746865206d61696e7461696e65722e50666f7263655f7365745f6d61696e7461696e65720801146e6f6e6365100148543a3a4d61696e7461696e65724e6f6e63650001386e65775f6d61696e7461696e6572bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e000100307365745f7265736f757263650401086964690501285265736f757263654964000214f853746f7265732061206d6574686f64206e616d65206f6e20636861696e20756e64657220616e206173736f636961746564207265736f757263652049442e002823203c7765696768743e302d204f2831292077726974652c23203c2f7765696768743e3c72656d6f76655f7265736f757263650401086964690501285265736f757263654964000320c052656d6f7665732061207265736f757263652049442066726f6d20746865207265736f75726365206d617070696e672e000501416674657220746869732063616c6c2c20627269646765207472616e7366657273207769746820746865206173736f636961746564207265736f757263652049444477696c6c2062652072656a65637465642e002823203c7765696768743e382d204f2831292072656d6f76616c2c23203c2f7765696768743e3c77686974656c6973745f636861696e0401086964280128543a3a436861696e49640004141101456e61626c6573206120636861696e204944206173206120736f75726365206f722064657374696e6174696f6e20666f72206120627269646765207472616e736665722e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e6c7365745f7265736f757263655f776974685f7369676e61747572650c01187372635f6964280128543a3a436861696e496400013470726f706f73616c5f64617461bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e0001247369676e6174757265bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e0005583440706172616d206f726967696e3440706172616d207372635f6964f040706172616d2070726f706f73616c5f646174613a2028725f69642c206e6f6e63652c2034206279746573206f66207a65726f65732c2063616c6c29d040706172616d207369676e61747572653a2061207369676e6174757265206f766572207468652070726f706f73616c5f646174610024576520636865636b3ae0312e205468617420746865207369676e61747572652069732061637475616c6c79206f766572207468652070726f706f73616c206461746180322e20416464205265736f75726365496420746f207468652053746f726167656101332e2054686174207468652063616c6c2066726f6d207468652070726f706f73616c206461746120616e64207468652063616c6c20696e70757420706172616d6574657220746f207468652066756e6374696f6e206172655901636f6e73697374656e7420776974682065616368206f7468657220342e20546861742074686520657865637574696f6e20636861696e2069642074797065207061727365642066726f6d2074686520725f69642069736c696e64656564207468697320636861696e27732069642074797065005101496620616c6c20746865736520636865636b732070617373207468656e2077652063616c6c2066696e616c697a655f657865637574696f6e2077686963682061637475616c6c79206578656375746573207468655d01646973706174636861626c652063616c6c2e2054686520646973706174636861626c652063616c6c20697320757375616c6c7920612068616e646c65722066756e6374696f6e2c20666f7220696e7374616e636520696ecc74686520616e63686f722d68616e646c6572206f7220746f6b656e2d777261707065722d68616e646c65722070616c6c65742e00ac54686572652061726520612066657720544f444f73206c65667420696e207468652066756e6374696f6e2e0088496e20746865207365745f7265736f757263655f776974685f7369676e61747572652823203c7765696768743e1d012d20776569676874206f662070726f706f7365642063616c6c2c207265676172646c657373206f66207768657468657220657865637574696f6e20697320706572666f726d65642c23203c2f7765696768743e40657865637574655f70726f706f73616c0c01187372635f6964280128543a3a436861696e496400013470726f706f73616c5f64617461bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e0001247369676e6174757265bd010188426f756e6465645665633c75382c20543a3a4d6178537472696e674c656e6774683e0006583440706172616d206f726967696e3440706172616d207372635f6964f040706172616d2070726f706f73616c5f646174613a2028725f69642c206e6f6e63652c2034206279746573206f66207a65726f65732c2063616c6c29d040706172616d207369676e61747572653a2061207369676e6174757265206f766572207468652070726f706f73616c5f646174610024576520636865636b3ae0312e205468617420746865207369676e61747572652069732061637475616c6c79206f766572207468652070726f706f73616c2064617461d4322e20546861742074686520725f6964207061727365642066726f6d207468652070726f706f73616c2064617461206578697374736101332e2054686174207468652063616c6c2066726f6d207468652070726f706f73616c206461746120616e64207468652063616c6c20696e70757420706172616d6574657220746f207468652066756e6374696f6e206172655901636f6e73697374656e7420776974682065616368206f7468657220342e20546861742074686520657865637574696f6e20636861696e2069642074797065207061727365642066726f6d2074686520725f69642069736c696e64656564207468697320636861696e27732069642074797065005101496620616c6c20746865736520636865636b732070617373207468656e2077652063616c6c2066696e616c697a655f657865637574696f6e2077686963682061637475616c6c79206578656375746573207468655d01646973706174636861626c652063616c6c2e2054686520646973706174636861626c652063616c6c20697320757375616c6c7920612068616e646c65722066756e6374696f6e2c20666f7220696e7374616e636520696ecc74686520616e63686f722d68616e646c6572206f7220746f6b656e2d777261707065722d68616e646c65722070616c6c65742e00ac54686572652061726520612066657720544f444f73206c65667420696e207468652066756e6374696f6e2e005c496e2074686520657865637574655f70726f706f73616c2823203c7765696768743e1d012d20776569676874206f662070726f706f7365642063616c6c2c207265676172646c657373206f66207768657468657220657865637574696f6e20697320706572666f726d65642c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e69050c38776562625f70726f706f73616c7318686561646572285265736f757263654964000004000401205b75383b2033325d00006d050c3870616c6c65745f76616e63686f721870616c6c65741043616c6c080454000449000114186372656174650c01246d61785f656467657310010c75333200011464657074680801087538000114617373657410014843757272656e637949644f663c542c20493e000000207472616e736163740c01086964100124543a3a54726565496400012870726f6f665f646174617105015450726f6f66446174613c543a3a456c656d656e743e0001206578745f646174617505012d01457874446174613c543a3a4163636f756e7449642c20416d6f756e744f663c542c20493e2c2042616c616e63654f663c542c20493e2c2043757272656e637949644f660a3c542c20493e3e0001005472656769737465725f616e645f7472616e736163741401146f776e6572000130543a3a4163636f756e7449640001287075626c69635f6b657930011c5665633c75383e0001086964100124543a3a54726565496400012870726f6f665f646174617105015450726f6f66446174613c543a3a456c656d656e743e0001206578745f646174617505012d01457874446174613c543a3a4163636f756e7449642c20416d6f756e744f663c542c20493e2c2042616c616e63654f663c542c20493e2c2043757272656e637949644f660a3c542c20493e3e000200587365745f6d61785f6465706f7369745f616d6f756e740801486d61785f6465706f7369745f616d6f756e7418013c42616c616e63654f663c542c20493e0001146e6f6e6365100140543a3a50726f706f73616c4e6f6e63650003005c7365745f6d696e5f77697468647261775f616d6f756e7408014c6d696e5f77697468647261775f616d6f756e7418013c42616c616e63654f663c542c20493e0001146e6f6e6365100140543a3a50726f706f73616c4e6f6e6365000400042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7105103c776562625f7072696d6974697665731474797065731c76616e63686f722450726f6f664461746104044501ad010018011470726f6f6630011c5665633c75383e0001347075626c69635f616d6f756e74ad01010445000114726f6f7473c50101185665633c453e000140696e7075745f6e756c6c696669657273c50101185665633c453e0001486f75747075745f636f6d6d69746d656e7473c50101185665633c453e0001346578745f646174615f68617368ad0101044500007505103c776562625f7072696d6974697665731474797065731c76616e63686f721c4578744461746110244163636f756e744964010018416d6f756e7401c9011c42616c616e636501182843757272656e63794964011000200124726563697069656e740001244163636f756e74496400011c72656c617965720001244163636f756e7449640001286578745f616d6f756e74c9010118416d6f756e7400010c66656518011c42616c616e6365000118726566756e6418011c42616c616e6365000114746f6b656e10012843757272656e63794964000144656e637279707465645f6f75747075743130011c5665633c75383e000144656e637279707465645f6f75747075743230011c5665633c75383e000079050c5870616c6c65745f76616e63686f725f68616e646c65721870616c6c65741043616c6c0804540004490001147c657865637574655f76616e63686f725f6372656174655f70726f706f73616c1801307372635f636861696e5f6964280128543a3a436861696e4964000110725f6964690501285265736f7572636549640001246d61785f656467657310010c753332000128747265655f64657074680801087538000114617373657410016456416e63686f7243757272656e637949644f663c542c20493e0001146e6f6e6365100140543a3a50726f706f73616c4e6f6e6365000008dc546869732077696c6c2062652063616c6c656420627920627269646765207768656e2070726f706f73616c20746f2063726561746520619c76616e63686f7220686173206265656e207375636365737366756c6c7920766f746564206f6e2e7c657865637574655f76616e63686f725f7570646174655f70726f706f73616c100110725f6964690501285265736f75726365496400012c6d65726b6c655f726f6f74ad010128543a3a456c656d656e7400013c7372635f7265736f757263655f6964690501285265736f7572636549640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e63650001080d01546869732077696c6c2062652063616c6c656420627920627269646765207768656e2070726f706f73616c20746f206164642f7570646174652065646765206f6620619c76616e63686f7220686173206265656e207375636365737366756c6c7920766f746564206f6e2e74657865637574655f7365745f7265736f757263655f70726f706f73616c040110725f6964690501285265736f7572636549640002080d01546869732077696c6c2062792063616c6c656420627920627269646765207768656e2070726f706f73616c20746f20736574206e6577207265736f7572636520666f729c68616e646c657220686173206265656e207375636365737366756c6c7920766f746564206f6e2e98657865637574655f7365745f6d61785f6465706f7369745f6c696d69745f70726f706f73616c0801446d61785f6465706f7369745f6c696d697418015856416e63686f7242616c616e63654f663c542c20493e0001146e6f6e6365100140543a3a50726f706f73616c4e6f6e636500030c9c4578656375746520736574206d6178206465706f736974206c696d69742070726f706f73616c2e610154686520604d61784465706f7369744c696d697450726f706f73616c60207570646174657320746865206d6178696d756d206465706f73697420616d6f756e7420616c6c6f776564206f6e20746865207661726961626c6538616e63686f722073797374656d2ea4657865637574655f7365745f6d696e5f7769746864726177616c5f6c696d69745f70726f706f73616c0801486d696e5f77697468647261775f6c696d697418015856416e63686f7242616c616e63654f663c542c20493e0001146e6f6e6365100140543a3a50726f706f73616c4e6f6e636500040ca84578656375746520736574206d696e207769746864726177616c206c696d69742070726f706f73616c2e550154686520604d696e5769746864726177616c4c696d697450726f706f73616c60207570646174657320746865206d696e696d756d207769746864726177616c20616d6f756e7420616c6c6f776564206f6e207468655c7661726961626c6520616e63686f722073797374656d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7d050c7070616c6c65745f746f6b656e5f777261707065725f68616e646c65721870616c6c65741043616c6c04045400011474657865637574655f7772617070696e675f6665655f70726f706f73616c0c01507772617070696e675f6665655f70657263656e7418013042616c616e63654f663c543e000148696e746f5f706f6f6c5f73686172655f6964100128543a3a417373657449640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e636500000811014578656375746520746865207772617070696e67206665652070726f706f73616c2062792063616c6c696e6720746865207570646174655f7772617070696e675f666565f06d6574686f642e20456e73757265732074686174206f6e6c7920746865206272696467652063616e2063616c6c20746869732066756e6374696f6e2e7c657865637574655f6164645f746f6b656e5f746f5f706f6f6c5f73686172650c01106e616d6530011c5665633c75383e00012061737365745f6964100128543a3a417373657449640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e636500010090657865637574655f72656d6f76655f746f6b656e5f66726f6d5f706f6f6c5f73686172650c01106e616d6530011c5665633c75383e00012061737365745f6964100128543a3a417373657449640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e636500020088657865637574655f7365745f6665655f726563697069656e745f70726f706f73616c0c0134706f6f6c5f73686172655f6964100128543a3a417373657449640001346665655f726563697069656e74000130543a3a4163636f756e7449640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e636500030c150145786563757465732060536574466565526563697069656e74602070726f706f73616c2077686963682077696c6c20736574206e65772066656520726563697069656e742ce077686f2077696c6c20626520726563656976696e67207772617070696e672066656520636f737420666f7220676976656e2061737365742ed0456e73757265732074686174206f6e6c7920746865206272696467652063616e2063616c6c20746869732066756e6374696f6e2e78657865637574655f7265736375655f746f6b656e735f70726f706f73616c140134706f6f6c5f73686172655f6964100128543a3a4173736574496400012061737365745f6964100128543a3a41737365744964000118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e74000130543a3a4163636f756e7449640001146e6f6e6365100140543a3a50726f706f73616c4e6f6e636500040cfc45786563757465732060526573637565546f6b656e50726f706f73616c602c2077686963682077696c6c207472616e7366657220746f6b656e732066726f6de866656520726563697069656e7420746f20676976656e20726563697069656e7420616464726573732066726f6d20676976656e2061737365742ed0456e73757265732074686174206f6e6c7920746865206272696467652063616e2063616c6c20746869732066756e6374696f6e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e81050c4870616c6c65745f6b65795f73746f726167651870616c6c65741043616c6c0804540004490001042072656769737465720801146f776e6572000130543a3a4163636f756e7449640001287075626c69635f6b6579d9010188426f756e6465645665633c75382c20543a3a4d61785075626b65794c656e6774683e000000042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e85050c5c70616c6c65745f76616e63686f725f76657269666965721870616c6c65741043616c6c08045400044900010450666f7263655f7365745f706172616d6574657273080134636f6e66696775726174696f6e890501202875382c20753829000128706172616d657465727351050194426f756e6465645665633c75382c20543a3a4d6178506172616d657465724c656e6774683e000000042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8905000004080808008d050c6070616c6c65745f7472616e73616374696f6e5f7061757365186d6f64756c651043616c6c0404540001084470617573655f7472616e73616374696f6e08012c70616c6c65745f6e616d6530011c5665633c75383e00013466756e6374696f6e5f6e616d6530011c5665633c75383e0000004c756e70617573655f7472616e73616374696f6e08012c70616c6c65745f6e616d6530011c5665633c75383e00013466756e6374696f6e5f6e616d6530011c5665633c75383e000100042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e91050c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c04045400010424686561727462656174080124686561727462656174950501644865617274626561743c543a3a426c6f636b4e756d6265723e0001247369676e6174757265a90501bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500001438232320436f6d706c65786974793a59012d20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e2920616e642045206973206c656e677468206f66b02020606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373608820202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b60ac20202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9505084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572011000140130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001346e6574776f726b5f7374617465990501484f70617175654e6574776f726b537461746500013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c753332000099050c1c73705f636f7265206f6666636861696e484f70617175654e6574776f726b5374617465000008011c706565725f69649d0501304f706171756550656572496400014865787465726e616c5f616464726573736573a10501505665633c4f70617175654d756c7469616464723e00009d05081c73705f636f7265304f70617175655065657249640000040030011c5665633c75383e0000a105000002a50500a5050c1c73705f636f7265206f6666636861696e3c4f70617175654d756c7469616464720000040030011c5665633c75383e0000a905104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e617475726500000400ad050148737232353531393a3a5369676e61747572650000ad050c1c73705f636f72651c73723235353139245369676e617475726500000400a90201205b75383b2036345d0000b1050c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c04045400013c346164645f72656769737472617204011c6163636f756e74890201504163636f756e7449644c6f6f6b75704f663c543e0000287841646420612072656769737472617220746f207468652073797374656d2e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e00a82d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e0094456d6974732060526567697374726172416464656460206966207375636365737366756c2e0034232320436f6d706c657869747925012d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e307365745f6964656e74697479040110696e666fb50501a4426f783c4964656e74697479496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e3e00013c290153657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e005501496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7450666f7220746865206e6577206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e008c2d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e0088456d69747320604964656e7469747953657460206966207375636365737366756c2e0034232320436f6d706c6578697479442d20604f2858202b205827202b205229601d0120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e64656429e020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429207365745f7375627304011073756273c90501645665633c28543a3a4163636f756e7449642c2044617461293e0002388c53657420746865207375622d6163636f756e7473206f66207468652073656e6465722e0055015061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e65642d01616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e00b02d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e0034232320436f6d706c6578697479302d20604f2850202b20532960e420202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e38636c6561725f6964656e746974790003383901436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e00ec5061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e0098456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e0034232320436f6d706c6578697479402d20604f2852202b2053202b20582960cc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e44726571756573745f6a756467656d656e740801247265675f696e64657831020138526567697374726172496e64657800011c6d61785f666565fd01013042616c616e63654f663c543e00045494526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e0055015061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7418676976656e2e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e001d012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e55012d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a00306060606e6f636f6d70696c65b853656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665650c60606000a4456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e64657800053c6843616e63656c20612070726576696f757320726571756573742e00f85061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e0045012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e00ac456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e1c7365745f666565080114696e64657831020138526567697374726172496e64657800010c666565fd01013042616c616e63654f663c543e00062c1901536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e542d2060666565603a20746865206e6577206665652e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e387365745f6163636f756e745f6964080114696e64657831020138526567697374726172496e64657800010c6e6577890201504163636f756e7449644c6f6f6b75704f663c543e00072cbc4368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e702d20606e6577603a20746865206e6577206163636f756e742049442e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e287365745f6669656c6473080114696e64657831020138526567697374726172496e6465780001186669656c6473d10501384964656e746974794669656c647300082ca853657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e0d012d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e4470726f766964655f6a756467656d656e741001247265675f696e64657831020138526567697374726172496e646578000118746172676574890201504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e74d905015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e746974792c011c543a3a48617368000944b850726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74b06f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e0021012d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e55012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e49012d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e49012d20606964656e74697479603a205468652068617368206f6620746865205b604964656e74697479496e666f605d20666f72207468617420746865206a756467656d656e742069732070726f76696465642e0094456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e346b696c6c5f6964656e74697479040118746172676574890201504163636f756e7449644c6f6f6b75704f663c543e000a48410152656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e0061015061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c6564206279450160536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564806d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e0055012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e0094456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e0034232320436f6d706c6578697479402d20604f2852202b2053202b20582960cc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e1c6164645f73756208010c737562890201504163636f756e7449644c6f6f6b75704f663c543e000110646174611903011044617461000b1cac4164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656e616d655f73756208010c737562890201504163636f756e7449644c6f6f6b75704f663c543e000110646174611903011044617461000c10cc416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656d6f76655f73756204010c737562890201504163636f756e7449644c6f6f6b75704f663c543e000d1cc052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e20717569745f737562000e288c52656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c206265207265706174726961746564b4746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265643c73757065722d6964656e746974792e0045014e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d1101636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e04704964656e746974792070616c6c6574206465636c61726174696f6e2eb5050c3c70616c6c65745f6964656e74697479147479706573304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616cb9050190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617919030110446174610001146c6567616c190301104461746100010c776562190301104461746100011072696f741903011044617461000114656d61696c190301104461746100013c7067705f66696e6765727072696e74c50501404f7074696f6e3c5b75383b2032305d3e000114696d616765190301104461746100011c7477697474657219030110446174610000b9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd05045300000400c10501185665633c543e0000bd05000004081903190300c105000002bd0500c50504184f7074696f6e0404540111010108104e6f6e6500000010536f6d65040011010000010000c905000002cd0500cd050000040800190300d1050c3c70616c6c65745f6964656e7469747914747970657320426974466c61677304045401d5050004002801344964656e746974794669656c640000d5050c3c70616c6c65745f6964656e74697479147479706573344964656e746974794669656c640001201c446973706c6179000100144c6567616c0002000c5765620004001052696f7400080014456d61696c0010003850677046696e6765727072696e7400200014496d6167650040001c5477697474657200800000d9050c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000dd050c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73e105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578bc010c75313600011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73e105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696ee5050154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c73e105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c8102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee105000002810200e505086474616e676c655f7374616e64616c6f6e655f72756e74696d65304f726967696e43616c6c657200010c1873797374656d0400e90501746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400ed0501010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e000f0010566f69640400f10501110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f696400020000e9050c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000ed05084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000f105081c73705f636f726510566f696400010000f5050c6070616c6c65745f657468325f6c696768745f636c69656e741870616c6c65741043616c6c04045400011810696e697408013874797065645f636861696e5f6964c401305479706564436861696e496400011061726773f9050170426f783c496e6974496e7075743c543a3a4163636f756e7449643e3e0000004872656769737465725f7375626d697474657204013874797065645f636861696e5f6964c401305479706564436861696e496400010050756e72656769737465725f7375626d697474657204013874797065645f636861696e5f6964c401305479706564436861696e49640002009c7375626d69745f626561636f6e5f636861696e5f6c696768745f636c69656e745f75706461746508013874797065645f636861696e5f6964c401305479706564436861696e496400014c6c696768745f636c69656e745f757064617465450601444c69676874436c69656e745570646174650003005c7375626d69745f657865637574696f6e5f68656164657208013874797065645f636861696e5f6964c401305479706564436861696e4964000130626c6f636b5f686561646572fd05012c426c6f636b486561646572000400547570646174655f747275737465645f7369676e6572040138747275737465645f7369676e6572000130543a3a4163636f756e744964000500042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef9050c246574685f74797065731870616c6c657424496e6974496e70757404244163636f756e74496401000024016866696e616c697a65645f657865637574696f6e5f686561646572fd05012c426c6f636b48656164657200015c66696e616c697a65645f626561636f6e5f6865616465722d060164457874656e646564426561636f6e426c6f636b48656164657200015863757272656e745f73796e635f636f6d6d69747465653106013453796e63436f6d6d697474656500014c6e6578745f73796e635f636f6d6d69747465653106013453796e63436f6d6d697474656500014076616c69646174655f75706461746573e00110626f6f6c0001547665726966795f626c735f7369676e617475726573e00110626f6f6c00014c6861736865735f67635f7468726573686f6c6428010c75363400017c6d61785f7375626d69747465645f626c6f636b735f62795f6163636f756e7410010c753332000138747275737465645f7369676e65728001444f7074696f6e3c4163636f756e7449643e0000fd0508246574685f74797065732c426c6f636b486561646572000048012c706172656e745f686173681d0201104832353600012c756e636c65735f686173681d02011048323536000118617574686f720106011c4164647265737300012873746174655f726f6f741d020110483235360001447472616e73616374696f6e735f726f6f741d0201104832353600013472656365697074735f726f6f741d020110483235360001246c6f675f626c6f6f6d09060114426c6f6f6d000128646966666963756c747915060110553235360001186e756d62657228010c7536340001246761735f6c696d697415060110553235360001206761735f75736564150601105532353600012474696d657374616d7028010c75363400012865787472615f6461746130011c5665633c75383e0001206d69785f686173681d020110483235360001146e6f6e63652106010c483634000140626173655f6665655f7065725f67617328010c75363400011068617368290601304f7074696f6e3c483235363e0001307061727469616c5f68617368290601304f7074696f6e3c483235363e0000010608246574685f747970657310483136300000040005060150657468657265756d5f74797065733a3a4831363000000506083c7072696d69746976655f7479706573104831363000000400110101205b75383b2032305d0000090608246574685f747970657314426c6f6f6d000004000d060154657468657265756d5f74797065733a3a426c6f6f6d00000d060820657468626c6f6f6d14426c6f6f6d00000400110601405b75383b20424c4f4f4d5f53495a455d00001106000003000100000800150608246574685f747970657310553235360000040019060150657468657265756d5f74797065733a3a5532353600001906083c7072696d69746976655f74797065731055323536000004001d0601205b7536343b20345d00001d06000003040000002800210608246574685f74797065730c483634000004002506014c657468657265756d5f74797065733a3a483634000025060c38657468657265756d5f747970657310686173680c483634000004009d01011c5b75383b20385d0000290604184f7074696f6e040454011d020108104e6f6e6500000010536f6d6504001d0200000100002d060c246574685f7479706573106574683264457874656e646564426561636f6e426c6f636b48656164657200000c011868656164657219020144426561636f6e426c6f636b486561646572000144626561636f6e5f626c6f636b5f726f6f741d02011048323536000150657865637574696f6e5f626c6f636b5f686173681d02011048323536000031060c246574685f747970657310657468323453796e63436f6d6d6974746565000008011c7075626b6579733506015c53796e63436f6d6d69747465655075626c69634b6579730001406167677265676174655f7075626b65793d0601385075626c69634b65794279746573000035060c246574685f747970657310657468325c53796e63436f6d6d69747465655075626c69634b657973000004003906014c5665633c5075626c69634b657942797465733e000039060000023d06003d060c246574685f74797065731065746832385075626c69634b6579427974657300000400410601685b75383b205055424c49435f4b45595f42595445535f4c454e5d0000410600000330000000080045060c246574685f74797065731065746832444c69676874436c69656e74557064617465000014015861747465737465645f626561636f6e5f68656164657219020144426561636f6e426c6f636b48656164657200013873796e635f6167677265676174654906013453796e634167677265676174650001387369676e61747572655f736c6f74280110536c6f7400013c66696e616c6974795f7570646174655906015446696e616c697a656448656164657255706461746500015473796e635f636f6d6d69747465655f7570646174656506016c4f7074696f6e3c53796e63436f6d6d69747465655570646174653e000049060c246574685f747970657310657468323453796e63416767726567617465000008014c73796e635f636f6d6d69747465655f626974734d06014453796e63436f6d6d69747465654269747300016073796e635f636f6d6d69747465655f7369676e6174757265510601385369676e6174757265427974657300004d060c246574685f747970657310657468324453796e63436f6d6d69747465654269747300000400a902019c5b75383b2053594e435f434f4d4d49545445455f424954535f53495a455f494e5f42595445535d000051060c246574685f74797065731065746832385369676e6174757265427974657300000400550601645b75383b205349474e41545552455f42595445535f4c454e5d0000550600000360000000080059060c246574685f747970657310657468325446696e616c697a656448656164657255706461746500000801346865616465725f7570646174655d06013048656164657255706461746500013c66696e616c6974795f6272616e6368610601245665633c483235363e00005d060c246574685f747970657310657468323048656164657255706461746500000c0134626561636f6e5f68656164657219020144426561636f6e426c6f636b486561646572000150657865637574696f6e5f626c6f636b5f686173681d02011048323536000154657865637574696f6e5f686173685f6272616e6368610601245665633c483235363e000061060000021d0200650604184f7074696f6e0404540169060108104e6f6e6500000010536f6d6504006906000001000069060c246574685f747970657310657468324c53796e63436f6d6d6974746565557064617465000008014c6e6578745f73796e635f636f6d6d69747465653106013453796e63436f6d6d69747465650001686e6578745f73796e635f636f6d6d69747465655f6272616e6368610601245665633c483235363e00006d060c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c657471060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c045300000400250201185665633c543e000075060c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454017906045300000400810601185665633c543e00007906083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c010869649d0101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e737d06011c526561736f6e7300007d06083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000810600000279060085060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540189060453000004008d0601185665633c543e00008906083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e746966696572019d011c42616c616e636501180008010869649d010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e636500008d0600000289060091060c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090995060c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800009906086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100009d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f904045300000400a10601185665633c543e0000a106000002f90400a506084873705f636f6e73656e7375735f736c6f747310536c6f740000040028010c7536340000a906083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e00030000ad06083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f726974696573b106016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564a90301244f7074696f6e3c4e3e0000b1060c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401980453000004009401185665633c543e0000b5060c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e102045300000400e50201185665633c543e0000bd060c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000c1060000040828e10200c5060c4c70616c6c65745f646b675f6d6574616461746114747970657334526f756e644d6574616461746108304d61784b65794c656e67746801d102484d61785369676e61747572654c656e67746801d102000c0148637572725f726f756e645f7075625f6b6579e1020170426f756e6465645665633c75382c204d61784b65794c656e6774683e0001486e6578745f726f756e645f7075625f6b6579e1020170426f756e6465645665633c75382c204d61784b65794c656e6774683e000144726566726573685f7369676e6174757265e1020188426f756e6465645665633c75382c204d61785369676e61747572654c656e6774683e0000c9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400cc01185665633c543e0000cd060000040ca828b000d1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d506045300000400d90601185665633c543e0000d50600000408bcb000d906000002d50600dd060c4c70616c6c65745f646b675f6d657461646174611870616c6c6574144572726f720404540001403c4e6f4d61707065644163636f756e74000004784e6f206d6170706564206163636f756e7420746f20617574686f7269747940496e76616c69645468726573686f6c6400010444496e76616c6964207468726573686f6c64584d757374426541517565756564417574686f72697479000204984d757374206265207175657565642020746f206265636f6d6520616e20617574686f726974795c4d7573744265416e416374697665417574686f726974790003045c4d75737420626520616e20616e20617574686f726974794c496e76616c69645265667265736844656c6179000404c4526566726573682064656c61792073686f756c6420626520696e207468652072616e6765206f66203025202d203130302544496e76616c69645075626c69634b65797300050474496e76616c6964207075626c6963206b6579207375626d697373696f6e64416c72656164795375626d69747465645075626c69634b657900060478416c7265616479207375626d69747465642061207075626c6963206b657964416c72656164795375626d69747465645369676e6174757265000704a0416c7265616479207375626d69747465642061207075626c6963206b6579207369676e617475726534557365645369676e61747572650008048455736564207369676e61747572652066726f6d20706173742073657373696f6e7340496e76616c69645369676e61747572650009049c496e76616c6964207075626c6963206b6579207369676e6174757265207375626d697373696f6e30496e76616c69644e6f6e6365000a04f0496e76616c6964204e6f6e65636520757365642c206d7573742062652067726561746572207468616e205b60726566726573685f6e6f6e6365605d2e68496e76616c69644d69736265686176696f75725265706f727473000b0470496e76616c6964206d69736265686176696f7572207265706f7274734452656672657368496e50726f6772657373000c048c444b47205265667265736820697320616c726561647920696e2070726f67726573732e3c4e6f4e6578745075626c69634b6579000d04844e6f204e6578745075626c69634b65792073746f726564206f6e2d636861696e2e60496e76616c6964436f6e74726f6c6c65724163636f756e74000e04ac4d7573742062652063616c6c696e672066726f6d2074686520636f6e74726f6c6c6572206163636f756e742c4f75744f66426f756e6473000f0458496e707574206973206f7574206f6620626f756e647304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000e5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400cc01185665633c543e0000e9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e106045300000400ed0601185665633c543e0000ed06000002e10600f10600000408c4f50600f50600000408c8f10200f9060c5070616c6c65745f646b675f70726f706f73616c731474797065733450726f706f73616c566f7465730c244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f74657301fd0600100124766f7465735f666f720107017c426f756e6465645665633c4163636f756e7449642c204d6178566f7465733e000134766f7465735f616761696e73740107017c426f756e6465645665633c4163636f756e7449642c204d6178566f7465733e0001187374617475730507013850726f706f73616c53746174757300011865787069727910012c426c6f636b4e756d6265720000fd06086474616e676c655f7374616e64616c6f6e655f72756e74696d65204d6178566f7465730000000001070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400cc01185665633c543e000005070c5070616c6c65745f646b675f70726f706f73616c731474797065733850726f706f73616c53746174757300010c24496e6974696174656400000020417070726f7665640001002052656a65637465640002000009070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00000d070c5070616c6c65745f646b675f70726f706f73616c731870616c6c6574144572726f7204045400014848496e76616c69645065726d697373696f6e73000004a44163636f756e7420646f6573206e6f74206861766520636f7272656374207065726d697373696f6e733c5468726573686f6c644e6f745365740001046850726f706f736572207468726573686f6c64206e6f742073657438496e76616c6964436861696e49640002047850726f766964656420636861696e204964206973206e6f742076616c696440496e76616c69645468726573686f6c640003047850726f706f736572207468726573686f6c642063616e6e6f7420626520304c436861696e4e6f7457686974656c6973746564000404b4496e746572616374696f6e732077697468207468697320636861696e206973206e6f74207065726d69747465645c436861696e416c726561647957686974656c697374656400050478436861696e2068617320616c7265616479206265656e20656e61626c6564505265736f75726365446f65734e6f744578697374000604b45265736f757263652049442070726f76696465642069736e2774206d617070656420746f20616e797468696e675450726f706f736572416c72656164794578697374730007045c50726f706f73657220616c726561647920696e207365743c50726f706f736572496e76616c69640008049050726f7669646564206163636f756e744964206973206e6f7420612070726f706f736572384d757374426550726f706f736572000904c850726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792070726f706f7365725050726f706f736572416c7265616479566f746564000a04e850726f706f7365722068617320616c7265616479207375626d697474656420736f6d6520766f746520666f7220746869732070726f706f73616c5450726f706f73616c416c7265616479457869737473000b04ec412070726f706f73616c207769746820746865736520706172616d65746572732068617320616c7265616479206265656e207375626d69747465645050726f706f73616c446f65734e6f744578697374000c04844e6f2070726f706f73616c2077697468207468652049442077617320666f756e644c50726f706f73616c4e6f74436f6d706c657465000d04a843616e6e6f7420636f6d706c6574652070726f706f73616c2c206e65656473206d6f726520766f7465735c50726f706f73616c416c7265616479436f6d706c657465000e049c50726f706f73616c2068617320656974686572206661696c6564206f72207375636365656465643c50726f706f73616c45787069726564000f04984c69666574696d65206f662070726f706f73616c20686173206265656e2065786365656465644c50726f706f736572436f756e7449735a65726f0010045850726f706f73657220436f756e74206973205a65726f2c4f75744f66426f756e647300110458496e707574206973206f7574206f6620626f756e647304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909110700000408c4dc0015070c58646b675f72756e74696d655f7072696d6974697665732070726f706f73616c5853746f726564556e7369676e656450726f706f73616c082454696d657374616d700110244d61784c656e6774680101030008012070726f706f73616cfd02014c50726f706f73616c3c4d61784c656e6774683e00012474696d657374616d7010012454696d657374616d70000019070c6c70616c6c65745f646b675f70726f706f73616c5f68616e646c65721870616c6c6574144572726f7204045400012c244e6f6e6556616c7565000004884572726f72206e616d65732073686f756c642062652064657363726970746976652e3c53746f726167654f766572666c6f77000104f84572726f72732073686f756c6420686176652068656c7066756c20646f63756d656e746174696f6e206173736f6369617465642077697468207468656d2e5450726f706f73616c466f726d6174496e76616c69640002046850726f706f73616c20666f726d617420697320696e76616c69645850726f706f73616c4d7573744265556e7369676e65640003046450726f706f73616c206d75737420626520756e7369676e656468496e76616c696450726f706f73616c42797465734c656e6774680004048050726f706f73616c206279746573206c656e67746820697320696e76616c69646050726f706f73616c5369676e6174757265496e76616c69640005047450726f706f73616c207369676e617475726520697320696e76616c69645450726f706f73616c446f65734e6f74457869737473000604844e6f2070726f706f73616c2077697468207468652049442077617320666f756e645450726f706f73616c416c7265616479457869737473000704bc50726f706f73616c2077697468207468652049442068617320616c7265616479206265656e207375626d697474656438436861696e4964496e76616c69640008044c436861696e20696420697320696e76616c69645c50726f706f73616c734c656e6774684f766572666c6f77000904b450726f706f73616c206c656e6774682065786365656473206d617820616c6c6f776564207065722062617463684c50726f706f73616c4f75744f66426f756e6473000a045850726f706f73616c206f7574206f6620626f756e647304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909091d070c5870616c6c65745f6272696467655f7265676973747279147479706573384272696467654d6574616461746108304d61785265736f7572636573004c4d61784164646974696f6e616c4669656c647300000801307265736f757263655f69647321070190426f756e6465645665633c5265736f7572636549642c204d61785265736f75726365733e000110696e666f0903017c427269646765496e666f3c4d61784164646974696f6e616c4669656c64733e000021070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ed02045300000400910301185665633c543e000025070c5870616c6c65745f6272696467655f72656769737472791870616c6c6574144572726f7208045400044900011c60506172616d65746572734e6f74496e697469616c697a65640000048c506172616d657465727320686176656e2774206265656e20696e697469616c697a65642c5665726966794572726f72000104644572726f7220647572696e6720766572696669636174696f6e4450726f706f73616c4e6f745369676e6564000204c850726f706f73616c206973206e6f74207369676e656420616e642073686f756c64206e6f742062652070726f63657373656440427269646765496e6465784572726f72000304a45265736f7572636573206d617020746f20646966666572656e742062726964676520696e646963657334546f6f4d616e794669656c64730004046c546f6f206d616e79206164646974696f6e616c206669656c64732e384272696467654e6f74466f756e640005045842726964676520646f6573206e6f742065786973742e40546f6f4d616e795265736f75726365730006044c546f6f206d616e79207265736f75726365732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090929070000040c0018e0002d070c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090931070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013507045300000400390701185665633c543e000035070000040c109d03000039070000023507003d07000004084107180041070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400cc01185665633c543e000045070c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c019d031c42616c616e6365011801081c4f6e676f696e670400490701c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564e00110626f6f6c00010c656e6410012c426c6f636b4e756d6265720001000049070c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c019d031c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616c9d03012050726f706f73616c0001247468726573686f6c64f00134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c794d07013854616c6c793c42616c616e63653e00004d070c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e6365000051070c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573550701f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e736107015044656c65676174696f6e733c42616c616e63653e0001147072696f726507017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6ea5030128436f6e76696374696f6e00012c64656c65676174696f6e736107015044656c65676174696f6e733c42616c616e63653e0001147072696f726507017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0001000055070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540159070453000004005d0701185665633c543e000059070000040810f4005d0700000259070061070c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e6365000065070c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e636500006907000004089d03f0006d07000004081041070071070c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090975070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c045300000400250201185665633c543e00007907084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e7400011061796573cc01385665633c4163636f756e7449643e0001106e617973cc01385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d62657200007d070c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090981070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c103045300000400850701185665633c543e00008507000002c103008907083870616c6c65745f76657374696e672052656c6561736573000108085630000000085631000100008d070c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e91070000040810000095070c4c70616c6c65745f65636473615f636c61696d731870616c6c6574144572726f7204045400011860496e76616c6964457468657265756d5369676e61747572650000046c496e76616c696420457468657265756d207369676e61747572652e405369676e65724861734e6f436c61696d00010478457468657265756d206164647265737320686173206e6f20636c61696d2e4053656e6465724861734e6f436c61696d000204b04163636f756e742049442073656e64696e67207472616e73616374696f6e20686173206e6f20636c61696d2e30506f74556e646572666c6f77000308490154686572652773206e6f7420656e6f75676820696e2074686520706f7420746f20706179206f757420736f6d6520756e76657374656420616d6f756e742e2047656e6572616c6c7920696d706c6965732061306c6f676963206572726f722e40496e76616c696453746174656d656e740004049041206e65656465642073746174656d656e7420776173206e6f7420696e636c756465642e4c56657374656442616c616e6365457869737473000504a4546865206163636f756e7420616c7265616479206861732061207665737465642062616c616e63652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090999070000029d07009d07086470616c6c65745f656c656374696f6e735f70687261676d656e2853656174486f6c64657208244163636f756e74496401001c42616c616e63650118000c010c77686f0001244163636f756e7449640001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e63650000a107086470616c6c65745f656c656374696f6e735f70687261676d656e14566f74657208244163636f756e74496401001c42616c616e63650118000c0114766f746573cc01385665633c4163636f756e7449643e0001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e63650000a5070c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144572726f7204045400014430556e61626c65546f566f7465000004c043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e1c4e6f566f746573000104944d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e30546f6f4d616e79566f7465730002048443616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e504d6178696d756d566f74657345786365656465640003049843616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e284c6f7742616c616e6365000404c443616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e3c556e61626c65546f506179426f6e6400050478566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2c4d7573744265566f746572000604404d757374206265206120766f7465722e4c4475706c69636174656443616e646964617465000704804475706c6963617465642063616e646964617465207375626d697373696f6e2e44546f6f4d616e7943616e6469646174657300080498546f6f206d616e792063616e646964617465732068617665206265656e20637265617465642e304d656d6265725375626d6974000904884d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e3852756e6e657255705375626d6974000a048852756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e68496e73756666696369656e7443616e64696461746546756e6473000b049443616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e244e6f744d656d626572000c04344e6f742061206d656d6265722e48496e76616c69645769746e65737344617461000d04e05468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e40496e76616c6964566f7465436f756e74000e04cc5468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e44496e76616c696452656e6f756e63696e67000f04fc5468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e48496e76616c69645265706c6163656d656e74001004fc50726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a907089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e04045400000c0120737570706f727473ad0701b0426f756e646564537570706f7274733c543a3a4163636f756e7449642c20543a3a4d617857696e6e6572733e00011473636f726529010134456c656374696f6e53636f726500011c636f6d707574652501013c456c656374696f6e436f6d707574650000ad070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c904045300000400c50401185665633c543e0000b107089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f740404540000080118766f74657273b507013c5665633c566f7465724f663c543e3e00011c74617267657473cc01445665633c543a3a4163636f756e7449643e0000b507000002b90700b9070000040c0028bd0700bd070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400cc01185665633c543e0000c1070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c507045300000400c90701185665633c543e0000c5070000040c2901101000c907000002c50700cd070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e01f1030010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6eed030154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e63650000d1070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f720404540001386850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732ed507083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616cfd01013042616c616e63654f663c543e000118616374697665fd01013042616c616e63654f663c543e000124756e6c6f636b696e67d90701f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f72657761726473e5070194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e0000d9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401dd07045300000400e10701185665633c543e0000dd07083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565fd01011c42616c616e636500010c65726131020120457261496e6465780000e107000002dd0700e5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400950101185665633c543e0000e907083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473bd0701ac426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61784e6f6d696e6174696f6e733e0001307375626d69747465645f696e100120457261496e64657800012873757070726573736564e00110626f6f6c0000ed07083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e6465780001147374617274f107012c4f7074696f6e3c7536343e0000f10704184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000f507083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616cf907018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e0000f907042042547265654d617008044b010004560110000400fd07000000fd0700000201080001080000040800100005080000020908000908083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273190101645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273cc01385665633c4163636f756e7449643e0001187061796f757418011c42616c616e636500000d08000004083901180011080c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72950101345665633c457261496e6465783e000015080c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e6365000019080000021d08001d080000040810e0002108103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000164344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e54496e636f7272656374486973746f72794465707468000f04c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001004b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650011043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300120494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740013043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001404550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730015084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001608550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001704e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400180458536f6d6520626f756e64206973206e6f74206d65742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909250800000229080029080000040800f504002d08000004083108300031080c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000035080c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e3908083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e636500003d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400950101185665633c543e0000410808346672616d655f737570706f72742050616c6c65744964000004009d01011c5b75383b20385d000045080c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e4908083c70616c6c65745f626f756e7469657318426f756e74790c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d62657201100018012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500010c66656518011c42616c616e636500013c63757261746f725f6465706f73697418011c42616c616e6365000110626f6e6418011c42616c616e63650001187374617475734d080190426f756e74795374617475733c4163636f756e7449642c20426c6f636b4e756d6265723e00004d08083c70616c6c65745f626f756e7469657330426f756e747953746174757308244163636f756e74496401002c426c6f636b4e756d626572011001182050726f706f73656400000020417070726f7665640001001846756e6465640002003c43757261746f7250726f706f73656404011c63757261746f720001244163636f756e7449640003001841637469766508011c63757261746f720001244163636f756e7449640001287570646174655f64756510012c426c6f636b4e756d6265720004003450656e64696e675061796f75740c011c63757261746f720001244163636f756e74496400012c62656e65666963696172790001244163636f756e744964000124756e6c6f636b5f617410012c426c6f636b4e756d6265720005000051080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000055080c3c70616c6c65745f626f756e746965731870616c6c6574144572726f7208045400044900012c70496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e30526561736f6e546f6f4269670002048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e40556e65787065637465645374617475730003048054686520626f756e74792073746174757320697320756e65787065637465642e385265717569726543757261746f720004045c5265717569726520626f756e74792063757261746f722e30496e76616c696456616c756500050454496e76616c696420626f756e74792076616c75652e28496e76616c69644665650006044c496e76616c696420626f756e7479206665652e3450656e64696e675061796f75740007086c4120626f756e7479207061796f75742069732070656e64696e672ef8546f2063616e63656c2074686520626f756e74792c20796f75206d75737420756e61737369676e20616e6420736c617368207468652063757261746f722e245072656d6174757265000804450154686520626f756e746965732063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e504861734163746976654368696c64426f756e7479000904050154686520626f756e74792063616e6e6f7420626520636c6f73656420626563617573652069742068617320616374697665206368696c6420626f756e746965732e34546f6f4d616e79517565756564000a0498546f6f206d616e7920617070726f76616c732061726520616c7265616479207175657565642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095908085470616c6c65745f6368696c645f626f756e746965732c4368696c64426f756e74790c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011000140134706172656e745f626f756e747910012c426f756e7479496e64657800011476616c756518011c42616c616e636500010c66656518011c42616c616e636500013c63757261746f725f6465706f73697418011c42616c616e63650001187374617475735d0801a44368696c64426f756e74795374617475733c4163636f756e7449642c20426c6f636b4e756d6265723e00005d08085470616c6c65745f6368696c645f626f756e74696573444368696c64426f756e747953746174757308244163636f756e74496401002c426c6f636b4e756d626572011001101441646465640000003c43757261746f7250726f706f73656404011c63757261746f720001244163636f756e7449640001001841637469766504011c63757261746f720001244163636f756e7449640002003450656e64696e675061796f75740c011c63757261746f720001244163636f756e74496400012c62656e65666963696172790001244163636f756e744964000124756e6c6f636b5f617410012c426c6f636b4e756d6265720003000061080c5470616c6c65745f6368696c645f626f756e746965731870616c6c6574144572726f7204045400010c54506172656e74426f756e74794e6f74416374697665000004a454686520706172656e7420626f756e7479206973206e6f7420696e206163746976652073746174652e64496e73756666696369656e74426f756e747942616c616e6365000104e454686520626f756e74792062616c616e6365206973206e6f7420656e6f75676820746f20616464206e6577206368696c642d626f756e74792e50546f6f4d616e794368696c64426f756e746965730002040d014e756d626572206f66206368696c6420626f756e746965732065786365656473206c696d697420604d61784163746976654368696c64426f756e7479436f756e74602e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090965080c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e744964000110707265768001504f7074696f6e3c543a3a4163636f756e7449643e0001106e6578748001504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f7570706572280120543a3a53636f726500011473636f7265280120543a3a53636f7265000069080c4070616c6c65745f626167735f6c697374106c6973740c4261670804540004490000080110686561648001504f7074696f6e3c543a3a4163636f756e7449643e0001107461696c8001504f7074696f6e3c543a3a4163636f756e7449643e00006d08000002280071080c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400750801244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090975080c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e64000300007908085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328506f6f6c4d656d626572040454000010011c706f6f6c5f6964100118506f6f6c4964000118706f696e747318013042616c616e63654f663c543e0001706c6173745f7265636f726465645f7265776172645f636f756e74657295060140543a3a526577617264436f756e746572000138756e626f6e64696e675f657261737d0801e0426f756e64656442547265654d61703c457261496e6465782c2042616c616e63654f663c543e2c20543a3a4d6178556e626f6e64696e673e00007d080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004008108013842547265654d61703c4b2c20563e00008108042042547265654d617008044b011004560118000400850800000085080000028908008908000004081018008d08085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c426f6e646564506f6f6c496e6e65720404540000100118706f696e747318013042616c616e63654f663c543e000114737461746561010124506f6f6c53746174650001386d656d6265725f636f756e74657210010c753332000114726f6c65739108015c506f6f6c526f6c65733c543a3a4163636f756e7449643e00009108085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c526f6c657304244163636f756e7449640100001001246465706f7369746f720001244163636f756e744964000110726f6f748001444f7074696f6e3c4163636f756e7449643e0001246e6f6d696e61746f728001444f7074696f6e3c4163636f756e7449643e00011c626f756e6365728001444f7074696f6e3c4163636f756e7449643e00009508085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328526577617264506f6f6c04045400000c01706c6173745f7265636f726465645f7265776172645f636f756e74657295060140543a3a526577617264436f756e74657200016c6c6173745f7265636f726465645f746f74616c5f7061796f75747318013042616c616e63654f663c543e000154746f74616c5f726577617264735f636c61696d656418013042616c616e63654f663c543e00009908085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320537562506f6f6c7304045400000801186e6f5f6572619d080134556e626f6e64506f6f6c3c543e000120776974685f657261a108010101426f756e64656442547265654d61703c457261496e6465782c20556e626f6e64506f6f6c3c543e2c20546f74616c556e626f6e64696e67506f6f6c733c543e3e00009d08085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328556e626f6e64506f6f6c0404540000080118706f696e747318013042616c616e63654f663c543e00011c62616c616e636518013042616c616e63654f663c543e0000a1080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01100456019d08045300000400a508013842547265654d61703c4b2c20563e0000a508042042547265654d617008044b01100456019d08000400a908000000a908000002ad0800ad0800000408109d0800b1080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000b5080c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144572726f7204045400016030506f6f6c4e6f74466f756e6400000488412028626f6e6465642920706f6f6c20696420646f6573206e6f742065786973742e48506f6f6c4d656d6265724e6f74466f756e640001046c416e206163636f756e74206973206e6f742061206d656d6265722e48526577617264506f6f6c4e6f74466f756e640002042101412072657761726420706f6f6c20646f6573206e6f742065786973742e20496e20616c6c206361736573207468697320697320612073797374656d206c6f676963206572726f722e40537562506f6f6c734e6f74466f756e6400030468412073756220706f6f6c20646f6573206e6f742065786973742e644163636f756e7442656c6f6e6773546f4f74686572506f6f6c0004084d01416e206163636f756e7420697320616c72656164792064656c65676174696e6720696e20616e6f7468657220706f6f6c2e20416e206163636f756e74206d6179206f6e6c792062656c6f6e6720746f206f6e653c706f6f6c20617420612074696d652e3846756c6c79556e626f6e64696e670005083d01546865206d656d6265722069732066756c6c7920756e626f6e6465642028616e6420746875732063616e6e6f74206163636573732074686520626f6e64656420616e642072657761726420706f6f6ca8616e796d6f726520746f2c20666f72206578616d706c652c20636f6c6c6563742072657761726473292e444d6178556e626f6e64696e674c696d69740006040901546865206d656d6265722063616e6e6f7420756e626f6e642066757274686572206368756e6b732064756520746f207265616368696e6720746865206c696d69742e4443616e6e6f745769746864726177416e790007044d014e6f6e65206f66207468652066756e64732063616e2062652077697468647261776e2079657420626563617573652074686520626f6e64696e67206475726174696f6e20686173206e6f74207061737365642e444d696e696d756d426f6e644e6f744d6574000814290154686520616d6f756e7420646f6573206e6f74206d65657420746865206d696e696d756d20626f6e6420746f20656974686572206a6f696e206f7220637265617465206120706f6f6c2e00cc546865206465706f7369746f722063616e206e6576657220756e626f6e6420746f20612076616c7565206c657373207468616e05016050616c6c65743a3a6465706f7369746f725f6d696e5f626f6e64602e205468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e6749017065726d697373696f6e7320666f722074686520706f6f6c2e204d656d626572732063616e206e6576657220756e626f6e6420746f20612076616c75652062656c6f7720604d696e4a6f696e426f6e64602e304f766572666c6f775269736b0009042101546865207472616e73616374696f6e20636f756c64206e6f742062652065786563757465642064756520746f206f766572666c6f77207269736b20666f722074686520706f6f6c2e344e6f7444657374726f79696e67000a085d014120706f6f6c206d75737420626520696e205b60506f6f6c53746174653a3a44657374726f79696e67605d20696e206f7264657220666f7220746865206465706f7369746f7220746f20756e626f6e64206f7220666f72b86f74686572206d656d6265727320746f206265207065726d697373696f6e6c6573736c7920756e626f6e6465642e304e6f744e6f6d696e61746f72000b04f45468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e544e6f744b69636b65724f7244657374726f79696e67000c043d01456974686572206129207468652063616c6c65722063616e6e6f74206d616b6520612076616c6964206b69636b206f722062292074686520706f6f6c206973206e6f742064657374726f79696e672e1c4e6f744f70656e000d047054686520706f6f6c206973206e6f74206f70656e20746f206a6f696e204d6178506f6f6c73000e04845468652073797374656d206973206d61786564206f7574206f6e20706f6f6c732e384d6178506f6f6c4d656d62657273000f049c546f6f206d616e79206d656d6265727320696e2074686520706f6f6c206f722073797374656d2e4443616e4e6f744368616e676553746174650010048854686520706f6f6c732073746174652063616e6e6f74206265206368616e6765642e54446f65734e6f74486176655065726d697373696f6e001104b85468652063616c6c657220646f6573206e6f742068617665206164657175617465207065726d697373696f6e732e544d65746164617461457863656564734d61784c656e001204ac4d657461646174612065786365656473205b60436f6e6669673a3a4d61784d657461646174614c656e605d24446566656e736976650400b9080138446566656e736976654572726f720013083101536f6d65206572726f72206f6363757272656420746861742073686f756c64206e657665722068617070656e2e20546869732073686f756c64206265207265706f7274656420746f20746865306d61696e7461696e6572732e9c5061727469616c556e626f6e644e6f74416c6c6f7765645065726d697373696f6e6c6573736c79001404bc5061727469616c20756e626f6e64696e67206e6f7720616c6c6f776564207065726d697373696f6e6c6573736c792e2c506f6f6c4964496e55736500150464506f6f6c2069642063757272656e746c7920696e207573652e34496e76616c6964506f6f6c49640016049c506f6f6c2069642070726f7669646564206973206e6f7420636f72726563742f757361626c652e4c426f6e64457874726152657374726963746564001704fc426f6e64696e67206578747261206973207265737472696374656420746f207468652065786163742070656e64696e672072657761726420616d6f756e742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b9080c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657438446566656e736976654572726f72000114684e6f74456e6f7567685370616365496e556e626f6e64506f6f6c00000030506f6f6c4e6f74466f756e6400010048526577617264506f6f6c4e6f74466f756e6400020040537562506f6f6c734e6f74466f756e6400030070426f6e64656453746173684b696c6c65645072656d61747572656c7900040000bd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c108045300000400c90801185665633c543e0000c10804184f7074696f6e04045401c5080108104e6f6e6500000010536f6d650400c5080000010000c508084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c019d032c426c6f636b4e756d62657201103450616c6c6574734f726967696e01e505244163636f756e7449640100001401206d617962655f69646d0101304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c9d03011043616c6c0001386d617962655f706572696f646963290501944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696ee505013450616c6c6574734f726967696e0000c908000002c10800cd080c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d108083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f7369741d010150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f736974d50801704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656ea903012c4f7074696f6e3c7533323e00010000d50804184f7074696f6e040454011d010108104e6f6e6500000010536f6d6504001d010000010000d908000004082c1000dd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000e1080c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e5080c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e64657201f501000801206f6666656e646572f50101204f6666656e6465720001247265706f7274657273cc01345665633c5265706f727465723e0000e9080000040879013000ed080c3470616c6c65745f6861736865721870616c6c6574144572726f720804540004490001087c48617368696e67506172616d65746572734e6f74496e697469616c697a65640000048c506172616d657465727320686176656e2774206265656e20696e697469616c697a656424486173684572726f72000104504572726f7220647572696e672068617368696e6704b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f1080c5470616c6c65745f61737365745f726567697374727914747970657330417373657444657461696c73101c4173736574496401101c42616c616e6365011834426f756e646564537472696e67018501404d617841737365744964496e506f6f6c018d01001001106e616d6585010134426f756e646564537472696e6700012861737365745f74797065890101904173736574547970653c417373657449642c204d617841737365744964496e506f6f6c3e00014c6578697374656e7469616c5f6465706f73697418011c42616c616e63650001186c6f636b6564e00110626f6f6c0000f5080c5470616c6c65745f61737365745f72656769737472791474797065733441737365744d657461646174610434426f756e646564537472696e670185010008011873796d626f6c85010134426f756e646564537472696e67000120646563696d616c7308010875380000f9080c5470616c6c65745f61737365745f72656769737472791870616c6c6574144572726f72040454000124344e6f4964417661696c61626c6500000811014173736574204964206973206e6f7420617661696c61626c652e2054686973206f6e6c792068617070656e73207768656e206974207265616368657320746865204d41585c76616c7565206f6620676976656e20696420747970652e3441737365744e6f74466f756e6400010474496e76616c6964206173736574206e616d65206f722073796d626f6c2e1c546f6f4c6f6e6700020474496e76616c6964206173736574206e616d65206f722073796d626f6c2e4841737365744e6f7452656769737465726564000304c44173736574204944206973206e6f74207265676973746572656420696e207468652061737365742d72656769737472792e584173736574416c72656164795265676973746572656400040470417373657420697320616c726561647920726567697374657265642e54496e76616c696453686172656441737365744c656e000504ec496e636f7272656374206e756d626572206f66206173736574732070726f766964656420746f20637265617465207368617265642061737365742e444173736574457869737473496e506f6f6c0006045c41737365742065786973747320696e20746f20706f6f6c4c41737365744e6f74466f756e64496e506f6f6c0007045c4173736574206e6f7420666f756e6420696e20706f6f6c5c4d617841737365744964496e506f6f6c526561636865640008049c4d6178206e756d626572206f662061737365747320696e20706f6f6c206973207265616368656404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909fd080c3c6f726d6c5f63757272656e63696573186d6f64756c65144572726f7204045400010c5c416d6f756e74496e746f42616c616e63654661696c6564000004bc556e61626c6520746f20636f6e766572742074686520416d6f756e74207479706520696e746f2042616c616e63652e3442616c616e6365546f6f4c6f770001044c42616c616e636520697320746f6f206c6f772e344465706f7369744661696c6564000204784465706f73697420726573756c74206973206e6f7420657870656374656404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090901090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010509045300000400090901185665633c543e00000509082c6f726d6c5f746f6b656e732c42616c616e63654c6f636b041c42616c616e636501180008010869649d0101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e6365000009090000020509000d09082c6f726d6c5f746f6b656e732c4163636f756e7444617461041c42616c616e63650118000c01106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000011090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011509045300000400190901185665633c543e00001509082c6f726d6c5f746f6b656e732c52657365727665446174610844526573657276654964656e746966696572019d011c42616c616e636501180008010869649d010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e6365000019090000021509001d090c2c6f726d6c5f746f6b656e73186d6f64756c65144572726f720404540001203442616c616e6365546f6f4c6f77000004585468652062616c616e636520697320746f6f206c6f775c416d6f756e74496e746f42616c616e63654661696c65640001049c43616e6e6f7420636f6e7665727420416d6f756e7420696e746f2042616c616e63652074797065544c69717569646974795265737472696374696f6e73000204d04661696c65642062656361757365206c6971756964697479207265737472696374696f6e732064756520746f206c6f636b696e67404d61784c6f636b734578636565646564000304b44661696c6564206265636175736520746865206d6178696d756d206c6f636b7320776173206578636565646564244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e74484578697374656e7469616c4465706f736974000504e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e79526573657276657300070004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090921090c5070616c6c65745f746f6b656e5f777261707065721870616c6c6574144572726f7204045400011c34496e76616c6964416d6f756e7400000468496e76616c6964207472616e73616374696f6e20616d6f756e744c556e7265676973746572656441737365744964000104a041737365744964206e6f7420666f756e6420696e2073656c656374656420706f6f6c207368617265384e6f74466f756e64496e506f6f6c00020484417373657473206e6f7420666f756e6420696e2073656c656374656420706f6f6c4c496e73756666696369656e7442616c616e636500030484496e73756666696369656e742042616c616e636520666f7220616e206173736574644e6f5772617070696e6746656550657263656e74466f756e6400040030496e76616c69644e6f6e636500050434496e76616c6964206e6f6e63655c4e616d65457863656564734d6178696d756d4c696d6974000604684e616d652065786365656473206d6178696d756d206c696d697404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090925090c3c70616c6c65745f76657269666965721870616c6c6574144572726f7208045400044900010884566572696679696e67506172616d65746572734e6f74496e697469616c697a65640000048c506172616d657465727320686176656e2774206265656e20696e697469616c697a65642c5665726966794572726f72000104644572726f7220647572696e6720766572696669636174696f6e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090929090c3c776562625f7072696d697469766573147479706573384465706f73697444657461696c7308244163636f756e74496401001c42616c616e63650118000801246465706f7369746f720001244163636f756e74496400011c6465706f73697418011c42616c616e636500002d090c2470616c6c65745f6d7414747970657330547265654d6574616461746110244163636f756e7449640100244c656166496e64657801101c456c656d656e7401ad01204d61784564676573013109001c011c63726561746f728001444f7074696f6e3c4163636f756e7449643e000118706175736564e00110626f6f6c0001286c6561665f636f756e741001244c656166496e6465780001286d61785f6c65617665731001244c656166496e64657800011464657074680801087538000110726f6f74ad01011c456c656d656e74000128656467655f6e6f64657335090174426f756e6465645665633c456c656d656e742c204d617845646765733e000031090c6474616e676c655f7374616e64616c6f6e655f72756e74696d656470726f746f636f6c5f7375627374726174655f636f6e666967204d617845646765730000000035090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad01045300000400c50101185665633c543e000039090c2470616c6c65745f6d741870616c6c6574144572726f7208045400044900011c48496e76616c69645065726d697373696f6e73000004a44163636f756e7420646f6573206e6f74206861766520636f7272656374207065726d697373696f6e7340496e76616c69645472656544657074680001048c496e76616c6964206465707468206f662074686520747265652073706563696669656440496e76616c69644c656166496e646578000204bc496e76616c696420206c65616620696e6465782c20206569746865722074616b656e206f7220746f6f206c6172676540457863656564734d61784c656176657300030430547265652069732066756c6c3c54726565446f65736e744578697374000404445472656520646f65736e742065786973745c457863656564734d617844656661756c7448617368657300050484496e76616c6964206c656e67746820666f722064656661756c74206861736865733c457863656564734d6178456467657300060460496e76616c6964206c656e67746820666f7220656467657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093d090000040810280041090c5070616c6c65745f6c696e6b61626c655f7472656514747970657330456467654d657461646174610c1c436861696e494401281c456c656d656e7401ad01344c6173744c656166496e6465780110001001307372635f636861696e5f696428011c436861696e4944000110726f6f74ad01011c456c656d656e740001446c61746573745f6c6561665f696e6465781001344c6173744c656166496e64657800013c7372635f7265736f757263655f6964690501285265736f75726365496400004509000004083d09100049090c5070616c6c65745f6c696e6b61626c655f747265651870616c6c6574144572726f7208045400044900011c2c556e6b6e6f776e526f6f7400000048496e76616c69644d65726b6c65526f6f747300010450496e76616c6964204d65726b6c6520526f6f74736c496e76616c69644e65696768626f725769746864726177526f6f74000208a8496e76616c6964206e65696768626f7220726f6f742070617373656420696e207769746864726177616ca8286e65696768626f7220726f6f74206973206e6f7420696e206e65696768626f7220686973746f72792930546f6f4d616e794564676573000304dc416e63686f72206973206174206d6178696d756d206e756d626572206f6620656467657320666f722074686520676976656e20747265654445646765416c72656164794578697374730004044c4564676520616c7265616479206578697374734045646765446f65736e744578697374730005044c4564676520646f6573206e6f7420657869737458496e76616c69644c61746573744c656166496e64657800060464496e76616c6964206c6174657374206c65616620696e64657804b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094d090c3070616c6c65745f6d69786572147479706573344d697865724d65746164617461081c42616c616e636501181c417373657449640110000801306465706f7369745f73697a6518011c42616c616e6365000114617373657410011c41737365744964000051090000040810ad010055090c3070616c6c65745f6d697865721870616c6c6574144572726f7208045400044900011848496e76616c69645065726d697373696f6e73000004a44163636f756e7420646f6573206e6f74206861766520636f7272656374207065726d697373696f6e7350496e76616c6964576974686472617750726f6f6600010458496e76616c69642077697468647261772070726f6f6660416c726561647952657665616c65644e756c6c696669657200020898496e76616c6964206e756c6c6966696572207468617420697320616c72656164792075736564dc2874686973206572726f722069732072657475726e6564207768656e2061206e756c6c696669657220697320757365642074776963652950496e76616c6964417262697472617279446174610003002c556e6b6e6f776e526f6f7400040430496e76616c696420726f6f74304e6f4d69786572466f756e64000504384e6f206d6978657220666f756e6404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090959090c5c70616c6c65745f7369676e61747572655f6272696467651870616c6c6574144572726f7208045400044900014048496e76616c69645065726d697373696f6e73000004a44163636f756e7420646f6573206e6f74206861766520636f7272656374207065726d697373696f6e7338496e76616c6964436861696e49640001047850726f766964656420636861696e204964206973206e6f742076616c69644c436861696e4e6f7457686974656c6973746564000204b4496e746572616374696f6e732077697468207468697320636861696e206973206e6f74207065726d69747465645c436861696e416c726561647957686974656c697374656400030478436861696e2068617320616c7265616479206265656e20656e61626c6564505265736f75726365446f65734e6f744578697374000404b45265736f757263652049442070726f76696465642069736e2774206d617070656420746f20616e797468696e67545265736f75726365416c7265616479457869737473000504c05265736f757263652049442070726f766964656420697320616c7265616479206d617070656420746f20616e63686f72405369676e6174757265496e76616c6964000604d050726f7669646564207369676e6174757265206973206e6f742066726f6d2074686520616374697665206d61696e7461696e6572404d75737442654d61696e7461696e6572000704c450726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792072656c617965725450726f706f73616c416c7265616479457869737473000804ec412070726f706f73616c207769746820746865736520706172616d65746572732068617320616c7265616479206265656e207375626d69747465648443616c6c4e6f74436f6e73697374656e745769746850726f706f73616c44617461000904c843616c6c20646f6573206e6f74206d61746368207061727365642063616c6c2066726f6d2070726f706f73616c20646174616843616c6c446f65734e6f744d617463685265736f757263654964000a04f843616c6c20646f6573206e6f74206d61746368207265736f75726365206964206163636f7264696e6720746f207265736f7572636573206d617070696e6774496e636f7272656374457865637574696f6e436861696e496454797065000b04d4436861696e20496420547970652066726f6d2074686520725f696420646f6573206e6f74206d61746368207468697320636861696e30496e76616c69644e6f6e6365000c0434496e76616c6964206e6f6e63654c496e76616c696450726f706f73616c44617461000d0454496e76616c69642070726f706f73616c20646174612c496e76616c696443616c6c000e04e4496e76616c69642063616c6c202d2063616c6c73206d7573742062652064656c65676174656420746f2068616e646c65722070616c6c6574734c537472696e674c696d69744578636565646564000f0490546865206d6178206c696d697420666f7220737472696e6720697320657863656564656404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095d09103c776562625f7072696d6974697665731474797065731c76616e63686f723c56416e63686f724d6574616461746108244163636f756e74496401002843757272656e6379496401100008011c63726561746f728001444f7074696f6e3c4163636f756e7449643e000114617373657410012843757272656e63794964000061090c3870616c6c65745f76616e63686f721870616c6c6574144572726f7208045400044900012c5c496e76616c69645472616e73616374696f6e50726f6f6600000464496e76616c6964207472616e73616374696f6e2070726f6f66384e6f56416e63686f72466f756e64000104685661726961626c6520416e63686f72206e6f7420666f756e642e60416c726561647952657665616c65644e756c6c696669657200020898496e76616c6964206e756c6c6966696572207468617420697320616c72656164792075736564dc2874686973206572726f722069732072657475726e6564207768656e2061206e756c6c696669657220697320757365642074776963652940496e76616c6964457874416d6f756e7400030050496e76616c69644465706f736974416d6f756e7400040054496e76616c69645769746864726177416d6f756e7400050038496e76616c69644578744461746100060058496e76616c6964496e7075744e756c6c69666965727300070028496e76616c69644665650008004c496e76616c69645075626c6963416d6f756e7400090030496e76616c69644e6f6e6365000a0434496e76616c6964206e6f6e636504b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090965090c5870616c6c65745f76616e63686f725f68616e646c65721870616c6c6574144572726f7208045400044900011c48496e76616c69645065726d697373696f6e73000004444163636573732076696f6c6174696f6e2e645265736f757263654973416c7265616479416e63686f72656400010054416e63686f7248616e646c65724e6f74466f756e6400020054536f75726365436861696e49644e6f74466f756e640003003c53746f726167654f766572666c6f770004044c53746f72616765206f766572666c6f7765642e30496e76616c69644e6f6e636500050434496e76616c6964206e6f6e636544496e76616c69645265736f7572636549640006044c496e76616c6964207265736f7572636520494404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090969090c7070616c6c65745f746f6b656e5f777261707065725f68616e646c65721870616c6c6574144572726f7204045400011048496e76616c69645065726d697373696f6e73000004444163636573732076696f6c6174696f6e2e645265736f757263654973416c7265616479416e63686f7265640001006c546f6b656e5772617070657248616e646c65724e6f74466f756e640002003c53746f726167654f766572666c6f770003044c53746f72616765206f766572666c6f7765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017109045300000400750901185665633c543e000071090000040800d90100750900000271090079090c4870616c6c65745f6b65795f73746f726167651870616c6c6574144572726f72080454000449000108445075624b65794f75744f66426f756e64730000005c4d61785075626b65794f776e657273457863656564656400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909097d090c5c70616c6c65745f76616e63686f725f76657269666965721870616c6c6574144572726f7208045400044900010884566572696679696e67506172616d65746572734e6f74496e697469616c697a65640000048c506172616d657465727320686176656e2774206265656e20696e697469616c697a65642c5665726966794572726f72000104644572726f7220647572696e6720766572696669636174696f6e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090981090c6070616c6c65745f7472616e73616374696f6e5f7061757365186d6f64756c65144572726f720404540001082c43616e6e6f7450617573650000043463616e206e6f7420706175736540496e76616c696443686172616374657200010468696e76616c69642063686172616374657220656e636f64696e6704b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090985090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401e901045300000400890901185665633c543e00008909000002e901008d0910346672616d655f737570706f727418747261697473106d69736334577261707065724f70617175650404540191090008003102000000910901045400009109084070616c6c65745f696d5f6f6e6c696e6564426f756e6465644f70617175654e6574776f726b53746174650c4c506565724964456e636f64696e674c696d697400584d756c746941646472456e636f64696e674c696d697400384164647265737365734c696d6974000008011c706565725f69649509019c5765616b426f756e6465645665633c75382c20506565724964456e636f64696e674c696d69743e00014865787465726e616c5f6164647265737365739909012d015765616b426f756e6465645665633c5765616b426f756e6465645665633c75382c204d756c746941646472456e636f64696e674c696d69743e2c204164647265737365734c696d69740a3e000095090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e000099090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e6465645665630804540195090453000004009d0901185665633c543e00009d09000002950900a1090c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a5090c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e7473004c4d61784164646974696f6e616c4669656c647300000c01286a756467656d656e7473a90901fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666fb50501844964656e74697479496e666f3c4d61784164646974696f6e616c4669656c64733e0000a9090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad09045300000400b10901185665633c543e0000ad090000040810d90500b109000002ad0900b5090000040818b90900b9090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400cc01185665633c543e0000bd090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c109045300000400c90901185665633c543e0000c10904184f7074696f6e04045401c5090108104e6f6e6500000010536f6d650400c5090000010000c5090c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f081c42616c616e63650118244163636f756e7449640100000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c6473d10501384964656e746974794669656c64730000c909000002c10900cd090c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400014848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e34546f6f4d616e794669656c6473000b046c546f6f206d616e79206164646974696f6e616c206669656c64732e44546f6f4d616e7952656769737472617273000c04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000d04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000e047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000f04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479001004d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001104f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d1090c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d50900000408c42800d90900000408c41d0200dd0900000408c40000e1090c6070616c6c65745f657468325f6c696768745f636c69656e741870616c6c6574144572726f7204045400018448416c7265616479496e697469616c697a6564000004f8546865206c6967687420636c69656e7420697320616c726561647920696e697469616c697a656420666f722074686520747970656420636861696e204944685375626d6974746572416c72656164795265676973746572656400010468466f7220617474656d7074696e6720746f207265676973746572585375626d69747465724e6f745265676973746572656400020470466f7220617474656d7074696e6720746f20756e72656769737465725c5375626d69747465724861735573656453746f7261676500030470466f7220617474656d7074696e6720746f20756e72656769737465726c4c69676874436c69656e745570646174654e6f74416c6c6f776564000404a4466f7220617474656d7074696e6720746f2075706461746520746865206c6967687420636c69656e7454426c6f636b416c72656164795375626d69747465640005045c426c6f636b20616c7265616479207375626d69747465644c556e6b6e6f776e506172656e7448656164657200060480556e6b6e6f776e20706172656e7420626c6f636b206865616465722068617368404e6f74547275737465645369676e65720007044053656c662d6578706c616e61746f72797456616c696461746555706461746573506172616d657465724572726f72000804d054686520757064617465732076616c69646174696f6e2063616e27742062652064697361626c656420666f72206d61696e6e65744854727573746c6573734d6f64654572726f720009084d0154686520636c69656e742063616e277420626520657865637574656420696e207468652074727573746c657373206d6f646520776974686f757420424c53207369677320766572696669636174696f6e206f6e1c4d61696e6e65746c496e76616c696453796e63436f6d6d69747465654269747353756d000a009453796e63436f6d6d69747465654269747353756d4c6573735468616e5468726573686f6c64000b004c466f726b56657273696f6e4e6f74466f756e64000c0044466f726b45706f63684e6f74466f756e64000d007447656e6573697356616c696461746f7273526f6f744e6f74466f756e64000e004c496e76616c6964426c735369676e6174757265000f0054496e76616c6964457865637574696f6e426c6f636b001000ac416374697665486561646572536c6f744e756d6265724c6573735468616e46696e616c697a6564536c6f740011004c496e76616c6964557064617465506572696f6400120050496e76616c696446696e616c69747950726f6f6600130078496e76616c6964457865637574696f6e426c6f636b4861736850726f6f660014006c4e65787453796e63436f6d6d69747465654e6f7450726573656e7400150074496e76616c69644e65787453796e63436f6d6d697474656550726f6f660016008846696e616c697a6564457865637574696f6e4865616465724e6f7450726573656e740017007c46696e616c697a6564426561636f6e4865616465724e6f7450726573656e740018006c556e66696e616c697a65644865616465724e6f7450726573656e740019007453796e63436f6d6d69747465655570646174654e6f7450726573656e74001a005c5375626d69747465724578686175737465644c696d6974001b005848656164657248617368446f65734e6f744578697374001c0054426c6f636b486173686573446f4e6f744d61746368001d0058496e76616c69645369676e6174757265506572696f64001e006843757272656e7453796e63436f6d6d69747465654e6f74536574001f005c4e65787453796e63436f6d6d69747465654e6f7453657400200004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e509102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730189021043616c6c018102245369676e617475726501e90914457874726101f10900040030000000e909082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400a5020148656432353531393a3a5369676e61747572650000001c537232353531390400ad050148737232353531393a3a5369676e61747572650001001445636473610400ed09014065636473613a3a5369676e617475726500020000ed090c1c73705f636f7265146563647361245369676e617475726500000400cd0301205b75383b2036355d0000f10900000420f509f909fd09010a050a0d0a110a150a00f50910306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000f90910306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000fd0910306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000010a10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000050a10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400090a010c4572610000090a102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff00000d0a10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e63650404540000040031020120543a3a496e6465780000110a10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000150a086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400fd01013042616c616e63654f663c543e0000190a086474616e676c655f7374616e64616c6f6e655f72756e74696d651c52756e74696d6500000000cc1853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022c29020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d655570677261646500002d0204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100e00400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100e00400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500002102040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01390201501830426c6f636b576569676874734902f901624fd75a000b00204aa9d10113ffffffffffffffff02c0cd1700010b005816a82e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf01000002c0cd1700010b00e06812a3011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a7413000000000000004002c0cd170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746859023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687461024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e650249034474616e676c652d7374616e64616c6f6e654474616e676c652d7374616e64616c6f6e6501000000760000000100000034df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a060000009f5f822b6fd456f601000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000bc9d89904f5b923f0100000037c8bb1350a9a2a803000000ed99c5acb25eedf50300000051fffea56fd0c5d4010000002358a96901b1aa870100000001000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978bc082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e017502002454696d657374616d70012454696d657374616d70080c4e6f7701002820000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100e0040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0179020004344d696e696d756d506572696f642820dc05000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e0001105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e017d02017400016d06026052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100710604000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000032042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402007506040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402008506040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01850201840c484578697374656e7469616c4465706f7369741840e803000000000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01910604485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100950640000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100990604000000018c04604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000061041757261011041757261082c417574686f72697469657301009d060400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100a5062000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000071c4772616e647061011c4772616e647061181453746174650100a90604000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e67650000ad06040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c6564000069010400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010028200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405281004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e018d02019008384d6178417574686f726974696573101064000000045c204d617820417574686f72697469657320696e20757365584d6178536574496453657373696f6e456e74726965732820000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01b506080c444b47010c444b478038557365645369676e6174757265730100b906040004a0205075626c6963206b6579205369676e61747572657320666f7220706173742073657373696f6e7330526566726573684e6f6e636501001010000000000498204e6f6e63652076616c756520666f72206e65787420726566726573682070726f706f73616c305265667265736844656c61790100bd06100000000004dc2053657373696f6e2070726f677265737320726571756972656420746f206b69636b737461727420726566726573682070726f63657373384e657874556e7369676e656441740100101000000000140d0120446566696e65732074686520626c6f636b207768656e206e65787420756e7369676e6564207472616e73616374696f6e2077696c6c2062652061636365707465642e00210120546f2070726576656e74207370616d206f6620756e7369676e65642028616e6420756e70617965642129207472616e73616374696f6e73206f6e20746865206e6574776f726b2c0901207765206f6e6c7920616c6c6f77206f6e65207472616e73616374696f6e2065766572792060543a3a556e7369676e6564496e74657276616c6020626c6f636b732e250120546869732073746f7261676520656e74727920646566696e6573207768656e206e6577207472616e73616374696f6e20697320676f696e6720746f2062652061636365707465642e4452656672657368496e50726f67726573730100e0040004a420436865636b2069662074686572652069732061207265667265736820696e2070726f67726573732e5853686f756c64457865637574654e65774b657967656e0100e0040004742053686f756c642077652073746172742061206e6577204b657967656e404e657874444b475075626c69634b65790000c1060400048820486f6c6473207075626c6963206b657920666f72206e6578742073657373696f6e584e6578745075626c69634b65795369676e61747572650000e102040004d4205369676e6174757265206f662074686520444b47207075626c6963206b657920666f7220746865206e6578742073657373696f6e30444b475075626c69634b65790100c1062400000000000000000004b020486f6c647320616374697665207075626c6963206b657920666f72206f6e676f696e672073657373696f6e54444b475075626c69634b65795369676e61747572650100e102040004a0205369676e6174757265206f66207468652063757272656e7420444b47207075626c6963206b65794450726576696f75735075626c69634b65790100c1062400000000000000000004b020486f6c6473207075626c6963206b657920666f7220696d6d65646961746520706173742073657373696f6e40486973746f726963616c526f756e64730101040128c5060c000000047020547261636b732063757272656e742070726f706f73657220736574485369676e61747572655468726573686f6c640100bc08000004e4205468652063757272656e74207369676e6174757265207468726573686f6c642028692e652e207468652060746020696e20742d6f662d6e293c4b657967656e5468726573686f6c640100bc08000004e4205468652063757272656e74207369676e6174757265207468726573686f6c642028692e652e2074686520606e6020696e20742d6f662d6e29584e6578745369676e61747572655468726573686f6c640100bc08000004e4205468652063757272656e74207369676e6174757265207468726573686f6c642028692e652e207468652060746020696e20742d6f662d6e294c4e6578744b657967656e5468726573686f6c640100bc08000004e4205468652063757272656e74207369676e6174757265207468726573686f6c642028692e652e2074686520606e6020696e20742d6f662d6e296450656e64696e675369676e61747572655468726573686f6c640100bc08000004e4205468652070656e64696e67207369676e6174757265207468726573686f6c642028692e652e207468652060746020696e20742d6f662d6e295850656e64696e674b657967656e5468726573686f6c640100bc08000004e4205468652070656e64696e67207369676e6174757265207468726573686f6c642028692e652e2074686520606e6020696e20742d6f662d6e292c417574686f7269746965730100d90204000470205468652063757272656e7420617574686f7269746965732073657438417574686f7269747953657449640100282000000000000000000474205468652063757272656e7420617574686f7269747920736574206964484e657874417574686f726974795365744964010028200000000000000000046820546865206e65787420617574686f72697479207365742069643c4e657874417574686f7269746965730100d902040004ec20417574686f72697469657320736574207363686564756c656420746f2062652075736564207769746820746865206e6578742073657373696f6e6843757272656e74417574686f7269746965734163636f756e74730100c90604000494204163636f756e747320666f72207468652063757272656e7420617574686f7269746965735c4e657874417574686f7269746965734163636f756e74730100c906040004d420417574686f72697479206163636f756e7420696473207363686564756c656420666f7220746865206e6578742073657373696f6e484163636f756e74546f417574686f726974790001040100b0040004d420417574686f72697479206163636f756e7420696473207363686564756c656420666f7220746865206e6578742073657373696f6e4c4d69736265686176696f75725265706f72747300010401cd06cd020400047020547261636b73206d69736265686176696f7572207265706f72747350417574686f7269747952657075746174696f6e7301010402b0184000000000000000000000000000000000047420547261636b7320617574686f726974792072657075746174696f6e735c4a61696c65644b657967656e417574686f72697469657301010401b010100000000008c020547261636b73206a61696c656420617574686f72697469657320666f72206b657967656e206279206d617070696e67dc20746f2074686520626c6f636b206e756d626572207768656e2074686520617574686f7269747920776173206c617374206a61696c6564604a61696c65645369676e696e67417574686f72697469657301010401b010100000000008c420547261636b73206a61696c656420617574686f72697469657320666f72207369676e696e67206279206d617070696e67dc20746f2074686520626c6f636b206e756d626572207768656e2074686520617574686f7269747920776173206c617374206a61696c65643c42657374417574686f7269746965730100d106040004d8205468652063757272656e74206265737420617574686f726974696573206f662074686520616374697665206b657967656e207365744c4e65787442657374417574686f7269746965730100d106040004cc20546865206e657874206265737420617574686f726974696573206f662074686520616374697665206b657967656e20736574604c61737453657373696f6e526f746174696f6e426c6f636b010010100000000004f020546865206c61737420426c6f636b4e756d626572206174207768696368207468652073657373696f6e20726f746174696f6e2068617070656e656401c10201a420305265667265736844656c6179bd0610a0bb0d0004fc2050657263656e746167652073657373696f6e2073686f756c6420686176652070726f6772657373656420666f72207265667265736820746f20626567696e40556e7369676e6564496e74657276616c101003000000101501204e756d626572206f6620626c6f636b73206f6620636f6f6c646f776e20616674657220756e7369676e6564207472616e73616374696f6e20697320696e636c756465642e005901205468697320656e73757265732074686174207765206f6e6c792061636365707420756e7369676e6564207472616e73616374696f6e73206f6e63652c2065766572792060556e7369676e6564496e74657276616c602020626c6f636b732e40556e7369676e65645072696f726974792820000010000000000010f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e3453657373696f6e506572696f641010280000000441012053657373696f6e206c656e6774682068656c70657220616c6c6f77696e6720746f2071756572792073657373696f6e206c656e677468206163726f73732072756e74696d652075706772616465732e304d61784b65794c656e677468101000020000044c204d61784c656e67746820666f72206b657973484d61785369676e61747572654c656e6774681010000200000460204d61784c656e67746820666f72207369676e6174757265384d6178417574686f7269746965731010640000000464204d617820617574686f72697469657320746f2073746f7265304d61785265706f7274657273101064000000045c204d6178207265706f727465727320746f2073746f726501dd060930444b4750726f706f73616c730130444b4750726f706f73616c73282c436861696e4e6f6e63657300010401c4c8040004fc20416c6c2077686974656c697374656420636861696e7320616e642074686569722072657370656374697665207472616e73616374696f6e20636f756e74734450726f706f7365725468726573686f6c64010010100100000004cc204e756d626572206f6620766f74657320726571756972656420666f7220612070726f706f73616c20746f20657865637574657850726f706f73657253657455706461746550726f706f73616c4e6f6e63650100101000000000048c2050726f706f73657220536574205570646174652050726f706f73616c204e6f6e63652450726f706f736572730101040200e00400047020547261636b732063757272656e742070726f706f736572207365746045787465726e616c50726f706f7365724163636f756e74730101040200e106040008b820547261636b732063757272656e742070726f706f736572207365742065787465726e616c206163636f756e747321012043757272656e746c79206d65616e7420746f2073746f726520457468657265756d20636f6d70617469626c652036342d6279746573204543445341207075626c6963206b65797348417574686f7269747950726f706f736572730100e506040008550120547261636b732074686520617574686f7269746965732074686174206172652070726f706f7365727320736f2077652063616e2070726f7065726c7920757064617465207468652070726f706f736572207365749c206163726f73732073657373696f6e7320616e6420617574686f72697479206368616e6765732e8445787465726e616c417574686f7269747950726f706f7365724163636f756e74730100e906040004b820547261636b732063757272656e742070726f706f736572207365742065787465726e616c206163636f756e74733450726f706f736572436f756e740100101000000000046c204e756d626572206f662070726f706f7365727320696e2073657414566f7465730001080101f106f90604000c5420416c6c206b6e6f776e2070726f706f73616c732e0d0120546865206b6579206973207468652068617368206f66207468652063616c6c20616e6420746865206465706f7369742049442c20746f20656e7375726520697427732020756e697175652e245265736f757263657300010401ed0209070400041901205574696c697a6564206279207468652062726964676520736f66747761726520746f206d6170207265736f757263652049447320746f2061637475616c206d6574686f647301e90201c01c3c436861696e4964656e746966696572c41402390400000c7c20546865206964656e74696669657220666f72207468697320636861696e2e11012054686973206d75737420626520756e6971756520616e64206d757374206e6f7420636f6c6c6964652077697468206578697374696e67204944732077697468696e20615c20736574206f66206272696467656420636861696e732e4050726f706f73616c4c69666574696d651010f00000000018506572696f64101028000000044c205468652073657373696f6e20706572696f64204d6178566f74657310106400000004ac20546865206d617820766f74657320746f2073746f726520666f7220666f7220616e6420616761696e7374304d61785265736f75726365731010e803000004c020546865206d6178207265736f757263657320746861742063616e2062652073746f72656420696e2073746f72616765544d6178417574686f7269747950726f706f7365727310106400000004e820546865206d617820617574686f726974792070726f706f7365727320746861742063616e2062652073746f72656420696e2073746f726167656c4d617845787465726e616c50726f706f7365724163636f756e747310106400000004050120546865206d61782065787465726e616c2070726f706f736572206163636f756e747320746861742063616e2062652073746f72656420696e2073746f72616765010d070a48444b4750726f706f73616c48616e646c65720148444b4750726f706f73616c48616e646c65720c54556e7369676e656450726f706f73616c51756575650001080202110715070400046020416c6c20756e7369676e65642070726f706f73616c732e384e657874556e7369676e656441740100101000000000140d0120446566696e65732074686520626c6f636b207768656e206e65787420756e7369676e6564207472616e73616374696f6e2077696c6c2062652061636365707465642e00210120546f2070726576656e74207370616d206f6620756e7369676e65642028616e6420756e70617965642129207472616e73616374696f6e73206f6e20746865206e6574776f726b2c0901207765206f6e6c7920616c6c6f77206f6e65207472616e73616374696f6e2065766572792060543a3a556e7369676e6564496e74657276616c6020626c6f636b732e250120546869732073746f7261676520656e74727920646566696e6573207768656e206e6577207472616e73616374696f6e20697320676f696e6720746f2062652061636365707465642e3c5369676e656450726f706f73616c7300010802021107fd020400045820416c6c207369676e65642070726f706f73616c732e01f50201d00c584d61785375626d697373696f6e735065724261746368bc08640004d4204d6178206e756d626572206f66207369676e65642070726f706f73616c207375626d697373696f6e73207065722062617463683b58556e7369676e656450726f706f73616c45787069727910100a00000004a4204d617820626c6f636b7320746f2073746f726520616e20756e7369676e65642070726f706f73616c444d617850726f706f73616c4c656e6774681010102700000464204d6178206c656e677468206f6620612070726f706f73616c0119070b384272696467655265676973747279013842726964676552656769737472790c3c4e657874427269646765496e646578010010100000000004782053746f7261676520666f72206e6578742062726964676520696e6465781c4272696467657300010401101d070400047c2053746f7261676520666f72206d6170206f6620616c6c2062726964676573545265736f75726365546f427269646765496e64657800010401ed021004000490204d617070696e67206f66207265736f7572636520746f2062726964676520696e64657801050301e40c4c4d61784164646974696f6e616c4669656c6473101064000000086501204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e2061206272696467652773206d657461646174612e204e656564656420746f190120626f756e642074686520492f4f20726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e304d61785265736f75726365731010e80300000c5d01204d6178696d756d206e756d626572206f66207265736f75726365732074686174206d61792062652073746f72656420696e2061206272696467652e2054686973206973206e6f7420746f20626520636f6e667573656425012077697468207468652061637475616c206d6178696d756d20737570706f7274656420627920746865206272696467652e204e656564656420746f20626f756e642074686520492f4ff820726571756972656420746f206163636573732061206d65746164617461206f626a6563742c206275742063616e2062652070726574747920686967682e444d617850726f706f73616c4c656e6774681010102700000464204d6178206c656e677468206f6620612070726f706f73616c0125070c1c496e6469636573011c496e646963657304204163636f756e7473000104021029070400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01950301e8041c4465706f7369741840000064a7b3b6e00d000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e012d070d2444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010010100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301003107040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f6600010405103d0704000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010010100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040510450704000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405005107d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100e00400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00006907040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c697374000104062c6d0704000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e73010104062ce00400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402fc2c040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01990301ec303c456e6163746d656e74506572696f641010002f0d0014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641010004e0c0004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641010004e0c0004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641010002f0d00109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f7369741840000010632d5ec76b050000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564e004010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f6410108051010004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641010004e0c0004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657310106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73101064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473101064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656410106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e0171070e1c436f756e63696c011c436f756e63696c182450726f706f73616c7301007507040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062c8102040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062c7907040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100cc0400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01b10301010100017d070f1c56657374696e67011c56657374696e67081c56657374696e6700010402008107040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100890704000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01bd0301050108444d696e5665737465645472616e736665721840000010632d5ec76b050000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c00000000018d071018436c61696d730118436c61696d731818436c61696d73000104060d011804000014546f74616c01001840000000000000000000000000000000000030457870697279436f6e66696700009107040004c82045787069727920626c6f636b20616e64206163636f756e7420746f206465706f73697420657870697265642066756e64731c56657374696e67000104060d01d503040010782056657374696e67207363686564756c6520666f72206120636c61696d2e0d012046697273742062616c616e63652069732074686520746f74616c20616d6f756e7420746861742073686f756c642062652068656c6420666f722076657374696e672ee4205365636f6e642062616c616e636520697320686f77206d7563682073686f756c6420626520756e6c6f636b65642070657220626c6f636b2ecc2054686520626c6f636b206e756d626572206973207768656e207468652076657374696e672073686f756c642073746172742e1c5369676e696e67000104060d01dd03040004c0205468652073746174656d656e74206b696e642074686174206d757374206265207369676e65642c20696620616e792e24507265636c61696d7300010406000d010400042d01205072652d636c61696d656420457468657265756d206163636f756e74732c20627920746865204163636f756e74204944207468617420746865792061726520636c61696d656420746f2e01c503010901041850726566697830807c50617920544e547320746f207468652054616e676c65206163636f756e743a000195071124456c656374696f6e730124456c656374696f6e73141c4d656d626572730100990704000c74205468652063757272656e7420656c6563746564206d656d626572732e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100990704001084205468652063757272656e742072657365727665642072756e6e6572732d75702e00590120496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865bc206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e2843616e64696461746573010019010400185901205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f72d020616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e007c205365636f6e6420656c656d656e7420697320746865206465706f7369742e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e38456c656374696f6e526f756e647301001010000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e18566f74696e670101040500a107840000000000000000000000000000000000000000000000000000000000000000000cb820566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e00c42054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e01e103011501282050616c6c657449649d0120706872656c65637404d0204964656e74696669657220666f722074686520656c656374696f6e732d70687261676d656e2070616c6c65742773206c6f636b3443616e646964616379426f6e6418400000e8890423c78a000000000000000004050120486f77206d7563682073686f756c64206265206c6f636b656420757020696e206f7264657220746f207375626d6974206f6e6527732063616e6469646163792e38566f74696e67426f6e6442617365184000001004a502701e010000000000000010942042617365206465706f736974206173736f636961746564207769746820766f74696e672e00550120546869732073686f756c642062652073656e7369626c79206869676820746f2065636f6e6f6d6963616c6c7920656e73757265207468652070616c6c65742063616e6e6f742062652061747461636b656420627994206372656174696e67206120676967616e746963206e756d626572206f6620766f7465732e40566f74696e67426f6e64466163746f721840000020f84dde700400000000000000000411012054686520616d6f756e74206f6620626f6e642074686174206e65656420746f206265206c6f636b656420666f72206561636820766f746520283332206279746573292e38446573697265644d656d6265727310100d0000000470204e756d626572206f66206d656d6265727320746f20656c6563742e404465736972656452756e6e65727355701010070000000478204e756d626572206f662072756e6e6572735f757020746f206b6565702e305465726d4475726174696f6e1010801303000c510120486f77206c6f6e6720656163682073656174206973206b6570742e205468697320646566696e657320746865206e65787420626c6f636b206e756d62657220617420776869636820616e20656c656374696f6e5d0120726f756e642077696c6c2068617070656e2e2049662073657420746f207a65726f2c206e6f20656c656374696f6e732061726520657665722074726967676572656420616e6420746865206d6f64756c652077696c6c5020626520696e2070617373697665206d6f64652e344d617843616e6469646174657310100a00000018e420546865206d6178696d756d206e756d626572206f662063616e6469646174657320696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e003101205768656e2074686973206c696d69742069732072656163686564206e6f206d6f72652063616e646964617465732061726520616363657074656420696e2074686520656c656374696f6e2e244d6178566f7465727310100500000018f820546865206d6178696d756d206e756d626572206f6620766f7465727320746f20616c6c6f7720696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e00d8205768656e20746865206c696d6974206973207265616368656420746865206e657720766f74657273206172652069676e6f7265642e404d6178566f746573506572566f7465721010640000001090204d6178696d756d206e756d62657273206f6620766f7465732070657220766f7465722e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e01a5071268456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e74506861736501002d010400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e0000a9070400043d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e20536e617073686f740000b10704000c7020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e38446573697265645461726765747300001004000ccc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e40536e617073686f744d657461646174610000bd0404000c9820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e64696365730100c1070400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d61700001040510cd0704001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f7265000029010400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e01e9030121014c34556e7369676e656450686173651010320000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173651010320000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c6439011000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e5c426574746572556e7369676e65645468726573686f6c64390110a0860100084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061738020226265747465722220696e2074686520556e7369676e65642070686173652e384f6666636861696e52657065617410100500000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792820feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e7310100a0000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d617857656967687420400b288460912e011366666666666666a61494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100300000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e6564526577617264426173651840000064a7b3b6e00d0000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f736974426173651840000064a7b3b6e00d000000000000000004902042617365206465706f73697420666f722061207369676e656420736f6c7574696f6e2e445369676e65644465706f73697442797465184000008a5d78456301000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e444d6178456c656374696e67566f746572731010409c00000c5d0120546865206d6178696d756d206e756d626572206f6620656c656374696e6720766f7465727320746f2070757420696e2074686520736e617073686f742e20417420746865206d6f6d656e742c20736e617073686f7473590120617265206f6e6c79206f76657220612073696e676c6520626c6f636b2c20627574206f6e6365206d756c74692d626c6f636b20656c656374696f6e732061726520696e74726f647563656420746865792077696c6c842074616b6520706c616365206f766572206d756c7469706c6520626c6f636b732e4c4d6178456c65637461626c6554617267657473bc08102704010120546865206d6178696d756d206e756d626572206f6620656c65637461626c65207461726765747320746f2070757420696e2074686520736e617073686f742e284d617857696e6e6572731010e803000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e67746810100000360000384d696e65724d617857656967687420400b288460912e011366666666666666a600544d696e65724d6178566f746573506572566f7465721010100000000001d107131c5374616b696e67011c5374616b696e67943856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100cc04000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e0100390110000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c65646765720001040200d5070400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e1450617965650101040500d50404000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f727301010405003d010800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f72730001040500e907040048750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468656d01205b60436f6e6669673a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e20496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e244163746976654572610000ed07040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400103101205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b65727301010805059107f9010c0000001878204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e48457261735374616b657273436c697070656401010805059107f9010c0000002c9820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865dc2060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e484572617356616c696461746f725072656673010108050591073d010800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4c4572617356616c696461746f7252657761726400010405101804000c09012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510f50714000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b65010104051018400000000000000000000000000000000008ec2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100450104000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e0100390110000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405100508040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100290204001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e457261000108050591070d08040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505910718040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e73000104050011080400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c6173680101040501081508800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301001908040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c640000dd0404000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e01d1040135011c384d61784e6f6d696e6174696f6e7310101000000004b4204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e30486973746f72794465707468101050000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602cac206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c8420605374616b696e674c65646765722e636c61696d65645f72657761726473602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563601101206974656d20605374616b696e674c65646765722e636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010010000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e1010a002000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e1010a8000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e804d61784e6f6d696e61746f72526577617264656450657256616c696461746f7210100001000010f820546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e00510120466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e390120636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e012108141c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100cc0400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100e0040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010025080400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010095010400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500f5040400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e6572000104052d0800040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01f104014901000135081528486973746f726963616c00000000001620547265617375727901205472656173757279103450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051039080400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301003d08040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01fd04014d011c3050726f706f73616c426f6e64bd061050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000064a7b3b6e00d0000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d3d050400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f64101080700000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726ebd061020a107000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c6574496441082070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e0145081720426f756e746965730120426f756e74696573102c426f756e7479436f756e74010010100000000004c0204e756d626572206f6620626f756e74792070726f706f73616c7320746861742068617665206265656e206d6164652e20426f756e74696573000104051049080400047820426f756e7469657320746861742068617665206265656e206d6164652e48426f756e74794465736372697074696f6e73000104051051080400048020546865206465736372697074696f6e206f66206561636820626f756e74792e3c426f756e7479417070726f76616c7301003d08040004ec20426f756e747920696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f74207965742066756e6465642e0101050151012444426f756e74794465706f736974426173651840000064a7b3b6e00d000000000000000004e82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120626f756e74792070726f706f73616c2e60426f756e74794465706f7369745061796f757444656c6179101080700000045901205468652064656c617920706572696f6420666f72207768696368206120626f756e74792062656e6566696369617279206e65656420746f2077616974206265666f726520636c61696d20746865207061796f75742e48426f756e7479557064617465506572696f64101000270600046c20426f756e7479206475726174696f6e20696e20626c6f636b732e6043757261746f724465706f7369744d756c7469706c696572bd061020a10700101901205468652063757261746f72206465706f7369742069732063616c63756c6174656420617320612070657263656e74616765206f66207468652063757261746f72206665652e0039012054686973206465706f73697420686173206f7074696f6e616c20757070657220616e64206c6f77657220626f756e64732077697468206043757261746f724465706f7369744d61786020616e6454206043757261746f724465706f7369744d696e602e4443757261746f724465706f7369744d61783d054401000010632d5ec76b0500000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4443757261746f724465706f7369744d696e3d054401000064a7b3b6e00d0000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e48426f756e747956616c75654d696e696d756d18400000f4448291634500000000000000000470204d696e696d756d2076616c756520666f72206120626f756e74792e48446174614465706f73697450657242797465184000008a5d7845630100000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e4c4d6178696d756d526561736f6e4c656e67746810102c0100000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756501550818344368696c64426f756e7469657301344368696c64426f756e7469657314404368696c64426f756e7479436f756e7401001010000000000480204e756d626572206f6620746f74616c206368696c6420626f756e746965732e4c506172656e744368696c64426f756e74696573010104051010100000000008b0204e756d626572206f66206368696c6420626f756e746965732070657220706172656e7420626f756e74792ee0204d6170206f6620706172656e7420626f756e747920696e64657820746f206e756d626572206f66206368696c6420626f756e746965732e344368696c64426f756e7469657300010805056901590804000494204368696c6420626f756e7469657320746861742068617665206265656e2061646465642e5c4368696c64426f756e74794465736372697074696f6e73000104051051080400049820546865206465736372697074696f6e206f662065616368206368696c642d626f756e74792e4c4368696c6472656e43757261746f72466565730101040510184000000000000000000000000000000000040101205468652063756d756c6174697665206368696c642d626f756e74792063757261746f722066656520666f72206561636820706172656e7420626f756e74792e01050501550108644d61784163746976654368696c64426f756e7479436f756e74101005000000041d01204d6178696d756d206e756d626572206f66206368696c6420626f756e7469657320746861742063616e20626520616464656420746f206120706172656e7420626f756e74792e5c4368696c64426f756e747956616c75654d696e696d756d1840000064a7b3b6e00d00000000000000000488204d696e696d756d2076616c756520666f722061206368696c642d626f756e74792e0161081920426167734c6973740120426167734c6973740c244c6973744e6f6465730001040500650804000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c697374426167730001040528690804000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01090501590104344261675468726573686f6c64736d080919210300407a10f35a00006a70ccd4a96000009ef3397fbc660000a907ccd5306d00003d9a67fb0c740000a9bfa275577b0000a6fdf73217830000034f5d91538b0000132445651494000078081001629d00000302f63c45a70000392e6f7fc7b10000f59c23c6f2bc00004ae76aafd1c80000598a64846fd50000129fb243d8e200003f22e1ac18f1000033a4844c3e000100e2e51b895710010076a2c0b0732101006789b407a3330100793ed8d7f646010078131b81815b01000c1cf38a567101004437eeb68a8801009eb56d1434a10100335e9f156abb010067c3c7a545d701003218f340e1f40100de0b230d59140200699c11f5ca350200ad50a2c4565902009ae41c471e7f0200d0244e6745a70200f984ad51f2d10200ace7a7984dff0200a118325b822f0300ffa4c76dbe620300580bfd8532990300a9afce6812d30300109ad81b95100400d9caa519f551040038df488970970400bee1727949e10400cc73401fc62f0500b304f91831830500828bffb4d9db05001235383d143a0600a5b42a473a9e060036662d09ab080700f73aeab4cb790700b87e93d707f20700ffec23c0d1710800b84b0beca2f90800c9dcae7afc89090091752ba867230a0064f1cd4f76c60a003609be76c3730b0078655fdff32b0c00a407f5a5b6ef0c0052f61be7c5bf0d00da71bb70e79c0e000de9127eed870f001477987fb7811000ebee65ef328b11001269fe325ca5120033f8428b3fd113008ba57a13fa0f15001b2b60d0ba6216000d1d37d0c3ca17006c64fa5c6b4919002622c7411de01a00045bb9245c901c00233d83f6c25b1e00c8771c79064420003013fddef64a2200aa8b6e848172240082c096c4b2bc260016a3faebb72b29008296524ae1c12b00a636a865a4812e00d0e2d4509e6d31009c0a9a2796883400e4faafb27fd53700e6e64d367e573b000e4bd66de7113f0088b17db746084300b07def72603e470034de249635b84b00d48bd57b077a5000d0bd20ef5b885500b8f0467801e85a0010f88aee139e60003892925301b066009c95e4fc8e236d00b4126d10dffe730028b43e5976487b00a08a1c7a42078300b09ab083a0428b002846b2f463029400c861a42ade4e9d0050d23d4ae630a700805101a7e1b1b10038e501b2ccdbbc002016527844b9c800388924ba9055d50070ca35a4aebce200805fb1355cfbf0008035685d241f0001a0c3dcd96b361001d07862e87e50210160e852d09f7d330190662c5816cf460110274c3340575b01804be277a22971013082b92dfc5a880180d276075a01a101b0f511592b34bb014031745f580cd701802f6cee59a4f40140ff799b521814026075607d2986350260fde999a60d590200e5e71c91d07e02c0df2575cff2a602a07fd975899ad102a067009d4cf0fe0220dc29a1321f2f0320ff526b0a5562038088caa383c29803e05683fb5c9bd203401dd75d9516100400317e39a06e5104c0b071129de1960480b48c9192b1e00480e8124aad242f05c007ca7082858205007c13c45623db0540836fe869523906c0700f81466c9d0640f09c5017d00707c0e624b301e37807c0332ac78510f10780074ca1e4ca700800d5a9eb8c8bf80800a849588ed3880900804254142c220a80a25170e826c50a00e8d5fafc5e720b801df64e00792a0c80d4fe64f923ee0c006dd038ee19be0d001e90a494209b0e0010bf570e0a860f00da6a9db0b57f1000bf64afd810891100bb5b60cd17a31200f963f3aed6ce1300d5f004766a0d1500e099770202601600103d663bdfc71700de3e2d4158461900ecdbadb2d8dc1a0045c70007e38c1c00b8bde0fc11581e00ba5c2a211a402000407de46dcb462200dea55b03136e2400aaf1f3fcfcb7260014226f63b62629006492803e8fbc2b008486a6c7fc7b2e002cf05fc09b673100da63f7ed32823400f0b13fbdb5ce3700f291c41047503b00422a1a3c3c0a3f002c24212f20004300ac9342d4b6354700cc6ed7a400af4b00c4d022773e70500020017d89f57d5500f86387cef3dc5a008c4c7f7e54926000206207f284a36600cc1e05cb49166d00b42a7a70c4f07300d43a90e278397b0038f461ec53f78200a07264b9b1318b0048c9b3d464f09300007fe998bd3b9d0010058f17921ca70000dfaf7f469cb100e80c880bd6c4bc0058bdcb7ddca0c80038d18d37a03bd50030d55bf01ca1e200704ac01a0fdef0ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e0171081a3c4e6f6d696e6174696f6e506f6f6c73013c4e6f6d696e6174696f6e506f6f6c734c2c4d696e4a6f696e426f6e640100184000000000000000000000000000000000049c204d696e696d756d20616d6f756e7420746f20626f6e6420746f206a6f696e206120706f6f6c2e344d696e437265617465426f6e6401001840000000000000000000000000000000001ca0204d696e696d756d20626f6e6420726571756972656420746f20637265617465206120706f6f6c2e00650120546869732069732074686520616d6f756e74207468617420746865206465706f7369746f72206d7573742070757420617320746865697220696e697469616c207374616b6520696e2074686520706f6f6c2c20617320616e8820696e6469636174696f6e206f662022736b696e20696e207468652067616d65222e0069012054686973206973207468652076616c756520746861742077696c6c20616c7761797320657869737420696e20746865207374616b696e67206c6564676572206f662074686520706f6f6c20626f6e646564206163636f756e7480207768696c6520616c6c206f74686572206163636f756e7473206c656176652e204d6178506f6f6c730000100400086901204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e20706f6f6c7320746861742063616e2065786973742e20496620604e6f6e65602c207468656e20616e20756e626f756e646564206e756d626572206f664420706f6f6c732063616e2065786973742e384d6178506f6f6c4d656d626572730000100400084901204d6178696d756d206e756d626572206f66206d656d6265727320746861742063616e20657869737420696e207468652073797374656d2e20496620604e6f6e65602c207468656e2074686520636f756e74b8206d656d6265727320617265206e6f7420626f756e64206f6e20612073797374656d20776964652062617369732e544d6178506f6f6c4d656d62657273506572506f6f6c0000100400084101204d6178696d756d206e756d626572206f66206d656d626572732074686174206d61792062656c6f6e6720746f20706f6f6c2e20496620604e6f6e65602c207468656e2074686520636f756e74206f66a8206d656d62657273206973206e6f7420626f756e64206f6e20612070657220706f6f6c2062617369732e2c506f6f6c4d656d626572730001040500790804000c4020416374697665206d656d626572732e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e54436f756e746572466f72506f6f6c4d656d62657273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c426f6e646564506f6f6c7300010405108d08040004682053746f7261676520666f7220626f6e64656420706f6f6c732e54436f756e746572466f72426f6e646564506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c526577617264506f6f6c730001040510950804000869012052657761726420706f6f6c732e2054686973206973207768657265207468657265207265776172647320666f72206561636820706f6f6c20616363756d756c6174652e205768656e2061206d656d62657273207061796f7574650120697320636c61696d65642c207468652062616c616e636520636f6d6573206f757420666f207468652072657761726420706f6f6c2e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e54436f756e746572466f72526577617264506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c537562506f6f6c7353746f72616765000104051099080400084d012047726f757073206f6620756e626f6e64696e6720706f6f6c732e20456163682067726f7570206f6620756e626f6e64696e6720706f6f6c732062656c6f6e677320746f206120626f6e64656420706f6f6c2cf42068656e636520746865206e616d65207375622d706f6f6c732e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e64436f756e746572466f72537562506f6f6c7353746f72616765010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204d657461646174610101040510b1080400045c204d6574616461746120666f722074686520706f6f6c2e48436f756e746572466f724d65746164617461010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170284c617374506f6f6c4964010010100000000004d0204576657220696e6372656173696e67206e756d626572206f6620616c6c20706f6f6c73206372656174656420736f206661722e4c52657665727365506f6f6c49644c6f6f6b7570000104050010040010dc20412072657665727365206c6f6f6b75702066726f6d2074686520706f6f6c2773206163636f756e7420696420746f206974732069642e0055012054686973206973206f6e6c79207573656420666f7220736c617368696e672e20496e20616c6c206f7468657220696e7374616e6365732c2074686520706f6f6c20696420697320757365642c20616e6420746865c0206163636f756e7473206172652064657465726d696e6973746963616c6c7920646572697665642066726f6d2069742e74436f756e746572466f7252657665727365506f6f6c49644c6f6f6b7570010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617040436c61696d5065726d697373696f6e73010104050021050400040101204d61702066726f6d206120706f6f6c206d656d626572206163636f756e7420746f207468656972206f7074656420636c61696d207065726d697373696f6e2e010d05015d01082050616c6c6574496441082070792f6e6f706c73048420546865206e6f6d696e6174696f6e20706f6f6c27732070616c6c65742069642e484d6178506f696e7473546f42616c616e636508040a301d0120546865206d6178696d756d20706f6f6c20706f696e74732d746f2d62616c616e636520726174696f207468617420616e20606f70656e6020706f6f6c2063616e20686176652e005501205468697320697320696d706f7274616e7420696e20746865206576656e7420736c617368696e672074616b657320706c61636520616e642074686520706f6f6c277320706f696e74732d746f2d62616c616e63657c20726174696f206265636f6d65732064697370726f706f7274696f6e616c2e006501204d6f72656f7665722c20746869732072656c6174657320746f207468652060526577617264436f756e7465726020747970652061732077656c6c2c206173207468652061726974686d65746963206f7065726174696f6e7355012061726520612066756e6374696f6e206f66206e756d626572206f6620706f696e74732c20616e642062792073657474696e6720746869732076616c756520746f20652e672e2031302c20796f7520656e73757265650120746861742074686520746f74616c206e756d626572206f6620706f696e747320696e207468652073797374656d20617265206174206d6f73742031302074696d65732074686520746f74616c5f69737375616e6365206f669c2074686520636861696e2c20696e20746865206162736f6c75746520776f72736520636173652e00490120466f7220612076616c7565206f662031302c20746865207468726573686f6c6420776f756c64206265206120706f6f6c20706f696e74732d746f2d62616c616e636520726174696f206f662031303a312e310120537563682061207363656e6172696f20776f756c6420616c736f20626520746865206571756976616c656e74206f662074686520706f6f6c206265696e672039302520736c61736865642e01b5081b245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e64610101040510bd080400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b757000010405046901040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01250501650108344d6178696d756d57656967687420400b00806e87740113cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101000020000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e01cd081c20507265696d6167650120507265696d6167650824537461747573466f72000104062cd1080400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f7200010406d908dd08040000012d050171010001e1081d204f6666656e63657301204f6666656e6365730c1c5265706f727473000104052ce508040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e6465780101080505e90825020400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e64657801010405790130040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e0001750100001e2c486173686572426e323534012c486173686572426e3235340428506172616d6574657273010035050400048c2044657461696c73206f6620746865206d6f64756c65277320706172616d6574657273013105017d010001ed081f344173736574526567697374727901344173736574526567697374727918184173736574730001040510f108040004542044657461696c73206f6620616e2061737365742e2c4e657874417373657449640100101000000000081501204e65787420617661696c61626c652061737365742069642e20546869732069732073657175656e7469616c2069642061737369676e656420666f722065616368206e65774820726567697374657265642061737365742e20417373657449647300010402850110040004a4204d617070696e67206265747765656e206173736574206e616d6520616e642061737365742069642e3841737365744c6f636174696f6e7300010405107c04000474204e6174697665206c6f636174696f6e206f6620616e2061737365742e384c6f636174696f6e417373657473000104027c1004000484204c6f63616c20617373657420666f72206e6174697665206c6f636174696f6e2e4041737365744d657461646174614d61700001040510f50804000458204d65746164617461206f6620616e2061737365742e01390501810104344e6174697665417373657449641010000000000440204e617469766520417373657420496401f908202843757272656e636965730001410500044c4765744e617469766543757272656e637949641010000000000001fd082118546f6b656e730118546f6b656e731034546f74616c49737375616e6365010104051018400000000000000000000000000000000004902054686520746f74616c2069737375616e6365206f66206120746f6b656e20747970652e144c6f636b73010108020501080109040008d820416e79206c6971756964697479206c6f636b73206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e204163636f756e7473010108020501080d09c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018b8205468652062616c616e6365206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e00fc204e4f54453a2049662074686520746f74616c2069732065766572207a65726f2c206465637265617365206163636f756e7420726566206163636f756e742e001901204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f7265282062616c616e6365732e205265736572766573010108020501081109040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01450501990108204d61784c6f636b73101002000000002c4d61785265736572766573101002000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e011d092230546f6b656e577261707065720130546f6b656e577261707065720c485772617070696e6746656550657263656e74000104021018040004c02050657263656e74616765206f6620616d6f756e7420746f2062652075736564206173207772617070696e672066656530466565526563697069656e740001040285010004000409012046656520726563697069656e742c206163636f756e742077686963682077696c6c20626520726563656976696e67207772617070696e6720636f7374206665652e3450726f706f73616c4e6f6e6365000104028501100400041901205468652070726f706f73616c206e6f6e6365207573656420746f2070726576656e74207265706c61792061747461636b73206f6e20657865637574655f70726f706f73616c01490501a1010c2050616c6c6574496441082064772f746b77727000285472656173757279496441082064772f646b67616300485772617070696e67466565446976696465721840640000000000000000000000000000000001210923484d697865725665726966696572426e32353401484d697865725665726966696572426e3235340428506172616d6574657273010051050400048c2044657461696c73206f6620746865206d6f64756c65277320706172616d6574657273014d0501a50100012509243c4d65726b6c6554726565426e323534013c4d65726b6c6554726565426e323534201c4465706f736974000029090400048c2044657461696c73206f6620746865206d6f64756c65277320706172616d6574657273284e6578745472656549640100101000000000049820546865206e6578742074726565206964656e74696669657220757020666f7220677261627314547265657300010402102d090400048c20546865206d6170206f6620747265657320746f207468656972206d657461646174613444656661756c7448617368657301005905040004a0205468652064656661756c742068617368657320666f72207468697320747265652070616c6c6574184c656176657301010802026901ad0180000000000000000000000000000000000000000000000000000000000000000004cc20546865206d6170206f662028747265655f69642c20696e6465782920746f20746865206c65616620636f6d6d69746d656e74344e657874526f6f74496e6465780100101000000000049820546865206e6578742074726565206964656e74696669657220757020666f72206772616273344e6578744c656166496e6465780101040210101000000000049820546865206e6578742074726565206964656e74696669657220757020666f722067726162732c436163686564526f6f747301010802026901ad0180000000000000000000000000000000000000000000000000000000000000000004f8204d6170206f6620726f6f7420686973746f72792066726f6d207472656520696420746f20726f6f7420696e64657820746f20726f6f742076616c75657301550501a9010001390925444c696e6b61626c6554726565426e32353401444c696e6b61626c6554726565426e32353414204d61784564676573010104021010100000000004150120546865206d6170206f6620747265657320746f20746865206d6178696d756d206e756d626572206f6620616e63686f7220656467657320746865792063616e206861766520456467654c69737401010802023d09410931010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d820546865206d6170206f6620747265657320616e6420636861696e2069647320746f2074686569722065646765206d657461646174614c4c696e6b61626c655472656548617345646765010104023d09e0040004110120412068656c706572206d617020666f722064656e6f74696e67207768657468657220616e2074726565206973206272696467656420746f20676976656e20636861696e344e65696768626f72526f6f747300010802024509ad010400041d0120546865206d6170206f662028747265652c20636861696e2069642920706169727320746f207468656972206c6174657374207265636f72646564206d65726b6c6520726f6f746043757272656e744e65696768626f72526f6f74496e646578010104023d0910100000000004110120546865206e657874206e65696768626f7220726f6f7420696e64657820746f2073746f726520746865206d65726b6c6520726f6f7420757064617465207265636f7264015d0501b1010c24436861696e547970652503080200047020436861696e4944207479706520666f72207468697320636861696e3c436861696e4964656e746966696572282039040000000000000034486973746f72794c656e67746810101e00000004bc20546865207072756e696e67206c656e67746820666f72206e65696768626f7220726f6f7420686973746f7269657301490926284d69786572426e32353401284d69786572426e32353408184d697865727300010402104d09040004a420546865206d6170206f6620747265657320746f207468656972206d69786572206d657461646174613c4e756c6c696669657248617368657301010802025109e0040004c420546865206d6170206f6620747265657320746f207468656972207370656e74206e756c6c69666965722068617368657301610501b501082050616c6c6574496441082070792f6d6978657200404e617469766543757272656e63794964101000000000044c204e61746976652063757272656e6379206964015509273c5369676e6174757265427269646765013c5369676e617475726542726964676514284d61696e7461696e65720100bd01040004dc2054686520706172616d65746572206d61696e7461696e65722077686f2063616e206368616e67652074686520706172616d65746572732c436861696e4e6f6e636573000104012810040004fc20416c6c2077686974656c697374656420636861696e7320616e642074686569722072657370656374697665207472616e73616374696f6e20636f756e7473245265736f75726365730001040169057c0400041901205574696c697a6564206279207468652062726964676520736f66747761726520746f206d6170207265736f757263652049447320746f2061637475616c206d6574686f64733450726f706f73616c4e6f6e63650100101000000000041901205468652070726f706f73616c206e6f6e6365207573656420746f2070726576656e74207265706c61792061747461636b73206f6e20657865637574655f70726f706f73616c3c4d61696e7461696e65724e6f6e636501001010000000000001650501b901103c436861696e4964656e746966696572282039040000000000000c7c20546865206964656e74696669657220666f72207468697320636861696e2e11012054686973206d75737420626520756e6971756520616e64206d757374206e6f7420636f6c6c6964652077697468206578697374696e67204944732077697468696e20615c20736574206f66206272696467656420636861696e732e24436861696e547970652503080200087c2054686520636861696e207479706520666f72207468697320636861696e2e1d012054686973206973206569746865722061207374616e64616c6f6e652053756273747261746520636861696e2c2072656c617920636861696e2c206f722070617261636861696e4050726f706f73616c4c69666574696d65101032000000003c4272696467654163636f756e74496441082064772f627269646700015909283056416e63686f72426e323534013056416e63686f72426e32353414404d61784465706f736974416d6f756e74010018400000000000000000000000000000000000444d696e5769746864726177416d6f756e740100184000000000000000000000000000000000002056416e63686f727300010402105d09040004a820546865206d6170206f6620747265657320746f20746865697220616e63686f72206d657461646174613c4e756c6c696669657248617368657301010802025109e0040004c420546865206d6170206f6620747265657320746f207468656972207370656e74206e756c6c6966696572206861736865733450726f706f73616c4e6f6e63650100101000000000041901205468652070726f706f73616c206e6f6e6365207573656420746f2070726576656e74207265706c61792061747461636b73206f6e20657865637574655f70726f706f73616c016d0501c101082050616c6c6574496441082070792f76616e636800404e617469766543757272656e63794964101000000000044c204e61746976652063757272656e6379206964016109294c56416e63686f7248616e646c6572426e323534014c56416e63686f7248616e646c6572426e3235340428416e63686f724c69737401010402690510100000000004a820546865206d6170206f6620747265657320746f20746865697220616e63686f72206d6574616461746101790501cd01000165092a4c546f6b656e5772617070657248616e646c6572014c546f6b656e5772617070657248616e646c657200017d0501d101000169092b284b657953746f7261676501284b657953746f72616765043c5075626c69634b65794f776e65727301006d090400048420546865206d6170206f66206f776e65727320746f207075626c6963206b65797301810501d501000179092c3c56416e63686f725665726966696572013c56416e63686f7256657269666965720428506172616d6574657273010104028905510504000421012044657461696c73206f6620746865206d6f64756c65277320706172616d657465727320666f7220646966666572656e742076616e63686f7220636f6e66696775726174696f6e7301850501dd0100017d092d405472616e73616374696f6e506175736501405472616e73616374696f6e506175736504485061757365645472616e73616374696f6e730001040541027c04000c6c2054686520706175736564207472616e73616374696f6e206d617000dc206d6170202850616c6c65744e616d6542797465732c2046756e6374696f6e4e616d65427974657329203d3e204f7074696f6e3c28293e018d0501e101000181092e20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201001010000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b65797301008509040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e48526563656976656448656172746265617473000108050569018d090400083d0120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e6465786020746fb02060577261707065724f70617175653c426f756e6465644f70617175654e6574776f726b53746174653e602e38417574686f726564426c6f636b730101080505910710100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e01910501e5010440556e7369676e65645072696f726974792820ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01a1092f204964656e7469747901204964656e7469747910284964656e746974794f660001040500a50904000c210120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f660001040200cd050400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500b50944000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e28526567697374726172730100bd090400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e01b105010902183042617369634465706f7369741840000052b45d465c39010000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f73697418400000c2cf80ca28090000000000000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f73697418400000c5363a36e91c01000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e4c4d61784164646974696f6e616c4669656c6473101064000000086501204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4fe020726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e344d617852656769737472617273101014000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e01cd09301c5574696c6974790001dd05010d02044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01d109312845746832436c69656e74012845746832436c69656e744434547275737465645369676e65720000000400042501204966207365742c206f6e6c79206c6967687420636c69656e742075706461746573206279207468652074727573746564207369676e65722077696c6c2062652061636365707465641850617573656401010402c4e004000498204d61736b2064657465726d696e696e6720616c6c207061757365642066756e6374696f6e733c56616c69646174655570646174657301010402c4e0040008a820576865746865722074686520636c69656e742076616c6964617465732074686520757064617465732e39012053686f756c64206f6e6c792062652073657420746f206066616c73656020666f7220646562756767696e672c2074657374696e672c20616e6420646961676e6f7374696320707572706f7365734c566572696679426c735369676e61747572657301010402c4e0040004b020576865746865722074686520636c69656e7420766572696669657320424c53207369676e6174757265732e4448617368657347635468726573686f6c6401010402c4282000000000000000001039012057652073746f72652074686520686173686573206f662074686520626c6f636b7320666f7220746865207061737420606861736865735f67635f7468726573686f6c646020686561646572732e2501204576656e747320746861742068617070656e20706173742074686973207468726573686f6c642063616e6e6f742062652076657269666965642062792074686520636c69656e742e6d0120497420697320646573697261626c6520746861742074686973206e756d626572206973206c6172676572207468616e203720646179732720776f727468206f6620686561646572732c20776869636820697320726f7567686c7905012035316b20457468657265756d20626c6f636b732e20536f2074686973206e756d6265722073686f756c642062652035316b20696e2070726f64756374696f6e2e6046696e616c697a6564457865637574696f6e426c6f636b730001080202d5091d020400083d0120486173686573206f66207468652066696e616c697a656420657865637574696f6e20626c6f636b73206d617070656420746f207468656972206e756d626572732e2053746f72657320757020746f390120606861736865735f67635f7468726573686f6c646020656e74726965732e20457865637574696f6e20626c6f636b206e756d626572202d3e20657865637574696f6e20626c6f636b206861736848556e66696e616c697a6564486561646572730001080202d90915020400083d0120416c6c20756e66696e616c697a656420657865637574696f6e20626c6f636b7327206865616465727320686173686573206d617070656420746f2074686569722060486561646572496e666f602ecc20457865637574696f6e20626c6f636b2068617368202d3e20457865637574696f6e486561646572496e666f206f626a656374285375626d6974746572730001080202dd0910040008e820604163636f756e7449646073206d617070656420746f207468656972206e756d626572206f66207375626d697474656420686561646572732eb8205375626d6974746572206163636f756e74202d3e204e756d206f66207375626d69747465642068656164657273804d6178556e66696e616c697a6564426c6f636b735065725375626d697474657201010402c41010000000000c3d01204d6178206e756d626572206f6620756e66696e616c697a656420626c6f636b7320616c6c6f77656420746f2062652073746f726564206279206f6e65207375626d6974746572206163636f756e74650120546869732076616c75652073686f756c64206265206174206c6561737420333220626c6f636b732028312065706f6368292c2062757420746865207265636f6d6d656e6465642076616c75652069732031303234202833321c2065706f6368734c4d696e5375626d697474657242616c616e636501010402c418400000000000000000000000000000000004410120546865206d696e696d756d2062616c616e636520746861742073686f756c6420626520617474616368656420746f2072656769737465722061206e6577207375626d6974746572206163636f756e745446696e616c697a6564426561636f6e48656164657200010402c42d060400044c204c6967687420636c69656e742073746174656046696e616c697a6564457865637574696f6e48656164657200010402c415020400005043757272656e7453796e63436f6d6d697474656500010402c43106040000444e65787453796e63436f6d6d697474656500010402c431060400005447656e6573697356616c696461746f7273526f6f7400010402c4040400005042656c6c6174726978466f726b56657273696f6e00010402c4400400004842656c6c6174726978466f726b45706f636800010402c42804000001f505011102042050616c6c6574496441082070792f65746832630001e10932e509042048436865636b4e6f6e5a65726f53656e646572f5097c40436865636b5370656356657273696f6ef9091038436865636b547856657273696f6efd091030436865636b47656e65736973010a2c38436865636b4d6f7274616c697479050a2c28436865636b4e6f6e63650d0a7c2c436865636b576569676874110a7c604368617267655472616e73616374696f6e5061796d656e74150a7c190a' - \ No newline at end of file diff --git a/types/yarn.lock b/types/yarn.lock index a85484d5c..b28308644 100644 --- a/types/yarn.lock +++ b/types/yarn.lock @@ -7250,6 +7250,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== +prettier@3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + pretty-ms@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" @@ -8092,7 +8097,16 @@ stream-to-array@^2.3.0: dependencies: any-promise "^1.1.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8179,7 +8193,14 @@ stringify-object@^3.2.1: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9048,7 +9069,7 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -9066,6 +9087,15 @@ wrap-ansi@^6.0.1: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"