From b77ea5f46400f97a1bdbe926810448b723b17e6d Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Mon, 18 Nov 2024 15:11:00 -0500
Subject: [PATCH 01/15] Subnet to L1
---
README.md | 28 +-
.../ERC20TokenStakingManager.go | 14 +-
.../NativeTokenStakingManager.go | 14 +-
.../PoAValidatorManager.go | 14 +-
contracts/ictt/README.md | 4 +-
contracts/teleporter/README.md | 4 +-
contracts/teleporter/registry/UPGRADING.md | 2 +-
.../teleporter/tests/AddFeeAmountTests.t.sol | 2 +-
.../teleporter/tests/GetFeeInfoTests.t.sol | 2 +-
.../tests/GetMessageHashTests.t.sol | 2 +-
.../HandleInitialMessageExecutionTests.t.sol | 12 +-
.../teleporter/tests/MarkReceiptTests.t.sol | 4 +-
.../tests/MessageReceivedTests.t.sol | 2 +-
.../tests/RedeemRelayerRewardsTests.t.sol | 2 +-
.../tests/RetryMessageExecutionTests.t.sol | 10 +-
contracts/utilities/TokenScalingUtils.sol | 2 +-
contracts/validator-manager/README.md | 2 +-
.../validator-manager/ValidatorManager.sol | 16 +-
.../validator-manager/ValidatorMessages.sol | 20 +-
.../interfaces/IValidatorManager.sol | 4 +-
.../tests/ERC20TokenStakingManagerTests.t.sol | 16 +-
.../NativeTokenStakingManagerTests.t.sol | 16 +-
.../tests/PoAValidatorManagerTests.t.sol | 2 +-
.../tests/PoSValidatorManagerTests.t.sol | 2 +-
.../tests/ValidatorManagerTests.t.sol | 48 +-
.../tests/ValidatorMessagesTests.t.sol | 6 +-
tests/flows/governance/validator_set_sig.go | 68 +-
tests/flows/ictt/erc20_home_erc20_remote.go | 32 +-
.../ictt/erc20_home_erc20_remote_multihop.go | 46 +-
.../erc20_home_erc20_remote_send_and_call.go | 44 +-
tests/flows/ictt/erc20_home_native_remote.go | 32 +-
.../ictt/erc20_home_native_remote_multihop.go | 64 +-
tests/flows/ictt/native_home_erc20_remote.go | 34 +-
.../ictt/native_home_erc20_remote_multihop.go | 38 +-
tests/flows/ictt/native_home_native_remote.go | 30 +-
.../native_home_native_remote_multihop.go | 62 +-
.../ictt/registration_and_collateral_check.go | 24 +-
.../ictt/transparent_proxy_upgradeability.go | 28 +-
tests/flows/teleporter/add_fee_amount.go | 62 +-
tests/flows/teleporter/basic_send_receive.go | 52 +-
.../deliver_to_nonexistent_contract.go | 76 +--
.../teleporter/deliver_to_wrong_chain.go | 28 +-
tests/flows/teleporter/insufficient_gas.go | 56 +-
.../registry/check_upgrade_access.go | 22 +-
.../teleporter/registry/pause_teleporter.go | 38 +-
.../registry/teleporter_registry.go | 54 +-
tests/flows/teleporter/relay_message_twice.go | 18 +-
.../teleporter/relayer_modifies_message.go | 28 +-
.../teleporter/resubmit_altered_message.go | 20 +-
.../teleporter/retry_successful_execution.go | 46 +-
.../teleporter/send_specific_receipts.go | 116 ++--
.../teleporter/teleporter_message_ids.go | 6 +-
tests/flows/teleporter/unallowed_relayer.go | 16 +-
tests/flows/teleporter/validator_churn.go | 52 +-
.../validator-manager/erc20_token_staking.go | 52 +-
.../validator-manager/native_token_staking.go | 54 +-
tests/flows/validator-manager/poa_to_pos.go | 48 +-
tests/interfaces/subnet_test_info.go | 6 +-
tests/network/network.go | 210 +++----
.../governance/governance_suite_test.go | 2 +-
tests/suites/ictt/ictt_suite_test.go | 16 +-
.../teleporter/teleporter_suite_test.go | 16 +-
.../validator_manager_suite_test.go | 2 +-
tests/utils/chain.go | 120 ++--
tests/utils/erc20.go | 4 +-
tests/utils/governance.go | 28 +-
tests/utils/ictt.go | 244 ++++----
tests/utils/proxy.go | 12 +-
tests/utils/teleporter.go | 162 ++---
tests/utils/validator_manager.go | 590 +++++++++---------
70 files changed, 1498 insertions(+), 1510 deletions(-)
diff --git a/README.md b/README.md
index 6ee349a1b..88c9cca90 100644
--- a/README.md
+++ b/README.md
@@ -4,13 +4,13 @@
To get started with building applications on top of Teleporter, refer to [the avalanche-starter-kit repository](https://github.com/ava-labs/avalanche-starter-kit). This README is focused on the development of the Teleporter protocol itself.
-Teleporter is an EVM compatible cross-subnet communication protocol built on top of [Avalanche Warp Messaging (AWM)](https://docs.avax.network/learn/avalanche/awm), and implemented as a Solidity smart contract. It provides a mechanism to asynchronously invoke smart contract functions on other EVM blockchains within Avalanche. Teleporter provides a handful of useful features on top of AWM, such as specifying relayer incentives for message delivery, replay protection, message delivery and execution retries, and a standard interface for sending and receiving messages within a dApp deployed across multiple subnets.
+Teleporter is an EVM compatible cross-L1 communication protocol built on top of [Avalanche Warp Messaging (AWM)](https://docs.avax.network/learn/avalanche/awm), and implemented as a Solidity smart contract. It provides a mechanism to asynchronously invoke smart contract functions on other EVM blockchains within Avalanche. Teleporter provides a handful of useful features on top of AWM, such as specifying relayer incentives for message delivery, replay protection, message delivery and execution retries, and a standard interface for sending and receiving messages within a dApp deployed across multiple Avalanche L1s.
-It's important to understand the distinction between Avalanche Warp Messaging and Teleporter. AWM allows subnets to communicate with each other via authenticated messages by providing signing and verification primitives in Avalanchego. These are used by the blockchain VMs to sign outgoing messages and verify incoming messages.
+It's important to understand the distinction between Avalanche Warp Messaging and Teleporter. AWM allows Avalanche L1s to communicate with each other via authenticated messages by providing signing and verification primitives in Avalanchego. These are used by the blockchain VMs to sign outgoing messages and verify incoming messages.
-The Teleporter protocol, on the other hand, is implemented at the smart contract level, and is a user-friendly interface to AWM, aimed at dApp developers. All of the message signing and verification is abstracted away from developers. Instead, developers simply call `sendCrossChainMessage` on the `TeleporterMessenger` contract to send a message invoking a smart contract on another subnet, and implement the `ITeleporterReceiver` interface to receive messages on the destination subnet. Teleporter handles all of the Warp message construction and sending, as well as the message delivery and execution.
+The Teleporter protocol, on the other hand, is implemented at the smart contract level, and is a user-friendly interface to AWM, aimed at dApp developers. All of the message signing and verification is abstracted away from developers. Instead, developers simply call `sendCrossChainMessage` on the `TeleporterMessenger` contract to send a message invoking a smart contract on another Avalanche L1, and implement the `ITeleporterReceiver` interface to receive messages on the destination Avalanche L!. Teleporter handles all of the Warp message construction and sending, as well as the message delivery and execution.
-To get started with using Teleporter, see [How to Deploy Teleporter Enabled Subnets on a Local Network](https://docs.avax.network/tooling/cli-cross-chain/teleporter-on-local-networks)
+To get started with using Teleporter, see [How to Deploy Teleporter Enabled Avalanche L1s on a Local Network](https://docs.avax.network/tooling/cli-cross-chain/teleporter-on-local-networks)
- [Deployed Addresses](#deployed-addresses)
- [A Note on Versioning](#a-note-on-versioning)
@@ -21,8 +21,8 @@ To get started with using Teleporter, see [How to Deploy Teleporter Enabled Subn
- [E2E tests](#e2e-tests)
- [Run specific E2E tests](#run-specific-e2e-tests)
- [Upgradability](#upgradability)
-- [Deploy Teleporter to a Subnet](#deploy-teleporter-to-a-subnet)
-- [Deploy TeleporterRegistry to a Subnet](#deploy-teleporterregistry-to-a-subnet)
+- [Deploy Teleporter to an L1](#deploy-teleporter-to-an-avalanche-l1)
+- [Deploy TeleporterRegistry to an L1](#deploy-teleporterregistry-to-an-avalanche-l1)
- [ABI Bindings](#abi-bindings)
- [Docs](#docs)
- [Resources](#resources)
@@ -35,9 +35,9 @@ To get started with using Teleporter, see [How to Deploy Teleporter Enabled Subn
| `TeleporterRegistry` | **0x7C43605E14F391720e1b37E49C78C4b03A488d98** | Mainnet C-Chain |
| `TeleporterRegistry` | **0xF86Cb19Ad8405AEFa7d09C778215D2Cb6eBfB228** | Fuji C-Chain |
-- Using [Nick's method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c#), `TeleporterMessenger` deploys at a universal address across all chains, varying with each `teleporter` Major release. **Compatibility exists only between same-version `TeleporterMessenger` instances.** See [Teleporter Contract Deployment](./utils/contract-deployment/README.md) and [Deploy Teleporter to a Subnet](#deploy-teleporter-to-a-subnet) for more details.
+- Using [Nick's method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c#), `TeleporterMessenger` deploys at a universal address across all chains, varying with each `teleporter` Major release. **Compatibility exists only between same-version `TeleporterMessenger` instances.** See [Teleporter Contract Deployment](./utils/contract-deployment/README.md) and [Deploy Teleporter to an Avalanche L1](#deploy-teleporter-to-an-avalanche-l1) for more details.
-- `TeleporterRegistry` can be deployed to any address. See [Deploy TeleporterRegistry to a Subnet](#deploy-teleporterregistry-to-a-subnet) for details. The table above enumerates the canonical registry addresses on the Mainnet and Fuji C-Chains.
+- `TeleporterRegistry` can be deployed to any address. See [Deploy TeleporterRegistry to an Avalanche L1](#deploy-teleporterregistry-to-an-avalanche-l1) for details. The table above enumerates the canonical registry addresses on the Mainnet and Fuji C-Chains.
## A Note on Versioning
@@ -98,7 +98,7 @@ GINKGO_FOCUS="Calculate Teleporter" ./scripts/e2e_test.sh
The E2E tests also supports `GINKGO_LABEL_FILTER`, making it easy to group test cases and run them together. For example, to run all E2E tests for the example cross chain applications:
```bash
- ginkgo.It("Send native tokens from subnet A to B and back",
+ ginkgo.It("Send native tokens from L1 A to B and back",
ginkgo.Label("cross chain apps"),
func() {
flows.NativeTokenBridge(LocalNetworkInstance)
@@ -113,11 +113,11 @@ GINKGO_LABEL_FILTER="cross chain apps" ./scripts/e2e_test.sh
The Teleporter contract is non-upgradeable and can not be changed once it is deployed. This provides immutability to the contracts, and ensures that the contract's behavior at each address is unchanging. However, to allow for new features and potential bug fixes, new versions of the Teleporter contract can be deployed to different addresses. The [TeleporterRegistry](./contracts/teleporter/TeleporterRegistry.sol) is used to keep track of the deployed versions of Teleporter, and to provide a standard interface for dApps to interact with the different Teleporter versions.
-`TeleporterRegistry` **is not mandatory** for dApps built on top of Teleporter, but dApp's are recommended to leverage the registry to ensure they use the latest Teleporter version available. Another recommendation standard is to have a single canonical `TeleporterRegistry` for each Subnet chain, and unlike the Teleporter contract, the registry does not need to be deployed to the same address on every chain. This means the registry does not need a Nick's method deployment, and can be at different contract addresses on different chains.
+`TeleporterRegistry` **is not mandatory** for dApps built on top of Teleporter, but dApp's are recommended to leverage the registry to ensure they use the latest Teleporter version available. Another recommendation standard is to have a single canonical `TeleporterRegistry` for each Avalanche L1, and unlike the Teleporter contract, the registry does not need to be deployed to the same address on every chain. This means the registry does not need a Nick's method deployment, and can be at different contract addresses on different chains.
For more information on the registry and how to integrate with Teleporter dApps, see the [Upgradability doc](./contracts/teleporter/registry/README.md).
-## Deploy Teleporter to a Subnet
+## Deploy Teleporter to an Avalanche L1
From the root of the repo, the TeleporterMessenger contract can be deployed by calling
@@ -134,13 +134,13 @@ Options:
- `--private-key ` Funds the deployer address with the account held by ``
-To ensure that Teleporter can be deployed to the same address on every EVM based chain, it uses [Nick's Method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c) to deploy from a static deployer address. Teleporter costs exactly `10eth` in the subnet's native gas token to deploy, which must be sent to the deployer address.
+To ensure that Teleporter can be deployed to the same address on every EVM based chain, it uses [Nick's Method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c) to deploy from a static deployer address. Teleporter costs exactly `10eth` in the Avalanche L1's native gas token to deploy, which must be sent to the deployer address.
`deploy_teleporter.sh` will send the necessary native tokens to the deployer address if it is provided with a private key for an account with sufficient funds. Alternatively, the deployer address can be funded externally. The deployer address for each version can be found by looking up the appropriate version at https://github.com/ava-labs/teleporter/releases and downloading `TeleporterMessenger_Deployer_Address_.txt`.
-Alternatively for new Subnets, the `TeleporterMessenger` contract can be directly included in the genesis file as documented [here](./contracts/teleporter/README.md#teleporter-messenger-contract-deployment).
+Alternatively for new Avalanche L1s, the `TeleporterMessenger` contract can be directly included in the genesis file as documented [here](./contracts/teleporter/README.md#teleporter-messenger-contract-deployment).
-## Deploy TeleporterRegistry to a Subnet
+## Deploy TeleporterRegistry to an Avalanche L1
There should only be one canonical `TeleporterRegistry` deployed for each chain, but if one does not exist, it is recommended to deploy the registry so Teleporter dApps can always use the most recent Teleporter version available. The registry does not need to be deployed to the same address on every chain, and therefore does not need a Nick's method transaction. To deploy, run the following command from the root of the repository:
diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
index 5d4c0753d..3381b2ca6 100644
--- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
+++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
@@ -31,7 +31,7 @@ var (
// ConversionData is an auto generated low-level Go binding around an user-defined struct.
type ConversionData struct {
- SubnetID [32]byte
+ L1ID [32]byte
ValidatorManagerBlockchainID [32]byte
ValidatorManagerAddress common.Address
InitialValidators []InitialValidator
@@ -75,14 +75,14 @@ type Validator struct {
// ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct.
type ValidatorManagerSettings struct {
- SubnetID [32]byte
+ L1ID [32]byte
ChurnPeriodSeconds uint64
MaximumChurnPercentage uint8
}
// ValidatorMessagesValidationPeriod is an auto generated low-level Go binding around an user-defined struct.
type ValidatorMessagesValidationPeriod struct {
- SubnetID [32]byte
+ L1ID [32]byte
NodeID []byte
BlsPublicKey []byte
RegistrationExpiry uint64
@@ -102,8 +102,8 @@ type ValidatorRegistrationInput struct {
// ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract.
var ERC20TokenStakingManagerMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b50604051615b6c380380615b6c83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a1f8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff61461044f578063df93d8de1461046f578063e4a63c4014610479578063f74c607b1461048d578063fd7ac5e7146104a0575f80fd5b8063ba3a4b971461040d578063bc5fbfec14610420578063bee0a03f14610434578063c974d1b614610447575f80fd5b8063a3a65e48116100e4578063a3a65e48146103c0578063a9778a7a146102ac578063afb98096146103d3578063b771b3bc146103e7575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f3660046149a8565b6104b3565b005b6102146102243660046149e3565b6104e8565b610231600a81565b60405160ff90911681526020015b60405180910390f35b6102146102563660046149a8565b61076f565b6102146102693660046149fa565b61077a565b61021461027c366004614a48565b610cff565b61029461028f3660046149e3565b610d73565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d63660046149a8565b610dcd565b6102146102e9366004614a69565b610dd8565b6103016102fc366004614aa7565b610e99565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614a48565b610ece565b61030161034d366004614b0e565b6111a6565b6102946103603660046149e3565b6111dd565b6103015f81565b61021461037a3660046149a8565b6111f1565b61021461038d366004614a48565b61121c565b610231603081565b6102146103a83660046149e3565b611461565b6103016103bb366004614b29565b61152c565b6102146103ce366004614a69565b611558565b6103015f8051602061594a83398151915281565b6103f56005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461041b3660046149e3565b61174d565b6103015f8051602061596a83398151915281565b6102146104423660046149e3565b6119b8565b610231601481565b61046261045d3660046149e3565b611af5565b60405161023f9190614bbe565b6102946202a30081565b6103015f8051602061592a83398151915281565b61021461049b366004614c52565b611c44565b6103016104ae366004614c90565b611d23565b6104be838383611d7e565b6104e357604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206159ca8339815191526020526040808220815160e0810190925280545f8051602061596a83398151915293929190829060ff16600581111561053557610535614b49565b600581111561054657610546614b49565b815260200160018201805461055a90614cfb565b80601f016020809104026020016040519081016040528092919081815260200182805461058690614cfb565b80156105d15780601f106105a8576101008083540402835291602001916105d1565b820191905f5260205f20905b8154815290600101906020018083116105b457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561063c5761063c614b49565b1461066f575f8381526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106e6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261070d9190810190614e3c565b6040518263ffffffff1660e01b81526004016107299190614e6d565b6020604051808303815f875af1158015610745573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107699190614e7f565b50505050565b610769838383611d7e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061596a8339815191529060ff16156107cc57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561080f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108339190614e7f565b83602001351461085c576040516372b0a7e760e11b8152602084013560048201526024016104da565b3061086d6060850160408601614e96565b6001600160a01b0316146108b05761088b6060840160408501614e96565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104da565b5f6108be6060850185614eb1565b905090505f805b828163ffffffff161015610b25575f6108e16060880188614eb1565b8363ffffffff168181106108f7576108f7614ef6565b90506020028101906109099190614f0a565b61091290614f75565b80516040519192505f91600888019161092a91614ff0565b9081526020016040518091039020541461095a57805160405163a41f772f60e01b81526104da9190600401614e6d565b5f6002885f01358460405160200161098992919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109a391614ff0565b602060405180830381855afa1580156109be573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109e19190614e7f565b90508086600801835f01516040516109f99190614ff0565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a399082615045565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610ab89085615114565b8251604051919550610ac991614ff0565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1e90615127565b90506108c5565b50600483018190556001830154606490610b4990600160401b900460ff1683615149565b1015610b6b57604051635943317f60e01b8152600481018290526024016104da565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610b8f876120d6565b604001516040518263ffffffff1660e01b8152600401610baf9190614e6d565b602060405180830381865af4158015610bca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bee9190614e7f565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c28919061528b565b5f60405180830381865af4158015610c42573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c699190810190614e3c565b90505f600282604051610c7c9190614ff0565b602060405180830381855afa158015610c97573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cba9190614e7f565b9050828114610ce65760405163baaea89d60e01b815260048101829052602481018490526044016104da565b5050506009909201805460ff1916600117905550505050565b610d08826121ec565b610d28576040516330efa98b60e01b8152600481018390526024016104da565b5f610d3283611af5565b5190506002816005811115610d4957610d49614b49565b14610d69578060405163170cc93360e21b81526004016104da9190614d33565b6107698383612227565b5f805f8051602061594a83398151915260030154610d919084615316565b9050801580610da657506001600160401b0381115b15610dc75760405163222d164360e21b8152600481018490526024016104da565b92915050565b61076983838361250d565b610de06126f9565b5f8051602061594a8339815191525f80610df984612730565b91509150610e06826121ec565b610e1257505050610e80565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610e4057610e40614b49565b03610e65575f83815260088501602052604081208054919055610e638282612ae3565b505b610e7b81610e7684604001516111a6565b612b59565b505050505b610e9660015f805160206159aa83398151915255565b50565b5f610ea26126f9565b610eae85858585612b8f565b9050610ec660015f805160206159aa83398151915255565b949350505050565b5f8281525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff166003811115610f1b57610f1b614b49565b6003811115610f2c57610f2c614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610fa282611af5565b9050600183516003811115610fb957610fb9614b49565b14610fda578251604051633b0d540d60e21b81526104da9190600401615335565b600481516005811115610fef57610fef614b49565b0361100557610ffd86612d15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61102a896120d6565b604001516040518263ffffffff1660e01b815260040161104a9190614e6d565b606060405180830381865af4158015611065573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611089919061534f565b50915091508184146110b657846040015160405163089938b360e11b81526004016104da91815260200190565b806001600160401b031683606001516001600160401b031610806110ef5750806001600160401b03168560a001516001600160401b0316115b1561111857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610dc7906001600160401b038416615149565b5f6111e782611af5565b6080015192915050565b6111fc83838361250d565b6104e357604051635bff683f60e11b8152600481018490526024016104da565b6112246126f9565b5f8281525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff16600381111561127157611271614b49565b600381111561128257611282614b49565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112fb576112fb614b49565b1461131c578051604051633b0d540d60e21b81526104da9190600401615335565b600461132b8260400151611af5565b51600581111561133d5761133d614b49565b1461143c575f61134c846120d6565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161138b9190614e6d565b606060405180830381865af41580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca919061534f565b5091509150818460400151146113f65760405163089938b360e11b8152600481018390526024016104da565b806001600160401b03168460c001516001600160401b0316111561143857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5050505b61144584612d15565b505061145d60015f805160206159aa83398151915255565b5050565b5f8051602061594a8339815191525f61147983611af5565b519050600481600581111561149057611490614b49565b146114b0578060405163170cc93360e21b81526004016104da9190614d33565b5f8381526005830160205260409020546001600160a01b031633146114f657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104da565b5f83815260088301602090815260408083208054908490556005860190925290912054610769906001600160a01b031682612ae3565b5f6115356126f9565b611540833384612f69565b9050610dc760015f805160206159aa83398151915255565b5f8051602061596a8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61158b866120d6565b604001516040518263ffffffff1660e01b81526004016115ab9190614e6d565b6040805180830381865af41580156115c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e9919061538f565b915091508061160f57604051632d07135360e01b815281151560048201526024016104da565b5f8281526006840160205260409020805461162990614cfb565b90505f0361164d5760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078501602052604090205460ff16600581111561167357611673614b49565b146116a6575f8281526007840160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b5f82815260068401602052604081206116be916148f7565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff16600381111561179a5761179a614b49565b60038111156117ab576117ab614b49565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561182457611824614b49565b14158015611845575060038151600381111561184257611842614b49565b14155b15611866578051604051633b0d540d60e21b81526104da9190600401615335565b5f6118748260400151611af5565b905080606001516001600160401b03165f036118a6576040516339b894f960e21b8152600481018590526024016104da565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361191493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af415801561192e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119559190810190614e3c565b6040518263ffffffff1660e01b81526004016119719190614e6d565b6020604051808303815f875af115801561198d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b19190614e7f565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061596a83398151915291906119ff90614cfb565b90505f03611a235760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078301602052604090205460ff166005811115611a4957611a49614b49565b14611a7c575f8281526007820160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ab591906004016153b2565b6020604051808303815f875af1158015611ad1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190614e7f565b611afd61492e565b5f8281525f805160206159ca833981519152602052604090819020815160e0810190925280545f8051602061596a833981519152929190829060ff166005811115611b4a57611b4a614b49565b6005811115611b5b57611b5b614b49565b8152602001600182018054611b6f90614cfb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614cfb565b8015611be65780601f10611bbd57610100808354040283529160200191611be6565b820191905f5260205f20905b815481529060010190602001808311611bc957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c8d575080546001600160401b03808416911610155b15611cab5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cd684846131af565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f8051602061596a833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d66908690869061543c565b90815260200160405180910390205491505092915050565b5f8381525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a8339815191529284929091829060ff166003811115611dcc57611dcc614b49565b6003811115611ddd57611ddd614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611e5382611af5565b9050600283516003811115611e6a57611e6a614b49565b14611e8b578251604051633b0d540d60e21b81526104da9190600401615335565b60208301516001600160a01b03163314611f27575f8281526005850160205260409020546001600160a01b03163314611ec457336114d1565b5f82815260058501602052604090205460a0820151611ef391600160b01b90046001600160401b03169061544b565b6001600160401b0316421015611f275760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b600281516005811115611f3c57611f3c614b49565b0361206a5760028401546080840151611f5e916001600160401b03169061544b565b6001600160401b0316421015611f925760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b8615611fa457611fa28287612227565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611fdd918491611fd8919061546b565b6131c9565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561201e846133a0565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506120cf9350505050565b60048151600581111561207f5761207f614b49565b036120b35761208d836133a0565b5f8981526007860160205260409020556120a688612d15565b60019450505050506120cf565b805160405163170cc93360e21b81526104da9190600401614d33565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561213a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612161919081019061548b565b915091508061218357604051636b2f19e960e01b815260040160405180910390fd5b8151156121a9578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b0316156121e5576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612272573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612299919081019061548b565b91509150806122bb57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123229190614e7f565b825114612348578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b031615612384576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b81526004016123c19190614e6d565b6040805180830381865af41580156123db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ff919061551b565b915091508187146124265760405163089938b360e11b8152600481018890526024016104da565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061594a833981519152906001600160401b0390811690831611156124e3575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612502565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061594a833981519152816125268661353d565b9050612531866121ec565b612540576001925050506120cf565b5f8681526005830160205260409020546001600160a01b0316331461256557336114d1565b5f86815260058301602052604090205460a082015161259491600160b01b90046001600160401b03169061544b565b6001600160401b03168160c001516001600160401b031610156125db5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104da565b5f85156125f3576125ec8786612227565b9050612611565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612636906111a6565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c39190614e7f565b905080846008015f8a81526020019081526020015f205f8282546126e79190615114565b90915550501515979650505050505050565b5f805160206159aa83398151915280546001190161272a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61273961492e565b5f8051602061596a8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61276c886120d6565b604001516040518263ffffffff1660e01b815260040161278c9190614e6d565b6040805180830381865af41580156127a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127ca919061538f565b9150915080156127f157604051632d07135360e01b815281151560048201526024016104da565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561282257612822614b49565b600581111561283357612833614b49565b815260200160018201805461284790614cfb565b80601f016020809104026020016040519081016040528092919081815260200182805461287390614cfb565b80156128be5780601f10612895576101008083540402835291602001916128be565b820191905f5260205f20905b8154815290600101906020018083116128a157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561292957612929614b49565b1415801561294a575060018151600581111561294757612947614b49565b14155b1561296b57805160405163170cc93360e21b81526104da9190600401614d33565b60038151600581111561298057612980614b49565b0361298e5760048152612993565b600581525b8360080181602001516040516129a99190614ff0565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156129ed576129ed614b49565b021790555060208201516001820190612a069082615045565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612aac57612aac614b49565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f8051602061592a83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612b3e575f80fd5b505af1158015612b50573d5f803e3d5ffd5b50505050505050565b5f8051602061592a8339815191525461145d906001600160a01b03168383613821565b60015f805160206159aa83398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061594a83398151915290600160401b900461ffff9081169086161080612be3575061271061ffff8616115b15612c0757604051635f12e6c360e11b815261ffff861660048201526024016104da565b60028101546001600160401b039081169085161015612c43576040516202a06d60e11b81526001600160401b03851660048201526024016104da565b8054831080612c555750806001015483115b15612c765760405163222d164360e21b8152600481018490526024016104da565b5f612c8084613880565b90505f612c8c82610d73565b90505f612c9989836138a3565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8181525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff166003811115612d6257612d62614b49565b6003811115612d7357612d73614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612e107fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612e1f919061544b565b6001600160401b0316421015612e535760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612f0e575f84815260058701602052604090205461271090612ec090600160a01b900461ffff1685615149565b612eca9190615316565b915081866008015f8681526020019081526020015f205f828254612eee9190615114565b90915550612efe9050828461553e565b9050612f0e856020015182612ae3565b612f238560200151610e7687606001516111a6565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f5f8051602061594a83398151915281612f8561028f85613880565b90505f612f9187611af5565b9050612f9c876121ec565b612fbc576040516330efa98b60e01b8152600481018890526024016104da565b600281516005811115612fd157612fd1614b49565b14612ff257805160405163170cc93360e21b81526104da9190600401614d33565b5f828260800151613003919061544b565b905083600201600a9054906101000a90046001600160401b0316826040015161302c9190615551565b6001600160401b0316816001600160401b0316111561306957604051636d51fe0560e11b81526001600160401b03821660048201526024016104da565b5f806130758a846131c9565b915091505f8a836040516020016130a392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b6131b7613dc8565b6131c082613e13565b61145d81613e87565b5f8281525f805160206159ca833981519152602052604081206002015481905f8051602061596a83398151915290600160801b90046001600160401b03166132118582613eef565b5f61321b87614112565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156132c4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132eb9190810190614e3c565b6040518263ffffffff1660e01b81526004016133079190614e6d565b6020604051808303815f875af1158015613323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133479190614e7f565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061594a83398151915290505f6133c08460400151611af5565b90505f6003825160058111156133d8576133d8614b49565b14806133f657506004825160058111156133f4576133f4614b49565b145b15613406575060c0810151613443565b60028251600581111561341b5761341b614b49565b03613427575042613443565b815160405163170cc93360e21b81526104da9190600401614d33565b84608001516001600160401b0316816001600160401b03161161346a57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061348f906111a6565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613510573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135349190614e7f565b95945050505050565b61354561492e565b5f8281525f805160206159ca8339815191526020526040808220815160e0810190925280545f8051602061596a83398151915293929190829060ff16600581111561359257613592614b49565b60058111156135a3576135a3614b49565b81526020016001820180546135b790614cfb565b80601f01602080910402602001604051908101604052809291908181526020018280546135e390614cfb565b801561362e5780601f106136055761010080835404028352916020019161362e565b820191905f5260205f20905b81548152906001019060200180831161361157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561369c5761369c614b49565b146136cf575f8481526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561371357613713614b49565b02179055506020820151600182019061372c9082615045565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6137ca85826131c9565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104e391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614187565b5f610dc7825f8051602061592a833981519152546001600160a01b0316906141e8565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166138e757604051637fab81e560e01b815260040160405180910390fd5b5f8051602061596a833981519152426139066060860160408701614b0e565b6001600160401b031611158061394057506139246202a30042615114565b6139346060860160408701614b0e565b6001600160401b031610155b1561397a576139556060850160408601614b0e565b604051635879da1360e11b81526001600160401b0390911660048201526024016104da565b61398f61398a606086018661557c565b6141f4565b61399f61398a608086018661557c565b60306139ae6020860186615590565b9050146139e0576139c26020850185615590565b6040516326475b2f60e11b81526104da925060040190815260200190565b6139ea8480615590565b90505f03613a17576139fc8480615590565b604051633e08a12560e11b81526004016104da9291906155d2565b5f60088201613a268680615590565b604051613a3492919061543c565b90815260200160405180910390205414613a6d57613a528480615590565b60405163a41f772f60e01b81526004016104da9291906155d2565b613a77835f613eef565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ab48a80615590565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613afc908b018b615590565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613b4560608b0160408c01614b0e565b6001600160401b03168152602001613b6060608b018b61557c565b613b69906155e5565b8152602001613b7b60808b018b61557c565b613b84906155e5565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613bb29190615707565b5f60405180830381865af4158015613bcc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613bf391908101906157be565b5f82815260068601602052604090209193509150613c118282615045565b508160088401613c218880615590565b604051613c2f92919061543c565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613c6b908590600401614e6d565b6020604051808303815f875af1158015613c87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cab9190614e7f565b5f8481526007860160205260409020805460ff191660011790559050613cd18780615590565b5f858152600787016020526040902060010191613cef919083615801565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613d4e8880615590565b604051613d5c92919061543c565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613d9a9190614b0e565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613e1157604051631afcd79f60e31b815260040160405180910390fd5b565b613e1b613dc8565b613e248161435d565b613e2c614376565b610e9660608201356080830135613e4960c0850160a08601614b0e565b613e5960e0860160c087016158ba565b613e6a610100870160e088016158d3565b610100870135613e8261014089016101208a01614e96565b614386565b613e8f613dc8565b5f8051602061592a8339815191526001600160a01b038216613ecf57604051637330680360e01b81526001600160a01b03831660048201526024016104da565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061596a8339815191525f6001600160401b038084169085161115613f2357613f1c838561546b565b9050613f30565b613f2d848461546b565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f92575060018401548151613f8e916001600160401b031690615114565b8210155b15613fb8576001600160401b038316606082015281815260408101516020820152613fd7565b8281606001818151613fca919061544b565b6001600160401b03169052505b6060810151613fe7906064615551565b602082015160018601546001600160401b0392909216916140129190600160401b900460ff16615149565b101561404257606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104da565b856001600160401b03168160400181815161405d9190615114565b9052506040810180516001600160401b038716919061407d90839061553e565b905250600184015460408201516064916140a291600160401b90910460ff1690615149565b10156140c9578060400151604051635943317f60e01b81526004016104da91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206159ca8339815191526020526040812060020180545f8051602061596a833981519152919060089061415c90600160401b90046001600160401b03166158f3565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61419b6001600160a01b03841683614542565b905080515f141580156141bf5750808060200190518101906141bd919061590e565b155b156104e357604051635274afe760e01b81526001600160a01b03841660048201526024016104da565b5f6120cf83338461454f565b6142016020820182614a69565b63ffffffff16158015614221575061421c6020820182614eb1565b151590505b15614268576142336020820182614a69565b6142406020830183614eb1565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104da565b6142756020820182614eb1565b90506142846020830183614a69565b63ffffffff16111561429d576142336020820182614a69565b60015b6142ad6020830183614eb1565b905081101561145d576142c36020830183614eb1565b6142ce60018461553e565b8181106142dd576142dd614ef6565b90506020020160208101906142f29190614e96565b6001600160a01b03166143086020840184614eb1565b8381811061431857614318614ef6565b905060200201602081019061432d9190614e96565b6001600160a01b0316101561435557604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142a0565b614365613dc8565b61436d6146b2565b610e96816146ba565b61437e613dc8565b613e116147a2565b61438e613dc8565b5f8051602061594a83398151915261ffff851615806143b2575061271061ffff8616115b156143d657604051635f12e6c360e11b815261ffff861660048201526024016104da565b868811156143fa5760405163222d164360e21b8152600481018990526024016104da565b60ff8416158061440d5750600a60ff8516115b156144305760405163170db35960e31b815260ff851660048201526024016104da565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b03161015614497576040516202a06d60e11b81526001600160401b03871660048201526024016104da565b825f036144b75760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b60606120cf83835f6147aa565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614595573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145b99190614e7f565b90506145d06001600160a01b038616853086614839565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614614573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146389190614e7f565b905081811161469e5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104da565b6146a8828261553e565b9695505050505050565b613e11613dc8565b6146c2613dc8565b80355f8051602061596a83398151915290815560146146e760608401604085016158d3565b60ff161180614706575061470160608301604084016158d3565b60ff16155b1561473a5761471b60608301604084016158d3565b604051634a59bbff60e11b815260ff90911660048201526024016104da565b61474a60608301604084016158d3565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561477b6040830160208401614b0e565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612b7c613dc8565b6060814710156147cf5760405163cd78605960e01b81523060048201526024016104da565b5f80856001600160a01b031684866040516147ea9190614ff0565b5f6040518083038185875af1925050503d805f8114614824576040519150601f19603f3d011682016040523d82523d5f602084013e614829565b606091505b50915091506146a8868383614872565b6040516001600160a01b0384811660248301528381166044830152606482018390526107699186918216906323b872dd9060840161384e565b60608261488757614882826148ce565b6120cf565b815115801561489e57506001600160a01b0384163b155b156148c757604051639996b31560e01b81526001600160a01b03851660048201526024016104da565b50806120cf565b8051156148de5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461490390614cfb565b5f825580601f10614912575050565b601f0160209004905f5260205f2090810190610e96919061496b565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561497f575f815560010161496c565b5090565b8015158114610e96575f80fd5b803563ffffffff811681146149a3575f80fd5b919050565b5f805f606084860312156149ba575f80fd5b8335925060208401356149cc81614983565b91506149da60408501614990565b90509250925092565b5f602082840312156149f3575f80fd5b5035919050565b5f8060408385031215614a0b575f80fd5b82356001600160401b03811115614a20575f80fd5b830160808186031215614a31575f80fd5b9150614a3f60208401614990565b90509250929050565b5f8060408385031215614a59575f80fd5b82359150614a3f60208401614990565b5f60208284031215614a79575f80fd5b6120cf82614990565b803561ffff811681146149a3575f80fd5b6001600160401b0381168114610e96575f80fd5b5f805f8060808587031215614aba575f80fd5b84356001600160401b03811115614acf575f80fd5b850160a08188031215614ae0575f80fd5b9350614aee60208601614a82565b92506040850135614afe81614a93565b9396929550929360600135925050565b5f60208284031215614b1e575f80fd5b81356120cf81614a93565b5f8060408385031215614b3a575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b60068110614b6d57614b6d614b49565b9052565b5f5b83811015614b8b578181015183820152602001614b73565b50505f910152565b5f8151808452614baa816020860160208601614b71565b601f01601f19169290920160200192915050565b60208152614bd0602082018351614b5d565b5f602083015160e06040840152614beb610100840182614b93565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610e96575f80fd5b5f80828403610160811215614c65575f80fd5b61014080821215614c74575f80fd5b8493508301359050614c8581614c3e565b809150509250929050565b5f8060208385031215614ca1575f80fd5b82356001600160401b0380821115614cb7575f80fd5b818501915085601f830112614cca575f80fd5b813581811115614cd8575f80fd5b866020828501011115614ce9575f80fd5b60209290920196919550909350505050565b600181811c90821680614d0f57607f821691505b602082108103614d2d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dc78284614b5d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d7757614d77614d41565b60405290565b604080519081016001600160401b0381118282101715614d7757614d77614d41565b604051601f8201601f191681016001600160401b0381118282101715614dc757614dc7614d41565b604052919050565b5f6001600160401b03821115614de757614de7614d41565b50601f01601f191660200190565b5f82601f830112614e04575f80fd5b8151614e17614e1282614dcf565b614d9f565b818152846020838601011115614e2b575f80fd5b610ec6826020830160208701614b71565b5f60208284031215614e4c575f80fd5b81516001600160401b03811115614e61575f80fd5b610ec684828501614df5565b602081525f6120cf6020830184614b93565b5f60208284031215614e8f575f80fd5b5051919050565b5f60208284031215614ea6575f80fd5b81356120cf81614c3e565b5f808335601e19843603018112614ec6575f80fd5b8301803591506001600160401b03821115614edf575f80fd5b6020019150600581901b3603821315613399575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614f1e575f80fd5b9190910192915050565b5f82601f830112614f37575f80fd5b8135614f45614e1282614dcf565b818152846020838601011115614f59575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f85575f80fd5b614f8d614d55565b82356001600160401b0380821115614fa3575f80fd5b614faf36838701614f28565b83526020850135915080821115614fc4575f80fd5b50614fd136828601614f28565b6020830152506040830135614fe581614a93565b604082015292915050565b5f8251614f1e818460208701614b71565b601f8211156104e357805f5260205f20601f840160051c810160208510156150265750805b601f840160051c820191505b818110156119b1575f8155600101615032565b81516001600160401b0381111561505e5761505e614d41565b6150728161506c8454614cfb565b84615001565b602080601f8311600181146150a5575f841561508e5750858301515b5f19600386901b1c1916600185901b178555610ffd565b5f85815260208120601f198616915b828110156150d3578886015182559484019460019091019084016150b4565b50858210156150f057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dc757610dc7615100565b5f63ffffffff80831681810361513f5761513f615100565b6001019392505050565b8082028115828204841417610dc757610dc7615100565b5f808335601e19843603018112615175575f80fd5b83016020810192503590506001600160401b03811115615193575f80fd5b803603821315613399575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561527e57848303601f19018952813536889003605e19018112615205575f80fd5b870160606152138280615160565b82875261522383880182846151a1565b9250505061523386830183615160565b868303888801526152458382846151a1565b92505050604080830135925061525a83614a93565b6001600160401b0392909216949091019390935297830197908301906001016151e0565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356152af81614c3e565b6001600160a01b031660608381019190915283013536849003601e190181126152d6575f80fd5b83016020810190356001600160401b038111156152f1575f80fd5b8060051b3603821315615302575f80fd5b60808085015261353460a0850182846151c9565b5f8261533057634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061534957615349614b49565b91905290565b5f805f60608486031215615361575f80fd5b83519250602084015161537381614a93565b604085015190925061538481614a93565b809150509250925092565b5f80604083850312156153a0575f80fd5b825191506020830151614c8581614983565b5f60208083525f84546153c481614cfb565b806020870152604060018084165f81146153e557600181146154015761542e565b60ff19851660408a0152604084151560051b8a0101955061542e565b895f5260205f205f5b858110156154255781548b820186015290830190880161540a565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156121e5576121e5615100565b6001600160401b038281168282160390808211156121e5576121e5615100565b5f806040838503121561549c575f80fd5b82516001600160401b03808211156154b2575f80fd5b90840190606082870312156154c5575f80fd5b6154cd614d55565b8251815260208301516154df81614c3e565b60208201526040830151828111156154f5575f80fd5b61550188828601614df5565b6040830152508094505050506020830151614c8581614983565b5f806040838503121561552c575f80fd5b825191506020830151614c8581614a93565b81810381811115610dc757610dc7615100565b6001600160401b0381811683821602808216919082811461557457615574615100565b505092915050565b5f8235603e19833603018112614f1e575f80fd5b5f808335601e198436030181126155a5575f80fd5b8301803591506001600160401b038211156155be575f80fd5b602001915036819003821315613399575f80fd5b602081525f610ec66020830184866151a1565b5f604082360312156155f5575f80fd5b6155fd614d7d565b61560683614990565b81526020808401356001600160401b0380821115615622575f80fd5b9085019036601f830112615634575f80fd5b81358181111561564657615646614d41565b8060051b9150615657848301614d9f565b8181529183018401918481019036841115615670575f80fd5b938501935b8385101561569a578435925061568a83614c3e565b8282529385019390850190615675565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156125025784516001600160a01b031682529383019360019290920191908301906156de565b60208152815160208201525f602083015160e0604084015261572d610100840182614b93565b90506040840151601f198085840301606086015261574b8383614b93565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261577b83836156ac565b925060a08601519150808584030160c08601525061579982826156ac565b91505060c08401516157b660e08501826001600160401b03169052565b509392505050565b5f80604083850312156157cf575f80fd5b8251915060208301516001600160401b038111156157eb575f80fd5b6157f785828601614df5565b9150509250929050565b6001600160401b0383111561581857615818614d41565b61582c836158268354614cfb565b83615001565b5f601f84116001811461585d575f85156158465750838201355b5f19600387901b1c1916600186901b1783556119b1565b5f83815260208120601f198716915b8281101561588c578685013582556020948501946001909201910161586c565b50868210156158a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f602082840312156158ca575f80fd5b6120cf82614a82565b5f602082840312156158e3575f80fd5b813560ff811681146120cf575f80fd5b5f6001600160401b0380831681810361513f5761513f615100565b5f6020828403121561591e575f80fd5b81516120cf8161498356fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220caa31d1b6a4d5b2139a71f42b963cce2eefd847911a8578b6b6e5f508b96974964736f6c63430008190033",
+ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
+ Bin: "0x608060405234801561000f575f80fd5b50604051615b6c380380615b6c83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a1f8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff61461044f578063df93d8de1461046f578063e4a63c4014610479578063f74c607b1461048d578063fd7ac5e7146104a0575f80fd5b8063ba3a4b971461040d578063bc5fbfec14610420578063bee0a03f14610434578063c974d1b614610447575f80fd5b8063a3a65e48116100e4578063a3a65e48146103c0578063a9778a7a146102ac578063afb98096146103d3578063b771b3bc146103e7575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f3660046149a8565b6104b3565b005b6102146102243660046149e3565b6104e8565b610231600a81565b60405160ff90911681526020015b60405180910390f35b6102146102563660046149a8565b61076f565b6102146102693660046149fa565b61077a565b61021461027c366004614a48565b610cff565b61029461028f3660046149e3565b610d73565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d63660046149a8565b610dcd565b6102146102e9366004614a69565b610dd8565b6103016102fc366004614aa7565b610e99565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614a48565b610ece565b61030161034d366004614b0e565b6111a6565b6102946103603660046149e3565b6111dd565b6103015f81565b61021461037a3660046149a8565b6111f1565b61021461038d366004614a48565b61121c565b610231603081565b6102146103a83660046149e3565b611461565b6103016103bb366004614b29565b61152c565b6102146103ce366004614a69565b611558565b6103015f8051602061594a83398151915281565b6103f56005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461041b3660046149e3565b61174d565b6103015f8051602061596a83398151915281565b6102146104423660046149e3565b6119b8565b610231601481565b61046261045d3660046149e3565b611af5565b60405161023f9190614bbe565b6102946202a30081565b6103015f8051602061592a83398151915281565b61021461049b366004614c52565b611c44565b6103016104ae366004614c90565b611d23565b6104be838383611d7e565b6104e357604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206159ca8339815191526020526040808220815160e0810190925280545f8051602061596a83398151915293929190829060ff16600581111561053557610535614b49565b600581111561054657610546614b49565b815260200160018201805461055a90614cfb565b80601f016020809104026020016040519081016040528092919081815260200182805461058690614cfb565b80156105d15780601f106105a8576101008083540402835291602001916105d1565b820191905f5260205f20905b8154815290600101906020018083116105b457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561063c5761063c614b49565b1461066f575f8381526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106e6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261070d9190810190614e3c565b6040518263ffffffff1660e01b81526004016107299190614e6d565b6020604051808303815f875af1158015610745573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107699190614e7f565b50505050565b610769838383611d7e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061596a8339815191529060ff16156107cc57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561080f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108339190614e7f565b83602001351461085c576040516372b0a7e760e11b8152602084013560048201526024016104da565b3061086d6060850160408601614e96565b6001600160a01b0316146108b05761088b6060840160408501614e96565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104da565b5f6108be6060850185614eb1565b905090505f805b828163ffffffff161015610b25575f6108e16060880188614eb1565b8363ffffffff168181106108f7576108f7614ef6565b90506020028101906109099190614f0a565b61091290614f75565b80516040519192505f91600888019161092a91614ff0565b9081526020016040518091039020541461095a57805160405163a41f772f60e01b81526104da9190600401614e6d565b5f6002885f01358460405160200161098992919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109a391614ff0565b602060405180830381855afa1580156109be573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109e19190614e7f565b90508086600801835f01516040516109f99190614ff0565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a399082615045565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610ab89085615114565b8251604051919550610ac991614ff0565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1e90615127565b90506108c5565b50600483018190556001830154606490610b4990600160401b900460ff1683615149565b1015610b6b57604051635943317f60e01b8152600481018290526024016104da565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610b8f876120d6565b604001516040518263ffffffff1660e01b8152600401610baf9190614e6d565b602060405180830381865af4158015610bca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bee9190614e7f565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c28919061528b565b5f60405180830381865af4158015610c42573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c699190810190614e3c565b90505f600282604051610c7c9190614ff0565b602060405180830381855afa158015610c97573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cba9190614e7f565b9050828114610ce65760405163baaea89d60e01b815260048101829052602481018490526044016104da565b5050506009909201805460ff1916600117905550505050565b610d08826121ec565b610d28576040516330efa98b60e01b8152600481018390526024016104da565b5f610d3283611af5565b5190506002816005811115610d4957610d49614b49565b14610d69578060405163170cc93360e21b81526004016104da9190614d33565b6107698383612227565b5f805f8051602061594a83398151915260030154610d919084615316565b9050801580610da657506001600160401b0381115b15610dc75760405163222d164360e21b8152600481018490526024016104da565b92915050565b61076983838361250d565b610de06126f9565b5f8051602061594a8339815191525f80610df984612730565b91509150610e06826121ec565b610e1257505050610e80565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610e4057610e40614b49565b03610e65575f83815260088501602052604081208054919055610e638282612ae3565b505b610e7b81610e7684604001516111a6565b612b59565b505050505b610e9660015f805160206159aa83398151915255565b50565b5f610ea26126f9565b610eae85858585612b8f565b9050610ec660015f805160206159aa83398151915255565b949350505050565b5f8281525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff166003811115610f1b57610f1b614b49565b6003811115610f2c57610f2c614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610fa282611af5565b9050600183516003811115610fb957610fb9614b49565b14610fda578251604051633b0d540d60e21b81526104da9190600401615335565b600481516005811115610fef57610fef614b49565b0361100557610ffd86612d15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61102a896120d6565b604001516040518263ffffffff1660e01b815260040161104a9190614e6d565b606060405180830381865af4158015611065573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611089919061534f565b50915091508184146110b657846040015160405163089938b360e11b81526004016104da91815260200190565b806001600160401b031683606001516001600160401b031610806110ef5750806001600160401b03168560a001516001600160401b0316115b1561111857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610dc7906001600160401b038416615149565b5f6111e782611af5565b6080015192915050565b6111fc83838361250d565b6104e357604051635bff683f60e11b8152600481018490526024016104da565b6112246126f9565b5f8281525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff16600381111561127157611271614b49565b600381111561128257611282614b49565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112fb576112fb614b49565b1461131c578051604051633b0d540d60e21b81526104da9190600401615335565b600461132b8260400151611af5565b51600581111561133d5761133d614b49565b1461143c575f61134c846120d6565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161138b9190614e6d565b606060405180830381865af41580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca919061534f565b5091509150818460400151146113f65760405163089938b360e11b8152600481018390526024016104da565b806001600160401b03168460c001516001600160401b0316111561143857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5050505b61144584612d15565b505061145d60015f805160206159aa83398151915255565b5050565b5f8051602061594a8339815191525f61147983611af5565b519050600481600581111561149057611490614b49565b146114b0578060405163170cc93360e21b81526004016104da9190614d33565b5f8381526005830160205260409020546001600160a01b031633146114f657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104da565b5f83815260088301602090815260408083208054908490556005860190925290912054610769906001600160a01b031682612ae3565b5f6115356126f9565b611540833384612f69565b9050610dc760015f805160206159aa83398151915255565b5f8051602061596a8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61158b866120d6565b604001516040518263ffffffff1660e01b81526004016115ab9190614e6d565b6040805180830381865af41580156115c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e9919061538f565b915091508061160f57604051632d07135360e01b815281151560048201526024016104da565b5f8281526006840160205260409020805461162990614cfb565b90505f0361164d5760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078501602052604090205460ff16600581111561167357611673614b49565b146116a6575f8281526007840160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b5f82815260068401602052604081206116be916148f7565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff16600381111561179a5761179a614b49565b60038111156117ab576117ab614b49565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561182457611824614b49565b14158015611845575060038151600381111561184257611842614b49565b14155b15611866578051604051633b0d540d60e21b81526104da9190600401615335565b5f6118748260400151611af5565b905080606001516001600160401b03165f036118a6576040516339b894f960e21b8152600481018590526024016104da565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361191493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af415801561192e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119559190810190614e3c565b6040518263ffffffff1660e01b81526004016119719190614e6d565b6020604051808303815f875af115801561198d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b19190614e7f565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061596a83398151915291906119ff90614cfb565b90505f03611a235760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078301602052604090205460ff166005811115611a4957611a49614b49565b14611a7c575f8281526007820160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ab591906004016153b2565b6020604051808303815f875af1158015611ad1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190614e7f565b611afd61492e565b5f8281525f805160206159ca833981519152602052604090819020815160e0810190925280545f8051602061596a833981519152929190829060ff166005811115611b4a57611b4a614b49565b6005811115611b5b57611b5b614b49565b8152602001600182018054611b6f90614cfb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614cfb565b8015611be65780601f10611bbd57610100808354040283529160200191611be6565b820191905f5260205f20905b815481529060010190602001808311611bc957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c8d575080546001600160401b03808416911610155b15611cab5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cd684846131af565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f8051602061596a833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d66908690869061543c565b90815260200160405180910390205491505092915050565b5f8381525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a8339815191529284929091829060ff166003811115611dcc57611dcc614b49565b6003811115611ddd57611ddd614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611e5382611af5565b9050600283516003811115611e6a57611e6a614b49565b14611e8b578251604051633b0d540d60e21b81526104da9190600401615335565b60208301516001600160a01b03163314611f27575f8281526005850160205260409020546001600160a01b03163314611ec457336114d1565b5f82815260058501602052604090205460a0820151611ef391600160b01b90046001600160401b03169061544b565b6001600160401b0316421015611f275760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b600281516005811115611f3c57611f3c614b49565b0361206a5760028401546080840151611f5e916001600160401b03169061544b565b6001600160401b0316421015611f925760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b8615611fa457611fa28287612227565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611fdd918491611fd8919061546b565b6131c9565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561201e846133a0565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506120cf9350505050565b60048151600581111561207f5761207f614b49565b036120b35761208d836133a0565b5f8981526007860160205260409020556120a688612d15565b60019450505050506120cf565b805160405163170cc93360e21b81526104da9190600401614d33565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561213a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612161919081019061548b565b915091508061218357604051636b2f19e960e01b815260040160405180910390fd5b8151156121a9578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b0316156121e5576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612272573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612299919081019061548b565b91509150806122bb57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123229190614e7f565b825114612348578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b031615612384576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b81526004016123c19190614e6d565b6040805180830381865af41580156123db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ff919061551b565b915091508187146124265760405163089938b360e11b8152600481018890526024016104da565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061594a833981519152906001600160401b0390811690831611156124e3575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612502565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061594a833981519152816125268661353d565b9050612531866121ec565b612540576001925050506120cf565b5f8681526005830160205260409020546001600160a01b0316331461256557336114d1565b5f86815260058301602052604090205460a082015161259491600160b01b90046001600160401b03169061544b565b6001600160401b03168160c001516001600160401b031610156125db5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104da565b5f85156125f3576125ec8786612227565b9050612611565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612636906111a6565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c39190614e7f565b905080846008015f8a81526020019081526020015f205f8282546126e79190615114565b90915550501515979650505050505050565b5f805160206159aa83398151915280546001190161272a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61273961492e565b5f8051602061596a8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61276c886120d6565b604001516040518263ffffffff1660e01b815260040161278c9190614e6d565b6040805180830381865af41580156127a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127ca919061538f565b9150915080156127f157604051632d07135360e01b815281151560048201526024016104da565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561282257612822614b49565b600581111561283357612833614b49565b815260200160018201805461284790614cfb565b80601f016020809104026020016040519081016040528092919081815260200182805461287390614cfb565b80156128be5780601f10612895576101008083540402835291602001916128be565b820191905f5260205f20905b8154815290600101906020018083116128a157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561292957612929614b49565b1415801561294a575060018151600581111561294757612947614b49565b14155b1561296b57805160405163170cc93360e21b81526104da9190600401614d33565b60038151600581111561298057612980614b49565b0361298e5760048152612993565b600581525b8360080181602001516040516129a99190614ff0565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156129ed576129ed614b49565b021790555060208201516001820190612a069082615045565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612aac57612aac614b49565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f8051602061592a83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612b3e575f80fd5b505af1158015612b50573d5f803e3d5ffd5b50505050505050565b5f8051602061592a8339815191525461145d906001600160a01b03168383613821565b60015f805160206159aa83398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061594a83398151915290600160401b900461ffff9081169086161080612be3575061271061ffff8616115b15612c0757604051635f12e6c360e11b815261ffff861660048201526024016104da565b60028101546001600160401b039081169085161015612c43576040516202a06d60e11b81526001600160401b03851660048201526024016104da565b8054831080612c555750806001015483115b15612c765760405163222d164360e21b8152600481018490526024016104da565b5f612c8084613880565b90505f612c8c82610d73565b90505f612c9989836138a3565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8181525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff166003811115612d6257612d62614b49565b6003811115612d7357612d73614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612e107fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612e1f919061544b565b6001600160401b0316421015612e535760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612f0e575f84815260058701602052604090205461271090612ec090600160a01b900461ffff1685615149565b612eca9190615316565b915081866008015f8681526020019081526020015f205f828254612eee9190615114565b90915550612efe9050828461553e565b9050612f0e856020015182612ae3565b612f238560200151610e7687606001516111a6565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f5f8051602061594a83398151915281612f8561028f85613880565b90505f612f9187611af5565b9050612f9c876121ec565b612fbc576040516330efa98b60e01b8152600481018890526024016104da565b600281516005811115612fd157612fd1614b49565b14612ff257805160405163170cc93360e21b81526104da9190600401614d33565b5f828260800151613003919061544b565b905083600201600a9054906101000a90046001600160401b0316826040015161302c9190615551565b6001600160401b0316816001600160401b0316111561306957604051636d51fe0560e11b81526001600160401b03821660048201526024016104da565b5f806130758a846131c9565b915091505f8a836040516020016130a392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b6131b7613dc8565b6131c082613e13565b61145d81613e87565b5f8281525f805160206159ca833981519152602052604081206002015481905f8051602061596a83398151915290600160801b90046001600160401b03166132118582613eef565b5f61321b87614112565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156132c4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132eb9190810190614e3c565b6040518263ffffffff1660e01b81526004016133079190614e6d565b6020604051808303815f875af1158015613323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133479190614e7f565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061594a83398151915290505f6133c08460400151611af5565b90505f6003825160058111156133d8576133d8614b49565b14806133f657506004825160058111156133f4576133f4614b49565b145b15613406575060c0810151613443565b60028251600581111561341b5761341b614b49565b03613427575042613443565b815160405163170cc93360e21b81526104da9190600401614d33565b84608001516001600160401b0316816001600160401b03161161346a57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061348f906111a6565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613510573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135349190614e7f565b95945050505050565b61354561492e565b5f8281525f805160206159ca8339815191526020526040808220815160e0810190925280545f8051602061596a83398151915293929190829060ff16600581111561359257613592614b49565b60058111156135a3576135a3614b49565b81526020016001820180546135b790614cfb565b80601f01602080910402602001604051908101604052809291908181526020018280546135e390614cfb565b801561362e5780601f106136055761010080835404028352916020019161362e565b820191905f5260205f20905b81548152906001019060200180831161361157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561369c5761369c614b49565b146136cf575f8481526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561371357613713614b49565b02179055506020820151600182019061372c9082615045565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6137ca85826131c9565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104e391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614187565b5f610dc7825f8051602061592a833981519152546001600160a01b0316906141e8565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166138e757604051637fab81e560e01b815260040160405180910390fd5b5f8051602061596a833981519152426139066060860160408701614b0e565b6001600160401b031611158061394057506139246202a30042615114565b6139346060860160408701614b0e565b6001600160401b031610155b1561397a576139556060850160408601614b0e565b604051635879da1360e11b81526001600160401b0390911660048201526024016104da565b61398f61398a606086018661557c565b6141f4565b61399f61398a608086018661557c565b60306139ae6020860186615590565b9050146139e0576139c26020850185615590565b6040516326475b2f60e11b81526104da925060040190815260200190565b6139ea8480615590565b90505f03613a17576139fc8480615590565b604051633e08a12560e11b81526004016104da9291906155d2565b5f60088201613a268680615590565b604051613a3492919061543c565b90815260200160405180910390205414613a6d57613a528480615590565b60405163a41f772f60e01b81526004016104da9291906155d2565b613a77835f613eef565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ab48a80615590565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613afc908b018b615590565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613b4560608b0160408c01614b0e565b6001600160401b03168152602001613b6060608b018b61557c565b613b69906155e5565b8152602001613b7b60808b018b61557c565b613b84906155e5565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613bb29190615707565b5f60405180830381865af4158015613bcc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613bf391908101906157be565b5f82815260068601602052604090209193509150613c118282615045565b508160088401613c218880615590565b604051613c2f92919061543c565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613c6b908590600401614e6d565b6020604051808303815f875af1158015613c87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cab9190614e7f565b5f8481526007860160205260409020805460ff191660011790559050613cd18780615590565b5f858152600787016020526040902060010191613cef919083615801565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613d4e8880615590565b604051613d5c92919061543c565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613d9a9190614b0e565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613e1157604051631afcd79f60e31b815260040160405180910390fd5b565b613e1b613dc8565b613e248161435d565b613e2c614376565b610e9660608201356080830135613e4960c0850160a08601614b0e565b613e5960e0860160c087016158ba565b613e6a610100870160e088016158d3565b610100870135613e8261014089016101208a01614e96565b614386565b613e8f613dc8565b5f8051602061592a8339815191526001600160a01b038216613ecf57604051637330680360e01b81526001600160a01b03831660048201526024016104da565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061596a8339815191525f6001600160401b038084169085161115613f2357613f1c838561546b565b9050613f30565b613f2d848461546b565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f92575060018401548151613f8e916001600160401b031690615114565b8210155b15613fb8576001600160401b038316606082015281815260408101516020820152613fd7565b8281606001818151613fca919061544b565b6001600160401b03169052505b6060810151613fe7906064615551565b602082015160018601546001600160401b0392909216916140129190600160401b900460ff16615149565b101561404257606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104da565b856001600160401b03168160400181815161405d9190615114565b9052506040810180516001600160401b038716919061407d90839061553e565b905250600184015460408201516064916140a291600160401b90910460ff1690615149565b10156140c9578060400151604051635943317f60e01b81526004016104da91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206159ca8339815191526020526040812060020180545f8051602061596a833981519152919060089061415c90600160401b90046001600160401b03166158f3565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61419b6001600160a01b03841683614542565b905080515f141580156141bf5750808060200190518101906141bd919061590e565b155b156104e357604051635274afe760e01b81526001600160a01b03841660048201526024016104da565b5f6120cf83338461454f565b6142016020820182614a69565b63ffffffff16158015614221575061421c6020820182614eb1565b151590505b15614268576142336020820182614a69565b6142406020830183614eb1565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104da565b6142756020820182614eb1565b90506142846020830183614a69565b63ffffffff16111561429d576142336020820182614a69565b60015b6142ad6020830183614eb1565b905081101561145d576142c36020830183614eb1565b6142ce60018461553e565b8181106142dd576142dd614ef6565b90506020020160208101906142f29190614e96565b6001600160a01b03166143086020840184614eb1565b8381811061431857614318614ef6565b905060200201602081019061432d9190614e96565b6001600160a01b0316101561435557604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142a0565b614365613dc8565b61436d6146b2565b610e96816146ba565b61437e613dc8565b613e116147a2565b61438e613dc8565b5f8051602061594a83398151915261ffff851615806143b2575061271061ffff8616115b156143d657604051635f12e6c360e11b815261ffff861660048201526024016104da565b868811156143fa5760405163222d164360e21b8152600481018990526024016104da565b60ff8416158061440d5750600a60ff8516115b156144305760405163170db35960e31b815260ff851660048201526024016104da565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b03161015614497576040516202a06d60e11b81526001600160401b03871660048201526024016104da565b825f036144b75760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b60606120cf83835f6147aa565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614595573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145b99190614e7f565b90506145d06001600160a01b038616853086614839565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614614573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146389190614e7f565b905081811161469e5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104da565b6146a8828261553e565b9695505050505050565b613e11613dc8565b6146c2613dc8565b80355f8051602061596a83398151915290815560146146e760608401604085016158d3565b60ff161180614706575061470160608301604084016158d3565b60ff16155b1561473a5761471b60608301604084016158d3565b604051634a59bbff60e11b815260ff90911660048201526024016104da565b61474a60608301604084016158d3565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561477b6040830160208401614b0e565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612b7c613dc8565b6060814710156147cf5760405163cd78605960e01b81523060048201526024016104da565b5f80856001600160a01b031684866040516147ea9190614ff0565b5f6040518083038185875af1925050503d805f8114614824576040519150601f19603f3d011682016040523d82523d5f602084013e614829565b606091505b50915091506146a8868383614872565b6040516001600160a01b0384811660248301528381166044830152606482018390526107699186918216906323b872dd9060840161384e565b60608261488757614882826148ce565b6120cf565b815115801561489e57506001600160a01b0384163b155b156148c757604051639996b31560e01b81526001600160a01b03851660048201526024016104da565b50806120cf565b8051156148de5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461490390614cfb565b5f825580601f10614912575050565b601f0160209004905f5260205f2090810190610e96919061496b565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561497f575f815560010161496c565b5090565b8015158114610e96575f80fd5b803563ffffffff811681146149a3575f80fd5b919050565b5f805f606084860312156149ba575f80fd5b8335925060208401356149cc81614983565b91506149da60408501614990565b90509250925092565b5f602082840312156149f3575f80fd5b5035919050565b5f8060408385031215614a0b575f80fd5b82356001600160401b03811115614a20575f80fd5b830160808186031215614a31575f80fd5b9150614a3f60208401614990565b90509250929050565b5f8060408385031215614a59575f80fd5b82359150614a3f60208401614990565b5f60208284031215614a79575f80fd5b6120cf82614990565b803561ffff811681146149a3575f80fd5b6001600160401b0381168114610e96575f80fd5b5f805f8060808587031215614aba575f80fd5b84356001600160401b03811115614acf575f80fd5b850160a08188031215614ae0575f80fd5b9350614aee60208601614a82565b92506040850135614afe81614a93565b9396929550929360600135925050565b5f60208284031215614b1e575f80fd5b81356120cf81614a93565b5f8060408385031215614b3a575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b60068110614b6d57614b6d614b49565b9052565b5f5b83811015614b8b578181015183820152602001614b73565b50505f910152565b5f8151808452614baa816020860160208601614b71565b601f01601f19169290920160200192915050565b60208152614bd0602082018351614b5d565b5f602083015160e06040840152614beb610100840182614b93565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610e96575f80fd5b5f80828403610160811215614c65575f80fd5b61014080821215614c74575f80fd5b8493508301359050614c8581614c3e565b809150509250929050565b5f8060208385031215614ca1575f80fd5b82356001600160401b0380821115614cb7575f80fd5b818501915085601f830112614cca575f80fd5b813581811115614cd8575f80fd5b866020828501011115614ce9575f80fd5b60209290920196919550909350505050565b600181811c90821680614d0f57607f821691505b602082108103614d2d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dc78284614b5d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d7757614d77614d41565b60405290565b604080519081016001600160401b0381118282101715614d7757614d77614d41565b604051601f8201601f191681016001600160401b0381118282101715614dc757614dc7614d41565b604052919050565b5f6001600160401b03821115614de757614de7614d41565b50601f01601f191660200190565b5f82601f830112614e04575f80fd5b8151614e17614e1282614dcf565b614d9f565b818152846020838601011115614e2b575f80fd5b610ec6826020830160208701614b71565b5f60208284031215614e4c575f80fd5b81516001600160401b03811115614e61575f80fd5b610ec684828501614df5565b602081525f6120cf6020830184614b93565b5f60208284031215614e8f575f80fd5b5051919050565b5f60208284031215614ea6575f80fd5b81356120cf81614c3e565b5f808335601e19843603018112614ec6575f80fd5b8301803591506001600160401b03821115614edf575f80fd5b6020019150600581901b3603821315613399575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614f1e575f80fd5b9190910192915050565b5f82601f830112614f37575f80fd5b8135614f45614e1282614dcf565b818152846020838601011115614f59575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f85575f80fd5b614f8d614d55565b82356001600160401b0380821115614fa3575f80fd5b614faf36838701614f28565b83526020850135915080821115614fc4575f80fd5b50614fd136828601614f28565b6020830152506040830135614fe581614a93565b604082015292915050565b5f8251614f1e818460208701614b71565b601f8211156104e357805f5260205f20601f840160051c810160208510156150265750805b601f840160051c820191505b818110156119b1575f8155600101615032565b81516001600160401b0381111561505e5761505e614d41565b6150728161506c8454614cfb565b84615001565b602080601f8311600181146150a5575f841561508e5750858301515b5f19600386901b1c1916600185901b178555610ffd565b5f85815260208120601f198616915b828110156150d3578886015182559484019460019091019084016150b4565b50858210156150f057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dc757610dc7615100565b5f63ffffffff80831681810361513f5761513f615100565b6001019392505050565b8082028115828204841417610dc757610dc7615100565b5f808335601e19843603018112615175575f80fd5b83016020810192503590506001600160401b03811115615193575f80fd5b803603821315613399575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561527e57848303601f19018952813536889003605e19018112615205575f80fd5b870160606152138280615160565b82875261522383880182846151a1565b9250505061523386830183615160565b868303888801526152458382846151a1565b92505050604080830135925061525a83614a93565b6001600160401b0392909216949091019390935297830197908301906001016151e0565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356152af81614c3e565b6001600160a01b031660608381019190915283013536849003601e190181126152d6575f80fd5b83016020810190356001600160401b038111156152f1575f80fd5b8060051b3603821315615302575f80fd5b60808085015261353460a0850182846151c9565b5f8261533057634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061534957615349614b49565b91905290565b5f805f60608486031215615361575f80fd5b83519250602084015161537381614a93565b604085015190925061538481614a93565b809150509250925092565b5f80604083850312156153a0575f80fd5b825191506020830151614c8581614983565b5f60208083525f84546153c481614cfb565b806020870152604060018084165f81146153e557600181146154015761542e565b60ff19851660408a0152604084151560051b8a0101955061542e565b895f5260205f205f5b858110156154255781548b820186015290830190880161540a565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156121e5576121e5615100565b6001600160401b038281168282160390808211156121e5576121e5615100565b5f806040838503121561549c575f80fd5b82516001600160401b03808211156154b2575f80fd5b90840190606082870312156154c5575f80fd5b6154cd614d55565b8251815260208301516154df81614c3e565b60208201526040830151828111156154f5575f80fd5b61550188828601614df5565b6040830152508094505050506020830151614c8581614983565b5f806040838503121561552c575f80fd5b825191506020830151614c8581614a93565b81810381811115610dc757610dc7615100565b6001600160401b0381811683821602808216919082811461557457615574615100565b505092915050565b5f8235603e19833603018112614f1e575f80fd5b5f808335601e198436030181126155a5575f80fd5b8301803591506001600160401b038211156155be575f80fd5b602001915036819003821315613399575f80fd5b602081525f610ec66020830184866151a1565b5f604082360312156155f5575f80fd5b6155fd614d7d565b61560683614990565b81526020808401356001600160401b0380821115615622575f80fd5b9085019036601f830112615634575f80fd5b81358181111561564657615646614d41565b8060051b9150615657848301614d9f565b8181529183018401918481019036841115615670575f80fd5b938501935b8385101561569a578435925061568a83614c3e565b8282529385019390850190615675565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156125025784516001600160a01b031682529383019360019290920191908301906156de565b60208152815160208201525f602083015160e0604084015261572d610100840182614b93565b90506040840151601f198085840301606086015261574b8383614b93565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261577b83836156ac565b925060a08601519150808584030160c08601525061579982826156ac565b91505060c08401516157b660e08501826001600160401b03169052565b509392505050565b5f80604083850312156157cf575f80fd5b8251915060208301516001600160401b038111156157eb575f80fd5b6157f785828601614df5565b9150509250929050565b6001600160401b0383111561581857615818614d41565b61582c836158268354614cfb565b83615001565b5f601f84116001811461585d575f85156158465750838201355b5f19600387901b1c1916600186901b1783556119b1565b5f83815260208120601f198716915b8281101561588c578685013582556020948501946001909201910161586c565b50868210156158a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f602082840312156158ca575f80fd5b6120cf82614a82565b5f602082840312156158e3575f80fd5b813560ff811681146120cf575f80fd5b5f6001600160401b0380831681810361513f5761513f615100565b5f6020828403121561591e575f80fd5b81516120cf8161498356fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a264697066735822122072b9cccc909806133870093cbf85273f59c1df514e9a0b5482be26e07599cc7664736f6c63430008190033",
}
// ERC20TokenStakingManagerABI is the input ABI used to generate the binding from.
@@ -2996,8 +2996,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidato
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x612160610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c3366004611904565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f0366004611904565b61044a565b604080519283526001600160401b039091166020830152016100d9565b610125610120366004611904565b61063b565b6040519081526020016100d9565b610146610141366004611904565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a561017936600461193d565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d991906119a1565b6101a56101c03660046119d5565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d366004611a0e565b610a1e565b610235610230366004611904565b610bff565b6040516100d99190611aaa565b6101a5610250366004611b61565b61154a565b6101a5610263366004611b93565b61158e565b61027b610276366004611ca1565b6115c4565b6040516100d9929190611d9d565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611dc9565b6102e6906008611ddc565b61ffff168582815181106102fc576102fc611df3565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611dc9565b61035f906008611ddc565b63ffffffff1686610371836002611e07565b8151811061038157610381611df3565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611dc9565b6103e2906008611ddc565b876103ee836006611e07565b815181106103fe576103fe611df3565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611df3565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611dc9565b6104a2906008611ddc565b61ffff168582815181106104b8576104b8611df3565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611dc9565b61051b906008611ddc565b63ffffffff168661052d836002611e07565b8151811061053d5761053d611df3565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611dc9565b61059c906008611ddc565b876105a8836006611e07565b815181106105b8576105b8611df3565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611dc9565b6105f2906008611ddc565b6001600160401b031688610607836026611e07565b8151811061061757610617611df3565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611dc9565b610692906008611ddc565b61ffff168482815181106106a8576106a8611df3565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611dc9565b61070b906008611ddc565b63ffffffff168561071d836002611e07565b8151811061072d5761072d611df3565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611dc9565b61078c906008611ddc565b86610798836006611e07565b815181106107a8576107a8611df3565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611dc9565b610821906008611ddc565b61ffff1686828151811061083757610837611df3565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611dc9565b61089a906008611ddc565b63ffffffff16876108ac836002611e07565b815181106108bc576108bc611df3565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611dc9565b61091d906008611ddc565b88610929836006611e07565b8151811061093957610939611df3565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611dc9565b610973906008611ddc565b6001600160401b031689610988836026611e07565b8151811061099857610998611df3565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611dc9565b6109d2906008611ddc565b6001600160401b03168a6109e783602e611e07565b815181106109f7576109f7611df3565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b60605f80833560208501356014610a3a87870160408901611e1a565b610a476060890189611e33565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b610acd6060850185611e33565b9050811015610bf85781610ae46060860186611e33565b83818110610af457610af4611df3565b9050602002810190610b069190611e7f565b610b109080611e9d565b9050610b1f6060870187611e33565b84818110610b2f57610b2f611df3565b9050602002810190610b419190611e7f565b610b4b9080611e9d565b610b586060890189611e33565b86818110610b6857610b68611df3565b9050602002810190610b7a9190611e7f565b610b88906020810190611e9d565b610b9560608b018b611e33565b88818110610ba557610ba5611df3565b9050602002810190610bb79190611e7f565b610bc8906060810190604001611edf565b604051602001610bde9796959493929190611ef8565b60408051601f198184030181529190529150600101610ac0565b5092915050565b610c076117b1565b5f610c106117b1565b5f805b6002811015610c6e57610c27816001611dc9565b610c32906008611ddc565b61ffff1686610c4763ffffffff871684611e07565b81518110610c5757610c57611df3565b016020015160f81c901b9190911790600101610c13565b5061ffff811615610c985760405163407b587360e01b815261ffff821660048201526024016102bb565b610ca3600284611f61565b9250505f805b6004811015610d0857610cbd816003611dc9565b610cc8906008611ddc565b63ffffffff16868563ffffffff1683610ce19190611e07565b81518110610cf157610cf1611df3565b016020015160f81c901b9190911790600101610ca9565b5063ffffffff8116600114610d3057604051635b60892f60e01b815260040160405180910390fd5b610d3b600484611f61565b9250505f805b6020811015610d9857610d5581601f611dc9565b610d60906008611ddc565b86610d7163ffffffff871684611e07565b81518110610d8157610d81611df3565b016020015160f81c901b9190911790600101610d41565b50808252610da7602084611f61565b9250505f805b6004811015610e0c57610dc1816003611dc9565b610dcc906008611ddc565b63ffffffff16868563ffffffff1683610de59190611e07565b81518110610df557610df5611df3565b016020015160f81c901b9190911790600101610dad565b50610e18600484611f61565b92505f8163ffffffff166001600160401b03811115610e3957610e3961180b565b6040519080825280601f01601f191660200182016040528015610e63576020820181803683370190505b5090505f5b8263ffffffff16811015610ed25786610e8763ffffffff871683611e07565b81518110610e9757610e97611df3565b602001015160f81c60f81b828281518110610eb457610eb4611df3565b60200101906001600160f81b03191690815f1a905350600101610e68565b5060208301819052610ee48285611f61565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610f705786610f2563ffffffff871683611e07565b81518110610f3557610f35611df3565b602001015160f81c60f81b828281518110610f5257610f52611df3565b60200101906001600160f81b03191690815f1a905350600101610f0b565b5060408301819052610f83603085611f61565b9350505f805b6008811015610fe957610f9d816007611dc9565b610fa8906008611ddc565b6001600160401b031687610fc263ffffffff881684611e07565b81518110610fd257610fd2611df3565b016020015160f81c901b9190911790600101610f89565b506001600160401b0381166060840152611004600885611f61565b9350505f805f5b600481101561106a5761101f816003611dc9565b61102a906008611ddc565b63ffffffff16888763ffffffff16836110439190611e07565b8151811061105357611053611df3565b016020015160f81c901b919091179060010161100b565b50611076600486611f61565b94505f5b60048110156110d95761108e816003611dc9565b611099906008611ddc565b63ffffffff16888763ffffffff16836110b29190611e07565b815181106110c2576110c2611df3565b016020015160f81c901b929092179160010161107a565b506110e5600486611f61565b94505f8263ffffffff166001600160401b038111156111065761110661180b565b60405190808252806020026020018201604052801561112f578160200160208202803683370190505b5090505f5b8363ffffffff16811015611217576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156111c9578a61117e63ffffffff8b1683611e07565b8151811061118e5761118e611df3565b602001015160f81c60f81b8282815181106111ab576111ab611df3565b60200101906001600160f81b03191690815f1a905350600101611164565b505f60148201519050808484815181106111e5576111e5611df3565b6001600160a01b039092166020928302919091019091015261120860148a611f61565b98505050806001019050611134565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156112995761124e816003611dc9565b611259906008611ddc565b63ffffffff16898863ffffffff16836112729190611e07565b8151811061128257611282611df3565b016020015160f81c901b919091179060010161123a565b506112a5600487611f61565b95505f5b6004811015611308576112bd816003611dc9565b6112c8906008611ddc565b63ffffffff16898863ffffffff16836112e19190611e07565b815181106112f1576112f1611df3565b016020015160f81c901b92909217916001016112a9565b50611314600487611f61565b95505f8263ffffffff166001600160401b038111156113355761133561180b565b60405190808252806020026020018201604052801561135e578160200160208202803683370190505b5090505f5b8363ffffffff16811015611446576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156113f8578b6113ad63ffffffff8c1683611e07565b815181106113bd576113bd611df3565b602001015160f81c60f81b8282815181106113da576113da611df3565b60200101906001600160f81b03191690815f1a905350600101611393565b505f601482015190508084848151811061141457611414611df3565b6001600160a01b039092166020928302919091019091015261143760148b611f61565b99505050806001019050611363565b506040805180820190915263ffffffff9092168252602082015260a08501525f6114708284611f61565b61147b906014611f7e565b61148685607a611f61565b6114909190611f61565b90508063ffffffff168851146114cc57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561152f576114e3816007611dc9565b6114ee906008611ddc565b6001600160401b03168a61150863ffffffff8b1684611e07565b8151811061151857611518611df3565b016020015160f81c901b91909117906001016114cf565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e01611576565b5f60608260400151516030146115ed5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861162e988a986001989297929690959094909390929101611fa6565b60405160208183030381529060405290505f5b846080015160200151518110156116a05781856080015160200151828151811061166d5761166d611df3565b6020026020010151604051602001611686929190612060565b60408051601f198184030181529190529150600101611641565b5060a08401518051602091820151516040516116c0938593929101612096565b60405160208183030381529060405290505f5b8460a00151602001515181101561173257818560a001516020015182815181106116ff576116ff611df3565b6020026020010151604051602001611718929190612060565b60408051601f1981840301815291905291506001016116d3565b5060c08401516040516117499183916020016120d1565b604051602081830303815290604052905060028160405161176a9190612102565b602060405180830381855afa158015611785573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906117a89190612113565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156118415761184161180b565b60405290565b60405160e081016001600160401b03811182821017156118415761184161180b565b604051601f8201601f191681016001600160401b03811182821017156118915761189161180b565b604052919050565b5f82601f8301126118a8575f80fd5b81356001600160401b038111156118c1576118c161180b565b6118d4601f8201601f1916602001611869565b8181528460208386010111156118e8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611914575f80fd5b81356001600160401b03811115611929575f80fd5b61193584828501611899565b949350505050565b5f6020828403121561194d575f80fd5b5035919050565b5f5b8381101561196e578181015183820152602001611956565b50505f910152565b5f815180845261198d816020860160208601611954565b601f01601f19169290920160200192915050565b602081525f6119b36020830184611976565b9392505050565b80356001600160401b03811681146119d0575f80fd5b919050565b5f805f606084860312156119e7575f80fd5b833592506119f7602085016119ba565b9150611a05604085016119ba565b90509250925092565b5f60208284031215611a1e575f80fd5b81356001600160401b03811115611a33575f80fd5b8201608081850312156119b3575f80fd5b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611a9f5784516001600160a01b03168252938301936001929092019190830190611a76565b509695505050505050565b60208152815160208201525f602083015160e06040840152611ad0610100840182611976565b90506040840151601f1980858403016060860152611aee8383611976565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611b1e8383611a44565b925060a08601519150808584030160c086015250611b3c8282611a44565b91505060c0840151611b5960e08501826001600160401b03169052565b509392505050565b5f8060408385031215611b72575f80fd5b8235915060208301358015158114611b88575f80fd5b809150509250929050565b5f8060408385031215611ba4575f80fd5b82359150611bb4602084016119ba565b90509250929050565b80356001600160a01b03811681146119d0575f80fd5b5f60408284031215611be3575f80fd5b611beb61181f565b9050813563ffffffff81168114611c00575f80fd5b81526020828101356001600160401b0380821115611c1c575f80fd5b818501915085601f830112611c2f575f80fd5b813581811115611c4157611c4161180b565b8060051b9150611c52848301611869565b8181529183018401918481019088841115611c6b575f80fd5b938501935b83851015611c9057611c8185611bbd565b82529385019390850190611c70565b808688015250505050505092915050565b5f60208284031215611cb1575f80fd5b81356001600160401b0380821115611cc7575f80fd5b9083019060e08286031215611cda575f80fd5b611ce2611847565b82358152602083013582811115611cf7575f80fd5b611d0387828601611899565b602083015250604083013582811115611d1a575f80fd5b611d2687828601611899565b604083015250611d38606084016119ba565b6060820152608083013582811115611d4e575f80fd5b611d5a87828601611bd3565b60808301525060a083013582811115611d71575f80fd5b611d7d87828601611bd3565b60a083015250611d8f60c084016119ba565b60c082015295945050505050565b828152604060208201525f6119356040830184611976565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561158857611588611db5565b808202811582820484141761158857611588611db5565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561158857611588611db5565b5f60208284031215611e2a575f80fd5b6119b382611bbd565b5f808335601e19843603018112611e48575f80fd5b8301803591506001600160401b03821115611e61575f80fd5b6020019150600581901b3603821315611e78575f80fd5b9250929050565b5f8235605e19833603018112611e93575f80fd5b9190910192915050565b5f808335601e19843603018112611eb2575f80fd5b8301803591506001600160401b03821115611ecb575f80fd5b602001915036819003821315611e78575f80fd5b5f60208284031215611eef575f80fd5b6119b3826119ba565b5f8851611f09818460208d01611954565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b63ffffffff818116838216019080821115610bf857610bf8611db5565b63ffffffff818116838216028082169190828114611f9e57611f9e611db5565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611fec81602a850160208b01611954565b86519083019061200381602a840160208b01611954565b60c087901b6001600160c01b031916602a9290910191820152612035603282018660e01b6001600160e01b0319169052565b61204e603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351612071818460208801611954565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120a7818460208901611954565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120e2818460208801611954565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f8251611e93818460208701611954565b5f60208284031215612123575f80fd5b505191905056fea2646970667358221220427b16ca5e2abe4960f5b859780a2eb475e9509f2f5b05fb0ffcb2156069896d64736f6c63430008190033",
+ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
+ Bin: "0x612160610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c3366004611904565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f0366004611904565b61044a565b604080519283526001600160401b039091166020830152016100d9565b610125610120366004611904565b61063b565b6040519081526020016100d9565b610146610141366004611904565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a561017936600461193d565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d991906119a1565b6101a56101c03660046119d5565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d366004611a0e565b610a1e565b610235610230366004611904565b610bff565b6040516100d99190611aaa565b6101a5610250366004611b61565b61154a565b6101a5610263366004611b93565b61158e565b61027b610276366004611ca1565b6115c4565b6040516100d9929190611d9d565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611dc9565b6102e6906008611ddc565b61ffff168582815181106102fc576102fc611df3565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611dc9565b61035f906008611ddc565b63ffffffff1686610371836002611e07565b8151811061038157610381611df3565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611dc9565b6103e2906008611ddc565b876103ee836006611e07565b815181106103fe576103fe611df3565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611df3565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611dc9565b6104a2906008611ddc565b61ffff168582815181106104b8576104b8611df3565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611dc9565b61051b906008611ddc565b63ffffffff168661052d836002611e07565b8151811061053d5761053d611df3565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611dc9565b61059c906008611ddc565b876105a8836006611e07565b815181106105b8576105b8611df3565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611dc9565b6105f2906008611ddc565b6001600160401b031688610607836026611e07565b8151811061061757610617611df3565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611dc9565b610692906008611ddc565b61ffff168482815181106106a8576106a8611df3565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611dc9565b61070b906008611ddc565b63ffffffff168561071d836002611e07565b8151811061072d5761072d611df3565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611dc9565b61078c906008611ddc565b86610798836006611e07565b815181106107a8576107a8611df3565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611dc9565b610821906008611ddc565b61ffff1686828151811061083757610837611df3565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611dc9565b61089a906008611ddc565b63ffffffff16876108ac836002611e07565b815181106108bc576108bc611df3565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611dc9565b61091d906008611ddc565b88610929836006611e07565b8151811061093957610939611df3565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611dc9565b610973906008611ddc565b6001600160401b031689610988836026611e07565b8151811061099857610998611df3565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611dc9565b6109d2906008611ddc565b6001600160401b03168a6109e783602e611e07565b815181106109f7576109f7611df3565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b60605f80833560208501356014610a3a87870160408901611e1a565b610a476060890189611e33565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b610acd6060850185611e33565b9050811015610bf85781610ae46060860186611e33565b83818110610af457610af4611df3565b9050602002810190610b069190611e7f565b610b109080611e9d565b9050610b1f6060870187611e33565b84818110610b2f57610b2f611df3565b9050602002810190610b419190611e7f565b610b4b9080611e9d565b610b586060890189611e33565b86818110610b6857610b68611df3565b9050602002810190610b7a9190611e7f565b610b88906020810190611e9d565b610b9560608b018b611e33565b88818110610ba557610ba5611df3565b9050602002810190610bb79190611e7f565b610bc8906060810190604001611edf565b604051602001610bde9796959493929190611ef8565b60408051601f198184030181529190529150600101610ac0565b5092915050565b610c076117b1565b5f610c106117b1565b5f805b6002811015610c6e57610c27816001611dc9565b610c32906008611ddc565b61ffff1686610c4763ffffffff871684611e07565b81518110610c5757610c57611df3565b016020015160f81c901b9190911790600101610c13565b5061ffff811615610c985760405163407b587360e01b815261ffff821660048201526024016102bb565b610ca3600284611f61565b9250505f805b6004811015610d0857610cbd816003611dc9565b610cc8906008611ddc565b63ffffffff16868563ffffffff1683610ce19190611e07565b81518110610cf157610cf1611df3565b016020015160f81c901b9190911790600101610ca9565b5063ffffffff8116600114610d3057604051635b60892f60e01b815260040160405180910390fd5b610d3b600484611f61565b9250505f805b6020811015610d9857610d5581601f611dc9565b610d60906008611ddc565b86610d7163ffffffff871684611e07565b81518110610d8157610d81611df3565b016020015160f81c901b9190911790600101610d41565b50808252610da7602084611f61565b9250505f805b6004811015610e0c57610dc1816003611dc9565b610dcc906008611ddc565b63ffffffff16868563ffffffff1683610de59190611e07565b81518110610df557610df5611df3565b016020015160f81c901b9190911790600101610dad565b50610e18600484611f61565b92505f8163ffffffff166001600160401b03811115610e3957610e3961180b565b6040519080825280601f01601f191660200182016040528015610e63576020820181803683370190505b5090505f5b8263ffffffff16811015610ed25786610e8763ffffffff871683611e07565b81518110610e9757610e97611df3565b602001015160f81c60f81b828281518110610eb457610eb4611df3565b60200101906001600160f81b03191690815f1a905350600101610e68565b5060208301819052610ee48285611f61565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610f705786610f2563ffffffff871683611e07565b81518110610f3557610f35611df3565b602001015160f81c60f81b828281518110610f5257610f52611df3565b60200101906001600160f81b03191690815f1a905350600101610f0b565b5060408301819052610f83603085611f61565b9350505f805b6008811015610fe957610f9d816007611dc9565b610fa8906008611ddc565b6001600160401b031687610fc263ffffffff881684611e07565b81518110610fd257610fd2611df3565b016020015160f81c901b9190911790600101610f89565b506001600160401b0381166060840152611004600885611f61565b9350505f805f5b600481101561106a5761101f816003611dc9565b61102a906008611ddc565b63ffffffff16888763ffffffff16836110439190611e07565b8151811061105357611053611df3565b016020015160f81c901b919091179060010161100b565b50611076600486611f61565b94505f5b60048110156110d95761108e816003611dc9565b611099906008611ddc565b63ffffffff16888763ffffffff16836110b29190611e07565b815181106110c2576110c2611df3565b016020015160f81c901b929092179160010161107a565b506110e5600486611f61565b94505f8263ffffffff166001600160401b038111156111065761110661180b565b60405190808252806020026020018201604052801561112f578160200160208202803683370190505b5090505f5b8363ffffffff16811015611217576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156111c9578a61117e63ffffffff8b1683611e07565b8151811061118e5761118e611df3565b602001015160f81c60f81b8282815181106111ab576111ab611df3565b60200101906001600160f81b03191690815f1a905350600101611164565b505f60148201519050808484815181106111e5576111e5611df3565b6001600160a01b039092166020928302919091019091015261120860148a611f61565b98505050806001019050611134565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156112995761124e816003611dc9565b611259906008611ddc565b63ffffffff16898863ffffffff16836112729190611e07565b8151811061128257611282611df3565b016020015160f81c901b919091179060010161123a565b506112a5600487611f61565b95505f5b6004811015611308576112bd816003611dc9565b6112c8906008611ddc565b63ffffffff16898863ffffffff16836112e19190611e07565b815181106112f1576112f1611df3565b016020015160f81c901b92909217916001016112a9565b50611314600487611f61565b95505f8263ffffffff166001600160401b038111156113355761133561180b565b60405190808252806020026020018201604052801561135e578160200160208202803683370190505b5090505f5b8363ffffffff16811015611446576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156113f8578b6113ad63ffffffff8c1683611e07565b815181106113bd576113bd611df3565b602001015160f81c60f81b8282815181106113da576113da611df3565b60200101906001600160f81b03191690815f1a905350600101611393565b505f601482015190508084848151811061141457611414611df3565b6001600160a01b039092166020928302919091019091015261143760148b611f61565b99505050806001019050611363565b506040805180820190915263ffffffff9092168252602082015260a08501525f6114708284611f61565b61147b906014611f7e565b61148685607a611f61565b6114909190611f61565b90508063ffffffff168851146114cc57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561152f576114e3816007611dc9565b6114ee906008611ddc565b6001600160401b03168a61150863ffffffff8b1684611e07565b8151811061151857611518611df3565b016020015160f81c901b91909117906001016114cf565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e01611576565b5f60608260400151516030146115ed5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861162e988a986001989297929690959094909390929101611fa6565b60405160208183030381529060405290505f5b846080015160200151518110156116a05781856080015160200151828151811061166d5761166d611df3565b6020026020010151604051602001611686929190612060565b60408051601f198184030181529190529150600101611641565b5060a08401518051602091820151516040516116c0938593929101612096565b60405160208183030381529060405290505f5b8460a00151602001515181101561173257818560a001516020015182815181106116ff576116ff611df3565b6020026020010151604051602001611718929190612060565b60408051601f1981840301815291905291506001016116d3565b5060c08401516040516117499183916020016120d1565b604051602081830303815290604052905060028160405161176a9190612102565b602060405180830381855afa158015611785573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906117a89190612113565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156118415761184161180b565b60405290565b60405160e081016001600160401b03811182821017156118415761184161180b565b604051601f8201601f191681016001600160401b03811182821017156118915761189161180b565b604052919050565b5f82601f8301126118a8575f80fd5b81356001600160401b038111156118c1576118c161180b565b6118d4601f8201601f1916602001611869565b8181528460208386010111156118e8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611914575f80fd5b81356001600160401b03811115611929575f80fd5b61193584828501611899565b949350505050565b5f6020828403121561194d575f80fd5b5035919050565b5f5b8381101561196e578181015183820152602001611956565b50505f910152565b5f815180845261198d816020860160208601611954565b601f01601f19169290920160200192915050565b602081525f6119b36020830184611976565b9392505050565b80356001600160401b03811681146119d0575f80fd5b919050565b5f805f606084860312156119e7575f80fd5b833592506119f7602085016119ba565b9150611a05604085016119ba565b90509250925092565b5f60208284031215611a1e575f80fd5b81356001600160401b03811115611a33575f80fd5b8201608081850312156119b3575f80fd5b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611a9f5784516001600160a01b03168252938301936001929092019190830190611a76565b509695505050505050565b60208152815160208201525f602083015160e06040840152611ad0610100840182611976565b90506040840151601f1980858403016060860152611aee8383611976565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611b1e8383611a44565b925060a08601519150808584030160c086015250611b3c8282611a44565b91505060c0840151611b5960e08501826001600160401b03169052565b509392505050565b5f8060408385031215611b72575f80fd5b8235915060208301358015158114611b88575f80fd5b809150509250929050565b5f8060408385031215611ba4575f80fd5b82359150611bb4602084016119ba565b90509250929050565b80356001600160a01b03811681146119d0575f80fd5b5f60408284031215611be3575f80fd5b611beb61181f565b9050813563ffffffff81168114611c00575f80fd5b81526020828101356001600160401b0380821115611c1c575f80fd5b818501915085601f830112611c2f575f80fd5b813581811115611c4157611c4161180b565b8060051b9150611c52848301611869565b8181529183018401918481019088841115611c6b575f80fd5b938501935b83851015611c9057611c8185611bbd565b82529385019390850190611c70565b808688015250505050505092915050565b5f60208284031215611cb1575f80fd5b81356001600160401b0380821115611cc7575f80fd5b9083019060e08286031215611cda575f80fd5b611ce2611847565b82358152602083013582811115611cf7575f80fd5b611d0387828601611899565b602083015250604083013582811115611d1a575f80fd5b611d2687828601611899565b604083015250611d38606084016119ba565b6060820152608083013582811115611d4e575f80fd5b611d5a87828601611bd3565b60808301525060a083013582811115611d71575f80fd5b611d7d87828601611bd3565b60a083015250611d8f60c084016119ba565b60c082015295945050505050565b828152604060208201525f6119356040830184611976565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561158857611588611db5565b808202811582820484141761158857611588611db5565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561158857611588611db5565b5f60208284031215611e2a575f80fd5b6119b382611bbd565b5f808335601e19843603018112611e48575f80fd5b8301803591506001600160401b03821115611e61575f80fd5b6020019150600581901b3603821315611e78575f80fd5b9250929050565b5f8235605e19833603018112611e93575f80fd5b9190910192915050565b5f808335601e19843603018112611eb2575f80fd5b8301803591506001600160401b03821115611ecb575f80fd5b602001915036819003821315611e78575f80fd5b5f60208284031215611eef575f80fd5b6119b3826119ba565b5f8851611f09818460208d01611954565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b63ffffffff818116838216019080821115610bf857610bf8611db5565b63ffffffff818116838216028082169190828114611f9e57611f9e611db5565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611fec81602a850160208b01611954565b86519083019061200381602a840160208b01611954565b60c087901b6001600160c01b031916602a9290910191820152612035603282018660e01b6001600160e01b0319169052565b61204e603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351612071818460208801611954565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120a7818460208901611954565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120e2818460208801611954565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f8251611e93818460208701611954565b5f60208284031215612123575f80fd5b505191905056fea26469706673582212202493946bf4312b64f92a2fbc326ea0236ce3c28da056710de34877f2f112d0c264736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
index e3cf7f4fd..9ed327f00 100644
--- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
+++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
@@ -31,7 +31,7 @@ var (
// ConversionData is an auto generated low-level Go binding around an user-defined struct.
type ConversionData struct {
- SubnetID [32]byte
+ L1ID [32]byte
ValidatorManagerBlockchainID [32]byte
ValidatorManagerAddress common.Address
InitialValidators []InitialValidator
@@ -75,14 +75,14 @@ type Validator struct {
// ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct.
type ValidatorManagerSettings struct {
- SubnetID [32]byte
+ L1ID [32]byte
ChurnPeriodSeconds uint64
MaximumChurnPercentage uint8
}
// ValidatorMessagesValidationPeriod is an auto generated low-level Go binding around an user-defined struct.
type ValidatorMessagesValidationPeriod struct {
- SubnetID [32]byte
+ L1ID [32]byte
NodeID []byte
BlsPublicKey []byte
RegistrationExpiry uint64
@@ -102,8 +102,8 @@ type ValidatorRegistrationInput struct {
// NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract.
var NativeTokenStakingManagerMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b5060405161587e38038061587e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6157318061014d5f395ff3fe6080604052600436106101f1575f3560e01c806380dd672f11610108578063ba3a4b971161009d578063c599e24f1161006d578063c599e24f1461058d578063c974d1b6146105a0578063d5f20ff6146105b4578063df93d8de146105e0578063fd7ac5e7146105f6575f80fd5b8063ba3a4b9714610510578063bc5fbfec1461052f578063bee0a03f1461054f578063c257a0f51461056e575f80fd5b8063a9778a7a116100d8578063a9778a7a14610326578063af2f5feb146104c3578063afb98096146104d6578063b771b3bc146104f6575f80fd5b806380dd672f146104525780638280a25a1461047157806393e2459814610485578063a3a65e48146104a4575f80fd5b806335455ded1161018957806360ad77841161015957806360ad7784146103b557806362065856146103d457806366435abf14610401578063732214f81461042057806376f7862114610433575f80fd5b806335455ded146103265780633a1cfff61461034e578063467ef06f1461036d57806360305d621461038c575f80fd5b806320d91b7a116101c457806320d91b7a1461027f57806325e1c7761461029e5780632e2194d8146102bd578063329c3e12146102f4575f80fd5b80630118acc4146101f55780630322ed9814610216578063151d30d1146102355780631ec4472414610260575b5f80fd5b348015610200575f80fd5b5061021461020f366004614740565b610615565b005b348015610221575f80fd5b5061021461023036600461477b565b61064a565b348015610240575f80fd5b50610249600a81565b60405160ff90911681526020015b60405180910390f35b34801561026b575f80fd5b5061021461027a366004614740565b6108d1565b34801561028a575f80fd5b50610214610299366004614792565b6108dc565b3480156102a9575f80fd5b506102146102b83660046147e0565b610e61565b3480156102c8575f80fd5b506102dc6102d736600461477b565b610ed5565b6040516001600160401b039091168152602001610257565b3480156102ff575f80fd5b5061030e6001600160991b0181565b6040516001600160a01b039091168152602001610257565b348015610331575f80fd5b5061033b61271081565b60405161ffff9091168152602001610257565b348015610359575f80fd5b50610214610368366004614740565b610f2f565b348015610378575f80fd5b50610214610387366004614801565b610f3a565b348015610397575f80fd5b506103a0601481565b60405163ffffffff9091168152602001610257565b3480156103c0575f80fd5b506102146103cf3660046147e0565b610ffb565b3480156103df575f80fd5b506103f36103ee36600461482e565b6112d3565b604051908152602001610257565b34801561040c575f80fd5b506102dc61041b36600461477b565b61130a565b34801561042b575f80fd5b506103f35f81565b34801561043e575f80fd5b5061021461044d366004614740565b61131e565b34801561045d575f80fd5b5061021461046c3660046147e0565b611349565b34801561047c575f80fd5b50610249603081565b348015610490575f80fd5b5061021461049f36600461477b565b61158e565b3480156104af575f80fd5b506102146104be366004614801565b611659565b6103f36104d136600461485a565b61184e565b3480156104e1575f80fd5b506103f35f8051602061565c83398151915281565b348015610501575f80fd5b5061030e6005600160991b0181565b34801561051b575f80fd5b5061021461052a36600461477b565b611882565b34801561053a575f80fd5b506103f35f8051602061567c83398151915281565b34801561055a575f80fd5b5061021461056936600461477b565b611aed565b348015610579575f80fd5b506102146105883660046148bb565b611c2a565b6103f361059b36600461477b565b611d07565b3480156105ab575f80fd5b50610249601481565b3480156105bf575f80fd5b506105d36105ce36600461477b565b611d38565b6040516102579190614947565b3480156105eb575f80fd5b506102dc6202a30081565b348015610601575f80fd5b506103f36106103660046149c7565b611e87565b610620838383611ee2565b61064557604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206156dc8339815191526020526040808220815160e0810190925280545f8051602061567c83398151915293929190829060ff166005811115610697576106976148d2565b60058111156106a8576106a86148d2565b81526020016001820180546106bc90614a32565b80601f01602080910402602001604051908101604052809291908181526020018280546106e890614a32565b80156107335780601f1061070a57610100808354040283529160200191610733565b820191905f5260205f20905b81548152906001019060200180831161071657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079e5761079e6148d2565b146107d1575f8381526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610848573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261086f9190810190614b75565b6040518263ffffffff1660e01b815260040161088b9190614ba6565b6020604051808303815f875af11580156108a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190614bb8565b50505050565b6108cb838383611ee2565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061567c8339815191529060ff161561092e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190614bb8565b8360200135146109be576040516372b0a7e760e11b81526020840135600482015260240161063c565b306109cf6060850160408601614be3565b6001600160a01b031614610a12576109ed6060840160408501614be3565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161063c565b5f610a206060850185614bfe565b905090505f805b828163ffffffff161015610c87575f610a436060880188614bfe565b8363ffffffff16818110610a5957610a59614c43565b9050602002810190610a6b9190614c57565b610a7490614cc2565b80516040519192505f916008880191610a8c91614d3d565b90815260200160405180910390205414610abc57805160405163a41f772f60e01b815261063c9190600401614ba6565b5f6002885f013584604051602001610aeb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610b0591614d3d565b602060405180830381855afa158015610b20573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b439190614bb8565b90508086600801835f0151604051610b5b9190614d3d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610b9b9082614d92565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610c1a9085614e61565b8251604051919550610c2b91614d3d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c8090614e74565b9050610a27565b50600483018190556001830154606490610cab90600160401b900460ff1683614e96565b1015610ccd57604051635943317f60e01b81526004810182905260240161063c565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf187612233565b604001516040518263ffffffff1660e01b8152600401610d119190614ba6565b602060405180830381865af4158015610d2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190614bb8565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8a9190614fd8565b5f60405180830381865af4158015610da4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcb9190810190614b75565b90505f600282604051610dde9190614d3d565b602060405180830381855afa158015610df9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1c9190614bb8565b9050828114610e485760405163baaea89d60e01b8152600481018290526024810184905260440161063c565b5050506009909201805460ff1916600117905550505050565b610e6a82612349565b610e8a576040516330efa98b60e01b81526004810183905260240161063c565b5f610e9483611d38565b5190506002816005811115610eab57610eab6148d2565b14610ecb578060405163170cc93360e21b815260040161063c9190614a64565b6108cb8383612384565b5f805f8051602061565c83398151915260030154610ef39084615063565b9050801580610f0857506001600160401b0381115b15610f295760405163222d164360e21b81526004810184905260240161063c565b92915050565b6108cb83838361266a565b610f42612856565b5f8051602061565c8339815191525f80610f5b8461288d565b91509150610f6882612349565b610f7457505050610fe2565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610fa257610fa26148d2565b03610fc7575f83815260088501602052604081208054919055610fc58282612c40565b505b610fdd81610fd884604001516112d3565b612c9e565b505050505b610ff860015f805160206156bc83398151915255565b50565b5f8281525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff166003811115611048576110486148d2565b6003811115611059576110596148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110cf82611d38565b90506001835160038111156110e6576110e66148d2565b14611107578251604051633b0d540d60e21b815261063c9190600401615082565b60048151600581111561111c5761111c6148d2565b036111325761112a86612cc4565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61115789612233565b604001516040518263ffffffff1660e01b81526004016111779190614ba6565b606060405180830381865af4158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b6919061509c565b50915091508184146111e357846040015160405163089938b360e11b815260040161063c91815260200190565b806001600160401b031683606001516001600160401b0316108061121c5750806001600160401b03168560a001516001600160401b0316115b1561124557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610f29906001600160401b038416614e96565b5f61131482611d38565b6080015192915050565b61132983838361266a565b61064557604051635bff683f60e11b81526004810184905260240161063c565b611351612856565b5f8281525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff16600381111561139e5761139e6148d2565b60038111156113af576113af6148d2565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529050600381516003811115611428576114286148d2565b14611449578051604051633b0d540d60e21b815261063c9190600401615082565b60046114588260400151611d38565b51600581111561146a5761146a6148d2565b14611569575f61147984612233565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114b89190614ba6565b606060405180830381865af41580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061509c565b5091509150818460400151146115235760405163089938b360e11b81526004810183905260240161063c565b806001600160401b03168460c001516001600160401b0316111561156557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5050505b61157284612cc4565b505061158a60015f805160206156bc83398151915255565b5050565b5f8051602061565c8339815191525f6115a683611d38565b51905060048160058111156115bd576115bd6148d2565b146115dd578060405163170cc93360e21b815260040161063c9190614a64565b5f8381526005830160205260409020546001600160a01b0316331461162357335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161063c565b5f838152600883016020908152604080832080549084905560058601909252909120546108cb906001600160a01b031682612c40565b5f8051602061567c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61168c86612233565b604001516040518263ffffffff1660e01b81526004016116ac9190614ba6565b6040805180830381865af41580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea91906150d1565b915091508061171057604051632d07135360e01b8152811515600482015260240161063c565b5f8281526006840160205260409020805461172a90614a32565b90505f0361174e5760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078501602052604090205460ff166005811115611774576117746148d2565b146117a7575f8281526007840160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b5f82815260068401602052604081206117bf91614694565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611857612856565b61186384848434612f18565b905061187b60015f805160206156bc83398151915255565b9392505050565b5f8181525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff1660038111156118cf576118cf6148d2565b60038111156118e0576118e06148d2565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611959576119596148d2565b1415801561197a5750600381516003811115611977576119776148d2565b14155b1561199b578051604051633b0d540d60e21b815261063c9190600401615082565b5f6119a98260400151611d38565b905080606001516001600160401b03165f036119db576040516339b894f960e21b81526004810185905260240161063c565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611a4993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611a63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a8a9190810190614b75565b6040518263ffffffff1660e01b8152600401611aa69190614ba6565b6020604051808303815f875af1158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190614bb8565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061567c8339815191529190611b3490614a32565b90505f03611b585760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078301602052604090205460ff166005811115611b7e57611b7e6148d2565b14611bb1575f8281526007820160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611bea91906004016150ff565b6020604051808303815f875af1158015611c06573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106459190614bb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c73575080546001600160401b03808416911610155b15611c915760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cbb83613093565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f611d10612856565b611d1b8233346130a4565b9050611d3360015f805160206156bc83398151915255565b919050565b611d406146cb565b5f8281525f805160206156dc833981519152602052604090819020815160e0810190925280545f8051602061567c833981519152929190829060ff166005811115611d8d57611d8d6148d2565b6005811115611d9e57611d9e6148d2565b8152602001600182018054611db290614a32565b80601f0160208091040260200160405190810160405280929190818152602001828054611dde90614a32565b8015611e295780601f10611e0057610100808354040283529160200191611e29565b820191905f5260205f20905b815481529060010190602001808311611e0c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061567c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611eca9086908690615189565b90815260200160405180910390205491505092915050565b5f8381525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c8339815191529284929091829060ff166003811115611f3057611f306148d2565b6003811115611f4157611f416148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611fb782611d38565b9050600283516003811115611fce57611fce6148d2565b14611fef578251604051633b0d540d60e21b815261063c9190600401615082565b60208301516001600160a01b0316331461208b575f8281526005850160205260409020546001600160a01b0316331461202857336115fe565b5f82815260058501602052604090205460a082015161205791600160b01b90046001600160401b031690615198565b6001600160401b031642101561208b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b6002815160058111156120a0576120a06148d2565b036121ce57600284015460808401516120c2916001600160401b031690615198565b6001600160401b03164210156120f65760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b8615612108576121068287612384565b505b5f8881526006850160205260409020805460ff191660031790556060830151608082015161214191849161213c91906151b8565b6132e7565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612182846134be565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061187b9350505050565b6004815160058111156121e3576121e36148d2565b03612217576121f1836134be565b5f89815260078601602052604090205561220a88612cc4565b600194505050505061187b565b805160405163170cc93360e21b815261063c9190600401614a64565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612297573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122be91908101906151d8565b91509150806122e057604051636b2f19e960e01b815260040160405180910390fd5b815115612306578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b031615612342576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156123cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123f691908101906151d8565b915091508061241857604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561245b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247f9190614bb8565b8251146124a5578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b0316156124e1576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b815260040161251e9190614ba6565b6040805180830381865af4158015612538573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255c9190615268565b915091508187146125835760405163089938b360e11b81526004810188905260240161063c565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061565c833981519152906001600160401b039081169083161115612640575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261265f565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061565c833981519152816126838661365b565b905061268e86612349565b61269d5760019250505061187b565b5f8681526005830160205260409020546001600160a01b031633146126c257336115fe565b5f86815260058301602052604090205460a08201516126f191600160b01b90046001600160401b031690615198565b6001600160401b03168160c001516001600160401b031610156127385760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161063c565b5f8515612750576127498786612384565b905061276e565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612793906112d3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156127fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128209190614bb8565b905080846008015f8a81526020019081526020015f205f8282546128449190614e61565b90915550501515979650505050505050565b5f805160206156bc83398151915280546001190161288757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6128966146cb565b5f8051602061567c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6128c988612233565b604001516040518263ffffffff1660e01b81526004016128e99190614ba6565b6040805180830381865af4158015612903573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292791906150d1565b91509150801561294e57604051632d07135360e01b8152811515600482015260240161063c565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561297f5761297f6148d2565b6005811115612990576129906148d2565b81526020016001820180546129a490614a32565b80601f01602080910402602001604051908101604052809291908181526020018280546129d090614a32565b8015612a1b5780601f106129f257610100808354040283529160200191612a1b565b820191905f5260205f20905b8154815290600101906020018083116129fe57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a8657612a866148d2565b14158015612aa75750600181516005811115612aa457612aa46148d2565b14155b15612ac857805160405163170cc93360e21b815261063c9190600401614a64565b600381516005811115612add57612add6148d2565b03612aeb5760048152612af0565b600581525b836008018160200151604051612b069190614d3d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612b4a57612b4a6148d2565b021790555060208201516001820190612b639082614d92565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612c0957612c096148d2565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612c8c575f80fd5b505af115801561112a573d5f803e3d5ffd5b61158a6001600160a01b0383168261393f565b60015f805160206156bc83398151915255565b5f8181525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff166003811115612d1157612d116148d2565b6003811115612d2257612d226148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dbf7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612dce9190615198565b6001600160401b0316421015612e025760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612ebd575f84815260058701602052604090205461271090612e6f90600160a01b900461ffff1685614e96565b612e799190615063565b915081866008015f8681526020019081526020015f205f828254612e9d9190614e61565b90915550612ead9050828461528b565b9050612ebd856020015182612c40565b612ed28560200151610fd887606001516112d3565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061565c83398151915290600160401b900461ffff9081169086161080612f6c575061271061ffff8616115b15612f9057604051635f12e6c360e11b815261ffff8616600482015260240161063c565b60028101546001600160401b039081169085161015612fcc576040516202a06d60e11b81526001600160401b038516600482015260240161063c565b8054831080612fde5750806001015483115b15612fff5760405163222d164360e21b81526004810184905260240161063c565b825f61300a82610ed5565b90505f61301789836139d2565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b61309b613ef7565b610ff881613f42565b5f5f8051602061565c833981519152816130bd84610ed5565b90505f6130c987611d38565b90506130d487612349565b6130f4576040516330efa98b60e01b81526004810188905260240161063c565b600281516005811115613109576131096148d2565b1461312a57805160405163170cc93360e21b815261063c9190600401614a64565b5f82826080015161313b9190615198565b905083600201600a9054906101000a90046001600160401b03168260400151613164919061529e565b6001600160401b0316816001600160401b031611156131a157604051636d51fe0560e11b81526001600160401b038216600482015260240161063c565b5f806131ad8a846132e7565b915091505f8a836040516020016131db92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f805160206156dc833981519152602052604081206002015481905f8051602061567c83398151915290600160801b90046001600160401b031661332f8582613fb6565b5f613339876141d9565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156133e2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134099190810190614b75565b6040518263ffffffff1660e01b81526004016134259190614ba6565b6020604051808303815f875af1158015613441573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134659190614bb8565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061565c83398151915290505f6134de8460400151611d38565b90505f6003825160058111156134f6576134f66148d2565b14806135145750600482516005811115613512576135126148d2565b145b15613524575060c0810151613561565b600282516005811115613539576135396148d2565b03613545575042613561565b815160405163170cc93360e21b815261063c9190600401614a64565b84608001516001600160401b0316816001600160401b03161161358857505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906135ad906112d3565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa15801561362e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136529190614bb8565b95945050505050565b6136636146cb565b5f8281525f805160206156dc8339815191526020526040808220815160e0810190925280545f8051602061567c83398151915293929190829060ff1660058111156136b0576136b06148d2565b60058111156136c1576136c16148d2565b81526020016001820180546136d590614a32565b80601f016020809104026020016040519081016040528092919081815260200182805461370190614a32565b801561374c5780601f106137235761010080835404028352916020019161374c565b820191905f5260205f20905b81548152906001019060200180831161372f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156137ba576137ba6148d2565b146137ed575f8481526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613831576138316148d2565b02179055506020820151600182019061384a9082614d92565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6138e885826132e7565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b804710156139625760405163cd78605960e01b815230600482015260240161063c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146139ab576040519150601f19603f3d011682016040523d82523d5f602084013e6139b0565b606091505b505090508061064557604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613a1657604051637fab81e560e01b815260040160405180910390fd5b5f8051602061567c83398151915242613a35606086016040870161482e565b6001600160401b0316111580613a6f5750613a536202a30042614e61565b613a63606086016040870161482e565b6001600160401b031610155b15613aa957613a84606085016040860161482e565b604051635879da1360e11b81526001600160401b03909116600482015260240161063c565b613abe613ab960608601866152c9565b61424e565b613ace613ab960808601866152c9565b6030613add60208601866152dd565b905014613b0f57613af160208501856152dd565b6040516326475b2f60e11b815261063c925060040190815260200190565b613b1984806152dd565b90505f03613b4657613b2b84806152dd565b604051633e08a12560e11b815260040161063c92919061531f565b5f60088201613b5586806152dd565b604051613b63929190615189565b90815260200160405180910390205414613b9c57613b8184806152dd565b60405163a41f772f60e01b815260040161063c92919061531f565b613ba6835f613fb6565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613be38a806152dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613c2b908b018b6152dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613c7460608b0160408c0161482e565b6001600160401b03168152602001613c8f60608b018b6152c9565b613c9890615332565b8152602001613caa60808b018b6152c9565b613cb390615332565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613ce19190615454565b5f60405180830381865af4158015613cfb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d22919081019061550b565b5f82815260068601602052604090209193509150613d408282614d92565b508160088401613d5088806152dd565b604051613d5e929190615189565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613d9a908590600401614ba6565b6020604051808303815f875af1158015613db6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dda9190614bb8565b5f8481526007860160205260409020805460ff191660011790559050613e0087806152dd565b5f858152600787016020526040902060010191613e1e91908361554e565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613e7d88806152dd565b604051613e8b929190615189565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613ec9919061482e565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613f4057604051631afcd79f60e31b815260040160405180910390fd5b565b613f4a613ef7565b613f53816143b7565b613f5b6143d0565b610ff860608201356080830135613f7860c0850160a0860161482e565b613f8860e0860160c08701615607565b613f99610100870160e08801615620565b610100870135613fb161014089016101208a01614be3565b6143e0565b5f8051602061567c8339815191525f6001600160401b038084169085161115613fea57613fe383856151b8565b9050613ff7565b613ff484846151b8565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580614059575060018401548151614055916001600160401b031690614e61565b8210155b1561407f576001600160401b03831660608201528181526040810151602082015261409e565b82816060018181516140919190615198565b6001600160401b03169052505b60608101516140ae90606461529e565b602082015160018601546001600160401b0392909216916140d99190600160401b900460ff16614e96565b101561410957606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161063c565b856001600160401b0316816040018181516141249190614e61565b9052506040810180516001600160401b038716919061414490839061528b565b9052506001840154604082015160649161416991600160401b90910460ff1690614e96565b1015614190578060400151604051635943317f60e01b815260040161063c91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206156dc8339815191526020526040812060020180545f8051602061567c833981519152919060089061422390600160401b90046001600160401b0316615640565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61425b6020820182614801565b63ffffffff1615801561427b57506142766020820182614bfe565b151590505b156142c25761428d6020820182614801565b61429a6020830183614bfe565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161063c565b6142cf6020820182614bfe565b90506142de6020830183614801565b63ffffffff1611156142f75761428d6020820182614801565b60015b6143076020830183614bfe565b905081101561158a5761431d6020830183614bfe565b61432860018461528b565b81811061433757614337614c43565b905060200201602081019061434c9190614be3565b6001600160a01b03166143626020840184614bfe565b8381811061437257614372614c43565b90506020020160208101906143879190614be3565b6001600160a01b031610156143af57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142fa565b6143bf613ef7565b6143c761459c565b610ff8816145a4565b6143d8613ef7565b613f4061468c565b6143e8613ef7565b5f8051602061565c83398151915261ffff8516158061440c575061271061ffff8616115b1561443057604051635f12e6c360e11b815261ffff8616600482015260240161063c565b868811156144545760405163222d164360e21b81526004810189905260240161063c565b60ff841615806144675750600a60ff8516115b1561448a5760405163170db35960e31b815260ff8516600482015260240161063c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b031610156144f1576040516202a06d60e11b81526001600160401b038716600482015260240161063c565b825f036145115760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b613f40613ef7565b6145ac613ef7565b80355f8051602061567c83398151915290815560146145d16060840160408501615620565b60ff1611806145f057506145eb6060830160408401615620565b60ff16155b15614624576146056060830160408401615620565b604051634a59bbff60e11b815260ff909116600482015260240161063c565b6146346060830160408401615620565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614665604083016020840161482e565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cb1613ef7565b5080546146a090614a32565b5f825580601f106146af575050565b601f0160209004905f5260205f2090810190610ff89190614708565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561471c575f8155600101614709565b5090565b8015158114610ff8575f80fd5b803563ffffffff81168114611d33575f80fd5b5f805f60608486031215614752575f80fd5b83359250602084013561476481614720565b91506147726040850161472d565b90509250925092565b5f6020828403121561478b575f80fd5b5035919050565b5f80604083850312156147a3575f80fd5b82356001600160401b038111156147b8575f80fd5b8301608081860312156147c9575f80fd5b91506147d76020840161472d565b90509250929050565b5f80604083850312156147f1575f80fd5b823591506147d76020840161472d565b5f60208284031215614811575f80fd5b61187b8261472d565b6001600160401b0381168114610ff8575f80fd5b5f6020828403121561483e575f80fd5b813561187b8161481a565b803561ffff81168114611d33575f80fd5b5f805f6060848603121561486c575f80fd5b83356001600160401b03811115614881575f80fd5b840160a08187031215614892575f80fd5b92506148a060208501614849565b915060408401356148b08161481a565b809150509250925092565b5f61014082840312156148cc575f80fd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b600681106148f6576148f66148d2565b9052565b5f5b838110156149145781810151838201526020016148fc565b50505f910152565b5f81518084526149338160208601602086016148fa565b601f01601f19169290920160200192915050565b602081526149596020820183516148e6565b5f602083015160e0604084015261497461010084018261491c565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156149d8575f80fd5b82356001600160401b03808211156149ee575f80fd5b818501915085601f830112614a01575f80fd5b813581811115614a0f575f80fd5b866020828501011115614a20575f80fd5b60209290920196919550909350505050565b600181811c90821680614a4657607f821691505b6020821081036148cc57634e487b7160e01b5f52602260045260245ffd5b60208101610f2982846148e6565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614aa857614aa8614a72565b60405290565b604080519081016001600160401b0381118282101715614aa857614aa8614a72565b604051601f8201601f191681016001600160401b0381118282101715614af857614af8614a72565b604052919050565b5f6001600160401b03821115614b1857614b18614a72565b50601f01601f191660200190565b5f82601f830112614b35575f80fd5b8151614b48614b4382614b00565b614ad0565b818152846020838601011115614b5c575f80fd5b614b6d8260208301602087016148fa565b949350505050565b5f60208284031215614b85575f80fd5b81516001600160401b03811115614b9a575f80fd5b614b6d84828501614b26565b602081525f61187b602083018461491c565b5f60208284031215614bc8575f80fd5b5051919050565b6001600160a01b0381168114610ff8575f80fd5b5f60208284031215614bf3575f80fd5b813561187b81614bcf565b5f808335601e19843603018112614c13575f80fd5b8301803591506001600160401b03821115614c2c575f80fd5b6020019150600581901b36038213156134b7575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c6b575f80fd5b9190910192915050565b5f82601f830112614c84575f80fd5b8135614c92614b4382614b00565b818152846020838601011115614ca6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614cd2575f80fd5b614cda614a86565b82356001600160401b0380821115614cf0575f80fd5b614cfc36838701614c75565b83526020850135915080821115614d11575f80fd5b50614d1e36828601614c75565b6020830152506040830135614d328161481a565b604082015292915050565b5f8251614c6b8184602087016148fa565b601f82111561064557805f5260205f20601f840160051c81016020851015614d735750805b601f840160051c820191505b81811015611ae6575f8155600101614d7f565b81516001600160401b03811115614dab57614dab614a72565b614dbf81614db98454614a32565b84614d4e565b602080601f831160018114614df2575f8415614ddb5750858301515b5f19600386901b1c1916600185901b17855561112a565b5f85815260208120601f198616915b82811015614e2057888601518255948401946001909101908401614e01565b5085821015614e3d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f2957610f29614e4d565b5f63ffffffff808316818103614e8c57614e8c614e4d565b6001019392505050565b8082028115828204841417610f2957610f29614e4d565b5f808335601e19843603018112614ec2575f80fd5b83016020810192503590506001600160401b03811115614ee0575f80fd5b8036038213156134b7575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614fcb57848303601f19018952813536889003605e19018112614f52575f80fd5b87016060614f608280614ead565b828752614f708388018284614eee565b92505050614f8086830183614ead565b86830388880152614f92838284614eee565b925050506040808301359250614fa78361481a565b6001600160401b039290921694909101939093529783019790830190600101614f2d565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614ffc81614bcf565b6001600160a01b031660608381019190915283013536849003601e19018112615023575f80fd5b83016020810190356001600160401b0381111561503e575f80fd5b8060051b360382131561504f575f80fd5b60808085015261365260a085018284614f16565b5f8261507d57634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160048310615096576150966148d2565b91905290565b5f805f606084860312156150ae575f80fd5b8351925060208401516150c08161481a565b60408501519092506148b08161481a565b5f80604083850312156150e2575f80fd5b8251915060208301516150f481614720565b809150509250929050565b5f60208083525f845461511181614a32565b806020870152604060018084165f8114615132576001811461514e5761517b565b60ff19851660408a0152604084151560051b8a0101955061517b565b895f5260205f205f5b858110156151725781548b8201860152908301908801615157565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561234257612342614e4d565b6001600160401b0382811682821603908082111561234257612342614e4d565b5f80604083850312156151e9575f80fd5b82516001600160401b03808211156151ff575f80fd5b9084019060608287031215615212575f80fd5b61521a614a86565b82518152602083015161522c81614bcf565b6020820152604083015182811115615242575f80fd5b61524e88828601614b26565b60408301525080945050505060208301516150f481614720565b5f8060408385031215615279575f80fd5b8251915060208301516150f48161481a565b81810381811115610f2957610f29614e4d565b6001600160401b038181168382160280821691908281146152c1576152c1614e4d565b505092915050565b5f8235603e19833603018112614c6b575f80fd5b5f808335601e198436030181126152f2575f80fd5b8301803591506001600160401b0382111561530b575f80fd5b6020019150368190038213156134b7575f80fd5b602081525f614b6d602083018486614eee565b5f60408236031215615342575f80fd5b61534a614aae565b6153538361472d565b81526020808401356001600160401b038082111561536f575f80fd5b9085019036601f830112615381575f80fd5b81358181111561539357615393614a72565b8060051b91506153a4848301614ad0565b81815291830184019184810190368411156153bd575f80fd5b938501935b838510156153e757843592506153d783614bcf565b82825293850193908501906153c2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561265f5784516001600160a01b0316825293830193600192909201919083019061542b565b60208152815160208201525f602083015160e0604084015261547a61010084018261491c565b90506040840151601f1980858403016060860152615498838361491c565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526154c883836153f9565b925060a08601519150808584030160c0860152506154e682826153f9565b91505060c084015161550360e08501826001600160401b03169052565b509392505050565b5f806040838503121561551c575f80fd5b8251915060208301516001600160401b03811115615538575f80fd5b61554485828601614b26565b9150509250929050565b6001600160401b0383111561556557615565614a72565b615579836155738354614a32565b83614d4e565b5f601f8411600181146155aa575f85156155935750838201355b5f19600387901b1c1916600186901b178355611ae6565b5f83815260208120601f198716915b828110156155d957868501358255602094850194600190920191016155b9565b50868210156155f5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f60208284031215615617575f80fd5b61187b82614849565b5f60208284031215615630575f80fd5b813560ff8116811461187b575f80fd5b5f6001600160401b03808316818103614e8c57614e8c614e4d56fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212205feacdf9b91fa3810cab46ea0fd6546fcbfdada3a39a5afb8eb010226337b95d64736f6c63430008190033",
+ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
+ Bin: "0x608060405234801561000f575f80fd5b5060405161587e38038061587e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6157318061014d5f395ff3fe6080604052600436106101f1575f3560e01c806380dd672f11610108578063ba3a4b971161009d578063c599e24f1161006d578063c599e24f1461058d578063c974d1b6146105a0578063d5f20ff6146105b4578063df93d8de146105e0578063fd7ac5e7146105f6575f80fd5b8063ba3a4b9714610510578063bc5fbfec1461052f578063bee0a03f1461054f578063c257a0f51461056e575f80fd5b8063a9778a7a116100d8578063a9778a7a14610326578063af2f5feb146104c3578063afb98096146104d6578063b771b3bc146104f6575f80fd5b806380dd672f146104525780638280a25a1461047157806393e2459814610485578063a3a65e48146104a4575f80fd5b806335455ded1161018957806360ad77841161015957806360ad7784146103b557806362065856146103d457806366435abf14610401578063732214f81461042057806376f7862114610433575f80fd5b806335455ded146103265780633a1cfff61461034e578063467ef06f1461036d57806360305d621461038c575f80fd5b806320d91b7a116101c457806320d91b7a1461027f57806325e1c7761461029e5780632e2194d8146102bd578063329c3e12146102f4575f80fd5b80630118acc4146101f55780630322ed9814610216578063151d30d1146102355780631ec4472414610260575b5f80fd5b348015610200575f80fd5b5061021461020f366004614740565b610615565b005b348015610221575f80fd5b5061021461023036600461477b565b61064a565b348015610240575f80fd5b50610249600a81565b60405160ff90911681526020015b60405180910390f35b34801561026b575f80fd5b5061021461027a366004614740565b6108d1565b34801561028a575f80fd5b50610214610299366004614792565b6108dc565b3480156102a9575f80fd5b506102146102b83660046147e0565b610e61565b3480156102c8575f80fd5b506102dc6102d736600461477b565b610ed5565b6040516001600160401b039091168152602001610257565b3480156102ff575f80fd5b5061030e6001600160991b0181565b6040516001600160a01b039091168152602001610257565b348015610331575f80fd5b5061033b61271081565b60405161ffff9091168152602001610257565b348015610359575f80fd5b50610214610368366004614740565b610f2f565b348015610378575f80fd5b50610214610387366004614801565b610f3a565b348015610397575f80fd5b506103a0601481565b60405163ffffffff9091168152602001610257565b3480156103c0575f80fd5b506102146103cf3660046147e0565b610ffb565b3480156103df575f80fd5b506103f36103ee36600461482e565b6112d3565b604051908152602001610257565b34801561040c575f80fd5b506102dc61041b36600461477b565b61130a565b34801561042b575f80fd5b506103f35f81565b34801561043e575f80fd5b5061021461044d366004614740565b61131e565b34801561045d575f80fd5b5061021461046c3660046147e0565b611349565b34801561047c575f80fd5b50610249603081565b348015610490575f80fd5b5061021461049f36600461477b565b61158e565b3480156104af575f80fd5b506102146104be366004614801565b611659565b6103f36104d136600461485a565b61184e565b3480156104e1575f80fd5b506103f35f8051602061565c83398151915281565b348015610501575f80fd5b5061030e6005600160991b0181565b34801561051b575f80fd5b5061021461052a36600461477b565b611882565b34801561053a575f80fd5b506103f35f8051602061567c83398151915281565b34801561055a575f80fd5b5061021461056936600461477b565b611aed565b348015610579575f80fd5b506102146105883660046148bb565b611c2a565b6103f361059b36600461477b565b611d07565b3480156105ab575f80fd5b50610249601481565b3480156105bf575f80fd5b506105d36105ce36600461477b565b611d38565b6040516102579190614947565b3480156105eb575f80fd5b506102dc6202a30081565b348015610601575f80fd5b506103f36106103660046149c7565b611e87565b610620838383611ee2565b61064557604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206156dc8339815191526020526040808220815160e0810190925280545f8051602061567c83398151915293929190829060ff166005811115610697576106976148d2565b60058111156106a8576106a86148d2565b81526020016001820180546106bc90614a32565b80601f01602080910402602001604051908101604052809291908181526020018280546106e890614a32565b80156107335780601f1061070a57610100808354040283529160200191610733565b820191905f5260205f20905b81548152906001019060200180831161071657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079e5761079e6148d2565b146107d1575f8381526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610848573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261086f9190810190614b75565b6040518263ffffffff1660e01b815260040161088b9190614ba6565b6020604051808303815f875af11580156108a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190614bb8565b50505050565b6108cb838383611ee2565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061567c8339815191529060ff161561092e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190614bb8565b8360200135146109be576040516372b0a7e760e11b81526020840135600482015260240161063c565b306109cf6060850160408601614be3565b6001600160a01b031614610a12576109ed6060840160408501614be3565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161063c565b5f610a206060850185614bfe565b905090505f805b828163ffffffff161015610c87575f610a436060880188614bfe565b8363ffffffff16818110610a5957610a59614c43565b9050602002810190610a6b9190614c57565b610a7490614cc2565b80516040519192505f916008880191610a8c91614d3d565b90815260200160405180910390205414610abc57805160405163a41f772f60e01b815261063c9190600401614ba6565b5f6002885f013584604051602001610aeb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610b0591614d3d565b602060405180830381855afa158015610b20573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b439190614bb8565b90508086600801835f0151604051610b5b9190614d3d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610b9b9082614d92565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610c1a9085614e61565b8251604051919550610c2b91614d3d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c8090614e74565b9050610a27565b50600483018190556001830154606490610cab90600160401b900460ff1683614e96565b1015610ccd57604051635943317f60e01b81526004810182905260240161063c565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf187612233565b604001516040518263ffffffff1660e01b8152600401610d119190614ba6565b602060405180830381865af4158015610d2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190614bb8565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8a9190614fd8565b5f60405180830381865af4158015610da4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcb9190810190614b75565b90505f600282604051610dde9190614d3d565b602060405180830381855afa158015610df9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1c9190614bb8565b9050828114610e485760405163baaea89d60e01b8152600481018290526024810184905260440161063c565b5050506009909201805460ff1916600117905550505050565b610e6a82612349565b610e8a576040516330efa98b60e01b81526004810183905260240161063c565b5f610e9483611d38565b5190506002816005811115610eab57610eab6148d2565b14610ecb578060405163170cc93360e21b815260040161063c9190614a64565b6108cb8383612384565b5f805f8051602061565c83398151915260030154610ef39084615063565b9050801580610f0857506001600160401b0381115b15610f295760405163222d164360e21b81526004810184905260240161063c565b92915050565b6108cb83838361266a565b610f42612856565b5f8051602061565c8339815191525f80610f5b8461288d565b91509150610f6882612349565b610f7457505050610fe2565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610fa257610fa26148d2565b03610fc7575f83815260088501602052604081208054919055610fc58282612c40565b505b610fdd81610fd884604001516112d3565b612c9e565b505050505b610ff860015f805160206156bc83398151915255565b50565b5f8281525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff166003811115611048576110486148d2565b6003811115611059576110596148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110cf82611d38565b90506001835160038111156110e6576110e66148d2565b14611107578251604051633b0d540d60e21b815261063c9190600401615082565b60048151600581111561111c5761111c6148d2565b036111325761112a86612cc4565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61115789612233565b604001516040518263ffffffff1660e01b81526004016111779190614ba6565b606060405180830381865af4158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b6919061509c565b50915091508184146111e357846040015160405163089938b360e11b815260040161063c91815260200190565b806001600160401b031683606001516001600160401b0316108061121c5750806001600160401b03168560a001516001600160401b0316115b1561124557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610f29906001600160401b038416614e96565b5f61131482611d38565b6080015192915050565b61132983838361266a565b61064557604051635bff683f60e11b81526004810184905260240161063c565b611351612856565b5f8281525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff16600381111561139e5761139e6148d2565b60038111156113af576113af6148d2565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529050600381516003811115611428576114286148d2565b14611449578051604051633b0d540d60e21b815261063c9190600401615082565b60046114588260400151611d38565b51600581111561146a5761146a6148d2565b14611569575f61147984612233565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114b89190614ba6565b606060405180830381865af41580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061509c565b5091509150818460400151146115235760405163089938b360e11b81526004810183905260240161063c565b806001600160401b03168460c001516001600160401b0316111561156557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5050505b61157284612cc4565b505061158a60015f805160206156bc83398151915255565b5050565b5f8051602061565c8339815191525f6115a683611d38565b51905060048160058111156115bd576115bd6148d2565b146115dd578060405163170cc93360e21b815260040161063c9190614a64565b5f8381526005830160205260409020546001600160a01b0316331461162357335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161063c565b5f838152600883016020908152604080832080549084905560058601909252909120546108cb906001600160a01b031682612c40565b5f8051602061567c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61168c86612233565b604001516040518263ffffffff1660e01b81526004016116ac9190614ba6565b6040805180830381865af41580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea91906150d1565b915091508061171057604051632d07135360e01b8152811515600482015260240161063c565b5f8281526006840160205260409020805461172a90614a32565b90505f0361174e5760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078501602052604090205460ff166005811115611774576117746148d2565b146117a7575f8281526007840160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b5f82815260068401602052604081206117bf91614694565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611857612856565b61186384848434612f18565b905061187b60015f805160206156bc83398151915255565b9392505050565b5f8181525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff1660038111156118cf576118cf6148d2565b60038111156118e0576118e06148d2565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611959576119596148d2565b1415801561197a5750600381516003811115611977576119776148d2565b14155b1561199b578051604051633b0d540d60e21b815261063c9190600401615082565b5f6119a98260400151611d38565b905080606001516001600160401b03165f036119db576040516339b894f960e21b81526004810185905260240161063c565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611a4993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611a63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a8a9190810190614b75565b6040518263ffffffff1660e01b8152600401611aa69190614ba6565b6020604051808303815f875af1158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190614bb8565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061567c8339815191529190611b3490614a32565b90505f03611b585760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078301602052604090205460ff166005811115611b7e57611b7e6148d2565b14611bb1575f8281526007820160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611bea91906004016150ff565b6020604051808303815f875af1158015611c06573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106459190614bb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c73575080546001600160401b03808416911610155b15611c915760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cbb83613093565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f611d10612856565b611d1b8233346130a4565b9050611d3360015f805160206156bc83398151915255565b919050565b611d406146cb565b5f8281525f805160206156dc833981519152602052604090819020815160e0810190925280545f8051602061567c833981519152929190829060ff166005811115611d8d57611d8d6148d2565b6005811115611d9e57611d9e6148d2565b8152602001600182018054611db290614a32565b80601f0160208091040260200160405190810160405280929190818152602001828054611dde90614a32565b8015611e295780601f10611e0057610100808354040283529160200191611e29565b820191905f5260205f20905b815481529060010190602001808311611e0c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061567c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611eca9086908690615189565b90815260200160405180910390205491505092915050565b5f8381525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c8339815191529284929091829060ff166003811115611f3057611f306148d2565b6003811115611f4157611f416148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611fb782611d38565b9050600283516003811115611fce57611fce6148d2565b14611fef578251604051633b0d540d60e21b815261063c9190600401615082565b60208301516001600160a01b0316331461208b575f8281526005850160205260409020546001600160a01b0316331461202857336115fe565b5f82815260058501602052604090205460a082015161205791600160b01b90046001600160401b031690615198565b6001600160401b031642101561208b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b6002815160058111156120a0576120a06148d2565b036121ce57600284015460808401516120c2916001600160401b031690615198565b6001600160401b03164210156120f65760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b8615612108576121068287612384565b505b5f8881526006850160205260409020805460ff191660031790556060830151608082015161214191849161213c91906151b8565b6132e7565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612182846134be565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061187b9350505050565b6004815160058111156121e3576121e36148d2565b03612217576121f1836134be565b5f89815260078601602052604090205561220a88612cc4565b600194505050505061187b565b805160405163170cc93360e21b815261063c9190600401614a64565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612297573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122be91908101906151d8565b91509150806122e057604051636b2f19e960e01b815260040160405180910390fd5b815115612306578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b031615612342576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156123cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123f691908101906151d8565b915091508061241857604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561245b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247f9190614bb8565b8251146124a5578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b0316156124e1576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b815260040161251e9190614ba6565b6040805180830381865af4158015612538573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255c9190615268565b915091508187146125835760405163089938b360e11b81526004810188905260240161063c565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061565c833981519152906001600160401b039081169083161115612640575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261265f565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061565c833981519152816126838661365b565b905061268e86612349565b61269d5760019250505061187b565b5f8681526005830160205260409020546001600160a01b031633146126c257336115fe565b5f86815260058301602052604090205460a08201516126f191600160b01b90046001600160401b031690615198565b6001600160401b03168160c001516001600160401b031610156127385760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161063c565b5f8515612750576127498786612384565b905061276e565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612793906112d3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156127fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128209190614bb8565b905080846008015f8a81526020019081526020015f205f8282546128449190614e61565b90915550501515979650505050505050565b5f805160206156bc83398151915280546001190161288757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6128966146cb565b5f8051602061567c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6128c988612233565b604001516040518263ffffffff1660e01b81526004016128e99190614ba6565b6040805180830381865af4158015612903573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292791906150d1565b91509150801561294e57604051632d07135360e01b8152811515600482015260240161063c565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561297f5761297f6148d2565b6005811115612990576129906148d2565b81526020016001820180546129a490614a32565b80601f01602080910402602001604051908101604052809291908181526020018280546129d090614a32565b8015612a1b5780601f106129f257610100808354040283529160200191612a1b565b820191905f5260205f20905b8154815290600101906020018083116129fe57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a8657612a866148d2565b14158015612aa75750600181516005811115612aa457612aa46148d2565b14155b15612ac857805160405163170cc93360e21b815261063c9190600401614a64565b600381516005811115612add57612add6148d2565b03612aeb5760048152612af0565b600581525b836008018160200151604051612b069190614d3d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612b4a57612b4a6148d2565b021790555060208201516001820190612b639082614d92565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612c0957612c096148d2565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612c8c575f80fd5b505af115801561112a573d5f803e3d5ffd5b61158a6001600160a01b0383168261393f565b60015f805160206156bc83398151915255565b5f8181525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff166003811115612d1157612d116148d2565b6003811115612d2257612d226148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dbf7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612dce9190615198565b6001600160401b0316421015612e025760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612ebd575f84815260058701602052604090205461271090612e6f90600160a01b900461ffff1685614e96565b612e799190615063565b915081866008015f8681526020019081526020015f205f828254612e9d9190614e61565b90915550612ead9050828461528b565b9050612ebd856020015182612c40565b612ed28560200151610fd887606001516112d3565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061565c83398151915290600160401b900461ffff9081169086161080612f6c575061271061ffff8616115b15612f9057604051635f12e6c360e11b815261ffff8616600482015260240161063c565b60028101546001600160401b039081169085161015612fcc576040516202a06d60e11b81526001600160401b038516600482015260240161063c565b8054831080612fde5750806001015483115b15612fff5760405163222d164360e21b81526004810184905260240161063c565b825f61300a82610ed5565b90505f61301789836139d2565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b61309b613ef7565b610ff881613f42565b5f5f8051602061565c833981519152816130bd84610ed5565b90505f6130c987611d38565b90506130d487612349565b6130f4576040516330efa98b60e01b81526004810188905260240161063c565b600281516005811115613109576131096148d2565b1461312a57805160405163170cc93360e21b815261063c9190600401614a64565b5f82826080015161313b9190615198565b905083600201600a9054906101000a90046001600160401b03168260400151613164919061529e565b6001600160401b0316816001600160401b031611156131a157604051636d51fe0560e11b81526001600160401b038216600482015260240161063c565b5f806131ad8a846132e7565b915091505f8a836040516020016131db92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f805160206156dc833981519152602052604081206002015481905f8051602061567c83398151915290600160801b90046001600160401b031661332f8582613fb6565b5f613339876141d9565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156133e2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134099190810190614b75565b6040518263ffffffff1660e01b81526004016134259190614ba6565b6020604051808303815f875af1158015613441573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134659190614bb8565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061565c83398151915290505f6134de8460400151611d38565b90505f6003825160058111156134f6576134f66148d2565b14806135145750600482516005811115613512576135126148d2565b145b15613524575060c0810151613561565b600282516005811115613539576135396148d2565b03613545575042613561565b815160405163170cc93360e21b815261063c9190600401614a64565b84608001516001600160401b0316816001600160401b03161161358857505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906135ad906112d3565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa15801561362e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136529190614bb8565b95945050505050565b6136636146cb565b5f8281525f805160206156dc8339815191526020526040808220815160e0810190925280545f8051602061567c83398151915293929190829060ff1660058111156136b0576136b06148d2565b60058111156136c1576136c16148d2565b81526020016001820180546136d590614a32565b80601f016020809104026020016040519081016040528092919081815260200182805461370190614a32565b801561374c5780601f106137235761010080835404028352916020019161374c565b820191905f5260205f20905b81548152906001019060200180831161372f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156137ba576137ba6148d2565b146137ed575f8481526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613831576138316148d2565b02179055506020820151600182019061384a9082614d92565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6138e885826132e7565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b804710156139625760405163cd78605960e01b815230600482015260240161063c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146139ab576040519150601f19603f3d011682016040523d82523d5f602084013e6139b0565b606091505b505090508061064557604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613a1657604051637fab81e560e01b815260040160405180910390fd5b5f8051602061567c83398151915242613a35606086016040870161482e565b6001600160401b0316111580613a6f5750613a536202a30042614e61565b613a63606086016040870161482e565b6001600160401b031610155b15613aa957613a84606085016040860161482e565b604051635879da1360e11b81526001600160401b03909116600482015260240161063c565b613abe613ab960608601866152c9565b61424e565b613ace613ab960808601866152c9565b6030613add60208601866152dd565b905014613b0f57613af160208501856152dd565b6040516326475b2f60e11b815261063c925060040190815260200190565b613b1984806152dd565b90505f03613b4657613b2b84806152dd565b604051633e08a12560e11b815260040161063c92919061531f565b5f60088201613b5586806152dd565b604051613b63929190615189565b90815260200160405180910390205414613b9c57613b8184806152dd565b60405163a41f772f60e01b815260040161063c92919061531f565b613ba6835f613fb6565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613be38a806152dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613c2b908b018b6152dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613c7460608b0160408c0161482e565b6001600160401b03168152602001613c8f60608b018b6152c9565b613c9890615332565b8152602001613caa60808b018b6152c9565b613cb390615332565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613ce19190615454565b5f60405180830381865af4158015613cfb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d22919081019061550b565b5f82815260068601602052604090209193509150613d408282614d92565b508160088401613d5088806152dd565b604051613d5e929190615189565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613d9a908590600401614ba6565b6020604051808303815f875af1158015613db6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dda9190614bb8565b5f8481526007860160205260409020805460ff191660011790559050613e0087806152dd565b5f858152600787016020526040902060010191613e1e91908361554e565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613e7d88806152dd565b604051613e8b929190615189565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613ec9919061482e565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613f4057604051631afcd79f60e31b815260040160405180910390fd5b565b613f4a613ef7565b613f53816143b7565b613f5b6143d0565b610ff860608201356080830135613f7860c0850160a0860161482e565b613f8860e0860160c08701615607565b613f99610100870160e08801615620565b610100870135613fb161014089016101208a01614be3565b6143e0565b5f8051602061567c8339815191525f6001600160401b038084169085161115613fea57613fe383856151b8565b9050613ff7565b613ff484846151b8565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580614059575060018401548151614055916001600160401b031690614e61565b8210155b1561407f576001600160401b03831660608201528181526040810151602082015261409e565b82816060018181516140919190615198565b6001600160401b03169052505b60608101516140ae90606461529e565b602082015160018601546001600160401b0392909216916140d99190600160401b900460ff16614e96565b101561410957606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161063c565b856001600160401b0316816040018181516141249190614e61565b9052506040810180516001600160401b038716919061414490839061528b565b9052506001840154604082015160649161416991600160401b90910460ff1690614e96565b1015614190578060400151604051635943317f60e01b815260040161063c91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206156dc8339815191526020526040812060020180545f8051602061567c833981519152919060089061422390600160401b90046001600160401b0316615640565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61425b6020820182614801565b63ffffffff1615801561427b57506142766020820182614bfe565b151590505b156142c25761428d6020820182614801565b61429a6020830183614bfe565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161063c565b6142cf6020820182614bfe565b90506142de6020830183614801565b63ffffffff1611156142f75761428d6020820182614801565b60015b6143076020830183614bfe565b905081101561158a5761431d6020830183614bfe565b61432860018461528b565b81811061433757614337614c43565b905060200201602081019061434c9190614be3565b6001600160a01b03166143626020840184614bfe565b8381811061437257614372614c43565b90506020020160208101906143879190614be3565b6001600160a01b031610156143af57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142fa565b6143bf613ef7565b6143c761459c565b610ff8816145a4565b6143d8613ef7565b613f4061468c565b6143e8613ef7565b5f8051602061565c83398151915261ffff8516158061440c575061271061ffff8616115b1561443057604051635f12e6c360e11b815261ffff8616600482015260240161063c565b868811156144545760405163222d164360e21b81526004810189905260240161063c565b60ff841615806144675750600a60ff8516115b1561448a5760405163170db35960e31b815260ff8516600482015260240161063c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b031610156144f1576040516202a06d60e11b81526001600160401b038716600482015260240161063c565b825f036145115760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b613f40613ef7565b6145ac613ef7565b80355f8051602061567c83398151915290815560146145d16060840160408501615620565b60ff1611806145f057506145eb6060830160408401615620565b60ff16155b15614624576146056060830160408401615620565b604051634a59bbff60e11b815260ff909116600482015260240161063c565b6146346060830160408401615620565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614665604083016020840161482e565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cb1613ef7565b5080546146a090614a32565b5f825580601f106146af575050565b601f0160209004905f5260205f2090810190610ff89190614708565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561471c575f8155600101614709565b5090565b8015158114610ff8575f80fd5b803563ffffffff81168114611d33575f80fd5b5f805f60608486031215614752575f80fd5b83359250602084013561476481614720565b91506147726040850161472d565b90509250925092565b5f6020828403121561478b575f80fd5b5035919050565b5f80604083850312156147a3575f80fd5b82356001600160401b038111156147b8575f80fd5b8301608081860312156147c9575f80fd5b91506147d76020840161472d565b90509250929050565b5f80604083850312156147f1575f80fd5b823591506147d76020840161472d565b5f60208284031215614811575f80fd5b61187b8261472d565b6001600160401b0381168114610ff8575f80fd5b5f6020828403121561483e575f80fd5b813561187b8161481a565b803561ffff81168114611d33575f80fd5b5f805f6060848603121561486c575f80fd5b83356001600160401b03811115614881575f80fd5b840160a08187031215614892575f80fd5b92506148a060208501614849565b915060408401356148b08161481a565b809150509250925092565b5f61014082840312156148cc575f80fd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b600681106148f6576148f66148d2565b9052565b5f5b838110156149145781810151838201526020016148fc565b50505f910152565b5f81518084526149338160208601602086016148fa565b601f01601f19169290920160200192915050565b602081526149596020820183516148e6565b5f602083015160e0604084015261497461010084018261491c565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156149d8575f80fd5b82356001600160401b03808211156149ee575f80fd5b818501915085601f830112614a01575f80fd5b813581811115614a0f575f80fd5b866020828501011115614a20575f80fd5b60209290920196919550909350505050565b600181811c90821680614a4657607f821691505b6020821081036148cc57634e487b7160e01b5f52602260045260245ffd5b60208101610f2982846148e6565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614aa857614aa8614a72565b60405290565b604080519081016001600160401b0381118282101715614aa857614aa8614a72565b604051601f8201601f191681016001600160401b0381118282101715614af857614af8614a72565b604052919050565b5f6001600160401b03821115614b1857614b18614a72565b50601f01601f191660200190565b5f82601f830112614b35575f80fd5b8151614b48614b4382614b00565b614ad0565b818152846020838601011115614b5c575f80fd5b614b6d8260208301602087016148fa565b949350505050565b5f60208284031215614b85575f80fd5b81516001600160401b03811115614b9a575f80fd5b614b6d84828501614b26565b602081525f61187b602083018461491c565b5f60208284031215614bc8575f80fd5b5051919050565b6001600160a01b0381168114610ff8575f80fd5b5f60208284031215614bf3575f80fd5b813561187b81614bcf565b5f808335601e19843603018112614c13575f80fd5b8301803591506001600160401b03821115614c2c575f80fd5b6020019150600581901b36038213156134b7575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c6b575f80fd5b9190910192915050565b5f82601f830112614c84575f80fd5b8135614c92614b4382614b00565b818152846020838601011115614ca6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614cd2575f80fd5b614cda614a86565b82356001600160401b0380821115614cf0575f80fd5b614cfc36838701614c75565b83526020850135915080821115614d11575f80fd5b50614d1e36828601614c75565b6020830152506040830135614d328161481a565b604082015292915050565b5f8251614c6b8184602087016148fa565b601f82111561064557805f5260205f20601f840160051c81016020851015614d735750805b601f840160051c820191505b81811015611ae6575f8155600101614d7f565b81516001600160401b03811115614dab57614dab614a72565b614dbf81614db98454614a32565b84614d4e565b602080601f831160018114614df2575f8415614ddb5750858301515b5f19600386901b1c1916600185901b17855561112a565b5f85815260208120601f198616915b82811015614e2057888601518255948401946001909101908401614e01565b5085821015614e3d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f2957610f29614e4d565b5f63ffffffff808316818103614e8c57614e8c614e4d565b6001019392505050565b8082028115828204841417610f2957610f29614e4d565b5f808335601e19843603018112614ec2575f80fd5b83016020810192503590506001600160401b03811115614ee0575f80fd5b8036038213156134b7575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614fcb57848303601f19018952813536889003605e19018112614f52575f80fd5b87016060614f608280614ead565b828752614f708388018284614eee565b92505050614f8086830183614ead565b86830388880152614f92838284614eee565b925050506040808301359250614fa78361481a565b6001600160401b039290921694909101939093529783019790830190600101614f2d565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614ffc81614bcf565b6001600160a01b031660608381019190915283013536849003601e19018112615023575f80fd5b83016020810190356001600160401b0381111561503e575f80fd5b8060051b360382131561504f575f80fd5b60808085015261365260a085018284614f16565b5f8261507d57634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160048310615096576150966148d2565b91905290565b5f805f606084860312156150ae575f80fd5b8351925060208401516150c08161481a565b60408501519092506148b08161481a565b5f80604083850312156150e2575f80fd5b8251915060208301516150f481614720565b809150509250929050565b5f60208083525f845461511181614a32565b806020870152604060018084165f8114615132576001811461514e5761517b565b60ff19851660408a0152604084151560051b8a0101955061517b565b895f5260205f205f5b858110156151725781548b8201860152908301908801615157565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561234257612342614e4d565b6001600160401b0382811682821603908082111561234257612342614e4d565b5f80604083850312156151e9575f80fd5b82516001600160401b03808211156151ff575f80fd5b9084019060608287031215615212575f80fd5b61521a614a86565b82518152602083015161522c81614bcf565b6020820152604083015182811115615242575f80fd5b61524e88828601614b26565b60408301525080945050505060208301516150f481614720565b5f8060408385031215615279575f80fd5b8251915060208301516150f48161481a565b81810381811115610f2957610f29614e4d565b6001600160401b038181168382160280821691908281146152c1576152c1614e4d565b505092915050565b5f8235603e19833603018112614c6b575f80fd5b5f808335601e198436030181126152f2575f80fd5b8301803591506001600160401b0382111561530b575f80fd5b6020019150368190038213156134b7575f80fd5b602081525f614b6d602083018486614eee565b5f60408236031215615342575f80fd5b61534a614aae565b6153538361472d565b81526020808401356001600160401b038082111561536f575f80fd5b9085019036601f830112615381575f80fd5b81358181111561539357615393614a72565b8060051b91506153a4848301614ad0565b81815291830184019184810190368411156153bd575f80fd5b938501935b838510156153e757843592506153d783614bcf565b82825293850193908501906153c2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561265f5784516001600160a01b0316825293830193600192909201919083019061542b565b60208152815160208201525f602083015160e0604084015261547a61010084018261491c565b90506040840151601f1980858403016060860152615498838361491c565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526154c883836153f9565b925060a08601519150808584030160c0860152506154e682826153f9565b91505060c084015161550360e08501826001600160401b03169052565b509392505050565b5f806040838503121561551c575f80fd5b8251915060208301516001600160401b03811115615538575f80fd5b61554485828601614b26565b9150509250929050565b6001600160401b0383111561556557615565614a72565b615579836155738354614a32565b83614d4e565b5f601f8411600181146155aa575f85156155935750838201355b5f19600387901b1c1916600186901b178355611ae6565b5f83815260208120601f198716915b828110156155d957868501358255602094850194600190920191016155b9565b50868210156155f5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f60208284031215615617575f80fd5b61187b82614849565b5f60208284031215615630575f80fd5b813560ff8116811461187b575f80fd5b5f6001600160401b03808316818103614e8c57614e8c614e4d56fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220a6108e03ddb258f94d4502bacc5e72f9020514a95d396e6c767763fbfbec1fd964736f6c63430008190033",
}
// NativeTokenStakingManagerABI is the input ABI used to generate the binding from.
@@ -2996,8 +2996,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValida
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x612160610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c3366004611904565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f0366004611904565b61044a565b604080519283526001600160401b039091166020830152016100d9565b610125610120366004611904565b61063b565b6040519081526020016100d9565b610146610141366004611904565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a561017936600461193d565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d991906119a1565b6101a56101c03660046119d5565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d366004611a0e565b610a1e565b610235610230366004611904565b610bff565b6040516100d99190611aaa565b6101a5610250366004611b61565b61154a565b6101a5610263366004611b93565b61158e565b61027b610276366004611ca1565b6115c4565b6040516100d9929190611d9d565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611dc9565b6102e6906008611ddc565b61ffff168582815181106102fc576102fc611df3565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611dc9565b61035f906008611ddc565b63ffffffff1686610371836002611e07565b8151811061038157610381611df3565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611dc9565b6103e2906008611ddc565b876103ee836006611e07565b815181106103fe576103fe611df3565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611df3565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611dc9565b6104a2906008611ddc565b61ffff168582815181106104b8576104b8611df3565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611dc9565b61051b906008611ddc565b63ffffffff168661052d836002611e07565b8151811061053d5761053d611df3565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611dc9565b61059c906008611ddc565b876105a8836006611e07565b815181106105b8576105b8611df3565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611dc9565b6105f2906008611ddc565b6001600160401b031688610607836026611e07565b8151811061061757610617611df3565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611dc9565b610692906008611ddc565b61ffff168482815181106106a8576106a8611df3565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611dc9565b61070b906008611ddc565b63ffffffff168561071d836002611e07565b8151811061072d5761072d611df3565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611dc9565b61078c906008611ddc565b86610798836006611e07565b815181106107a8576107a8611df3565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611dc9565b610821906008611ddc565b61ffff1686828151811061083757610837611df3565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611dc9565b61089a906008611ddc565b63ffffffff16876108ac836002611e07565b815181106108bc576108bc611df3565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611dc9565b61091d906008611ddc565b88610929836006611e07565b8151811061093957610939611df3565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611dc9565b610973906008611ddc565b6001600160401b031689610988836026611e07565b8151811061099857610998611df3565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611dc9565b6109d2906008611ddc565b6001600160401b03168a6109e783602e611e07565b815181106109f7576109f7611df3565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b60605f80833560208501356014610a3a87870160408901611e1a565b610a476060890189611e33565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b610acd6060850185611e33565b9050811015610bf85781610ae46060860186611e33565b83818110610af457610af4611df3565b9050602002810190610b069190611e7f565b610b109080611e9d565b9050610b1f6060870187611e33565b84818110610b2f57610b2f611df3565b9050602002810190610b419190611e7f565b610b4b9080611e9d565b610b586060890189611e33565b86818110610b6857610b68611df3565b9050602002810190610b7a9190611e7f565b610b88906020810190611e9d565b610b9560608b018b611e33565b88818110610ba557610ba5611df3565b9050602002810190610bb79190611e7f565b610bc8906060810190604001611edf565b604051602001610bde9796959493929190611ef8565b60408051601f198184030181529190529150600101610ac0565b5092915050565b610c076117b1565b5f610c106117b1565b5f805b6002811015610c6e57610c27816001611dc9565b610c32906008611ddc565b61ffff1686610c4763ffffffff871684611e07565b81518110610c5757610c57611df3565b016020015160f81c901b9190911790600101610c13565b5061ffff811615610c985760405163407b587360e01b815261ffff821660048201526024016102bb565b610ca3600284611f61565b9250505f805b6004811015610d0857610cbd816003611dc9565b610cc8906008611ddc565b63ffffffff16868563ffffffff1683610ce19190611e07565b81518110610cf157610cf1611df3565b016020015160f81c901b9190911790600101610ca9565b5063ffffffff8116600114610d3057604051635b60892f60e01b815260040160405180910390fd5b610d3b600484611f61565b9250505f805b6020811015610d9857610d5581601f611dc9565b610d60906008611ddc565b86610d7163ffffffff871684611e07565b81518110610d8157610d81611df3565b016020015160f81c901b9190911790600101610d41565b50808252610da7602084611f61565b9250505f805b6004811015610e0c57610dc1816003611dc9565b610dcc906008611ddc565b63ffffffff16868563ffffffff1683610de59190611e07565b81518110610df557610df5611df3565b016020015160f81c901b9190911790600101610dad565b50610e18600484611f61565b92505f8163ffffffff166001600160401b03811115610e3957610e3961180b565b6040519080825280601f01601f191660200182016040528015610e63576020820181803683370190505b5090505f5b8263ffffffff16811015610ed25786610e8763ffffffff871683611e07565b81518110610e9757610e97611df3565b602001015160f81c60f81b828281518110610eb457610eb4611df3565b60200101906001600160f81b03191690815f1a905350600101610e68565b5060208301819052610ee48285611f61565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610f705786610f2563ffffffff871683611e07565b81518110610f3557610f35611df3565b602001015160f81c60f81b828281518110610f5257610f52611df3565b60200101906001600160f81b03191690815f1a905350600101610f0b565b5060408301819052610f83603085611f61565b9350505f805b6008811015610fe957610f9d816007611dc9565b610fa8906008611ddc565b6001600160401b031687610fc263ffffffff881684611e07565b81518110610fd257610fd2611df3565b016020015160f81c901b9190911790600101610f89565b506001600160401b0381166060840152611004600885611f61565b9350505f805f5b600481101561106a5761101f816003611dc9565b61102a906008611ddc565b63ffffffff16888763ffffffff16836110439190611e07565b8151811061105357611053611df3565b016020015160f81c901b919091179060010161100b565b50611076600486611f61565b94505f5b60048110156110d95761108e816003611dc9565b611099906008611ddc565b63ffffffff16888763ffffffff16836110b29190611e07565b815181106110c2576110c2611df3565b016020015160f81c901b929092179160010161107a565b506110e5600486611f61565b94505f8263ffffffff166001600160401b038111156111065761110661180b565b60405190808252806020026020018201604052801561112f578160200160208202803683370190505b5090505f5b8363ffffffff16811015611217576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156111c9578a61117e63ffffffff8b1683611e07565b8151811061118e5761118e611df3565b602001015160f81c60f81b8282815181106111ab576111ab611df3565b60200101906001600160f81b03191690815f1a905350600101611164565b505f60148201519050808484815181106111e5576111e5611df3565b6001600160a01b039092166020928302919091019091015261120860148a611f61565b98505050806001019050611134565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156112995761124e816003611dc9565b611259906008611ddc565b63ffffffff16898863ffffffff16836112729190611e07565b8151811061128257611282611df3565b016020015160f81c901b919091179060010161123a565b506112a5600487611f61565b95505f5b6004811015611308576112bd816003611dc9565b6112c8906008611ddc565b63ffffffff16898863ffffffff16836112e19190611e07565b815181106112f1576112f1611df3565b016020015160f81c901b92909217916001016112a9565b50611314600487611f61565b95505f8263ffffffff166001600160401b038111156113355761133561180b565b60405190808252806020026020018201604052801561135e578160200160208202803683370190505b5090505f5b8363ffffffff16811015611446576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156113f8578b6113ad63ffffffff8c1683611e07565b815181106113bd576113bd611df3565b602001015160f81c60f81b8282815181106113da576113da611df3565b60200101906001600160f81b03191690815f1a905350600101611393565b505f601482015190508084848151811061141457611414611df3565b6001600160a01b039092166020928302919091019091015261143760148b611f61565b99505050806001019050611363565b506040805180820190915263ffffffff9092168252602082015260a08501525f6114708284611f61565b61147b906014611f7e565b61148685607a611f61565b6114909190611f61565b90508063ffffffff168851146114cc57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561152f576114e3816007611dc9565b6114ee906008611ddc565b6001600160401b03168a61150863ffffffff8b1684611e07565b8151811061151857611518611df3565b016020015160f81c901b91909117906001016114cf565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e01611576565b5f60608260400151516030146115ed5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861162e988a986001989297929690959094909390929101611fa6565b60405160208183030381529060405290505f5b846080015160200151518110156116a05781856080015160200151828151811061166d5761166d611df3565b6020026020010151604051602001611686929190612060565b60408051601f198184030181529190529150600101611641565b5060a08401518051602091820151516040516116c0938593929101612096565b60405160208183030381529060405290505f5b8460a00151602001515181101561173257818560a001516020015182815181106116ff576116ff611df3565b6020026020010151604051602001611718929190612060565b60408051601f1981840301815291905291506001016116d3565b5060c08401516040516117499183916020016120d1565b604051602081830303815290604052905060028160405161176a9190612102565b602060405180830381855afa158015611785573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906117a89190612113565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156118415761184161180b565b60405290565b60405160e081016001600160401b03811182821017156118415761184161180b565b604051601f8201601f191681016001600160401b03811182821017156118915761189161180b565b604052919050565b5f82601f8301126118a8575f80fd5b81356001600160401b038111156118c1576118c161180b565b6118d4601f8201601f1916602001611869565b8181528460208386010111156118e8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611914575f80fd5b81356001600160401b03811115611929575f80fd5b61193584828501611899565b949350505050565b5f6020828403121561194d575f80fd5b5035919050565b5f5b8381101561196e578181015183820152602001611956565b50505f910152565b5f815180845261198d816020860160208601611954565b601f01601f19169290920160200192915050565b602081525f6119b36020830184611976565b9392505050565b80356001600160401b03811681146119d0575f80fd5b919050565b5f805f606084860312156119e7575f80fd5b833592506119f7602085016119ba565b9150611a05604085016119ba565b90509250925092565b5f60208284031215611a1e575f80fd5b81356001600160401b03811115611a33575f80fd5b8201608081850312156119b3575f80fd5b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611a9f5784516001600160a01b03168252938301936001929092019190830190611a76565b509695505050505050565b60208152815160208201525f602083015160e06040840152611ad0610100840182611976565b90506040840151601f1980858403016060860152611aee8383611976565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611b1e8383611a44565b925060a08601519150808584030160c086015250611b3c8282611a44565b91505060c0840151611b5960e08501826001600160401b03169052565b509392505050565b5f8060408385031215611b72575f80fd5b8235915060208301358015158114611b88575f80fd5b809150509250929050565b5f8060408385031215611ba4575f80fd5b82359150611bb4602084016119ba565b90509250929050565b80356001600160a01b03811681146119d0575f80fd5b5f60408284031215611be3575f80fd5b611beb61181f565b9050813563ffffffff81168114611c00575f80fd5b81526020828101356001600160401b0380821115611c1c575f80fd5b818501915085601f830112611c2f575f80fd5b813581811115611c4157611c4161180b565b8060051b9150611c52848301611869565b8181529183018401918481019088841115611c6b575f80fd5b938501935b83851015611c9057611c8185611bbd565b82529385019390850190611c70565b808688015250505050505092915050565b5f60208284031215611cb1575f80fd5b81356001600160401b0380821115611cc7575f80fd5b9083019060e08286031215611cda575f80fd5b611ce2611847565b82358152602083013582811115611cf7575f80fd5b611d0387828601611899565b602083015250604083013582811115611d1a575f80fd5b611d2687828601611899565b604083015250611d38606084016119ba565b6060820152608083013582811115611d4e575f80fd5b611d5a87828601611bd3565b60808301525060a083013582811115611d71575f80fd5b611d7d87828601611bd3565b60a083015250611d8f60c084016119ba565b60c082015295945050505050565b828152604060208201525f6119356040830184611976565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561158857611588611db5565b808202811582820484141761158857611588611db5565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561158857611588611db5565b5f60208284031215611e2a575f80fd5b6119b382611bbd565b5f808335601e19843603018112611e48575f80fd5b8301803591506001600160401b03821115611e61575f80fd5b6020019150600581901b3603821315611e78575f80fd5b9250929050565b5f8235605e19833603018112611e93575f80fd5b9190910192915050565b5f808335601e19843603018112611eb2575f80fd5b8301803591506001600160401b03821115611ecb575f80fd5b602001915036819003821315611e78575f80fd5b5f60208284031215611eef575f80fd5b6119b3826119ba565b5f8851611f09818460208d01611954565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b63ffffffff818116838216019080821115610bf857610bf8611db5565b63ffffffff818116838216028082169190828114611f9e57611f9e611db5565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611fec81602a850160208b01611954565b86519083019061200381602a840160208b01611954565b60c087901b6001600160c01b031916602a9290910191820152612035603282018660e01b6001600160e01b0319169052565b61204e603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351612071818460208801611954565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120a7818460208901611954565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120e2818460208801611954565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f8251611e93818460208701611954565b5f60208284031215612123575f80fd5b505191905056fea2646970667358221220427b16ca5e2abe4960f5b859780a2eb475e9509f2f5b05fb0ffcb2156069896d64736f6c63430008190033",
+ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
+ Bin: "0x612160610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c3366004611904565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f0366004611904565b61044a565b604080519283526001600160401b039091166020830152016100d9565b610125610120366004611904565b61063b565b6040519081526020016100d9565b610146610141366004611904565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a561017936600461193d565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d991906119a1565b6101a56101c03660046119d5565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d366004611a0e565b610a1e565b610235610230366004611904565b610bff565b6040516100d99190611aaa565b6101a5610250366004611b61565b61154a565b6101a5610263366004611b93565b61158e565b61027b610276366004611ca1565b6115c4565b6040516100d9929190611d9d565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611dc9565b6102e6906008611ddc565b61ffff168582815181106102fc576102fc611df3565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611dc9565b61035f906008611ddc565b63ffffffff1686610371836002611e07565b8151811061038157610381611df3565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611dc9565b6103e2906008611ddc565b876103ee836006611e07565b815181106103fe576103fe611df3565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611df3565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611dc9565b6104a2906008611ddc565b61ffff168582815181106104b8576104b8611df3565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611dc9565b61051b906008611ddc565b63ffffffff168661052d836002611e07565b8151811061053d5761053d611df3565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611dc9565b61059c906008611ddc565b876105a8836006611e07565b815181106105b8576105b8611df3565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611dc9565b6105f2906008611ddc565b6001600160401b031688610607836026611e07565b8151811061061757610617611df3565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611dc9565b610692906008611ddc565b61ffff168482815181106106a8576106a8611df3565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611dc9565b61070b906008611ddc565b63ffffffff168561071d836002611e07565b8151811061072d5761072d611df3565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611dc9565b61078c906008611ddc565b86610798836006611e07565b815181106107a8576107a8611df3565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611dc9565b610821906008611ddc565b61ffff1686828151811061083757610837611df3565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611dc9565b61089a906008611ddc565b63ffffffff16876108ac836002611e07565b815181106108bc576108bc611df3565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611dc9565b61091d906008611ddc565b88610929836006611e07565b8151811061093957610939611df3565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611dc9565b610973906008611ddc565b6001600160401b031689610988836026611e07565b8151811061099857610998611df3565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611dc9565b6109d2906008611ddc565b6001600160401b03168a6109e783602e611e07565b815181106109f7576109f7611df3565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b60605f80833560208501356014610a3a87870160408901611e1a565b610a476060890189611e33565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b610acd6060850185611e33565b9050811015610bf85781610ae46060860186611e33565b83818110610af457610af4611df3565b9050602002810190610b069190611e7f565b610b109080611e9d565b9050610b1f6060870187611e33565b84818110610b2f57610b2f611df3565b9050602002810190610b419190611e7f565b610b4b9080611e9d565b610b586060890189611e33565b86818110610b6857610b68611df3565b9050602002810190610b7a9190611e7f565b610b88906020810190611e9d565b610b9560608b018b611e33565b88818110610ba557610ba5611df3565b9050602002810190610bb79190611e7f565b610bc8906060810190604001611edf565b604051602001610bde9796959493929190611ef8565b60408051601f198184030181529190529150600101610ac0565b5092915050565b610c076117b1565b5f610c106117b1565b5f805b6002811015610c6e57610c27816001611dc9565b610c32906008611ddc565b61ffff1686610c4763ffffffff871684611e07565b81518110610c5757610c57611df3565b016020015160f81c901b9190911790600101610c13565b5061ffff811615610c985760405163407b587360e01b815261ffff821660048201526024016102bb565b610ca3600284611f61565b9250505f805b6004811015610d0857610cbd816003611dc9565b610cc8906008611ddc565b63ffffffff16868563ffffffff1683610ce19190611e07565b81518110610cf157610cf1611df3565b016020015160f81c901b9190911790600101610ca9565b5063ffffffff8116600114610d3057604051635b60892f60e01b815260040160405180910390fd5b610d3b600484611f61565b9250505f805b6020811015610d9857610d5581601f611dc9565b610d60906008611ddc565b86610d7163ffffffff871684611e07565b81518110610d8157610d81611df3565b016020015160f81c901b9190911790600101610d41565b50808252610da7602084611f61565b9250505f805b6004811015610e0c57610dc1816003611dc9565b610dcc906008611ddc565b63ffffffff16868563ffffffff1683610de59190611e07565b81518110610df557610df5611df3565b016020015160f81c901b9190911790600101610dad565b50610e18600484611f61565b92505f8163ffffffff166001600160401b03811115610e3957610e3961180b565b6040519080825280601f01601f191660200182016040528015610e63576020820181803683370190505b5090505f5b8263ffffffff16811015610ed25786610e8763ffffffff871683611e07565b81518110610e9757610e97611df3565b602001015160f81c60f81b828281518110610eb457610eb4611df3565b60200101906001600160f81b03191690815f1a905350600101610e68565b5060208301819052610ee48285611f61565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610f705786610f2563ffffffff871683611e07565b81518110610f3557610f35611df3565b602001015160f81c60f81b828281518110610f5257610f52611df3565b60200101906001600160f81b03191690815f1a905350600101610f0b565b5060408301819052610f83603085611f61565b9350505f805b6008811015610fe957610f9d816007611dc9565b610fa8906008611ddc565b6001600160401b031687610fc263ffffffff881684611e07565b81518110610fd257610fd2611df3565b016020015160f81c901b9190911790600101610f89565b506001600160401b0381166060840152611004600885611f61565b9350505f805f5b600481101561106a5761101f816003611dc9565b61102a906008611ddc565b63ffffffff16888763ffffffff16836110439190611e07565b8151811061105357611053611df3565b016020015160f81c901b919091179060010161100b565b50611076600486611f61565b94505f5b60048110156110d95761108e816003611dc9565b611099906008611ddc565b63ffffffff16888763ffffffff16836110b29190611e07565b815181106110c2576110c2611df3565b016020015160f81c901b929092179160010161107a565b506110e5600486611f61565b94505f8263ffffffff166001600160401b038111156111065761110661180b565b60405190808252806020026020018201604052801561112f578160200160208202803683370190505b5090505f5b8363ffffffff16811015611217576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156111c9578a61117e63ffffffff8b1683611e07565b8151811061118e5761118e611df3565b602001015160f81c60f81b8282815181106111ab576111ab611df3565b60200101906001600160f81b03191690815f1a905350600101611164565b505f60148201519050808484815181106111e5576111e5611df3565b6001600160a01b039092166020928302919091019091015261120860148a611f61565b98505050806001019050611134565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156112995761124e816003611dc9565b611259906008611ddc565b63ffffffff16898863ffffffff16836112729190611e07565b8151811061128257611282611df3565b016020015160f81c901b919091179060010161123a565b506112a5600487611f61565b95505f5b6004811015611308576112bd816003611dc9565b6112c8906008611ddc565b63ffffffff16898863ffffffff16836112e19190611e07565b815181106112f1576112f1611df3565b016020015160f81c901b92909217916001016112a9565b50611314600487611f61565b95505f8263ffffffff166001600160401b038111156113355761133561180b565b60405190808252806020026020018201604052801561135e578160200160208202803683370190505b5090505f5b8363ffffffff16811015611446576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156113f8578b6113ad63ffffffff8c1683611e07565b815181106113bd576113bd611df3565b602001015160f81c60f81b8282815181106113da576113da611df3565b60200101906001600160f81b03191690815f1a905350600101611393565b505f601482015190508084848151811061141457611414611df3565b6001600160a01b039092166020928302919091019091015261143760148b611f61565b99505050806001019050611363565b506040805180820190915263ffffffff9092168252602082015260a08501525f6114708284611f61565b61147b906014611f7e565b61148685607a611f61565b6114909190611f61565b90508063ffffffff168851146114cc57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561152f576114e3816007611dc9565b6114ee906008611ddc565b6001600160401b03168a61150863ffffffff8b1684611e07565b8151811061151857611518611df3565b016020015160f81c901b91909117906001016114cf565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e01611576565b5f60608260400151516030146115ed5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861162e988a986001989297929690959094909390929101611fa6565b60405160208183030381529060405290505f5b846080015160200151518110156116a05781856080015160200151828151811061166d5761166d611df3565b6020026020010151604051602001611686929190612060565b60408051601f198184030181529190529150600101611641565b5060a08401518051602091820151516040516116c0938593929101612096565b60405160208183030381529060405290505f5b8460a00151602001515181101561173257818560a001516020015182815181106116ff576116ff611df3565b6020026020010151604051602001611718929190612060565b60408051601f1981840301815291905291506001016116d3565b5060c08401516040516117499183916020016120d1565b604051602081830303815290604052905060028160405161176a9190612102565b602060405180830381855afa158015611785573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906117a89190612113565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156118415761184161180b565b60405290565b60405160e081016001600160401b03811182821017156118415761184161180b565b604051601f8201601f191681016001600160401b03811182821017156118915761189161180b565b604052919050565b5f82601f8301126118a8575f80fd5b81356001600160401b038111156118c1576118c161180b565b6118d4601f8201601f1916602001611869565b8181528460208386010111156118e8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611914575f80fd5b81356001600160401b03811115611929575f80fd5b61193584828501611899565b949350505050565b5f6020828403121561194d575f80fd5b5035919050565b5f5b8381101561196e578181015183820152602001611956565b50505f910152565b5f815180845261198d816020860160208601611954565b601f01601f19169290920160200192915050565b602081525f6119b36020830184611976565b9392505050565b80356001600160401b03811681146119d0575f80fd5b919050565b5f805f606084860312156119e7575f80fd5b833592506119f7602085016119ba565b9150611a05604085016119ba565b90509250925092565b5f60208284031215611a1e575f80fd5b81356001600160401b03811115611a33575f80fd5b8201608081850312156119b3575f80fd5b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611a9f5784516001600160a01b03168252938301936001929092019190830190611a76565b509695505050505050565b60208152815160208201525f602083015160e06040840152611ad0610100840182611976565b90506040840151601f1980858403016060860152611aee8383611976565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611b1e8383611a44565b925060a08601519150808584030160c086015250611b3c8282611a44565b91505060c0840151611b5960e08501826001600160401b03169052565b509392505050565b5f8060408385031215611b72575f80fd5b8235915060208301358015158114611b88575f80fd5b809150509250929050565b5f8060408385031215611ba4575f80fd5b82359150611bb4602084016119ba565b90509250929050565b80356001600160a01b03811681146119d0575f80fd5b5f60408284031215611be3575f80fd5b611beb61181f565b9050813563ffffffff81168114611c00575f80fd5b81526020828101356001600160401b0380821115611c1c575f80fd5b818501915085601f830112611c2f575f80fd5b813581811115611c4157611c4161180b565b8060051b9150611c52848301611869565b8181529183018401918481019088841115611c6b575f80fd5b938501935b83851015611c9057611c8185611bbd565b82529385019390850190611c70565b808688015250505050505092915050565b5f60208284031215611cb1575f80fd5b81356001600160401b0380821115611cc7575f80fd5b9083019060e08286031215611cda575f80fd5b611ce2611847565b82358152602083013582811115611cf7575f80fd5b611d0387828601611899565b602083015250604083013582811115611d1a575f80fd5b611d2687828601611899565b604083015250611d38606084016119ba565b6060820152608083013582811115611d4e575f80fd5b611d5a87828601611bd3565b60808301525060a083013582811115611d71575f80fd5b611d7d87828601611bd3565b60a083015250611d8f60c084016119ba565b60c082015295945050505050565b828152604060208201525f6119356040830184611976565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561158857611588611db5565b808202811582820484141761158857611588611db5565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561158857611588611db5565b5f60208284031215611e2a575f80fd5b6119b382611bbd565b5f808335601e19843603018112611e48575f80fd5b8301803591506001600160401b03821115611e61575f80fd5b6020019150600581901b3603821315611e78575f80fd5b9250929050565b5f8235605e19833603018112611e93575f80fd5b9190910192915050565b5f808335601e19843603018112611eb2575f80fd5b8301803591506001600160401b03821115611ecb575f80fd5b602001915036819003821315611e78575f80fd5b5f60208284031215611eef575f80fd5b6119b3826119ba565b5f8851611f09818460208d01611954565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b63ffffffff818116838216019080821115610bf857610bf8611db5565b63ffffffff818116838216028082169190828114611f9e57611f9e611db5565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611fec81602a850160208b01611954565b86519083019061200381602a840160208b01611954565b60c087901b6001600160c01b031916602a9290910191820152612035603282018660e01b6001600160e01b0319169052565b61204e603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351612071818460208801611954565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120a7818460208901611954565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120e2818460208801611954565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f8251611e93818460208701611954565b5f60208284031215612123575f80fd5b505191905056fea26469706673582212202493946bf4312b64f92a2fbc326ea0236ce3c28da056710de34877f2f112d0c264736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
index 6052d8083..907805f51 100644
--- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
+++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
@@ -31,7 +31,7 @@ var (
// ConversionData is an auto generated low-level Go binding around an user-defined struct.
type ConversionData struct {
- SubnetID [32]byte
+ L1ID [32]byte
ValidatorManagerBlockchainID [32]byte
ValidatorManagerAddress common.Address
InitialValidators []InitialValidator
@@ -63,14 +63,14 @@ type Validator struct {
// ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct.
type ValidatorManagerSettings struct {
- SubnetID [32]byte
+ L1ID [32]byte
ChurnPeriodSeconds uint64
MaximumChurnPercentage uint8
}
// ValidatorMessagesValidationPeriod is an auto generated low-level Go binding around an user-defined struct.
type ValidatorMessagesValidationPeriod struct {
- SubnetID [32]byte
+ L1ID [32]byte
NodeID []byte
BlsPublicKey []byte
RegistrationExpiry uint64
@@ -90,8 +90,8 @@ type ValidatorRegistrationInput struct {
// PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract.
var PoAValidatorManagerMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b5060405161374f38038061374f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136028061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b61014961014436600461273a565b610312565b005b610149610159366004612769565b6105a2565b61014961016c3660046127b7565b610b27565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a136600461273a565b610b35565b6040516001600160401b03909116815260200161018a565b610149610b49565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61014961024736600461273a565b610b5c565b6101cd61025a3660046127e6565b610b71565b61014961026d3660046127b7565b610b8d565b6102216005600160991b0181565b6101cd5f8051602061358d83398151915281565b6101496102a236600461273a565b610d82565b6101e3601481565b6101496102bd36600461283f565b610ebf565b6102d56102d036600461273a565b610fcd565b60405161018a91906128fc565b6101a66202a30081565b6101496102fa36600461297c565b61111c565b6101cd61030d36600461299e565b611159565b5f8181525f805160206135ad8339815191526020526040808220815160e0810190925280545f8051602061358d83398151915293929190829060ff16600581111561035f5761035f61287b565b60058111156103705761037061287b565b815260200160018201805461038490612a09565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612a09565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156104665761046661287b565b146104a2575f8381526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610519573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105409190810190612b52565b6040518263ffffffff1660e01b815260040161055c9190612b83565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190612b95565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061358d8339815191529060ff16156105f457604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610637573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065b9190612b95565b836020013514610684576040516372b0a7e760e11b815260208401356004820152602401610499565b30610695606085016040860161297c565b6001600160a01b0316146106d8576106b3606084016040850161297c565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f6106e66060850185612bac565b905090505f805b828163ffffffff16101561094d575f6107096060880188612bac565b8363ffffffff1681811061071f5761071f612bf1565b90506020028101906107319190612c05565b61073a90612c70565b80516040519192505f91600888019161075291612ce9565b9081526020016040518091039020541461078257805160405163a41f772f60e01b81526104999190600401612b83565b5f6002885f0135846040516020016107b192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107cb91612ce9565b602060405180830381855afa1580156107e6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108099190612b95565b90508086600801835f01516040516108219190612ce9565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff1916600217815582516001909101906108619082612d45565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff191690556108e09085612e18565b82516040519195506108f191612ce9565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a350508061094690612e2b565b90506106ed565b5060048301819055600183015460649061097190600160401b900460ff1683612e4d565b101561099357604051635943317f60e01b815260048101829052602401610499565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109b7876111b4565b604001516040518263ffffffff1660e01b81526004016109d79190612b83565b602060405180830381865af41580156109f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a169190612b95565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a509190612f87565b5f60405180830381865af4158015610a6a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a919190810190612b52565b90505f600282604051610aa49190612ce9565b602060405180830381855afa158015610abf573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ae29190612b95565b9050828114610b0e5760405163baaea89d60e01b81526004810182905260248101849052604401610499565b5050506009909201805460ff1916600117905550505050565b610b30816112ca565b505050565b5f610b3f82610fcd565b6080015192915050565b610b5161167d565b610b5a5f6116d8565b565b610b6461167d565b610b6d81611748565b5050565b5f610b7a61167d565b610b848383611a2c565b90505b92915050565b5f8051602061358d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bc0866111b4565b604001516040518263ffffffff1660e01b8152600401610be09190612b83565b6040805180830381865af4158015610bfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1e919061302a565b9150915080610c4457604051632d07135360e01b81528115156004820152602401610499565b5f82815260068401602052604090208054610c5e90612a09565b90505f03610c825760405163089938b360e11b815260048101839052602401610499565b60015f83815260078501602052604090205460ff166005811115610ca857610ca861287b565b14610cdb575f8281526007840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b5f8281526006840160205260408120610cf3916126ae565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061358d8339815191529190610dc990612a09565b90505f03610ded5760405163089938b360e11b815260048101839052602401610499565b60015f83815260078301602052604090205460ff166005811115610e1357610e1361287b565b14610e46575f8281526007820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91610e7f919060040161304b565b6020604051808303815f875af1158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b309190612b95565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f035750825b90505f826001600160401b03166001148015610f1e5750303b155b905081158015610f2c575080155b15610f4a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f7457845460ff60401b1916600160401b1785555b610f7e8787611f51565b8315610fc457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610fd56126e5565b5f8281525f805160206135ad833981519152602052604090819020815160e0810190925280545f8051602061358d833981519152929190829060ff1660058111156110225761102261287b565b60058111156110335761103361287b565b815260200160018201805461104790612a09565b80601f016020809104026020016040519081016040528092919081815260200182805461107390612a09565b80156110be5780601f10611095576101008083540402835291602001916110be565b820191905f5260205f20905b8154815290600101906020018083116110a157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61112461167d565b6001600160a01b03811661114d57604051631e4fbdf760e01b81525f6004820152602401610499565b611156816116d8565b50565b6040515f905f8051602061358d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061119c90869086906130d5565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611218573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261123f91908101906130e4565b915091508061126157604051636b2f19e960e01b815260040160405180910390fd5b815115611287578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156112c3576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f6112d36126e5565b5f8051602061358d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611306886111b4565b604001516040518263ffffffff1660e01b81526004016113269190612b83565b6040805180830381865af4158015611340573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611364919061302a565b91509150801561138b57604051632d07135360e01b81528115156004820152602401610499565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156113bc576113bc61287b565b60058111156113cd576113cd61287b565b81526020016001820180546113e190612a09565b80601f016020809104026020016040519081016040528092919081815260200182805461140d90612a09565b80156114585780601f1061142f57610100808354040283529160200191611458565b820191905f5260205f20905b81548152906001019060200180831161143b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114c3576114c361287b565b141580156114e457506001815160058111156114e1576114e161287b565b14155b1561150557805160405163170cc93360e21b81526104999190600401612a41565b60038151600581111561151a5761151a61287b565b03611528576004815261152d565b600581525b8360080181602001516040516115439190612ce9565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156115875761158761287b565b0217905550602082015160018201906115a09082612d45565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156116465761164661287b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116af7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b5a5760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6117506126e5565b5f8281525f805160206135ad8339815191526020526040808220815160e0810190925280545f8051602061358d83398151915293929190829060ff16600581111561179d5761179d61287b565b60058111156117ae576117ae61287b565b81526020016001820180546117c290612a09565b80601f01602080910402602001604051908101604052809291908181526020018280546117ee90612a09565b80156118395780601f1061181057610100808354040283529160200191611839565b820191905f5260205f20905b81548152906001019060200180831161181c57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118a7576118a761287b565b146118da575f8481526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561191e5761191e61287b565b0217905550602082015160018201906119379082612d45565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6119d58582611f6b565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16611a7057604051637fab81e560e01b815260040160405180910390fd5b5f8051602061358d83398151915242611a8f6060860160408701613171565b6001600160401b0316111580611ac95750611aad6202a30042612e18565b611abd6060860160408701613171565b6001600160401b031610155b15611b0357611ade6060850160408601613171565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b611b18611b13606086018661318a565b612142565b611b28611b13608086018661318a565b6030611b37602086018661319e565b905014611b6957611b4b602085018561319e565b6040516326475b2f60e11b8152610499925060040190815260200190565b611b73848061319e565b90505f03611ba057611b85848061319e565b604051633e08a12560e11b81526004016104999291906131e0565b5f60088201611baf868061319e565b604051611bbd9291906130d5565b90815260200160405180910390205414611bf657611bdb848061319e565b60405163a41f772f60e01b81526004016104999291906131e0565b611c00835f6122ab565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611c3d8a8061319e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611c85908b018b61319e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611cce60608b0160408c01613171565b6001600160401b03168152602001611ce960608b018b61318a565b611cf2906131f3565b8152602001611d0460808b018b61318a565b611d0d906131f3565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611d3b9190613320565b5f60405180830381865af4158015611d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d7c91908101906133d7565b5f82815260068601602052604090209193509150611d9a8282612d45565b508160088401611daa888061319e565b604051611db89291906130d5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611df4908590600401612b83565b6020604051808303815f875af1158015611e10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e349190612b95565b5f8481526007860160205260409020805460ff191660011790559050611e5a878061319e565b5f858152600787016020526040902060010191611e7891908361341a565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611ed7888061319e565b604051611ee59291906130d5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190611f239190613171565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611f596124ce565b611f6282612517565b610b6d81612530565b5f8281525f805160206135ad833981519152602052604081206002015481905f8051602061358d83398151915290600160801b90046001600160401b0316611fb385826122ab565b5f611fbd87612541565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612066573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261208d9190810190612b52565b6040518263ffffffff1660e01b81526004016120a99190612b83565b6020604051808303815f875af11580156120c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e99190612b95565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b61214f60208201826127b7565b63ffffffff1615801561216f575061216a6020820182612bac565b151590505b156121b65761218160208201826127b7565b61218e6020830183612bac565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b6121c36020820182612bac565b90506121d260208301836127b7565b63ffffffff1611156121eb5761218160208201826127b7565b60015b6121fb6020830183612bac565b9050811015610b6d576122116020830183612bac565b61221c6001846134d3565b81811061222b5761222b612bf1565b9050602002016020810190612240919061297c565b6001600160a01b03166122566020840184612bac565b8381811061226657612266612bf1565b905060200201602081019061227b919061297c565b6001600160a01b031610156122a357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016121ee565b5f8051602061358d8339815191525f6001600160401b0380841690851611156122df576122d883856134e6565b90506122ec565b6122e984846134e6565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061234e57506001840154815161234a916001600160401b031690612e18565b8210155b15612374576001600160401b038316606082015281815260408101516020820152612393565b82816060018181516123869190613506565b6001600160401b03169052505b60608101516123a3906064613526565b602082015160018601546001600160401b0392909216916123ce9190600160401b900460ff16612e4d565b10156123fe57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b856001600160401b0316816040018181516124199190612e18565b9052506040810180516001600160401b03871691906124399083906134d3565b9052506001840154604082015160649161245e91600160401b90910460ff1690612e4d565b1015612485578060400151604051635943317f60e01b815260040161049991815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b5a57604051631afcd79f60e31b815260040160405180910390fd5b61251f6124ce565b6125276125b6565b611156816125be565b6125386124ce565b611156816126a6565b5f8181525f805160206135ad8339815191526020526040812060020180545f8051602061358d833981519152919060089061258b90600160401b90046001600160401b0316613551565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b5a6124ce565b6125c66124ce565b80355f8051602061358d83398151915290815560146125eb606084016040850161356c565b60ff16118061260a5750612605606083016040840161356c565b60ff16155b1561263e5761261f606083016040840161356c565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b61264e606083016040840161356c565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561267f6040830160208401613171565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b6111246124ce565b5080546126ba90612a09565b5f825580601f106126c9575050565b601f0160209004905f5260205f20908101906111569190612722565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612736575f8155600101612723565b5090565b5f6020828403121561274a575f80fd5b5035919050565b803563ffffffff81168114612764575f80fd5b919050565b5f806040838503121561277a575f80fd5b82356001600160401b0381111561278f575f80fd5b8301608081860312156127a0575f80fd5b91506127ae60208401612751565b90509250929050565b5f602082840312156127c7575f80fd5b610b8482612751565b80356001600160401b0381168114612764575f80fd5b5f80604083850312156127f7575f80fd5b82356001600160401b0381111561280c575f80fd5b830160a0818603121561281d575f80fd5b91506127ae602084016127d0565b6001600160a01b0381168114611156575f80fd5b5f808284036080811215612851575f80fd5b606081121561285e575f80fd5b5082915060608301356128708161282b565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b600681106128ab57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156128c95781810151838201526020016128b1565b50505f910152565b5f81518084526128e88160208601602086016128af565b601f01601f19169290920160200192915050565b6020815261290e60208201835161288f565b5f602083015160e060408401526129296101008401826128d1565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f6020828403121561298c575f80fd5b81356129978161282b565b9392505050565b5f80602083850312156129af575f80fd5b82356001600160401b03808211156129c5575f80fd5b818501915085601f8301126129d8575f80fd5b8135818111156129e6575f80fd5b8660208285010111156129f7575f80fd5b60209290920196919550909350505050565b600181811c90821680612a1d57607f821691505b602082108103612a3b57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610b87828461288f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612a8557612a85612a4f565b60405290565b604080519081016001600160401b0381118282101715612a8557612a85612a4f565b604051601f8201601f191681016001600160401b0381118282101715612ad557612ad5612a4f565b604052919050565b5f6001600160401b03821115612af557612af5612a4f565b50601f01601f191660200190565b5f82601f830112612b12575f80fd5b8151612b25612b2082612add565b612aad565b818152846020838601011115612b39575f80fd5b612b4a8260208301602087016128af565b949350505050565b5f60208284031215612b62575f80fd5b81516001600160401b03811115612b77575f80fd5b612b4a84828501612b03565b602081525f610b8460208301846128d1565b5f60208284031215612ba5575f80fd5b5051919050565b5f808335601e19843603018112612bc1575f80fd5b8301803591506001600160401b03821115612bda575f80fd5b6020019150600581901b360382131561213b575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612c19575f80fd5b9190910192915050565b5f82601f830112612c32575f80fd5b8135612c40612b2082612add565b818152846020838601011115612c54575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612c80575f80fd5b612c88612a63565b82356001600160401b0380821115612c9e575f80fd5b612caa36838701612c23565b83526020850135915080821115612cbf575f80fd5b50612ccc36828601612c23565b602083015250612cde604084016127d0565b604082015292915050565b5f8251612c198184602087016128af565b601f821115610b3057805f5260205f20601f840160051c81016020851015612d1f5750805b601f840160051c820191505b81811015612d3e575f8155600101612d2b565b5050505050565b81516001600160401b03811115612d5e57612d5e612a4f565b612d7281612d6c8454612a09565b84612cfa565b602080601f831160018114612da5575f8415612d8e5750858301515b5f19600386901b1c1916600185901b178555612dfc565b5f85815260208120601f198616915b82811015612dd357888601518255948401946001909101908401612db4565b5085821015612df057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b8757610b87612e04565b5f63ffffffff808316818103612e4357612e43612e04565b6001019392505050565b8082028115828204841417610b8757610b87612e04565b5f808335601e19843603018112612e79575f80fd5b83016020810192503590506001600160401b03811115612e97575f80fd5b80360382131561213b575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015612f7a57848303601f19018952813536889003605e19018112612f09575f80fd5b87016060612f178280612e64565b828752612f278388018284612ea5565b92505050612f3786830183612e64565b86830388880152612f49838284612ea5565b9250505060406001600160401b03612f628285016127d0565b16950194909452509783019790830190600101612ee4565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135612fab8161282b565b6001600160a01b031660608381019190915283013536849003601e19018112612fd2575f80fd5b83016020810190356001600160401b03811115612fed575f80fd5b8060051b3603821315612ffe575f80fd5b60808085015261301260a085018284612ecd565b95945050505050565b80518015158114612764575f80fd5b5f806040838503121561303b575f80fd5b825191506127ae6020840161301b565b5f60208083525f845461305d81612a09565b806020870152604060018084165f811461307e576001811461309a576130c7565b60ff19851660408a0152604084151560051b8a010195506130c7565b895f5260205f205f5b858110156130be5781548b82018601529083019088016130a3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156130f5575f80fd5b82516001600160401b038082111561310b575f80fd5b908401906060828703121561311e575f80fd5b613126612a63565b8251815260208301516131388161282b565b602082015260408301518281111561314e575f80fd5b61315a88828601612b03565b60408301525093506127ae9150506020840161301b565b5f60208284031215613181575f80fd5b610b84826127d0565b5f8235603e19833603018112612c19575f80fd5b5f808335601e198436030181126131b3575f80fd5b8301803591506001600160401b038211156131cc575f80fd5b60200191503681900382131561213b575f80fd5b602081525f612b4a602083018486612ea5565b5f60408236031215613203575f80fd5b61320b612a8b565b61321483612751565b81526020808401356001600160401b0380821115613230575f80fd5b9085019036601f830112613242575f80fd5b81358181111561325457613254612a4f565b8060051b9150613265848301612aad565b818152918301840191848101903684111561327e575f80fd5b938501935b838510156132a857843592506132988361282b565b8282529385019390850190613283565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156133155784516001600160a01b031682529383019360019290920191908301906132ec565b509695505050505050565b60208152815160208201525f602083015160e060408401526133466101008401826128d1565b90506040840151601f198085840301606086015261336483836128d1565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261339483836132ba565b925060a08601519150808584030160c0860152506133b282826132ba565b91505060c08401516133cf60e08501826001600160401b03169052565b509392505050565b5f80604083850312156133e8575f80fd5b8251915060208301516001600160401b03811115613404575f80fd5b61341085828601612b03565b9150509250929050565b6001600160401b0383111561343157613431612a4f565b6134458361343f8354612a09565b83612cfa565b5f601f841160018114613476575f851561345f5750838201355b5f19600387901b1c1916600186901b178355612d3e565b5f83815260208120601f198716915b828110156134a55786850135825560209485019460019092019101613485565b50868210156134c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610b8757610b87612e04565b6001600160401b038281168282160390808211156112c3576112c3612e04565b6001600160401b038181168382160190808211156112c3576112c3612e04565b6001600160401b0381811683821602808216919082811461354957613549612e04565b505092915050565b5f6001600160401b03808316818103612e4357612e43612e04565b5f6020828403121561357c575f80fd5b813560ff81168114612997575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a264697066735822122016c8661e1c8183176f3d2b7bf54425db570d2c8426600785701d0b5d14ed8c6b64736f6c63430008190033",
+ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
+ Bin: "0x608060405234801561000f575f80fd5b5060405161374f38038061374f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136028061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b61014961014436600461273a565b610312565b005b610149610159366004612769565b6105a2565b61014961016c3660046127b7565b610b27565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a136600461273a565b610b35565b6040516001600160401b03909116815260200161018a565b610149610b49565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61014961024736600461273a565b610b5c565b6101cd61025a3660046127e6565b610b71565b61014961026d3660046127b7565b610b8d565b6102216005600160991b0181565b6101cd5f8051602061358d83398151915281565b6101496102a236600461273a565b610d82565b6101e3601481565b6101496102bd36600461283f565b610ebf565b6102d56102d036600461273a565b610fcd565b60405161018a91906128fc565b6101a66202a30081565b6101496102fa36600461297c565b61111c565b6101cd61030d36600461299e565b611159565b5f8181525f805160206135ad8339815191526020526040808220815160e0810190925280545f8051602061358d83398151915293929190829060ff16600581111561035f5761035f61287b565b60058111156103705761037061287b565b815260200160018201805461038490612a09565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612a09565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156104665761046661287b565b146104a2575f8381526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610519573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105409190810190612b52565b6040518263ffffffff1660e01b815260040161055c9190612b83565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190612b95565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061358d8339815191529060ff16156105f457604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610637573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065b9190612b95565b836020013514610684576040516372b0a7e760e11b815260208401356004820152602401610499565b30610695606085016040860161297c565b6001600160a01b0316146106d8576106b3606084016040850161297c565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f6106e66060850185612bac565b905090505f805b828163ffffffff16101561094d575f6107096060880188612bac565b8363ffffffff1681811061071f5761071f612bf1565b90506020028101906107319190612c05565b61073a90612c70565b80516040519192505f91600888019161075291612ce9565b9081526020016040518091039020541461078257805160405163a41f772f60e01b81526104999190600401612b83565b5f6002885f0135846040516020016107b192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107cb91612ce9565b602060405180830381855afa1580156107e6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108099190612b95565b90508086600801835f01516040516108219190612ce9565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff1916600217815582516001909101906108619082612d45565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff191690556108e09085612e18565b82516040519195506108f191612ce9565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a350508061094690612e2b565b90506106ed565b5060048301819055600183015460649061097190600160401b900460ff1683612e4d565b101561099357604051635943317f60e01b815260048101829052602401610499565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109b7876111b4565b604001516040518263ffffffff1660e01b81526004016109d79190612b83565b602060405180830381865af41580156109f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a169190612b95565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a509190612f87565b5f60405180830381865af4158015610a6a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a919190810190612b52565b90505f600282604051610aa49190612ce9565b602060405180830381855afa158015610abf573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ae29190612b95565b9050828114610b0e5760405163baaea89d60e01b81526004810182905260248101849052604401610499565b5050506009909201805460ff1916600117905550505050565b610b30816112ca565b505050565b5f610b3f82610fcd565b6080015192915050565b610b5161167d565b610b5a5f6116d8565b565b610b6461167d565b610b6d81611748565b5050565b5f610b7a61167d565b610b848383611a2c565b90505b92915050565b5f8051602061358d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bc0866111b4565b604001516040518263ffffffff1660e01b8152600401610be09190612b83565b6040805180830381865af4158015610bfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1e919061302a565b9150915080610c4457604051632d07135360e01b81528115156004820152602401610499565b5f82815260068401602052604090208054610c5e90612a09565b90505f03610c825760405163089938b360e11b815260048101839052602401610499565b60015f83815260078501602052604090205460ff166005811115610ca857610ca861287b565b14610cdb575f8281526007840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b5f8281526006840160205260408120610cf3916126ae565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061358d8339815191529190610dc990612a09565b90505f03610ded5760405163089938b360e11b815260048101839052602401610499565b60015f83815260078301602052604090205460ff166005811115610e1357610e1361287b565b14610e46575f8281526007820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91610e7f919060040161304b565b6020604051808303815f875af1158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b309190612b95565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f035750825b90505f826001600160401b03166001148015610f1e5750303b155b905081158015610f2c575080155b15610f4a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f7457845460ff60401b1916600160401b1785555b610f7e8787611f51565b8315610fc457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610fd56126e5565b5f8281525f805160206135ad833981519152602052604090819020815160e0810190925280545f8051602061358d833981519152929190829060ff1660058111156110225761102261287b565b60058111156110335761103361287b565b815260200160018201805461104790612a09565b80601f016020809104026020016040519081016040528092919081815260200182805461107390612a09565b80156110be5780601f10611095576101008083540402835291602001916110be565b820191905f5260205f20905b8154815290600101906020018083116110a157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61112461167d565b6001600160a01b03811661114d57604051631e4fbdf760e01b81525f6004820152602401610499565b611156816116d8565b50565b6040515f905f8051602061358d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061119c90869086906130d5565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611218573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261123f91908101906130e4565b915091508061126157604051636b2f19e960e01b815260040160405180910390fd5b815115611287578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156112c3576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f6112d36126e5565b5f8051602061358d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611306886111b4565b604001516040518263ffffffff1660e01b81526004016113269190612b83565b6040805180830381865af4158015611340573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611364919061302a565b91509150801561138b57604051632d07135360e01b81528115156004820152602401610499565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156113bc576113bc61287b565b60058111156113cd576113cd61287b565b81526020016001820180546113e190612a09565b80601f016020809104026020016040519081016040528092919081815260200182805461140d90612a09565b80156114585780601f1061142f57610100808354040283529160200191611458565b820191905f5260205f20905b81548152906001019060200180831161143b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114c3576114c361287b565b141580156114e457506001815160058111156114e1576114e161287b565b14155b1561150557805160405163170cc93360e21b81526104999190600401612a41565b60038151600581111561151a5761151a61287b565b03611528576004815261152d565b600581525b8360080181602001516040516115439190612ce9565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156115875761158761287b565b0217905550602082015160018201906115a09082612d45565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156116465761164661287b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116af7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b5a5760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6117506126e5565b5f8281525f805160206135ad8339815191526020526040808220815160e0810190925280545f8051602061358d83398151915293929190829060ff16600581111561179d5761179d61287b565b60058111156117ae576117ae61287b565b81526020016001820180546117c290612a09565b80601f01602080910402602001604051908101604052809291908181526020018280546117ee90612a09565b80156118395780601f1061181057610100808354040283529160200191611839565b820191905f5260205f20905b81548152906001019060200180831161181c57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118a7576118a761287b565b146118da575f8481526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561191e5761191e61287b565b0217905550602082015160018201906119379082612d45565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6119d58582611f6b565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16611a7057604051637fab81e560e01b815260040160405180910390fd5b5f8051602061358d83398151915242611a8f6060860160408701613171565b6001600160401b0316111580611ac95750611aad6202a30042612e18565b611abd6060860160408701613171565b6001600160401b031610155b15611b0357611ade6060850160408601613171565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b611b18611b13606086018661318a565b612142565b611b28611b13608086018661318a565b6030611b37602086018661319e565b905014611b6957611b4b602085018561319e565b6040516326475b2f60e11b8152610499925060040190815260200190565b611b73848061319e565b90505f03611ba057611b85848061319e565b604051633e08a12560e11b81526004016104999291906131e0565b5f60088201611baf868061319e565b604051611bbd9291906130d5565b90815260200160405180910390205414611bf657611bdb848061319e565b60405163a41f772f60e01b81526004016104999291906131e0565b611c00835f6122ab565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611c3d8a8061319e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611c85908b018b61319e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611cce60608b0160408c01613171565b6001600160401b03168152602001611ce960608b018b61318a565b611cf2906131f3565b8152602001611d0460808b018b61318a565b611d0d906131f3565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611d3b9190613320565b5f60405180830381865af4158015611d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d7c91908101906133d7565b5f82815260068601602052604090209193509150611d9a8282612d45565b508160088401611daa888061319e565b604051611db89291906130d5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611df4908590600401612b83565b6020604051808303815f875af1158015611e10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e349190612b95565b5f8481526007860160205260409020805460ff191660011790559050611e5a878061319e565b5f858152600787016020526040902060010191611e7891908361341a565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611ed7888061319e565b604051611ee59291906130d5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190611f239190613171565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611f596124ce565b611f6282612517565b610b6d81612530565b5f8281525f805160206135ad833981519152602052604081206002015481905f8051602061358d83398151915290600160801b90046001600160401b0316611fb385826122ab565b5f611fbd87612541565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612066573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261208d9190810190612b52565b6040518263ffffffff1660e01b81526004016120a99190612b83565b6020604051808303815f875af11580156120c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e99190612b95565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b61214f60208201826127b7565b63ffffffff1615801561216f575061216a6020820182612bac565b151590505b156121b65761218160208201826127b7565b61218e6020830183612bac565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b6121c36020820182612bac565b90506121d260208301836127b7565b63ffffffff1611156121eb5761218160208201826127b7565b60015b6121fb6020830183612bac565b9050811015610b6d576122116020830183612bac565b61221c6001846134d3565b81811061222b5761222b612bf1565b9050602002016020810190612240919061297c565b6001600160a01b03166122566020840184612bac565b8381811061226657612266612bf1565b905060200201602081019061227b919061297c565b6001600160a01b031610156122a357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016121ee565b5f8051602061358d8339815191525f6001600160401b0380841690851611156122df576122d883856134e6565b90506122ec565b6122e984846134e6565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061234e57506001840154815161234a916001600160401b031690612e18565b8210155b15612374576001600160401b038316606082015281815260408101516020820152612393565b82816060018181516123869190613506565b6001600160401b03169052505b60608101516123a3906064613526565b602082015160018601546001600160401b0392909216916123ce9190600160401b900460ff16612e4d565b10156123fe57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b856001600160401b0316816040018181516124199190612e18565b9052506040810180516001600160401b03871691906124399083906134d3565b9052506001840154604082015160649161245e91600160401b90910460ff1690612e4d565b1015612485578060400151604051635943317f60e01b815260040161049991815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b5a57604051631afcd79f60e31b815260040160405180910390fd5b61251f6124ce565b6125276125b6565b611156816125be565b6125386124ce565b611156816126a6565b5f8181525f805160206135ad8339815191526020526040812060020180545f8051602061358d833981519152919060089061258b90600160401b90046001600160401b0316613551565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b5a6124ce565b6125c66124ce565b80355f8051602061358d83398151915290815560146125eb606084016040850161356c565b60ff16118061260a5750612605606083016040840161356c565b60ff16155b1561263e5761261f606083016040840161356c565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b61264e606083016040840161356c565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561267f6040830160208401613171565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b6111246124ce565b5080546126ba90612a09565b5f825580601f106126c9575050565b601f0160209004905f5260205f20908101906111569190612722565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612736575f8155600101612723565b5090565b5f6020828403121561274a575f80fd5b5035919050565b803563ffffffff81168114612764575f80fd5b919050565b5f806040838503121561277a575f80fd5b82356001600160401b0381111561278f575f80fd5b8301608081860312156127a0575f80fd5b91506127ae60208401612751565b90509250929050565b5f602082840312156127c7575f80fd5b610b8482612751565b80356001600160401b0381168114612764575f80fd5b5f80604083850312156127f7575f80fd5b82356001600160401b0381111561280c575f80fd5b830160a0818603121561281d575f80fd5b91506127ae602084016127d0565b6001600160a01b0381168114611156575f80fd5b5f808284036080811215612851575f80fd5b606081121561285e575f80fd5b5082915060608301356128708161282b565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b600681106128ab57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156128c95781810151838201526020016128b1565b50505f910152565b5f81518084526128e88160208601602086016128af565b601f01601f19169290920160200192915050565b6020815261290e60208201835161288f565b5f602083015160e060408401526129296101008401826128d1565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f6020828403121561298c575f80fd5b81356129978161282b565b9392505050565b5f80602083850312156129af575f80fd5b82356001600160401b03808211156129c5575f80fd5b818501915085601f8301126129d8575f80fd5b8135818111156129e6575f80fd5b8660208285010111156129f7575f80fd5b60209290920196919550909350505050565b600181811c90821680612a1d57607f821691505b602082108103612a3b57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610b87828461288f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612a8557612a85612a4f565b60405290565b604080519081016001600160401b0381118282101715612a8557612a85612a4f565b604051601f8201601f191681016001600160401b0381118282101715612ad557612ad5612a4f565b604052919050565b5f6001600160401b03821115612af557612af5612a4f565b50601f01601f191660200190565b5f82601f830112612b12575f80fd5b8151612b25612b2082612add565b612aad565b818152846020838601011115612b39575f80fd5b612b4a8260208301602087016128af565b949350505050565b5f60208284031215612b62575f80fd5b81516001600160401b03811115612b77575f80fd5b612b4a84828501612b03565b602081525f610b8460208301846128d1565b5f60208284031215612ba5575f80fd5b5051919050565b5f808335601e19843603018112612bc1575f80fd5b8301803591506001600160401b03821115612bda575f80fd5b6020019150600581901b360382131561213b575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612c19575f80fd5b9190910192915050565b5f82601f830112612c32575f80fd5b8135612c40612b2082612add565b818152846020838601011115612c54575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612c80575f80fd5b612c88612a63565b82356001600160401b0380821115612c9e575f80fd5b612caa36838701612c23565b83526020850135915080821115612cbf575f80fd5b50612ccc36828601612c23565b602083015250612cde604084016127d0565b604082015292915050565b5f8251612c198184602087016128af565b601f821115610b3057805f5260205f20601f840160051c81016020851015612d1f5750805b601f840160051c820191505b81811015612d3e575f8155600101612d2b565b5050505050565b81516001600160401b03811115612d5e57612d5e612a4f565b612d7281612d6c8454612a09565b84612cfa565b602080601f831160018114612da5575f8415612d8e5750858301515b5f19600386901b1c1916600185901b178555612dfc565b5f85815260208120601f198616915b82811015612dd357888601518255948401946001909101908401612db4565b5085821015612df057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b8757610b87612e04565b5f63ffffffff808316818103612e4357612e43612e04565b6001019392505050565b8082028115828204841417610b8757610b87612e04565b5f808335601e19843603018112612e79575f80fd5b83016020810192503590506001600160401b03811115612e97575f80fd5b80360382131561213b575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015612f7a57848303601f19018952813536889003605e19018112612f09575f80fd5b87016060612f178280612e64565b828752612f278388018284612ea5565b92505050612f3786830183612e64565b86830388880152612f49838284612ea5565b9250505060406001600160401b03612f628285016127d0565b16950194909452509783019790830190600101612ee4565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135612fab8161282b565b6001600160a01b031660608381019190915283013536849003601e19018112612fd2575f80fd5b83016020810190356001600160401b03811115612fed575f80fd5b8060051b3603821315612ffe575f80fd5b60808085015261301260a085018284612ecd565b95945050505050565b80518015158114612764575f80fd5b5f806040838503121561303b575f80fd5b825191506127ae6020840161301b565b5f60208083525f845461305d81612a09565b806020870152604060018084165f811461307e576001811461309a576130c7565b60ff19851660408a0152604084151560051b8a010195506130c7565b895f5260205f205f5b858110156130be5781548b82018601529083019088016130a3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156130f5575f80fd5b82516001600160401b038082111561310b575f80fd5b908401906060828703121561311e575f80fd5b613126612a63565b8251815260208301516131388161282b565b602082015260408301518281111561314e575f80fd5b61315a88828601612b03565b60408301525093506127ae9150506020840161301b565b5f60208284031215613181575f80fd5b610b84826127d0565b5f8235603e19833603018112612c19575f80fd5b5f808335601e198436030181126131b3575f80fd5b8301803591506001600160401b038211156131cc575f80fd5b60200191503681900382131561213b575f80fd5b602081525f612b4a602083018486612ea5565b5f60408236031215613203575f80fd5b61320b612a8b565b61321483612751565b81526020808401356001600160401b0380821115613230575f80fd5b9085019036601f830112613242575f80fd5b81358181111561325457613254612a4f565b8060051b9150613265848301612aad565b818152918301840191848101903684111561327e575f80fd5b938501935b838510156132a857843592506132988361282b565b8282529385019390850190613283565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156133155784516001600160a01b031682529383019360019290920191908301906132ec565b509695505050505050565b60208152815160208201525f602083015160e060408401526133466101008401826128d1565b90506040840151601f198085840301606086015261336483836128d1565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261339483836132ba565b925060a08601519150808584030160c0860152506133b282826132ba565b91505060c08401516133cf60e08501826001600160401b03169052565b509392505050565b5f80604083850312156133e8575f80fd5b8251915060208301516001600160401b03811115613404575f80fd5b61341085828601612b03565b9150509250929050565b6001600160401b0383111561343157613431612a4f565b6134458361343f8354612a09565b83612cfa565b5f601f841160018114613476575f851561345f5750838201355b5f19600387901b1c1916600186901b178355612d3e565b5f83815260208120601f198716915b828110156134a55786850135825560209485019460019092019101613485565b50868210156134c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610b8757610b87612e04565b6001600160401b038281168282160390808211156112c3576112c3612e04565b6001600160401b038181168382160190808211156112c3576112c3612e04565b6001600160401b0381811683821602808216919082811461354957613549612e04565b505092915050565b5f6001600160401b03808316818103612e4357612e43612e04565b5f6020828403121561357c575f80fd5b813560ff81168114612997575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212209bcbec4ca24a6b6f7ec4e7737bad47f9931471644fa7ee5fb77d90f451b343a964736f6c63430008190033",
}
// PoAValidatorManagerABI is the input ABI used to generate the binding from.
@@ -2031,8 +2031,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorWeightUpd
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x612160610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c3366004611904565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f0366004611904565b61044a565b604080519283526001600160401b039091166020830152016100d9565b610125610120366004611904565b61063b565b6040519081526020016100d9565b610146610141366004611904565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a561017936600461193d565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d991906119a1565b6101a56101c03660046119d5565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d366004611a0e565b610a1e565b610235610230366004611904565b610bff565b6040516100d99190611aaa565b6101a5610250366004611b61565b61154a565b6101a5610263366004611b93565b61158e565b61027b610276366004611ca1565b6115c4565b6040516100d9929190611d9d565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611dc9565b6102e6906008611ddc565b61ffff168582815181106102fc576102fc611df3565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611dc9565b61035f906008611ddc565b63ffffffff1686610371836002611e07565b8151811061038157610381611df3565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611dc9565b6103e2906008611ddc565b876103ee836006611e07565b815181106103fe576103fe611df3565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611df3565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611dc9565b6104a2906008611ddc565b61ffff168582815181106104b8576104b8611df3565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611dc9565b61051b906008611ddc565b63ffffffff168661052d836002611e07565b8151811061053d5761053d611df3565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611dc9565b61059c906008611ddc565b876105a8836006611e07565b815181106105b8576105b8611df3565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611dc9565b6105f2906008611ddc565b6001600160401b031688610607836026611e07565b8151811061061757610617611df3565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611dc9565b610692906008611ddc565b61ffff168482815181106106a8576106a8611df3565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611dc9565b61070b906008611ddc565b63ffffffff168561071d836002611e07565b8151811061072d5761072d611df3565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611dc9565b61078c906008611ddc565b86610798836006611e07565b815181106107a8576107a8611df3565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611dc9565b610821906008611ddc565b61ffff1686828151811061083757610837611df3565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611dc9565b61089a906008611ddc565b63ffffffff16876108ac836002611e07565b815181106108bc576108bc611df3565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611dc9565b61091d906008611ddc565b88610929836006611e07565b8151811061093957610939611df3565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611dc9565b610973906008611ddc565b6001600160401b031689610988836026611e07565b8151811061099857610998611df3565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611dc9565b6109d2906008611ddc565b6001600160401b03168a6109e783602e611e07565b815181106109f7576109f7611df3565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b60605f80833560208501356014610a3a87870160408901611e1a565b610a476060890189611e33565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b610acd6060850185611e33565b9050811015610bf85781610ae46060860186611e33565b83818110610af457610af4611df3565b9050602002810190610b069190611e7f565b610b109080611e9d565b9050610b1f6060870187611e33565b84818110610b2f57610b2f611df3565b9050602002810190610b419190611e7f565b610b4b9080611e9d565b610b586060890189611e33565b86818110610b6857610b68611df3565b9050602002810190610b7a9190611e7f565b610b88906020810190611e9d565b610b9560608b018b611e33565b88818110610ba557610ba5611df3565b9050602002810190610bb79190611e7f565b610bc8906060810190604001611edf565b604051602001610bde9796959493929190611ef8565b60408051601f198184030181529190529150600101610ac0565b5092915050565b610c076117b1565b5f610c106117b1565b5f805b6002811015610c6e57610c27816001611dc9565b610c32906008611ddc565b61ffff1686610c4763ffffffff871684611e07565b81518110610c5757610c57611df3565b016020015160f81c901b9190911790600101610c13565b5061ffff811615610c985760405163407b587360e01b815261ffff821660048201526024016102bb565b610ca3600284611f61565b9250505f805b6004811015610d0857610cbd816003611dc9565b610cc8906008611ddc565b63ffffffff16868563ffffffff1683610ce19190611e07565b81518110610cf157610cf1611df3565b016020015160f81c901b9190911790600101610ca9565b5063ffffffff8116600114610d3057604051635b60892f60e01b815260040160405180910390fd5b610d3b600484611f61565b9250505f805b6020811015610d9857610d5581601f611dc9565b610d60906008611ddc565b86610d7163ffffffff871684611e07565b81518110610d8157610d81611df3565b016020015160f81c901b9190911790600101610d41565b50808252610da7602084611f61565b9250505f805b6004811015610e0c57610dc1816003611dc9565b610dcc906008611ddc565b63ffffffff16868563ffffffff1683610de59190611e07565b81518110610df557610df5611df3565b016020015160f81c901b9190911790600101610dad565b50610e18600484611f61565b92505f8163ffffffff166001600160401b03811115610e3957610e3961180b565b6040519080825280601f01601f191660200182016040528015610e63576020820181803683370190505b5090505f5b8263ffffffff16811015610ed25786610e8763ffffffff871683611e07565b81518110610e9757610e97611df3565b602001015160f81c60f81b828281518110610eb457610eb4611df3565b60200101906001600160f81b03191690815f1a905350600101610e68565b5060208301819052610ee48285611f61565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610f705786610f2563ffffffff871683611e07565b81518110610f3557610f35611df3565b602001015160f81c60f81b828281518110610f5257610f52611df3565b60200101906001600160f81b03191690815f1a905350600101610f0b565b5060408301819052610f83603085611f61565b9350505f805b6008811015610fe957610f9d816007611dc9565b610fa8906008611ddc565b6001600160401b031687610fc263ffffffff881684611e07565b81518110610fd257610fd2611df3565b016020015160f81c901b9190911790600101610f89565b506001600160401b0381166060840152611004600885611f61565b9350505f805f5b600481101561106a5761101f816003611dc9565b61102a906008611ddc565b63ffffffff16888763ffffffff16836110439190611e07565b8151811061105357611053611df3565b016020015160f81c901b919091179060010161100b565b50611076600486611f61565b94505f5b60048110156110d95761108e816003611dc9565b611099906008611ddc565b63ffffffff16888763ffffffff16836110b29190611e07565b815181106110c2576110c2611df3565b016020015160f81c901b929092179160010161107a565b506110e5600486611f61565b94505f8263ffffffff166001600160401b038111156111065761110661180b565b60405190808252806020026020018201604052801561112f578160200160208202803683370190505b5090505f5b8363ffffffff16811015611217576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156111c9578a61117e63ffffffff8b1683611e07565b8151811061118e5761118e611df3565b602001015160f81c60f81b8282815181106111ab576111ab611df3565b60200101906001600160f81b03191690815f1a905350600101611164565b505f60148201519050808484815181106111e5576111e5611df3565b6001600160a01b039092166020928302919091019091015261120860148a611f61565b98505050806001019050611134565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156112995761124e816003611dc9565b611259906008611ddc565b63ffffffff16898863ffffffff16836112729190611e07565b8151811061128257611282611df3565b016020015160f81c901b919091179060010161123a565b506112a5600487611f61565b95505f5b6004811015611308576112bd816003611dc9565b6112c8906008611ddc565b63ffffffff16898863ffffffff16836112e19190611e07565b815181106112f1576112f1611df3565b016020015160f81c901b92909217916001016112a9565b50611314600487611f61565b95505f8263ffffffff166001600160401b038111156113355761133561180b565b60405190808252806020026020018201604052801561135e578160200160208202803683370190505b5090505f5b8363ffffffff16811015611446576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156113f8578b6113ad63ffffffff8c1683611e07565b815181106113bd576113bd611df3565b602001015160f81c60f81b8282815181106113da576113da611df3565b60200101906001600160f81b03191690815f1a905350600101611393565b505f601482015190508084848151811061141457611414611df3565b6001600160a01b039092166020928302919091019091015261143760148b611f61565b99505050806001019050611363565b506040805180820190915263ffffffff9092168252602082015260a08501525f6114708284611f61565b61147b906014611f7e565b61148685607a611f61565b6114909190611f61565b90508063ffffffff168851146114cc57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561152f576114e3816007611dc9565b6114ee906008611ddc565b6001600160401b03168a61150863ffffffff8b1684611e07565b8151811061151857611518611df3565b016020015160f81c901b91909117906001016114cf565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e01611576565b5f60608260400151516030146115ed5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861162e988a986001989297929690959094909390929101611fa6565b60405160208183030381529060405290505f5b846080015160200151518110156116a05781856080015160200151828151811061166d5761166d611df3565b6020026020010151604051602001611686929190612060565b60408051601f198184030181529190529150600101611641565b5060a08401518051602091820151516040516116c0938593929101612096565b60405160208183030381529060405290505f5b8460a00151602001515181101561173257818560a001516020015182815181106116ff576116ff611df3565b6020026020010151604051602001611718929190612060565b60408051601f1981840301815291905291506001016116d3565b5060c08401516040516117499183916020016120d1565b604051602081830303815290604052905060028160405161176a9190612102565b602060405180830381855afa158015611785573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906117a89190612113565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156118415761184161180b565b60405290565b60405160e081016001600160401b03811182821017156118415761184161180b565b604051601f8201601f191681016001600160401b03811182821017156118915761189161180b565b604052919050565b5f82601f8301126118a8575f80fd5b81356001600160401b038111156118c1576118c161180b565b6118d4601f8201601f1916602001611869565b8181528460208386010111156118e8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611914575f80fd5b81356001600160401b03811115611929575f80fd5b61193584828501611899565b949350505050565b5f6020828403121561194d575f80fd5b5035919050565b5f5b8381101561196e578181015183820152602001611956565b50505f910152565b5f815180845261198d816020860160208601611954565b601f01601f19169290920160200192915050565b602081525f6119b36020830184611976565b9392505050565b80356001600160401b03811681146119d0575f80fd5b919050565b5f805f606084860312156119e7575f80fd5b833592506119f7602085016119ba565b9150611a05604085016119ba565b90509250925092565b5f60208284031215611a1e575f80fd5b81356001600160401b03811115611a33575f80fd5b8201608081850312156119b3575f80fd5b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611a9f5784516001600160a01b03168252938301936001929092019190830190611a76565b509695505050505050565b60208152815160208201525f602083015160e06040840152611ad0610100840182611976565b90506040840151601f1980858403016060860152611aee8383611976565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611b1e8383611a44565b925060a08601519150808584030160c086015250611b3c8282611a44565b91505060c0840151611b5960e08501826001600160401b03169052565b509392505050565b5f8060408385031215611b72575f80fd5b8235915060208301358015158114611b88575f80fd5b809150509250929050565b5f8060408385031215611ba4575f80fd5b82359150611bb4602084016119ba565b90509250929050565b80356001600160a01b03811681146119d0575f80fd5b5f60408284031215611be3575f80fd5b611beb61181f565b9050813563ffffffff81168114611c00575f80fd5b81526020828101356001600160401b0380821115611c1c575f80fd5b818501915085601f830112611c2f575f80fd5b813581811115611c4157611c4161180b565b8060051b9150611c52848301611869565b8181529183018401918481019088841115611c6b575f80fd5b938501935b83851015611c9057611c8185611bbd565b82529385019390850190611c70565b808688015250505050505092915050565b5f60208284031215611cb1575f80fd5b81356001600160401b0380821115611cc7575f80fd5b9083019060e08286031215611cda575f80fd5b611ce2611847565b82358152602083013582811115611cf7575f80fd5b611d0387828601611899565b602083015250604083013582811115611d1a575f80fd5b611d2687828601611899565b604083015250611d38606084016119ba565b6060820152608083013582811115611d4e575f80fd5b611d5a87828601611bd3565b60808301525060a083013582811115611d71575f80fd5b611d7d87828601611bd3565b60a083015250611d8f60c084016119ba565b60c082015295945050505050565b828152604060208201525f6119356040830184611976565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561158857611588611db5565b808202811582820484141761158857611588611db5565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561158857611588611db5565b5f60208284031215611e2a575f80fd5b6119b382611bbd565b5f808335601e19843603018112611e48575f80fd5b8301803591506001600160401b03821115611e61575f80fd5b6020019150600581901b3603821315611e78575f80fd5b9250929050565b5f8235605e19833603018112611e93575f80fd5b9190910192915050565b5f808335601e19843603018112611eb2575f80fd5b8301803591506001600160401b03821115611ecb575f80fd5b602001915036819003821315611e78575f80fd5b5f60208284031215611eef575f80fd5b6119b3826119ba565b5f8851611f09818460208d01611954565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b63ffffffff818116838216019080821115610bf857610bf8611db5565b63ffffffff818116838216028082169190828114611f9e57611f9e611db5565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611fec81602a850160208b01611954565b86519083019061200381602a840160208b01611954565b60c087901b6001600160c01b031916602a9290910191820152612035603282018660e01b6001600160e01b0319169052565b61204e603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351612071818460208801611954565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120a7818460208901611954565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120e2818460208801611954565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f8251611e93818460208701611954565b5f60208284031215612123575f80fd5b505191905056fea2646970667358221220427b16ca5e2abe4960f5b859780a2eb475e9509f2f5b05fb0ffcb2156069896d64736f6c63430008190033",
+ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
+ Bin: "0x612160610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c3366004611904565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f0366004611904565b61044a565b604080519283526001600160401b039091166020830152016100d9565b610125610120366004611904565b61063b565b6040519081526020016100d9565b610146610141366004611904565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a561017936600461193d565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d991906119a1565b6101a56101c03660046119d5565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d366004611a0e565b610a1e565b610235610230366004611904565b610bff565b6040516100d99190611aaa565b6101a5610250366004611b61565b61154a565b6101a5610263366004611b93565b61158e565b61027b610276366004611ca1565b6115c4565b6040516100d9929190611d9d565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611dc9565b6102e6906008611ddc565b61ffff168582815181106102fc576102fc611df3565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611dc9565b61035f906008611ddc565b63ffffffff1686610371836002611e07565b8151811061038157610381611df3565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611dc9565b6103e2906008611ddc565b876103ee836006611e07565b815181106103fe576103fe611df3565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611df3565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611dc9565b6104a2906008611ddc565b61ffff168582815181106104b8576104b8611df3565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611dc9565b61051b906008611ddc565b63ffffffff168661052d836002611e07565b8151811061053d5761053d611df3565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611dc9565b61059c906008611ddc565b876105a8836006611e07565b815181106105b8576105b8611df3565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611dc9565b6105f2906008611ddc565b6001600160401b031688610607836026611e07565b8151811061061757610617611df3565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611dc9565b610692906008611ddc565b61ffff168482815181106106a8576106a8611df3565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611dc9565b61070b906008611ddc565b63ffffffff168561071d836002611e07565b8151811061072d5761072d611df3565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611dc9565b61078c906008611ddc565b86610798836006611e07565b815181106107a8576107a8611df3565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611dc9565b610821906008611ddc565b61ffff1686828151811061083757610837611df3565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611dc9565b61089a906008611ddc565b63ffffffff16876108ac836002611e07565b815181106108bc576108bc611df3565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611dc9565b61091d906008611ddc565b88610929836006611e07565b8151811061093957610939611df3565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611dc9565b610973906008611ddc565b6001600160401b031689610988836026611e07565b8151811061099857610998611df3565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611dc9565b6109d2906008611ddc565b6001600160401b03168a6109e783602e611e07565b815181106109f7576109f7611df3565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b60605f80833560208501356014610a3a87870160408901611e1a565b610a476060890189611e33565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b610acd6060850185611e33565b9050811015610bf85781610ae46060860186611e33565b83818110610af457610af4611df3565b9050602002810190610b069190611e7f565b610b109080611e9d565b9050610b1f6060870187611e33565b84818110610b2f57610b2f611df3565b9050602002810190610b419190611e7f565b610b4b9080611e9d565b610b586060890189611e33565b86818110610b6857610b68611df3565b9050602002810190610b7a9190611e7f565b610b88906020810190611e9d565b610b9560608b018b611e33565b88818110610ba557610ba5611df3565b9050602002810190610bb79190611e7f565b610bc8906060810190604001611edf565b604051602001610bde9796959493929190611ef8565b60408051601f198184030181529190529150600101610ac0565b5092915050565b610c076117b1565b5f610c106117b1565b5f805b6002811015610c6e57610c27816001611dc9565b610c32906008611ddc565b61ffff1686610c4763ffffffff871684611e07565b81518110610c5757610c57611df3565b016020015160f81c901b9190911790600101610c13565b5061ffff811615610c985760405163407b587360e01b815261ffff821660048201526024016102bb565b610ca3600284611f61565b9250505f805b6004811015610d0857610cbd816003611dc9565b610cc8906008611ddc565b63ffffffff16868563ffffffff1683610ce19190611e07565b81518110610cf157610cf1611df3565b016020015160f81c901b9190911790600101610ca9565b5063ffffffff8116600114610d3057604051635b60892f60e01b815260040160405180910390fd5b610d3b600484611f61565b9250505f805b6020811015610d9857610d5581601f611dc9565b610d60906008611ddc565b86610d7163ffffffff871684611e07565b81518110610d8157610d81611df3565b016020015160f81c901b9190911790600101610d41565b50808252610da7602084611f61565b9250505f805b6004811015610e0c57610dc1816003611dc9565b610dcc906008611ddc565b63ffffffff16868563ffffffff1683610de59190611e07565b81518110610df557610df5611df3565b016020015160f81c901b9190911790600101610dad565b50610e18600484611f61565b92505f8163ffffffff166001600160401b03811115610e3957610e3961180b565b6040519080825280601f01601f191660200182016040528015610e63576020820181803683370190505b5090505f5b8263ffffffff16811015610ed25786610e8763ffffffff871683611e07565b81518110610e9757610e97611df3565b602001015160f81c60f81b828281518110610eb457610eb4611df3565b60200101906001600160f81b03191690815f1a905350600101610e68565b5060208301819052610ee48285611f61565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610f705786610f2563ffffffff871683611e07565b81518110610f3557610f35611df3565b602001015160f81c60f81b828281518110610f5257610f52611df3565b60200101906001600160f81b03191690815f1a905350600101610f0b565b5060408301819052610f83603085611f61565b9350505f805b6008811015610fe957610f9d816007611dc9565b610fa8906008611ddc565b6001600160401b031687610fc263ffffffff881684611e07565b81518110610fd257610fd2611df3565b016020015160f81c901b9190911790600101610f89565b506001600160401b0381166060840152611004600885611f61565b9350505f805f5b600481101561106a5761101f816003611dc9565b61102a906008611ddc565b63ffffffff16888763ffffffff16836110439190611e07565b8151811061105357611053611df3565b016020015160f81c901b919091179060010161100b565b50611076600486611f61565b94505f5b60048110156110d95761108e816003611dc9565b611099906008611ddc565b63ffffffff16888763ffffffff16836110b29190611e07565b815181106110c2576110c2611df3565b016020015160f81c901b929092179160010161107a565b506110e5600486611f61565b94505f8263ffffffff166001600160401b038111156111065761110661180b565b60405190808252806020026020018201604052801561112f578160200160208202803683370190505b5090505f5b8363ffffffff16811015611217576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156111c9578a61117e63ffffffff8b1683611e07565b8151811061118e5761118e611df3565b602001015160f81c60f81b8282815181106111ab576111ab611df3565b60200101906001600160f81b03191690815f1a905350600101611164565b505f60148201519050808484815181106111e5576111e5611df3565b6001600160a01b039092166020928302919091019091015261120860148a611f61565b98505050806001019050611134565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156112995761124e816003611dc9565b611259906008611ddc565b63ffffffff16898863ffffffff16836112729190611e07565b8151811061128257611282611df3565b016020015160f81c901b919091179060010161123a565b506112a5600487611f61565b95505f5b6004811015611308576112bd816003611dc9565b6112c8906008611ddc565b63ffffffff16898863ffffffff16836112e19190611e07565b815181106112f1576112f1611df3565b016020015160f81c901b92909217916001016112a9565b50611314600487611f61565b95505f8263ffffffff166001600160401b038111156113355761133561180b565b60405190808252806020026020018201604052801561135e578160200160208202803683370190505b5090505f5b8363ffffffff16811015611446576040805160148082528183019092525f916020820181803683370190505090505f5b60148110156113f8578b6113ad63ffffffff8c1683611e07565b815181106113bd576113bd611df3565b602001015160f81c60f81b8282815181106113da576113da611df3565b60200101906001600160f81b03191690815f1a905350600101611393565b505f601482015190508084848151811061141457611414611df3565b6001600160a01b039092166020928302919091019091015261143760148b611f61565b99505050806001019050611363565b506040805180820190915263ffffffff9092168252602082015260a08501525f6114708284611f61565b61147b906014611f7e565b61148685607a611f61565b6114909190611f61565b90508063ffffffff168851146114cc57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561152f576114e3816007611dc9565b6114ee906008611ddc565b6001600160401b03168a61150863ffffffff8b1684611e07565b8151811061151857611518611df3565b016020015160f81c901b91909117906001016114cf565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e01611576565b5f60608260400151516030146115ed5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861162e988a986001989297929690959094909390929101611fa6565b60405160208183030381529060405290505f5b846080015160200151518110156116a05781856080015160200151828151811061166d5761166d611df3565b6020026020010151604051602001611686929190612060565b60408051601f198184030181529190529150600101611641565b5060a08401518051602091820151516040516116c0938593929101612096565b60405160208183030381529060405290505f5b8460a00151602001515181101561173257818560a001516020015182815181106116ff576116ff611df3565b6020026020010151604051602001611718929190612060565b60408051601f1981840301815291905291506001016116d3565b5060c08401516040516117499183916020016120d1565b604051602081830303815290604052905060028160405161176a9190612102565b602060405180830381855afa158015611785573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906117a89190612113565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156118415761184161180b565b60405290565b60405160e081016001600160401b03811182821017156118415761184161180b565b604051601f8201601f191681016001600160401b03811182821017156118915761189161180b565b604052919050565b5f82601f8301126118a8575f80fd5b81356001600160401b038111156118c1576118c161180b565b6118d4601f8201601f1916602001611869565b8181528460208386010111156118e8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611914575f80fd5b81356001600160401b03811115611929575f80fd5b61193584828501611899565b949350505050565b5f6020828403121561194d575f80fd5b5035919050565b5f5b8381101561196e578181015183820152602001611956565b50505f910152565b5f815180845261198d816020860160208601611954565b601f01601f19169290920160200192915050565b602081525f6119b36020830184611976565b9392505050565b80356001600160401b03811681146119d0575f80fd5b919050565b5f805f606084860312156119e7575f80fd5b833592506119f7602085016119ba565b9150611a05604085016119ba565b90509250925092565b5f60208284031215611a1e575f80fd5b81356001600160401b03811115611a33575f80fd5b8201608081850312156119b3575f80fd5b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611a9f5784516001600160a01b03168252938301936001929092019190830190611a76565b509695505050505050565b60208152815160208201525f602083015160e06040840152611ad0610100840182611976565b90506040840151601f1980858403016060860152611aee8383611976565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611b1e8383611a44565b925060a08601519150808584030160c086015250611b3c8282611a44565b91505060c0840151611b5960e08501826001600160401b03169052565b509392505050565b5f8060408385031215611b72575f80fd5b8235915060208301358015158114611b88575f80fd5b809150509250929050565b5f8060408385031215611ba4575f80fd5b82359150611bb4602084016119ba565b90509250929050565b80356001600160a01b03811681146119d0575f80fd5b5f60408284031215611be3575f80fd5b611beb61181f565b9050813563ffffffff81168114611c00575f80fd5b81526020828101356001600160401b0380821115611c1c575f80fd5b818501915085601f830112611c2f575f80fd5b813581811115611c4157611c4161180b565b8060051b9150611c52848301611869565b8181529183018401918481019088841115611c6b575f80fd5b938501935b83851015611c9057611c8185611bbd565b82529385019390850190611c70565b808688015250505050505092915050565b5f60208284031215611cb1575f80fd5b81356001600160401b0380821115611cc7575f80fd5b9083019060e08286031215611cda575f80fd5b611ce2611847565b82358152602083013582811115611cf7575f80fd5b611d0387828601611899565b602083015250604083013582811115611d1a575f80fd5b611d2687828601611899565b604083015250611d38606084016119ba565b6060820152608083013582811115611d4e575f80fd5b611d5a87828601611bd3565b60808301525060a083013582811115611d71575f80fd5b611d7d87828601611bd3565b60a083015250611d8f60c084016119ba565b60c082015295945050505050565b828152604060208201525f6119356040830184611976565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561158857611588611db5565b808202811582820484141761158857611588611db5565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561158857611588611db5565b5f60208284031215611e2a575f80fd5b6119b382611bbd565b5f808335601e19843603018112611e48575f80fd5b8301803591506001600160401b03821115611e61575f80fd5b6020019150600581901b3603821315611e78575f80fd5b9250929050565b5f8235605e19833603018112611e93575f80fd5b9190910192915050565b5f808335601e19843603018112611eb2575f80fd5b8301803591506001600160401b03821115611ecb575f80fd5b602001915036819003821315611e78575f80fd5b5f60208284031215611eef575f80fd5b6119b3826119ba565b5f8851611f09818460208d01611954565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b63ffffffff818116838216019080821115610bf857610bf8611db5565b63ffffffff818116838216028082169190828114611f9e57611f9e611db5565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611fec81602a850160208b01611954565b86519083019061200381602a840160208b01611954565b60c087901b6001600160c01b031916602a9290910191820152612035603282018660e01b6001600160e01b0319169052565b61204e603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351612071818460208801611954565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120a7818460208901611954565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120e2818460208801611954565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f8251611e93818460208701611954565b5f60208284031215612123575f80fd5b505191905056fea26469706673582212202493946bf4312b64f92a2fbc326ea0236ce3c28da056710de34877f2f112d0c264736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
diff --git a/contracts/ictt/README.md b/contracts/ictt/README.md
index 24875fd9b..8a637302a 100644
--- a/contracts/ictt/README.md
+++ b/contracts/ictt/README.md
@@ -2,9 +2,9 @@
## Overview
-Avalanche Interchain Token Transfer (ICTT) is an application that allows users to transfer tokens between Subnets. The implementation is a set of smart contracts that are deployed across multiple Subnets, and leverages [Teleporter](https://github.com/ava-labs/teleporter) for cross-chain communication.
+Avalanche Interchain Token Transfer (ICTT) is an application that allows users to transfer tokens between L1s. The implementation is a set of smart contracts that are deployed across multiple L1s, and leverages [Teleporter](https://github.com/ava-labs/teleporter) for cross-chain communication.
-Each token transferrer instance consists of one "home" contract and at least one but possibly many "remote" contracts. Each home contract instance manages one asset to be transferred out to `TokenRemote` instances. The home contract lives on the Subnet where the asset to be transferred exists. A transfer consists of locking the asset as collateral on the home Subnet and minting a representation of the asset on the remote Subnet. The remote contracts, each of which has a single specified home contract, live on other Subnets that want to import the asset transferred by their specified home. The token transferrers are designed to be permissionless: anyone can register compatible `TokenRemote` instances to allow for transferring tokens from the `TokenHome` instance to that new `TokenRemote` instance. The home contract keeps track of token balances transferred to each `TokenRemote` instance, and handles returning the original tokens back to the user when assets are transferred back to the `TokenHome` instance. `TokenRemote` instances are registered with their home contract via a Teleporter message upon creation.
+Each token transferrer instance consists of one "home" contract and at least one but possibly many "remote" contracts. Each home contract instance manages one asset to be transferred out to `TokenRemote` instances. The home contract lives on the L1 where the asset to be transferred exists. A transfer consists of locking the asset as collateral on the home L1 and minting a representation of the asset on the remote L1. The remote contracts, each of which has a single specified home contract, live on other L1s that want to import the asset transferred by their specified home. The token transferrers are designed to be permissionless: anyone can register compatible `TokenRemote` instances to allow for transferring tokens from the `TokenHome` instance to that new `TokenRemote` instance. The home contract keeps track of token balances transferred to each `TokenRemote` instance, and handles returning the original tokens back to the user when assets are transferred back to the `TokenHome` instance. `TokenRemote` instances are registered with their home contract via a Teleporter message upon creation.
Home contract instances specify the asset to be transferred as either an ERC20 token or the native token, and they allow for transferring the token to any registered `TokenRemote` instances. The token representation on the remote chain can also either be an ERC20 or native token, allowing users to have any combination of ERC20 and native tokens between home and remote chains:
diff --git a/contracts/teleporter/README.md b/contracts/teleporter/README.md
index c5ca8c236..55085192f 100644
--- a/contracts/teleporter/README.md
+++ b/contracts/teleporter/README.md
@@ -61,13 +61,13 @@ Note that due to [EIP-150](https://eips.ethereum.org/EIPS/eip-150), the lesser o
## Resending a Message
-If the sending Subnet's validator set changes, then it's possible for the receiving Subnet to reject the underlying Warp message due to insufficient signing stake. For example, suppose Subnet A has 5 validators with equal stake weight who all sign a Teleporter message sent to Subnet B. 100% of Subnet A's stake has signed the message. Also suppose Subnet B requires 67% of the sending Subnet's stake to have signed a given Warp message in order for it to be accepted. Before the message can be delivered, however, 5 _more_ validators are added to Subnet A's validator set (all with the same stake weight as the original validators), meaning that the Teleporter message was signed by _only 50%_ of Subnet A's stake. Subnet B will reject this message.
+If the sending Avalanche L1's validator set changes, then it's possible for the receiving Avalanche L1 to reject the underlying Warp message due to insufficient signing stake. For example, suppose L1 A has 5 validators with equal stake weight who all sign a Teleporter message sent to L1 B. 100% of L1 A's stake has signed the message. Also suppose L1 B requires 67% of the sending L1's stake to have signed a given Warp message in order for it to be accepted. Before the message can be delivered, however, 5 _more_ validators are added to L1 A's validator set (all with the same stake weight as the original validators), meaning that the Teleporter message was signed by _only 50%_ of L1 A's stake. L1 B will reject this message.
Once sent on chain, Warp messages cannot be re-signed by a new validator set in such a scenario. Teleporter, however, does support re-signing via the function `retrySendCrossChainMessage`, which can be called for any message that has not been acknowledged as delivered to its destination. Under the hood, this packages the Teleporter message into a brand new Warp message that is re-signed by the current validator set.
## Teleporter Messenger Contract Deployment
-**Do not deploy the `TeleporterMessenger` contract using `forge create`**. The `TeleporterMessenger` contract must be deployed to the same contract address on every chain. To achieve this, the contract can be deployed using a static transaction that uses Nick's method as documented in [this guide](../..//utils/contract-deployment/README.md). Alternatively, if creating a new Subnet, the contract can be pre-allocated with the proper address and state in the new chain's [genesis file](https://docs.avax.network/build/subnet/upgrade/customize-a-subnet#setting-the-genesis-allocation).
+**Do not deploy the `TeleporterMessenger` contract using `forge create`**. The `TeleporterMessenger` contract must be deployed to the same contract address on every chain. To achieve this, the contract can be deployed using a static transaction that uses Nick's method as documented in [this guide](../..//utils/contract-deployment/README.md). Alternatively, if creating a new L1, the contract can be pre-allocated with the proper address and state in the new chain's [genesis file](https://docs.avax.network/build/subnet/upgrade/customize-a-subnet#setting-the-genesis-allocation).
As an example, to include `TeleporterMessenger` `v1.0.0` in the genesis file, include the following values in the `alloc` settings, as documented at the link above. The `storage` values included below correspond to the two contract values that are initialized as part of the default constructor of `TeleporterMessenger`. These are the `ReentrancyGuard` values set in this [abstract contract](../utilities/ReentrancyGuards.sol). Future versions of `TeleporterMessenger` may require different storage value initializations.
```json
diff --git a/contracts/teleporter/registry/UPGRADING.md b/contracts/teleporter/registry/UPGRADING.md
index 1394cd974..d4fc3d1d2 100644
--- a/contracts/teleporter/registry/UPGRADING.md
+++ b/contracts/teleporter/registry/UPGRADING.md
@@ -1,6 +1,6 @@
# Upgrading Teleporter
-This document outlines the high-level steps necessary to upgrade Teleporter as a subnet operator, a relayer operator, and a dApp admin. As a reference, the [Teleporter Registry test suite](../../../tests/flows/teleporter_registry.go) implements the steps described in a test environment.
+This document outlines the high-level steps necessary to upgrade Teleporter as an Avalanche L1 operator, a relayer operator, and a dApp admin. As a reference, the [Teleporter Registry test suite](../../../tests/flows/teleporter_registry.go) implements the steps described in a test environment.
## Register a New Teleporter Version
diff --git a/contracts/teleporter/tests/AddFeeAmountTests.t.sol b/contracts/teleporter/tests/AddFeeAmountTests.t.sol
index c449cb47b..1b85cf321 100644
--- a/contracts/teleporter/tests/AddFeeAmountTests.t.sol
+++ b/contracts/teleporter/tests/AddFeeAmountTests.t.sol
@@ -66,7 +66,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest {
bytes32 messageID =
_sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount);
- // Now mock receiving a message back from that subnet with a receipt of the above message.
+ // Now mock receiving a message back from that L1 with a receipt of the above message.
address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234;
TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](1);
receipts[0] = TeleporterMessageReceipt({
diff --git a/contracts/teleporter/tests/GetFeeInfoTests.t.sol b/contracts/teleporter/tests/GetFeeInfoTests.t.sol
index 526c0c280..e7b9a856a 100644
--- a/contracts/teleporter/tests/GetFeeInfoTests.t.sol
+++ b/contracts/teleporter/tests/GetFeeInfoTests.t.sol
@@ -49,7 +49,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest {
uint256 expectedNonce = _getNextMessageNonce();
bytes32 messageID = _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, feeAmount);
- // Now mock receiving a message back from that subnet with a receipt of the above message.
+ // Now mock receiving a message back from that L1 with a receipt of the above message.
address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234;
TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](1);
receipts[0] = TeleporterMessageReceipt({
diff --git a/contracts/teleporter/tests/GetMessageHashTests.t.sol b/contracts/teleporter/tests/GetMessageHashTests.t.sol
index 8ffc1a0c0..c606c91c2 100644
--- a/contracts/teleporter/tests/GetMessageHashTests.t.sol
+++ b/contracts/teleporter/tests/GetMessageHashTests.t.sol
@@ -46,7 +46,7 @@ contract GetMessageHashTest is TeleporterMessengerTest {
uint256 expectedNonce = _getNextMessageNonce();
bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID);
- // Now mock receiving a message back from that subnet with a receipt of the above message.
+ // Now mock receiving a message back from that L1 with a receipt of the above message.
address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234;
TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](1);
receipts[0] = TeleporterMessageReceipt({
diff --git a/contracts/teleporter/tests/HandleInitialMessageExecutionTests.t.sol b/contracts/teleporter/tests/HandleInitialMessageExecutionTests.t.sol
index 890950851..12388e7c8 100644
--- a/contracts/teleporter/tests/HandleInitialMessageExecutionTests.t.sol
+++ b/contracts/teleporter/tests/HandleInitialMessageExecutionTests.t.sol
@@ -22,7 +22,7 @@ enum SampleMessageReceiverAction {
contract SampleMessageReceiver is ITeleporterReceiver {
address public immutable teleporterContract;
string public latestMessage;
- bytes32 public latestMessageSenderSubnetID;
+ bytes32 public latestMessageSenderL1ID;
address public latestMessageSenderAddress;
constructor(address teleporterContractAddress) {
@@ -59,7 +59,7 @@ contract SampleMessageReceiver is ITeleporterReceiver {
require(msg.sender == teleporterContract, "unauthorized");
require(succeed, "intended to fail");
latestMessage = message;
- latestMessageSenderSubnetID = sourceBlockchainID;
+ latestMessageSenderL1ID = sourceBlockchainID;
latestMessageSenderAddress = originSenderAddress;
}
@@ -73,7 +73,7 @@ contract SampleMessageReceiver is ITeleporterReceiver {
ITeleporterMessenger messenger = ITeleporterMessenger(teleporterContract);
messenger.receiveCrossChainMessage(0, address(42));
latestMessage = message;
- latestMessageSenderSubnetID = sourceBlockchainID;
+ latestMessageSenderL1ID = sourceBlockchainID;
latestMessageSenderAddress = originSenderAddress;
}
}
@@ -128,7 +128,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest {
// Check that the message had the proper affect on the destination contract.
assertEq(destinationContract.latestMessage(), messageString);
- assertEq(destinationContract.latestMessageSenderSubnetID(), DEFAULT_SOURCE_BLOCKCHAIN_ID);
+ assertEq(destinationContract.latestMessageSenderL1ID(), DEFAULT_SOURCE_BLOCKCHAIN_ID);
assertEq(destinationContract.latestMessageSenderAddress(), address(this));
assertEq(
teleporterMessenger.getRelayerRewardAddress(expectedMessageID),
@@ -203,7 +203,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest {
// Check that the message hash was stored in state and the message did not have any affect on the destination.
assertEq(destinationContract.latestMessage(), "");
- assertEq(destinationContract.latestMessageSenderSubnetID(), bytes32(0));
+ assertEq(destinationContract.latestMessageSenderL1ID(), bytes32(0));
assertEq(destinationContract.latestMessageSenderAddress(), address(0));
assertEq(
teleporterMessenger.getRelayerRewardAddress(messageID), DEFAULT_RELAYER_REWARD_ADDRESS
@@ -251,7 +251,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest {
// Check that the message hash was stored in state and the message did not have any affect on the destination.
assertEq(destinationContract.latestMessage(), "");
- assertEq(destinationContract.latestMessageSenderSubnetID(), bytes32(0));
+ assertEq(destinationContract.latestMessageSenderL1ID(), bytes32(0));
assertEq(destinationContract.latestMessageSenderAddress(), address(0));
assertEq(
teleporterMessenger.getRelayerRewardAddress(messageID), DEFAULT_RELAYER_REWARD_ADDRESS
diff --git a/contracts/teleporter/tests/MarkReceiptTests.t.sol b/contracts/teleporter/tests/MarkReceiptTests.t.sol
index aba701173..6f5cc1ac7 100644
--- a/contracts/teleporter/tests/MarkReceiptTests.t.sol
+++ b/contracts/teleporter/tests/MarkReceiptTests.t.sol
@@ -26,8 +26,8 @@ contract MarkReceiptTest is TeleporterMessengerTest {
TeleporterMessengerTest.setUp();
}
- // This test first mocks sending 3 messages (each with fees) to a different subnet.
- // It then mocks receiving a message back from that subnet with the receipt information
+ // This test first mocks sending 3 messages (each with fees) to a different L1.
+ // It then mocks receiving a message back from that L1 with the receipt information
// for each of the 3 messages sent, and checks that the relayers can redeem their rewards.
function testCheckRelayersUponReceipt() public {
// Submit a few mock messages to be sent.
diff --git a/contracts/teleporter/tests/MessageReceivedTests.t.sol b/contracts/teleporter/tests/MessageReceivedTests.t.sol
index 81a920334..fb7221400 100644
--- a/contracts/teleporter/tests/MessageReceivedTests.t.sol
+++ b/contracts/teleporter/tests/MessageReceivedTests.t.sol
@@ -16,7 +16,7 @@ contract MessageReceivedTest is TeleporterMessengerTest {
}
function testReceivedMessage() public {
- // Mock receiving a message from another subnet.
+ // Mock receiving a message from another L1.
address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234;
uint256 messageNonce = 1;
bytes32 messageID = teleporterMessenger.calculateMessageID(
diff --git a/contracts/teleporter/tests/RedeemRelayerRewardsTests.t.sol b/contracts/teleporter/tests/RedeemRelayerRewardsTests.t.sol
index d756be83e..f551b50f1 100644
--- a/contracts/teleporter/tests/RedeemRelayerRewardsTests.t.sol
+++ b/contracts/teleporter/tests/RedeemRelayerRewardsTests.t.sol
@@ -101,7 +101,7 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest {
);
}
- // Mocks sending a message with the given fee info to another subnet, and then
+ // Mocks sending a message with the given fee info to another L1, and then
// receiving back a message with receipt of that message such that the relayer
// is able to redeem the reward.
function _setUpRelayerRewards(FeeRewardInfo memory feeRewardInfo) private {
diff --git a/contracts/teleporter/tests/RetryMessageExecutionTests.t.sol b/contracts/teleporter/tests/RetryMessageExecutionTests.t.sol
index 890640f75..1f34c3b94 100644
--- a/contracts/teleporter/tests/RetryMessageExecutionTests.t.sol
+++ b/contracts/teleporter/tests/RetryMessageExecutionTests.t.sol
@@ -25,7 +25,7 @@ enum FlakyMessageReceiverAction {
contract FlakyMessageReceiver is ITeleporterReceiver {
address public immutable teleporterContract;
string public latestMessage;
- bytes32 public latestMessageSenderSubnetID;
+ bytes32 public latestMessageSenderL1ID;
address public latestMessageSenderAddress;
constructor(address teleporterContractAddress) {
@@ -61,7 +61,7 @@ contract FlakyMessageReceiver is ITeleporterReceiver {
require(msg.sender == teleporterContract, "unauthorized");
require(block.number % 2 != 0, "even block number");
latestMessage = message;
- latestMessageSenderSubnetID = sourceBlockchainID;
+ latestMessageSenderL1ID = sourceBlockchainID;
latestMessageSenderAddress = originSenderAddress;
}
@@ -77,7 +77,7 @@ contract FlakyMessageReceiver is ITeleporterReceiver {
ITeleporterMessenger messenger = ITeleporterMessenger(teleporterContract);
messenger.receiveCrossChainMessage(0, address(42));
latestMessage = message;
- latestMessageSenderSubnetID = sourceBlockchainID;
+ latestMessageSenderL1ID = sourceBlockchainID;
latestMessageSenderAddress = originSenderAddress;
}
}
@@ -227,7 +227,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest {
// Check that the message execution didn't have any effect, but
// the message was marked as marked as delivered.
assertEq(destinationContract.latestMessage(), "");
- assertEq(destinationContract.latestMessageSenderSubnetID(), bytes32(0));
+ assertEq(destinationContract.latestMessageSenderL1ID(), bytes32(0));
assertEq(destinationContract.latestMessageSenderAddress(), address(0));
assertEq(
teleporterMessenger.getRelayerRewardAddress(messageID), DEFAULT_RELAYER_REWARD_ADDRESS
@@ -255,7 +255,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest {
// Check that the message had the proper affect on the destination contract.
assertEq(destinationContract.latestMessage(), messageString);
- assertEq(destinationContract.latestMessageSenderSubnetID(), sourceBlockchainID);
+ assertEq(destinationContract.latestMessageSenderL1ID(), sourceBlockchainID);
assertEq(destinationContract.latestMessageSenderAddress(), address(this));
return (sourceBlockchainID, message);
diff --git a/contracts/utilities/TokenScalingUtils.sol b/contracts/utilities/TokenScalingUtils.sol
index c33b2cde8..620ddcb45 100644
--- a/contracts/utilities/TokenScalingUtils.sol
+++ b/contracts/utilities/TokenScalingUtils.sol
@@ -59,7 +59,7 @@ library TokenScalingUtils {
/**
* @dev Scales {value} based on {tokenMultiplier} and if the amount is applying or
* removing the TokenRemote instance's token scale.
- * Should be used for all tokens and fees being transferred to/from other subnets.
+ * Should be used for all tokens and fees being transferred to/from other L1s.
* @param tokenMultiplier The token multiplier of the TokenRemote instance.
* @param multiplyOnRemote Whether the amount of home tokens will be multiplied on the remote, or divided.
* @param amount The amount of tokens to scale.
diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md
index ef63c1bba..9a142e784 100644
--- a/contracts/validator-manager/README.md
+++ b/contracts/validator-manager/README.md
@@ -52,7 +52,7 @@ Three concrete `ValidatorManager` contracts are provided - `PoAValidatorManager`
4. Initialize the validator set by calling `initializeValidatorSet`
-- When a Subnet is first created on the P-Chain, it must be explicitly converted to an L1 via [`ConvertSubnetToL1Tx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#convertsubnettol1tx). The resulting `SubnetToL1ConversionMessage` Warp [message](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#subnettol1conversionmessage) is provided in the call to `initializeValidatorSet` to specify the starting validator set in the `ValidatorManager`. Regardless of the implementation, these initial validators are treated as PoA and are not eligible for staking rewards.
+- When an L1 is first created on the P-Chain, it must be explicitly converted to an L1 via [`ConvertSubnetToL1Tx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#convertsubnettol1tx). The resulting `SubnetToL1ConversionMessage` Warp [message](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#subnettol1conversionmessage) is provided in the call to `initializeValidatorSet` to specify the starting validator set in the `ValidatorManager`. Regardless of the implementation, these initial validators are treated as PoA and are not eligible for staking rewards.
### PoAValidatorManager
diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol
index 28103f90d..b07673887 100644
--- a/contracts/validator-manager/ValidatorManager.sol
+++ b/contracts/validator-manager/ValidatorManager.sol
@@ -36,8 +36,8 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
/// @custom:storage-location erc7201:avalanche-icm.storage.ValidatorManager
struct ValidatorManagerStorage {
- /// @notice The subnetID associated with this validator manager.
- bytes32 _subnetID;
+ /// @notice The l1ID associated with this validator manager.
+ bytes32 _l1ID;
/// @notice The number of seconds after which to reset the churn tracker.
uint64 _churnPeriodSeconds;
/// @notice The maximum churn rate allowed per churn period.
@@ -118,7 +118,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
onlyInitializing
{
ValidatorManagerStorage storage $ = _getValidatorManagerStorage();
- $._subnetID = settings.subnetID;
+ $._l1ID = settings.l1ID;
if (
settings.maximumChurnPercentage > MAXIMUM_CHURN_PERCENTAGE_LIMIT
@@ -150,7 +150,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
revert InvalidInitializationStatus();
}
// Check that the blockchainID and validator manager address in the ConversionData correspond to this contract.
- // Other validation checks are done by the P-Chain when converting the subnet, so are not required here.
+ // Other validation checks are done by the P-Chain when converting the L1, so are not required here.
if (conversionData.validatorManagerBlockchainID != WARP_MESSENGER.getBlockchainID()) {
revert InvalidValidatorManagerBlockchainID(conversionData.validatorManagerBlockchainID);
}
@@ -168,8 +168,8 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
}
// Validation ID of the initial validators is the sha256 hash of the
- // convert Subnet tx ID and the index of the initial validator.
- bytes32 validationID = sha256(abi.encodePacked(conversionData.subnetID, i));
+ // convert L1 to L1 tx ID and the index of the initial validator.
+ bytes32 validationID = sha256(abi.encodePacked(conversionData.l1ID, i));
// Save the initial validator as an active validator.
@@ -195,7 +195,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
revert InvalidTotalWeight(totalWeight);
}
- // Verify that the sha256 hash of the Subnet conversion data matches with the Warp message's conversionID.
+ // Verify that the sha256 hash of the L1 conversion data matches with the Warp message's conversionID.
bytes32 conversionID = ValidatorMessages.unpackSubnetToL1ConversionMessage(
_getPChainWarpMessage(messageIndex).payload
);
@@ -267,7 +267,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
(bytes32 validationID, bytes memory registerSubnetValidatorMessage) = ValidatorMessages
.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
- subnetID: $._subnetID,
+ l1ID: $._l1ID,
nodeID: input.nodeID,
blsPublicKey: input.blsPublicKey,
remainingBalanceOwner: input.remainingBalanceOwner,
diff --git a/contracts/validator-manager/ValidatorMessages.sol b/contracts/validator-manager/ValidatorMessages.sol
index 3b197f10d..4c9185869 100644
--- a/contracts/validator-manager/ValidatorMessages.sol
+++ b/contracts/validator-manager/ValidatorMessages.sol
@@ -11,11 +11,11 @@ import {PChainOwner, ConversionData} from "./interfaces/IValidatorManager.sol";
* https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets
*/
library ValidatorMessages {
- // The information that uniquely identifies a subnet validation period.
+ // The information that uniquely identifies an L1 validation period.
// The validationID is the SHA-256 hash of the concatenation of the CODEC_ID,
// REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID, and the concatenated ValidationPeriod fields.
struct ValidationPeriod {
- bytes32 subnetID;
+ bytes32 l1ID;
bytes nodeID;
bytes blsPublicKey;
uint64 registrationExpiry;
@@ -126,7 +126,7 @@ library ValidatorMessages {
* +----------------+-----------------+--------------------------------------------------------+
* | codecID : uint16 | 2 bytes |
* +----------------+-----------------+--------------------------------------------------------+
- * | subnetID : [32]byte | 32 bytes |
+ * | l1ID : [32]byte | 32 bytes |
* +----------------+-----------------+--------------------------------------------------------+
* | managerChainID : [32]byte | 32 bytes |
* +----------------+-----------------+--------------------------------------------------------+
@@ -161,7 +161,7 @@ library ValidatorMessages {
// solhint-disable-next-line func-named-parameters
bytes memory res = abi.encodePacked(
CODEC_ID,
- conversionData.subnetID,
+ conversionData.l1ID,
conversionData.validatorManagerBlockchainID,
uint32(20),
conversionData.validatorManagerAddress,
@@ -192,7 +192,7 @@ library ValidatorMessages {
* +-----------------------+-------------+--------------------------------------------------------------------+
* | typeID : uint32 | 4 bytes |
* +-----------------------+-------------+-------------------------------------------------------------------+
- * | subnetID : [32]byte | 32 bytes |
+ * | l1ID : [32]byte | 32 bytes |
* +-----------------------+-------------+--------------------------------------------------------------------+
* | nodeID : []byte | 4 + len(nodeID) bytes |
* +-----------------------+-------------+--------------------------------------------------------------------+
@@ -234,7 +234,7 @@ library ValidatorMessages {
bytes memory res = abi.encodePacked(
CODEC_ID,
REGISTER_L1_VALIDATOR_MESSAGE_TYPE_ID,
- validationPeriod.subnetID,
+ validationPeriod.l1ID,
uint32(validationPeriod.nodeID.length),
validationPeriod.nodeID,
validationPeriod.blsPublicKey,
@@ -298,13 +298,13 @@ library ValidatorMessages {
index += 4;
}
- // Unpack the subnetID
+ // Unpack the l1ID
{
- bytes32 subnetID;
+ bytes32 l1ID;
for (uint256 i; i < 32; ++i) {
- subnetID |= bytes32(uint256(uint8(input[i + index])) << (8 * (31 - i)));
+ l1ID |= bytes32(uint256(uint8(input[i + index])) << (8 * (31 - i)));
}
- validation.subnetID = subnetID;
+ validation.l1ID = l1ID;
index += 32;
}
diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol
index 0b8d429cc..660e64858 100644
--- a/contracts/validator-manager/interfaces/IValidatorManager.sol
+++ b/contracts/validator-manager/interfaces/IValidatorManager.sol
@@ -53,7 +53,7 @@ struct ValidatorChurnPeriod {
* @dev Validator Manager settings, used to initialize the Validator Manager
*/
struct ValidatorManagerSettings {
- bytes32 subnetID;
+ bytes32 l1ID;
uint64 churnPeriodSeconds;
uint8 maximumChurnPercentage;
}
@@ -65,7 +65,7 @@ struct ValidatorManagerSettings {
* and verified by the Validator Manager.
*/
struct ConversionData {
- bytes32 subnetID;
+ bytes32 l1ID;
bytes32 validatorManagerBlockchainID;
address validatorManagerAddress;
InitialValidator[] initialValidators;
diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol
index e6227409a..7fcaccf61 100644
--- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol
+++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol
@@ -46,7 +46,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -73,7 +73,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -99,7 +99,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -123,7 +123,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -150,7 +150,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -177,7 +177,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -201,7 +201,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -305,7 +305,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol
index e0ac95b16..50b742eed 100644
--- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol
+++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol
@@ -41,7 +41,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -67,7 +67,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -92,7 +92,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -115,7 +115,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -141,7 +141,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -164,7 +164,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -190,7 +190,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
@@ -272,7 +272,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest {
app.initialize(
PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
index fd6e8ba51..75da40e37 100644
--- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
@@ -69,7 +69,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest {
app = new PoAValidatorManager(ICMInitializable.Allowed);
app.initialize(
ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
index 38f7102bd..0c2976d35 100644
--- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
@@ -1156,7 +1156,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
}
function testInitializeEndValidationPoAValidator() public {
- bytes32 defaultInitialValidationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(1)));
+ bytes32 defaultInitialValidationID = sha256(abi.encodePacked(DEFAULT_L1_ID, uint32(1)));
vm.warp(DEFAULT_COMPLETION_TIMESTAMP);
bytes memory setValidatorWeightPayload =
diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol
index 7c89a351e..b2140b9ba 100644
--- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol
@@ -22,7 +22,7 @@ import {
// TODO: Remove this once all unit tests implemented
// solhint-disable no-empty-blocks
abstract contract ValidatorManagerTest is Test {
- bytes32 public constant DEFAULT_SUBNET_ID =
+ bytes32 public constant DEFAULT_L1_ID =
bytes32(hex"1234567812345678123456781234567812345678123456781234567812345678");
bytes public constant DEFAULT_NODE_ID =
bytes(hex"1234567812345678123456781234567812345678123456781234567812345678");
@@ -92,11 +92,7 @@ abstract contract ValidatorManagerTest is Test {
function testInitializeValidatorRegistrationSuccess() public {
_setUpInitializeValidatorRegistration(
- DEFAULT_NODE_ID,
- DEFAULT_SUBNET_ID,
- DEFAULT_WEIGHT,
- DEFAULT_EXPIRY,
- DEFAULT_BLS_PUBLIC_KEY
+ DEFAULT_NODE_ID, DEFAULT_L1_ID, DEFAULT_WEIGHT, DEFAULT_EXPIRY, DEFAULT_BLS_PUBLIC_KEY
);
}
@@ -186,16 +182,12 @@ abstract contract ValidatorManagerTest is Test {
// reference to the abstract type.
function testResendRegisterValidatorMessage() public {
bytes32 validationID = _setUpInitializeValidatorRegistration(
- DEFAULT_NODE_ID,
- DEFAULT_SUBNET_ID,
- DEFAULT_WEIGHT,
- DEFAULT_EXPIRY,
- DEFAULT_BLS_PUBLIC_KEY
+ DEFAULT_NODE_ID, DEFAULT_L1_ID, DEFAULT_WEIGHT, DEFAULT_EXPIRY, DEFAULT_BLS_PUBLIC_KEY
);
(, bytes memory registerSubnetValidatorMessage) = ValidatorMessages
.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
nodeID: DEFAULT_NODE_ID,
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY,
registrationExpiry: DEFAULT_EXPIRY,
@@ -274,11 +266,7 @@ abstract contract ValidatorManagerTest is Test {
function testCompleteInvalidatedValidation() public {
bytes32 validationID = _setUpInitializeValidatorRegistration(
- DEFAULT_NODE_ID,
- DEFAULT_SUBNET_ID,
- DEFAULT_WEIGHT,
- DEFAULT_EXPIRY,
- DEFAULT_BLS_PUBLIC_KEY
+ DEFAULT_NODE_ID, DEFAULT_L1_ID, DEFAULT_WEIGHT, DEFAULT_EXPIRY, DEFAULT_BLS_PUBLIC_KEY
);
bytes memory subnetValidatorRegistrationMessage =
ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false);
@@ -314,7 +302,7 @@ abstract contract ValidatorManagerTest is Test {
);
manager.initializeValidatorSet(_defaultConversionDataTotalWeight5(), 0);
- bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0)));
+ bytes32 validationID = sha256(abi.encodePacked(DEFAULT_L1_ID, uint32(0)));
vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4));
_forceInitializeEndValidation(validationID, false);
}
@@ -327,7 +315,7 @@ abstract contract ValidatorManagerTest is Test {
// First registration should succeed
_registerValidator({
nodeID: _newNodeID(),
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
weight: churnThreshold,
registrationExpiry: DEFAULT_EXPIRY,
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY,
@@ -359,7 +347,7 @@ abstract contract ValidatorManagerTest is Test {
// Registration should succeed
bytes32 validationID = _registerValidator({
nodeID: DEFAULT_NODE_ID,
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
weight: _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT),
registrationExpiry: DEFAULT_EXPIRY,
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY,
@@ -373,7 +361,7 @@ abstract contract ValidatorManagerTest is Test {
// Registration should succeed
_registerValidator({
nodeID: _newNodeID(),
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
weight: churnThreshold,
registrationExpiry: DEFAULT_EXPIRY + 25 hours,
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY,
@@ -406,7 +394,7 @@ abstract contract ValidatorManagerTest is Test {
function _setUpInitializeValidatorRegistration(
bytes memory nodeID,
- bytes32 subnetID,
+ bytes32 l1ID,
uint64 weight,
uint64 registrationExpiry,
bytes memory blsPublicKey
@@ -414,7 +402,7 @@ abstract contract ValidatorManagerTest is Test {
(validationID,) = ValidatorMessages.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
nodeID: nodeID,
- subnetID: subnetID,
+ l1ID: l1ID,
blsPublicKey: blsPublicKey,
registrationExpiry: registrationExpiry,
remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER,
@@ -425,7 +413,7 @@ abstract contract ValidatorManagerTest is Test {
(, bytes memory registerSubnetValidatorMessage) = ValidatorMessages
.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
- subnetID: subnetID,
+ l1ID: l1ID,
nodeID: nodeID,
blsPublicKey: blsPublicKey,
registrationExpiry: registrationExpiry,
@@ -455,14 +443,14 @@ abstract contract ValidatorManagerTest is Test {
function _registerValidator(
bytes memory nodeID,
- bytes32 subnetID,
+ bytes32 l1ID,
uint64 weight,
uint64 registrationExpiry,
bytes memory blsPublicKey,
uint64 registrationTimestamp
) internal returns (bytes32 validationID) {
validationID = _setUpInitializeValidatorRegistration(
- nodeID, subnetID, weight, registrationExpiry, blsPublicKey
+ nodeID, l1ID, weight, registrationExpiry, blsPublicKey
);
bytes memory subnetValidatorRegistrationMessage =
ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, true);
@@ -501,7 +489,7 @@ abstract contract ValidatorManagerTest is Test {
function _registerDefaultValidator() internal returns (bytes32 validationID) {
return _registerValidator({
nodeID: DEFAULT_NODE_ID,
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
weight: DEFAULT_WEIGHT,
registrationExpiry: DEFAULT_EXPIRY,
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY,
@@ -609,7 +597,7 @@ abstract contract ValidatorManagerTest is Test {
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY
});
return ConversionData({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
validatorManagerBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID,
validatorManagerAddress: address(validatorManager),
initialValidators: initialValidators
@@ -631,7 +619,7 @@ abstract contract ValidatorManagerTest is Test {
});
return ConversionData({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
validatorManagerBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID,
validatorManagerAddress: address(validatorManager),
initialValidators: initialValidators
@@ -653,7 +641,7 @@ abstract contract ValidatorManagerTest is Test {
});
return ConversionData({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
validatorManagerBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID,
validatorManagerAddress: address(validatorManager),
initialValidators: initialValidators
diff --git a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
index 9193484b5..a3db54089 100644
--- a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
+++ b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
@@ -10,7 +10,7 @@ import {ValidatorMessages} from "../ValidatorMessages.sol";
import {PChainOwner} from "../interfaces/IValidatorManager.sol";
contract ValidatorMessagesTest is Test {
- bytes32 public constant DEFAULT_SUBNET_ID =
+ bytes32 public constant DEFAULT_L1_ID =
bytes32(hex"1234567812345678123456781234567812345678123456781234567812345678");
bytes public constant DEFAULT_NODE_ID =
bytes(hex"1234567812345678123456781234567812345678123456781234567812345678");
@@ -34,7 +34,7 @@ contract ValidatorMessagesTest is Test {
(bytes32 validationID, bytes memory packed) = ValidatorMessages
.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
- subnetID: DEFAULT_SUBNET_ID,
+ l1ID: DEFAULT_L1_ID,
nodeID: DEFAULT_NODE_ID,
registrationExpiry: DEFAULT_EXPIRY,
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY,
@@ -46,7 +46,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.ValidationPeriod memory info =
ValidatorMessages.unpackRegisterL1ValidatorMessage(packed);
- assertEq(info.subnetID, DEFAULT_SUBNET_ID);
+ assertEq(info.l1ID, DEFAULT_L1_ID);
assertEq(info.nodeID, DEFAULT_NODE_ID);
assertEq(info.weight, DEFAULT_WEIGHT);
assertEq(info.registrationExpiry, DEFAULT_EXPIRY);
diff --git a/tests/flows/governance/validator_set_sig.go b/tests/flows/governance/validator_set_sig.go
index 33bec5062..6a757c89f 100644
--- a/tests/flows/governance/validator_set_sig.go
+++ b/tests/flows/governance/validator_set_sig.go
@@ -17,63 +17,63 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
// ************************************************************************************************
// Setup
// ************************************************************************************************
- // Deploy ValidatorSetSig expecting signatures from subnetB instances to both subnets
- // Deploy exampleERC20 instance to both subnets
+ // Deploy ValidatorSetSig expecting signatures from L1B instances to both L1s
+ // Deploy exampleERC20 instance to both L1s
// Construct ValidatorSetSig message with mock ERC20 as the target contract
- // Create off-chain Warp messages using the ValidatorSetSig message to be signed by the subnetB
+ // Create off-chain Warp messages using the ValidatorSetSig message to be signed by the L1B
// ************************************************************************************************
- // Test Case 1: validatorChain (subnetB) != targetChain (subnetA)
+ // Test Case 1: validatorChain (L1B) != targetChain (L1A)
// ************************************************************************************************
- // Send the off-chain message to subnetA instance of ValidatorSetSig and confirm it is accepted.
+ // Send the off-chain message to L1A instance of ValidatorSetSig and confirm it is accepted.
// Confirm the event is emitted
// Retry the same message and confirm it fails
// Send a new message with incremented nonce and confirm it is accepted.
// ************************************************************************************************
- // Test Case 2: validatorChain (subnetB) == targetChain (subnetB)
+ // Test Case 2: validatorChain (L1B) == targetChain (L1B)
// ************************************************************************************************
- // Send a new message to subnetB instance of ValidatorSetSig and confirm it is accepted
+ // Send a new message to L1B instance of ValidatorSetSig and confirm it is accepted
// ************************************************************************************************
// Setup
// ************************************************************************************************
- subnetA, subnetB := network.GetTwoSubnets()
+ L1A, L1B := network.GetTwoL1s()
_, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
- // Deploy a ValidatorSetSigContract to subnetA
+ // Deploy a ValidatorSetSigContract to L1A
validatorSetSigContractAddress, validatorSetSig := utils.DeployValidatorSetSig(
ctx,
fundedKey,
- subnetA,
- subnetB,
+ L1A,
+ L1B,
)
- // Deploy a ValidatorSetSigContract to subnetB
+ // Deploy a ValidatorSetSigContract to L1B
validatorSetSigContractAddress2, validatorSetSig2 := utils.DeployValidatorSetSig(
ctx,
fundedKey,
- subnetB,
- subnetB,
+ L1B,
+ L1B,
)
- // Deploy a mock ERC20 contract to subnetA
+ // Deploy a mock ERC20 contract to L1A
exampleERC20ContractAddressA, exampleERC20A := utils.DeployExampleERC20(
ctx,
fundedKey,
- subnetA,
+ L1A,
)
- // Deploy a new example ERC20 contract this time to the same subnet as the validator.
+ // Deploy a new example ERC20 contract this time to the same L1 as the validator.
exampleERC20ContractAddressB, exampleERC20B := utils.DeployExampleERC20(
ctx,
fundedKey,
- subnetB,
+ L1B,
)
erc20ABI, err := exampleerc20.ExampleERC20MetaData.GetAbi()
Expect(err).Should(BeNil())
- // Confirm that the validatorContract has a balance of 0 on the example erc20 contracts on both subnets
+ // Confirm that the validatorContract has a balance of 0 on the example erc20 contracts on both L1s
startingBalanceA, err := exampleERC20A.BalanceOf(
&bind.CallOpts{}, validatorSetSigContractAddress)
Expect(err).Should(BeNil())
@@ -92,7 +92,7 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
vssMessage1 := validatorsetsig.ValidatorSetSigMessage{
ValidatorSetSigAddress: validatorSetSigContractAddress,
TargetContractAddress: exampleERC20ContractAddressA,
- TargetBlockchainID: subnetA.BlockchainID,
+ TargetBlockchainID: L1A.BlockchainID,
Nonce: big.NewInt(0),
Value: big.NewInt(0),
Payload: callData,
@@ -105,7 +105,7 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
vssMessage2 := validatorsetsig.ValidatorSetSigMessage{
ValidatorSetSigAddress: validatorSetSigContractAddress,
TargetContractAddress: exampleERC20ContractAddressA,
- TargetBlockchainID: subnetA.BlockchainID,
+ TargetBlockchainID: L1A.BlockchainID,
Nonce: big.NewInt(1),
Value: big.NewInt(0),
Payload: callData2,
@@ -120,7 +120,7 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
vssMessage3 := validatorsetsig.ValidatorSetSigMessage{
ValidatorSetSigAddress: validatorSetSigContractAddress2,
TargetContractAddress: exampleERC20ContractAddressB,
- TargetBlockchainID: subnetB.BlockchainID,
+ TargetBlockchainID: L1B.BlockchainID,
Nonce: big.NewInt(0),
Value: big.NewInt(0),
Payload: callData3,
@@ -130,14 +130,14 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
networkID := network.GetNetworkID()
offchainMessages, warpEnabledChainConfigWithMsg := utils.InitOffChainMessageChainConfigValidatorSetSig(
networkID,
- subnetB,
+ L1B,
validatorSetSigContractAddress,
[]validatorsetsig.ValidatorSetSigMessage{vssMessage1, vssMessage2, vssMessage3},
)
// Create chain config with off-chain messages
chainConfigs := make(utils.ChainConfigMap)
- chainConfigs.Add(subnetB, warpEnabledChainConfigWithMsg)
+ chainConfigs.Add(L1B, warpEnabledChainConfigWithMsg)
// Restart nodes with new chain config
network.SetChainConfigs(chainConfigs)
@@ -146,14 +146,14 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
network.RestartNodes(restartCtx, nil)
// ************************************************************************************************
- // Test Case 1: validatorChain (subnetB) != targetChain (subnetA)
+ // Test Case 1: validatorChain (L1B) != targetChain (L1A)
// ************************************************************************************************
// Execute the ValidatorSetSig executeCall and wait for acceptance
receipt := network.ExecuteValidatorSetSigCallAndVerify(
ctx,
- subnetB,
- subnetA,
+ L1B,
+ L1A,
validatorSetSigContractAddress,
fundedKey,
&offchainMessages[0],
@@ -174,8 +174,8 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
_ = network.ExecuteValidatorSetSigCallAndVerify(
ctx,
- subnetB,
- subnetA,
+ L1B,
+ L1A,
validatorSetSigContractAddress,
fundedKey,
&offchainMessages[0],
@@ -190,8 +190,8 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
// Send another valid transaction with the incremented nonce
receipt2 := network.ExecuteValidatorSetSigCallAndVerify(
ctx,
- subnetB,
- subnetA,
+ L1B,
+ L1A,
validatorSetSigContractAddress,
fundedKey,
&offchainMessages[1],
@@ -214,15 +214,15 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
Expect(startingBalanceB.Cmp(big.NewInt(0))).Should(BeZero())
// ************************************************************************************************
- // Test Case 2: validatorChain (subnetB) == targetChain (subnetB)
+ // Test Case 2: validatorChain (L1B) == targetChain (L1B)
// ************************************************************************************************
// Send the third transaction where the validatorSetSig contract expects validator signatures
// from the same chain that it is deployed on.
receipt3 := network.ExecuteValidatorSetSigCallAndVerify(
ctx,
- subnetB,
- subnetB,
+ L1B,
+ L1B,
validatorSetSigContractAddress2,
fundedKey,
&offchainMessages[2],
diff --git a/tests/flows/ictt/erc20_home_erc20_remote.go b/tests/flows/ictt/erc20_home_erc20_remote.go
index 7a60776dd..d1acc7cb4 100644
--- a/tests/flows/ictt/erc20_home_erc20_remote.go
+++ b/tests/flows/ictt/erc20_home_erc20_remote.go
@@ -16,13 +16,13 @@ import (
/**
* Deploy an ERC20TokenHome on the primary network
- * Deploys ERC20TokenRemote to Subnet A
- * Transfers C-Chain example ERC20 tokens to Subnet A
- * Transfer tokens from Subnet A to C-Chain
+ * Deploys ERC20TokenRemote to L1 A
+ * Transfers C-Chain example ERC20 tokens to L1 A
+ * Transfer tokens from L1 A to C-Chain
*/
func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -49,7 +49,7 @@ func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleport
exampleERC20Decimals,
)
- // Token representation on subnet A will have same name, symbol, and decimals
+ // Token representation on L1 A will have same name, symbol, and decimals
tokenName, err := exampleERC20.Name(&bind.CallOpts{})
Expect(err).Should(BeNil())
tokenSymbol, err := exampleERC20.Symbol(&bind.CallOpts{})
@@ -57,12 +57,12 @@ func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleport
tokenDecimals, err := exampleERC20.Decimals(&bind.CallOpts{})
Expect(err).Should(BeNil())
- // Deploy an ERC20TokenRemote to Subnet A
+ // Deploy an ERC20TokenRemote to L1 A
erc20TokenRemoteAddress, erc20TokenRemote := utils.DeployERC20TokenRemote(
ctx,
teleporter,
fundedKey,
- subnetAInfo,
+ L1AInfo,
fundedAddress,
cChainInfo.BlockchainID,
erc20TokenHomeAddress,
@@ -77,7 +77,7 @@ func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleport
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteAddress,
fundedKey,
)
@@ -87,9 +87,9 @@ func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleport
Expect(err).Should(BeNil())
recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey)
- // Send tokens from C-Chain to recipient on subnet A
+ // Send tokens from C-Chain to recipient on L1 A
input := erc20tokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: erc20TokenRemoteAddress,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: exampleERC20Address,
@@ -110,12 +110,12 @@ func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleport
fundedKey,
)
- // Relay the message to Subnet A and check for message delivery
+ // Relay the message to L1 A and check for message delivery
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
@@ -134,10 +134,10 @@ func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleport
Expect(balance).Should(Equal(transferredAmount))
// Transfer back to home chain
- // Fund recipient with gas tokens on subnet A
+ // Fund recipient with gas tokens on L1 A
teleporterUtils.SendNativeTransfer(
ctx,
- subnetAInfo,
+ L1AInfo,
fundedKey,
recipientAddress,
big.NewInt(1e18),
@@ -154,7 +154,7 @@ func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleport
receipt, transferredAmount = utils.SendERC20TokenRemote(
ctx,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemote,
erc20TokenRemoteAddress,
inputB,
@@ -165,7 +165,7 @@ func ERC20TokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleport
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
- subnetAInfo,
+ L1AInfo,
cChainInfo,
true,
fundedKey,
diff --git a/tests/flows/ictt/erc20_home_erc20_remote_multihop.go b/tests/flows/ictt/erc20_home_erc20_remote_multihop.go
index 5f3addf52..4e91d232f 100644
--- a/tests/flows/ictt/erc20_home_erc20_remote_multihop.go
+++ b/tests/flows/ictt/erc20_home_erc20_remote_multihop.go
@@ -14,19 +14,19 @@ import (
/**
* Deploy a ERC20 token home on the primary network
- * Deploys ERC20 token remote to Subnet A and Subnet B
- * Transfers C-Chain example ERC20 tokens to Subnet A
- * Transfer tokens from Subnet A to Subnet B through multi-hop
- * Transfer back tokens from Subnet B to Subnet A through multi-hop
+ * Deploys ERC20 token remote to L1 A and L1 B
+ * Transfers C-Chain example ERC20 tokens to L1 A
+ * Transfer tokens from L1 A to L1 B through multi-hop
+ * Transfer back tokens from L1 B to L1 A through multi-hop
*/
func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, subnetBInfo := network.GetTwoSubnets()
+ L1AInfo, L1BInfo := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
- // Deploy an ExampleERC20 on subnet A as the token to be transferred
+ // Deploy an ExampleERC20 on L1 A as the token to be transferred
exampleERC20Address, exampleERC20 := utils.DeployExampleERC20Decimals(
ctx,
fundedKey,
@@ -48,7 +48,7 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
homeTokenDecimals,
)
- // Token representation on subnets A and B will have same name, symbol, and decimals
+ // Token representation on L1s A and B will have same name, symbol, and decimals
tokenName, err := exampleERC20.Name(&bind.CallOpts{})
Expect(err).Should(BeNil())
tokenSymbol, err := exampleERC20.Symbol(&bind.CallOpts{})
@@ -56,12 +56,12 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
tokenDecimals, err := exampleERC20.Decimals(&bind.CallOpts{})
Expect(err).Should(BeNil())
- // Deploy an ERC20TokenRemote tp Subnet A
+ // Deploy an ERC20TokenRemote tp L1 A
erc20TokenRemoteAddressA, erc20TokenRemoteA := utils.DeployERC20TokenRemote(
ctx,
teleporter,
fundedKey,
- subnetAInfo,
+ L1AInfo,
fundedAddress,
cChainInfo.BlockchainID,
erc20TokenHomeAddress,
@@ -71,12 +71,12 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
tokenDecimals,
)
- // Deploy an ERC20TokenRemote for Subnet B
+ // Deploy an ERC20TokenRemote for L1 B
erc20TokenRemoteAddressB, erc20TokenRemoteB := utils.DeployERC20TokenRemote(
ctx,
teleporter,
fundedKey,
- subnetBInfo,
+ L1BInfo,
fundedAddress,
cChainInfo.BlockchainID,
erc20TokenHomeAddress,
@@ -92,7 +92,7 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteAddressA,
fundedKey,
)
@@ -101,7 +101,7 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetBInfo,
+ L1BInfo,
erc20TokenRemoteAddressB,
fundedKey,
)
@@ -111,9 +111,9 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
Expect(err).Should(BeNil())
recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey)
- // Send tokens from C-Chain to Subnet A
+ // Send tokens from C-Chain to L1 A
input := erc20tokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: erc20TokenRemoteAddressA,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: exampleERC20Address,
@@ -134,12 +134,12 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
fundedKey,
)
- // Relay the message to subnet A and check for ERC20TokenRemote withdrawal
+ // Relay the message to L1 A and check for ERC20TokenRemote withdrawal
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
@@ -157,7 +157,7 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
Expect(err).Should(BeNil())
Expect(balance).Should(Equal(transferredAmount))
- // Multi-hop transfer to Subnet B
+ // Multi-hop transfer to L1 B
transferredAmount = big.NewInt(0).Div(transferredAmount, big.NewInt(2))
secondaryFeeAmount := big.NewInt(0).Div(transferredAmount, big.NewInt(4))
utils.SendERC20TokenMultiHopAndVerify(
@@ -166,10 +166,10 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
fundedKey,
recipientKey,
recipientAddress,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteA,
erc20TokenRemoteAddressA,
- subnetBInfo,
+ L1BInfo,
erc20TokenRemoteB,
erc20TokenRemoteAddressB,
cChainInfo,
@@ -177,7 +177,7 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
secondaryFeeAmount,
)
- // Multi-hop transfer back to Subnet A
+ // Multi-hop transfer back to L1 A
transferredAmount = big.NewInt(0).Sub(transferredAmount, secondaryFeeAmount)
secondaryFeeAmount = big.NewInt(0).Div(transferredAmount, big.NewInt(4))
utils.SendERC20TokenMultiHopAndVerify(
@@ -186,10 +186,10 @@ func ERC20TokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
fundedKey,
recipientKey,
recipientAddress,
- subnetBInfo,
+ L1BInfo,
erc20TokenRemoteB,
erc20TokenRemoteAddressB,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteA,
erc20TokenRemoteAddressA,
cChainInfo,
diff --git a/tests/flows/ictt/erc20_home_erc20_remote_send_and_call.go b/tests/flows/ictt/erc20_home_erc20_remote_send_and_call.go
index 87971b9c6..7e1e263aa 100644
--- a/tests/flows/ictt/erc20_home_erc20_remote_send_and_call.go
+++ b/tests/flows/ictt/erc20_home_erc20_remote_send_and_call.go
@@ -15,9 +15,9 @@ import (
/**
* Deploy an ERC20TokenHome on the primary network
- * Deploys ERC20TokenRemote to Subnet A
- * Transfers C-Chain example ERC20 tokens to Subnet A and calls contract on Subnet A using sendAndCall
- * Transfers C-Chain example ERC20 to EOA on Subnet A, and then transfer tokens from Subnet A back
+ * Deploys ERC20TokenRemote to L1 A
+ * Transfers C-Chain example ERC20 tokens to L1 A and calls contract on L1 A using sendAndCall
+ * Transfers C-Chain example ERC20 to EOA on L1 A, and then transfer tokens from L1 A back
* C-Chain and calls contract on the C-Chain using sendAndCall
*/
func ERC20TokenHomeERC20TokenRemoteSendAndCall(
@@ -25,7 +25,7 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
teleporter utils.TeleporterTestInfo,
) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -61,10 +61,10 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
remoteMockERC20SACRAddress, remoteMockERC20SACR := utils.DeployMockERC20SendAndCallReceiver(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
)
- // Token representation on subnet A will have same name, symbol, and decimals
+ // Token representation on L1 A will have same name, symbol, and decimals
tokenName, err := exampleERC20.Name(&bind.CallOpts{})
Expect(err).Should(BeNil())
tokenSymbol, err := exampleERC20.Symbol(&bind.CallOpts{})
@@ -72,12 +72,12 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
tokenDecimals, err := exampleERC20.Decimals(&bind.CallOpts{})
Expect(err).Should(BeNil())
- // Deploy an ERC20TokenRemote to Subnet A
+ // Deploy an ERC20TokenRemote to L1 A
erc20TokenRemoteAddress, erc20TokenRemote := utils.DeployERC20TokenRemote(
ctx,
teleporter,
fundedKey,
- subnetAInfo,
+ L1AInfo,
fundedAddress,
cChainInfo.BlockchainID,
erc20TokenHomeAddress,
@@ -92,7 +92,7 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteAddress,
fundedKey,
)
@@ -111,10 +111,10 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
primaryFee := big.NewInt(1e18)
transferredAmount := utils.BigIntSub(amount, primaryFee)
- // Send tokens from C-Chain to Mock contract on subnet A
+ // Send tokens from C-Chain to Mock contract on L1 A
{
input := erc20tokenhome.SendAndCallInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: erc20TokenRemoteAddress,
RecipientContract: remoteMockERC20SACRAddress,
RecipientPayload: []byte{1},
@@ -137,12 +137,12 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
fundedKey,
)
- // Relay the message to Subnet A and check for message delivery
+ // Relay the message to L1 A and check for message delivery
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
@@ -163,11 +163,11 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
Expect(balance).Should(Equal(transferredAmount))
}
- // Transfer ERC20 tokens to account on subnet A
+ // Transfer ERC20 tokens to account on L1 A
{
- // Send ERC20 tokens from C-Chain to recipient on subnet A
+ // Send ERC20 tokens from C-Chain to recipient on L1 A
input := erc20tokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: erc20TokenRemoteAddress,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: exampleERC20Address,
@@ -187,12 +187,12 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
fundedKey,
)
- // Relay the message to Subnet A and check for message delivery
+ // Relay the message to L1 A and check for message delivery
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
@@ -213,10 +213,10 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
// Send tokens to mock contract on C-Chain using sendAndCall
{
- // Fund recipient with gas tokens on subnet A
+ // Fund recipient with gas tokens on L1 A
utils.SendNativeTransfer(
ctx,
- subnetAInfo,
+ L1AInfo,
fundedKey,
recipientAddress,
big.NewInt(1e18),
@@ -237,7 +237,7 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
receipt, transferredAmount := utils.SendAndCallERC20TokenRemote(
ctx,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemote,
erc20TokenRemoteAddress,
inputB,
@@ -248,7 +248,7 @@ func ERC20TokenHomeERC20TokenRemoteSendAndCall(
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
- subnetAInfo,
+ L1AInfo,
cChainInfo,
true,
fundedKey,
diff --git a/tests/flows/ictt/erc20_home_native_remote.go b/tests/flows/ictt/erc20_home_native_remote.go
index 06ad686ae..fca036b09 100644
--- a/tests/flows/ictt/erc20_home_native_remote.go
+++ b/tests/flows/ictt/erc20_home_native_remote.go
@@ -27,18 +27,18 @@ var (
/**
* Deploy a ERC20Token on the primary network
- * Deploys NativeTokenRemote to Subnet A and Subnet B
- * Transfers C-Chain example ERC20 tokens to Subnet A as Subnet A's native token
- * Transfer back tokens from Subnet A to C-Chain
+ * Deploys NativeTokenRemote to L1 A and L1 B
+ * Transfers C-Chain example ERC20 tokens to L1 A as L1 A's native token
+ * Transfer back tokens from L1 A to C-Chain
*/
func ERC20TokenHomeNativeTokenRemote(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
- // Deploy an ExampleERC20 on subnet A as the token to be transferred
+ // Deploy an ExampleERC20 on L1 A as the token to be transferred
exampleERC20Address, exampleERC20 := utils.DeployExampleERC20Decimals(
ctx,
fundedKey,
@@ -60,11 +60,11 @@ func ERC20TokenHomeNativeTokenRemote(network *localnetwork.LocalNetwork, telepor
exampleERC20Decimals,
)
- // Deploy a NativeTokenRemote to Subnet A
+ // Deploy a NativeTokenRemote to L1 A
nativeTokenRemoteAddressA, nativeTokenRemoteA := utils.DeployNativeTokenRemote(
ctx,
teleporter,
- subnetAInfo,
+ L1AInfo,
"SUBA",
fundedAddress,
cChainInfo.BlockchainID,
@@ -79,7 +79,7 @@ func ERC20TokenHomeNativeTokenRemote(network *localnetwork.LocalNetwork, telepor
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteAddressA,
initialReserveImbalance,
utils.GetTokenMultiplier(decimalsShift),
@@ -93,7 +93,7 @@ func ERC20TokenHomeNativeTokenRemote(network *localnetwork.LocalNetwork, telepor
erc20TokenHome,
erc20TokenHomeAddress,
exampleERC20,
- subnetAInfo.BlockchainID,
+ L1AInfo.BlockchainID,
nativeTokenRemoteAddressA,
collateralAmount,
fundedKey,
@@ -105,9 +105,9 @@ func ERC20TokenHomeNativeTokenRemote(network *localnetwork.LocalNetwork, telepor
Expect(err).Should(BeNil())
recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey)
- // Send tokens from C-Chain to Subnet A
+ // Send tokens from C-Chain to L1 A
input := erc20tokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: nativeTokenRemoteAddressA,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: exampleERC20Address,
@@ -128,18 +128,18 @@ func ERC20TokenHomeNativeTokenRemote(network *localnetwork.LocalNetwork, telepor
fundedKey,
)
- // Relay the message to subnet A and check for a native token mint withdrawal
+ // Relay the message to L1 A and check for a native token mint withdrawal
teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
// Verify the recipient received the tokens
- utils.CheckBalance(ctx, recipientAddress, transferredAmount, subnetAInfo.RPCClient)
+ utils.CheckBalance(ctx, recipientAddress, transferredAmount, L1AInfo.RPCClient)
// Send back to the home chain and check that ERC20TokenHome received the tokens
input_A := nativetokenremote.SendTokensInput{
@@ -155,7 +155,7 @@ func ERC20TokenHomeNativeTokenRemote(network *localnetwork.LocalNetwork, telepor
amountToSendA := new(big.Int).Div(transferredAmount, big.NewInt(2))
receipt, transferredAmount = utils.SendNativeTokenRemote(
ctx,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteA,
nativeTokenRemoteAddressA,
input_A,
@@ -166,7 +166,7 @@ func ERC20TokenHomeNativeTokenRemote(network *localnetwork.LocalNetwork, telepor
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
- subnetAInfo,
+ L1AInfo,
cChainInfo,
true,
fundedKey,
diff --git a/tests/flows/ictt/erc20_home_native_remote_multihop.go b/tests/flows/ictt/erc20_home_native_remote_multihop.go
index 33d38d6b5..1e99515d6 100644
--- a/tests/flows/ictt/erc20_home_native_remote_multihop.go
+++ b/tests/flows/ictt/erc20_home_native_remote_multihop.go
@@ -15,21 +15,21 @@ import (
/*
*
- Deploy a ERC20TokenHome on the primary network
- - Deploys NativeTokenRemote to Subnet A and Subnet B
- - Transfers C-Chain example ERC20 tokens to Subnet A as Subnet A's native token
- - Transfers C-Chain example ERC20 tokens to Subnet B as Subnet B's native token
- to collateralize the token transferrer on Subnet B
- - Transfer tokens from Subnet A to Subnet B through multi-hop
- - Transfer back tokens from Subnet B to Subnet A through multi-hop
+ - Deploys NativeTokenRemote toA and L1 B
+ - Transfers C-Chain example ERC20 tokens to L1 A as L1 A's native token
+ - Transfers C-Chain example ERC20 tokens to L1 B as L1 B's native token
+ to collateralize the token transferrer on L1 B
+ - Transfer tokens from L1 A to L1 B through multi-hop
+ - Transfer back tokens from L1 B to L1 A through multi-hop
*/
func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, subnetBInfo := network.GetTwoSubnets()
+ L1AInfo, L1BInfo := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
- // Deploy an ExampleERC20 on subnet A as the token to be transferred
+ // Deploy an ExampleERC20 on L1 A as the token to be transferred
exampleERC20Address, exampleERC20 := utils.DeployExampleERC20Decimals(
ctx,
fundedKey,
@@ -50,11 +50,11 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
exampleERC20Decimals,
)
- // Deploy a NativeTokenRemote to Subnet A
+ // Deploy a NativeTokenRemote to L1 A
nativeTokenRemoteAddressA, nativeTokenRemoteA := utils.DeployNativeTokenRemote(
ctx,
teleporter,
- subnetAInfo,
+ L1AInfo,
"SUBA",
fundedAddress,
cChainInfo.BlockchainID,
@@ -64,11 +64,11 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
burnedFeesReportingRewardPercentage,
)
- // Deploy a NativeTokenRemote to Subnet B
+ // Deploy a NativeTokenRemote to L1 B
nativeTokenRemoteAddressB, nativeTokenRemoteB := utils.DeployNativeTokenRemote(
ctx,
teleporter,
- subnetBInfo,
+ L1BInfo,
"SUBB",
fundedAddress,
cChainInfo.BlockchainID,
@@ -84,7 +84,7 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteAddressA,
initialReserveImbalance,
utils.GetTokenMultiplier(decimalsShift),
@@ -97,7 +97,7 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetBInfo,
+ L1BInfo,
nativeTokenRemoteAddressB,
initialReserveImbalance,
utils.GetTokenMultiplier(decimalsShift),
@@ -112,7 +112,7 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
erc20TokenHome,
erc20TokenHomeAddress,
exampleERC20,
- subnetAInfo.BlockchainID,
+ L1AInfo.BlockchainID,
nativeTokenRemoteAddressA,
collateralAmountA,
fundedKey,
@@ -124,7 +124,7 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
erc20TokenHome,
erc20TokenHomeAddress,
exampleERC20,
- subnetBInfo.BlockchainID,
+ L1BInfo.BlockchainID,
nativeTokenRemoteAddressB,
collateralAmountB,
fundedKey,
@@ -138,9 +138,9 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
// These are set during the initial transferring, and used in the multi-hop transfers
amount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(10))
- // Send tokens from C-Chain to Subnet A
+ // Send tokens from C-Chain to L1 A
inputA := erc20tokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: nativeTokenRemoteAddressA,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: exampleERC20Address,
@@ -160,22 +160,22 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
fundedKey,
)
- // Relay the message to subnet A and check for a native token mint withdrawal
+ // Relay the message to L1 A and check for a native token mint withdrawal
teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
// Verify the recipient received the tokens
- utils.CheckBalance(ctx, recipientAddress, transferredAmountA, subnetAInfo.RPCClient)
+ utils.CheckBalance(ctx, recipientAddress, transferredAmountA, L1AInfo.RPCClient)
- // Send tokens from C-Chain to Subnet B
+ // Send tokens from C-Chain to L1 B
inputB := erc20tokenhome.SendTokensInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationTokenTransferrerAddress: nativeTokenRemoteAddressB,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: exampleERC20Address,
@@ -195,20 +195,20 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
fundedKey,
)
- // Relay the message to subnet B and check for a native token mint withdrawal
+ // Relay the message to L1 B and check for a native token mint withdrawal
teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetBInfo,
+ L1BInfo,
true,
fundedKey,
)
// Verify the recipient received the tokens
- utils.CheckBalance(ctx, recipientAddress, transferredAmountB, subnetBInfo.RPCClient)
+ utils.CheckBalance(ctx, recipientAddress, transferredAmountB, L1BInfo.RPCClient)
- // Multi-hop transfer to Subnet B
+ // Multi-hop transfer to L1 B
// Send half of the received amount to account for gas expenses
amountToSend := new(big.Int).Div(transferredAmountA, big.NewInt(2))
@@ -217,10 +217,10 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
teleporter,
fundedKey,
recipientAddress,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteA,
nativeTokenRemoteAddressA,
- subnetBInfo,
+ L1BInfo,
nativeTokenRemoteB,
nativeTokenRemoteAddressB,
cChainInfo,
@@ -228,17 +228,17 @@ func ERC20TokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork,
big.NewInt(0),
)
- // Multi-hop transfer back to Subnet A
+ // Multi-hop transfer back to L1 A
secondaryFeeAmount := new(big.Int).Div(amountToSend, big.NewInt(4))
utils.SendNativeMultiHopAndVerify(
ctx,
teleporter,
fundedKey,
recipientAddress,
- subnetBInfo,
+ L1BInfo,
nativeTokenRemoteB,
nativeTokenRemoteAddressB,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteA,
nativeTokenRemoteAddressA,
cChainInfo,
diff --git a/tests/flows/ictt/native_home_erc20_remote.go b/tests/flows/ictt/native_home_erc20_remote.go
index 2ca80710c..3111c7256 100644
--- a/tests/flows/ictt/native_home_erc20_remote.go
+++ b/tests/flows/ictt/native_home_erc20_remote.go
@@ -16,13 +16,13 @@ import (
/**
* Deploy a NativeTokenHome on the primary network
- * Deploys ERC20TokenRemote to Subnet A
- * Transfers C-Chain native tokens to Subnet A
- * Transfer back tokens from Subnet A to C-Chain
+ * Deploys ERC20TokenRemote to L1 A
+ * Transfers C-Chain native tokens to L1 A
+ * Transfer back tokens from L1 A to C-Chain
*/
func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -45,7 +45,7 @@ func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, telepor
wavaxAddress,
)
- // Token representation on subnet A will have same name, symbol, and decimals
+ // Token representation on L1 A will have same name, symbol, and decimals
tokenName, err := wavax.Name(&bind.CallOpts{})
Expect(err).Should(BeNil())
tokenSymbol, err := wavax.Symbol(&bind.CallOpts{})
@@ -53,12 +53,12 @@ func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, telepor
tokenDecimals, err := wavax.Decimals(&bind.CallOpts{})
Expect(err).Should(BeNil())
- // Deploy an ERC20TokenRemote to Subnet A
+ // Deploy an ERC20TokenRemote to L1 A
erc20TokenRemoteAddress, erc20TokenRemote := utils.DeployERC20TokenRemote(
ctx,
teleporter,
fundedKey,
- subnetAInfo,
+ L1AInfo,
fundedAddress,
cChainInfo.BlockchainID,
nativeTokenHomeAddress,
@@ -73,7 +73,7 @@ func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, telepor
teleporter,
cChainInfo,
nativeTokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteAddress,
fundedKey,
)
@@ -83,9 +83,9 @@ func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, telepor
Expect(err).Should(BeNil())
recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey)
- // Send tokens from C-Chain to recipient on subnet A
+ // Send tokens from C-Chain to recipient on L1 A
input := nativetokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: erc20TokenRemoteAddress,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: wavaxAddress,
@@ -107,12 +107,12 @@ func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, telepor
fundedKey,
)
- // Relay the message to Subnet A and check for message delivery
+ // Relay the message to L1 A and check for message delivery
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
@@ -130,10 +130,10 @@ func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, telepor
Expect(err).Should(BeNil())
Expect(balance).Should(Equal(transferredAmount))
- // Fund recipient with gas tokens on subnet A
+ // Fund recipient with gas tokens on L1 A
teleporterUtils.SendNativeTransfer(
ctx,
- subnetAInfo,
+ L1AInfo,
fundedKey,
recipientAddress,
big.NewInt(1e18),
@@ -148,10 +148,10 @@ func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, telepor
RequiredGasLimit: utils.DefaultNativeTokenRequiredGas,
}
- // Send tokens on Subnet A back for native tokens on C-Chain
+ // Send tokens on L1 A back for native tokens on C-Chain
receipt, transferredAmount = utils.SendERC20TokenRemote(
ctx,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemote,
erc20TokenRemoteAddress,
inputA,
@@ -162,7 +162,7 @@ func NativeTokenHomeERC20TokenRemote(network *localnetwork.LocalNetwork, telepor
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
- subnetAInfo,
+ L1AInfo,
cChainInfo,
true,
fundedKey,
diff --git a/tests/flows/ictt/native_home_erc20_remote_multihop.go b/tests/flows/ictt/native_home_erc20_remote_multihop.go
index d70dfb3d9..da4f104ca 100644
--- a/tests/flows/ictt/native_home_erc20_remote_multihop.go
+++ b/tests/flows/ictt/native_home_erc20_remote_multihop.go
@@ -16,14 +16,14 @@ import (
/**
* Deploy a NativeTokenHome on the primary network
- * Deploys ERC20TokenRemote to Subnet A and Subnet B
- * Transfers C-Chain native tokens to Subnet A
- * Transfer tokens from Subnet A to Subnet B through multi-hop
- * Brige back tokens from Subnet B to Subnet A through multi-hop
+ * Deploys ERC20TokenRemote to L1 A and L1 B
+ * Transfers C-Chain native tokens to L1 A
+ * Transfer tokens from L1 A to L1 B through multi-hop
+ * Brige back tokens from L1 B to L1 A through multi-hop
*/
func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, subnetBInfo := network.GetTwoSubnets()
+ L1AInfo, L1BInfo := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -44,7 +44,7 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
wavaxAddress,
)
- // Token representation on subnet B will have same name, symbol, and decimals
+ // Token representation on L1 B will have same name, symbol, and decimals
tokenName, err := wavax.Name(&bind.CallOpts{})
Expect(err).Should(BeNil())
tokenSymbol, err := wavax.Symbol(&bind.CallOpts{})
@@ -52,12 +52,12 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
tokenDecimals, err := wavax.Decimals(&bind.CallOpts{})
Expect(err).Should(BeNil())
- // Deploy an ERC20TokenRemote on Subnet A
+ // Deploy an ERC20TokenRemote on L1 A
erc20TokenRemoteAddressA, erc20TokenRemoteA := utils.DeployERC20TokenRemote(
ctx,
teleporter,
fundedKey,
- subnetAInfo,
+ L1AInfo,
fundedAddress,
cChainInfo.BlockchainID,
nativeTokenHomeAddress,
@@ -67,12 +67,12 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
tokenDecimals,
)
- // Deploy an ERC20TokenRemote on Subnet B
+ // Deploy an ERC20TokenRemote on L1 B
erc20TokenRemoteAddressB, erc20TokenRemoteB := utils.DeployERC20TokenRemote(
ctx,
teleporter,
fundedKey,
- subnetBInfo,
+ L1BInfo,
fundedAddress,
cChainInfo.BlockchainID,
nativeTokenHomeAddress,
@@ -88,7 +88,7 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
teleporter,
cChainInfo,
nativeTokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteAddressA,
fundedKey,
)
@@ -98,7 +98,7 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
teleporter,
cChainInfo,
nativeTokenHomeAddress,
- subnetBInfo,
+ L1BInfo,
erc20TokenRemoteAddressB,
fundedKey,
)
@@ -108,9 +108,9 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
Expect(err).Should(BeNil())
recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey)
- // Send tokens from C-Chain to recipient on subnet A
+ // Send tokens from C-Chain to recipient on L1 A
input := nativetokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: erc20TokenRemoteAddressA,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: wavaxAddress,
@@ -132,12 +132,12 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
fundedKey,
)
- // Relay the message to subnet B and check for message delivery
+ // Relay the message to L1 B and check for message delivery
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
@@ -155,7 +155,7 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
Expect(err).Should(BeNil())
Expect(balance).Should(Equal(transferredAmount))
- // Send tokens from subnet A to recipient on subnet B through a multi-hop
+ // Send tokens from L1 A to recipient on L1 B through a multi-hop
secondaryFeeAmount := new(big.Int).Div(transferredAmount, big.NewInt(4))
utils.SendERC20TokenMultiHopAndVerify(
ctx,
@@ -163,10 +163,10 @@ func NativeTokenHomeERC20TokenRemoteMultiHop(network *localnetwork.LocalNetwork,
fundedKey,
recipientKey,
recipientAddress,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteA,
erc20TokenRemoteAddressA,
- subnetBInfo,
+ L1BInfo,
erc20TokenRemoteB,
erc20TokenRemoteAddressB,
cChainInfo,
diff --git a/tests/flows/ictt/native_home_native_remote.go b/tests/flows/ictt/native_home_native_remote.go
index fff3a86ec..ec21a9a38 100644
--- a/tests/flows/ictt/native_home_native_remote.go
+++ b/tests/flows/ictt/native_home_native_remote.go
@@ -14,13 +14,13 @@ import (
/**
* Deploy a NativeTokenHome on the primary network
- * Deploys a NativeTokenRemote to Subnet A
- * Transfers C-Chain native tokens to Subnet A
- * Transfer back tokens from Subnet A to C-Chain
+ * Deploys a NativeTokenRemote to L1 A
+ * Transfers C-Chain native tokens to L1 A
+ * Transfer back tokens from L1 A to C-Chain
*/
func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -43,11 +43,11 @@ func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, telepo
cChainWAVAXAddress,
)
- // Deploy a NativeTokenRemote to Subnet A
+ // Deploy a NativeTokenRemote to L1 A
nativeTokenRemoteAddress, nativeTokenRemote := utils.DeployNativeTokenRemote(
ctx,
teleporter,
- subnetAInfo,
+ L1AInfo,
"SUBA",
fundedAddress,
cChainInfo.BlockchainID,
@@ -63,7 +63,7 @@ func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, telepo
teleporter,
cChainInfo,
nativeTokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteAddress,
initialReserveImbalance,
big.NewInt(1),
@@ -76,7 +76,7 @@ func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, telepo
cChainInfo,
nativeTokenHome,
nativeTokenHomeAddress,
- subnetAInfo.BlockchainID,
+ L1AInfo.BlockchainID,
nativeTokenRemoteAddress,
collateralAmount,
fundedKey,
@@ -87,11 +87,11 @@ func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, telepo
Expect(err).Should(BeNil())
recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey)
- // Send tokens from C-Chain to recipient on subnet A that fully collateralize token transferrer with leftover tokens.
+ // Send tokens from C-Chain to recipient on L1 A that fully collateralize token transferrer with leftover tokens.
amount := new(big.Int).Mul(big.NewInt(1e18), big.NewInt(13))
{
input := nativetokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: nativeTokenRemoteAddress,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: cChainWAVAXAddress,
@@ -116,7 +116,7 @@ func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, telepo
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
@@ -125,11 +125,11 @@ func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, telepo
ctx,
recipientAddress,
amount,
- subnetAInfo.RPCClient,
+ L1AInfo.RPCClient,
)
}
- // Send tokens on Subnet A back for native tokens on C-Chain
+ // Send tokens on L1 A back for native tokens on C-Chain
{
input_A := nativetokenremote.SendTokensInput{
DestinationBlockchainID: cChainInfo.BlockchainID,
@@ -145,7 +145,7 @@ func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, telepo
amount := big.NewInt(0).Div(amount, big.NewInt(2))
receipt, transferredAmount := utils.SendNativeTokenRemote(
ctx,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemote,
nativeTokenRemoteAddress,
input_A,
@@ -156,7 +156,7 @@ func NativeTokenHomeNativeDestination(network *localnetwork.LocalNetwork, telepo
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
- subnetAInfo,
+ L1AInfo,
cChainInfo,
true,
fundedKey,
diff --git a/tests/flows/ictt/native_home_native_remote_multihop.go b/tests/flows/ictt/native_home_native_remote_multihop.go
index 4866a2af4..b001d6028 100644
--- a/tests/flows/ictt/native_home_native_remote_multihop.go
+++ b/tests/flows/ictt/native_home_native_remote_multihop.go
@@ -14,16 +14,16 @@ import (
/*
*
- Deploy a NativeTokenHome on the primary network
- - Deploys NativeTokenRemote to Subnet A and Subnet B
- - Transfers native tokens from the C-Chain to Subnet A as Subnet A's native token
- - Transfers native tokens from the C-Chain to Subnet B as Subnet B's native token
- to collateralize the Subnet B token transferrer
- - Transfer tokens from Subnet A to Subnet B through multi-hop
- - Transfer back tokens from Subnet B to Subnet A through multi-hop
+ - Deploys NativeTokenRemote to L1 A and L1 B
+ - Transfers native tokens from the C-Chain to L1 A as L1 A's native token
+ - Transfers native tokens from the C-Chain to L1 B as L1 B's native token
+ to collateralize the L1 B token transferrer
+ - Transfer tokens from L1 A to L1 B through multi-hop
+ - Transfer back tokens from L1 B to L1 A through multi-hop
*/
func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, subnetBInfo := network.GetTwoSubnets()
+ L1AInfo, L1BInfo := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -49,11 +49,11 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
wavaxAddress,
)
- // Deploy a NativeTokenRemote to Subnet A
+ // Deploy a NativeTokenRemote to L1 A
nativeTokenRemoteAddressA, nativeTokenRemoteA := utils.DeployNativeTokenRemote(
ctx,
teleporter,
- subnetAInfo,
+ L1AInfo,
"SUBA",
fundedAddress,
cChainInfo.BlockchainID,
@@ -63,11 +63,11 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
burnedFeesReportingRewardPercentage,
)
- // Deploy a NativeTokenRemote to Subnet B
+ // Deploy a NativeTokenRemote to L1 B
nativeTokenRemoteAddressB, nativeTokenRemoteB := utils.DeployNativeTokenRemote(
ctx,
teleporter,
- subnetBInfo,
+ L1BInfo,
"SUBB",
fundedAddress,
cChainInfo.BlockchainID,
@@ -83,7 +83,7 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
teleporter,
cChainInfo,
nativeTokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteAddressA,
initialReserveImbalance,
utils.GetTokenMultiplier(decimalsShift),
@@ -96,7 +96,7 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
teleporter,
cChainInfo,
nativeTokenHomeAddress,
- subnetBInfo,
+ L1BInfo,
nativeTokenRemoteAddressB,
initialReserveImbalance,
utils.GetTokenMultiplier(decimalsShift),
@@ -110,7 +110,7 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
cChainInfo,
nativeTokenHome,
nativeTokenHomeAddress,
- subnetAInfo.BlockchainID,
+ L1AInfo.BlockchainID,
nativeTokenRemoteAddressA,
collateralAmountA,
fundedKey,
@@ -121,7 +121,7 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
cChainInfo,
nativeTokenHome,
nativeTokenHomeAddress,
- subnetBInfo.BlockchainID,
+ L1BInfo.BlockchainID,
nativeTokenRemoteAddressB,
collateralAmountB,
fundedKey,
@@ -134,9 +134,9 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
amount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(10))
- // Send tokens from C-Chain to Subnet A
+ // Send tokens from C-Chain to L1 A
inputA := nativetokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: nativeTokenRemoteAddressA,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: wavaxAddress,
@@ -156,22 +156,22 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
fundedKey,
)
- // Relay the message to subnet A and check for a native token mint withdrawal
+ // Relay the message to L1 A and check for a native token mint withdrawal
teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
// Verify the recipient received the tokens
- utils.CheckBalance(ctx, recipientAddress, transferredAmountA, subnetAInfo.RPCClient)
+ utils.CheckBalance(ctx, recipientAddress, transferredAmountA, L1AInfo.RPCClient)
- // Send tokens from C-Chain to Subnet B
+ // Send tokens from C-Chain to L1 B
inputB := nativetokenhome.SendTokensInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationTokenTransferrerAddress: nativeTokenRemoteAddressB,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: wavaxAddress,
@@ -190,20 +190,20 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
fundedKey,
)
- // Relay the message to subnet B and check for a native token mint withdrawal
+ // Relay the message to L1 B and check for a native token mint withdrawal
teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetBInfo,
+ L1BInfo,
true,
fundedKey,
)
// Verify the recipient received the tokens
- utils.CheckBalance(ctx, recipientAddress, transferredAmountB, subnetBInfo.RPCClient)
+ utils.CheckBalance(ctx, recipientAddress, transferredAmountB, L1BInfo.RPCClient)
- // Multi-hop transfer to Subnet B
+ // Multi-hop transfer to L1 B
// Send half of the received amount to account for gas expenses
amountToSendA := new(big.Int).Div(transferredAmountA, big.NewInt(2))
@@ -212,10 +212,10 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
teleporter,
fundedKey,
recipientAddress,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteA,
nativeTokenRemoteAddressA,
- subnetBInfo,
+ L1BInfo,
nativeTokenRemoteB,
nativeTokenRemoteAddressB,
cChainInfo,
@@ -227,16 +227,16 @@ func NativeTokenHomeNativeTokenRemoteMultiHop(network *localnetwork.LocalNetwork
amountToSendB := new(big.Int).Div(amountToSendA, big.NewInt(2))
secondaryFeeAmount := new(big.Int).Div(amountToSendB, big.NewInt(4))
- // Multi-hop transfer back to Subnet A
+ // Multi-hop transfer back to L1 A
utils.SendNativeMultiHopAndVerify(
ctx,
teleporter,
fundedKey,
recipientAddress,
- subnetBInfo,
+ L1BInfo,
nativeTokenRemoteB,
nativeTokenRemoteAddressB,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteA,
nativeTokenRemoteAddressA,
cChainInfo,
diff --git a/tests/flows/ictt/registration_and_collateral_check.go b/tests/flows/ictt/registration_and_collateral_check.go
index 39f612a0e..3b983a33b 100644
--- a/tests/flows/ictt/registration_and_collateral_check.go
+++ b/tests/flows/ictt/registration_and_collateral_check.go
@@ -14,7 +14,7 @@ import (
/**
* Deploys an ERC20TokenHome contract on the C-Chain
- * Deploys an ERC20TokenRemote contract on Subnet A
+ * Deploys an ERC20TokenRemote contract on L1 A
* Check sending to unregistered remote fails
* Register the ERC20TokenRemote to home contract
* Check sending to non-collateralized remote fails
@@ -23,12 +23,12 @@ import (
*/
func RegistrationAndCollateralCheck(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
- // Deploy an ExampleERC20 on subnet A as the token to be transferred
+ // Deploy an ExampleERC20 on L1 A as the token to be transferred
exampleERC20Address, exampleERC20 := utils.DeployExampleERC20Decimals(
ctx,
fundedKey,
@@ -47,11 +47,11 @@ func RegistrationAndCollateralCheck(network *localnetwork.LocalNetwork, teleport
erc20TokenHomeDecimals,
)
- // Deploy a NativeTokenRemote to Subnet A
+ // Deploy a NativeTokenRemote to L1 A
nativeTokenRemoteAddressA, _ := utils.DeployNativeTokenRemote(
ctx,
teleporter,
- subnetAInfo,
+ L1AInfo,
"SUBA",
fundedAddress,
cChainInfo.BlockchainID,
@@ -66,9 +66,9 @@ func RegistrationAndCollateralCheck(network *localnetwork.LocalNetwork, teleport
Expect(err).Should(BeNil())
recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey)
- // Send tokens from C-Chain to Subnet A
+ // Send tokens from C-Chain to L1 A
input := erc20tokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: nativeTokenRemoteAddressA,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: exampleERC20Address,
@@ -104,7 +104,7 @@ func RegistrationAndCollateralCheck(network *localnetwork.LocalNetwork, teleport
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
nativeTokenRemoteAddressA,
initialReserveImbalance,
utils.GetTokenMultiplier(decimalsShift),
@@ -133,7 +133,7 @@ func RegistrationAndCollateralCheck(network *localnetwork.LocalNetwork, teleport
erc20TokenHome,
erc20TokenHomeAddress,
exampleERC20,
- subnetAInfo.BlockchainID,
+ L1AInfo.BlockchainID,
nativeTokenRemoteAddressA,
collateralNeeded,
fundedKey,
@@ -180,16 +180,16 @@ func RegistrationAndCollateralCheck(network *localnetwork.LocalNetwork, teleport
Expect(err).Should(BeNil())
utils.ExpectBigEqual(balance, big.NewInt(0).Add(initialBalance, amount))
- // Relay the message to subnet A and check for a native token mint withdrawal
+ // Relay the message to L1 A and check for a native token mint withdrawal
teleporter.RelayTeleporterMessage(
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
// Verify the recipient received the tokens
- utils.CheckBalance(ctx, recipientAddress, scaledAmount, subnetAInfo.RPCClient)
+ utils.CheckBalance(ctx, recipientAddress, scaledAmount, L1AInfo.RPCClient)
}
diff --git a/tests/flows/ictt/transparent_proxy_upgradeability.go b/tests/flows/ictt/transparent_proxy_upgradeability.go
index e25cc4933..6f46932c1 100644
--- a/tests/flows/ictt/transparent_proxy_upgradeability.go
+++ b/tests/flows/ictt/transparent_proxy_upgradeability.go
@@ -19,17 +19,17 @@ import (
* Deploy an upgradeable ERC20TokenHome on the primary network
* Deploys a transparent upgradeable proxy that uses the ERC20TokenHome logic contract
* Deploys a proxy admin contract to manage the upgradeable proxy
- * Deploy an ERC20TokenRemote to Subnet A
- * Transfers example erc20 tokens from the primary network to Subnet A
+ * Deploy an ERC20TokenRemote to L1 A
+ * Transfers example erc20 tokens from the primary network to L1 A
* Deploy a new ERC20TokenHome logic contract on the primary network
* Upgrade the transparent upgradeable proxy to use the new logic contract
- * Transfer tokens from Subnet A back to the primary network
+ * Transfer tokens from L1 A back to the primary network
* Check that the transfer was successful, and expected balances are correct
*/
func TransparentUpgradeableProxy(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -82,12 +82,12 @@ func TransparentUpgradeableProxy(network *localnetwork.LocalNetwork, teleporter
Expect(err).Should(BeNil())
teleporterUtils.WaitForTransactionSuccess(ctx, cChainInfo, tx.Hash())
- // Deploy the ERC20TokenRemote contract on Subnet A
+ // Deploy the ERC20TokenRemote contract on L1 A
erc20TokenRemoteAddress, erc20TokenRemote := utils.DeployERC20TokenRemote(
ctx,
teleporter,
fundedKey,
- subnetAInfo,
+ L1AInfo,
fundedAddress,
cChainInfo.BlockchainID,
erc20TokenHomeAddress,
@@ -102,19 +102,19 @@ func TransparentUpgradeableProxy(network *localnetwork.LocalNetwork, teleporter
teleporter,
cChainInfo,
erc20TokenHomeAddress,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemoteAddress,
fundedKey,
)
- // Send a transfer from primary network to Subnet A
+ // Send a transfer from primary network to L1 A
// Generate new recipient to receive transferred tokens
recipientKey, err := crypto.GenerateKey()
Expect(err).Should(BeNil())
recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey)
input := erc20tokenhome.SendTokensInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationTokenTransferrerAddress: erc20TokenRemoteAddress,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: exampleERC20Address,
@@ -140,7 +140,7 @@ func TransparentUpgradeableProxy(network *localnetwork.LocalNetwork, teleporter
ctx,
receipt,
cChainInfo,
- subnetAInfo,
+ L1AInfo,
true,
fundedKey,
)
@@ -172,10 +172,10 @@ func TransparentUpgradeableProxy(network *localnetwork.LocalNetwork, teleporter
Expect(err).Should(BeNil())
teleporterUtils.WaitForTransactionSuccess(ctx, cChainInfo, tx.Hash())
- // Send a transfer from Subnet A back to primary network
+ // Send a transfer from L1 A back to primary network
teleporterUtils.SendNativeTransfer(
ctx,
- subnetAInfo,
+ L1AInfo,
fundedKey,
recipientAddress,
big.NewInt(1e18),
@@ -192,7 +192,7 @@ func TransparentUpgradeableProxy(network *localnetwork.LocalNetwork, teleporter
receipt, transferredAmount = utils.SendERC20TokenRemote(
ctx,
- subnetAInfo,
+ L1AInfo,
erc20TokenRemote,
erc20TokenRemoteAddress,
inputB,
@@ -203,7 +203,7 @@ func TransparentUpgradeableProxy(network *localnetwork.LocalNetwork, teleporter
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
- subnetAInfo,
+ L1AInfo,
cChainInfo,
true,
fundedKey,
diff --git a/tests/flows/teleporter/add_fee_amount.go b/tests/flows/teleporter/add_fee_amount.go
index 843b38a83..6731e3e97 100644
--- a/tests/flows/teleporter/add_fee_amount.go
+++ b/tests/flows/teleporter/add_fee_amount.go
@@ -13,9 +13,9 @@ import (
)
func AddFeeAmount(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
- teleporterContractAddress := teleporter.TeleporterMessengerAddress(subnetAInfo)
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
+ teleporterContractAddress := teleporter.TeleporterMessengerAddress(L1AInfo)
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -23,22 +23,22 @@ func AddFeeAmount(network *localnetwork.LocalNetwork, teleporter utils.Teleporte
mockTokenAddress, mockToken := utils.DeployExampleERC20(
context.Background(),
fundedKey,
- subnetAInfo,
+ L1AInfo,
)
utils.ERC20Approve(
ctx,
mockToken,
teleporterContractAddress,
big.NewInt(1e18),
- subnetAInfo,
+ L1AInfo,
fundedKey,
)
initFeeAmount := big.NewInt(1)
- // Send a transaction to Subnet A that sends a message to Subnet B.
+ // Send a transaction to L1 A that sends a message to L1 B.
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationAddress: fundedAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: mockTokenAddress,
@@ -51,9 +51,9 @@ func AddFeeAmount(network *localnetwork.LocalNetwork, teleporter utils.Teleporte
sendCrossChainMsgReceipt, messageID := utils.SendCrossChainMessageAndWaitForAcceptance(
ctx,
- teleporter.TeleporterMessenger(subnetAInfo),
- subnetAInfo,
- subnetBInfo,
+ teleporter.TeleporterMessenger(L1AInfo),
+ L1AInfo,
+ L1BInfo,
sendCrossChainMessageInput,
fundedKey,
)
@@ -62,47 +62,47 @@ func AddFeeAmount(network *localnetwork.LocalNetwork, teleporter utils.Teleporte
additionalFeeAmount := big.NewInt(2)
utils.SendAddFeeAmountAndWaitForAcceptance(
ctx,
- subnetAInfo,
- subnetBInfo,
+ L1AInfo,
+ L1BInfo,
messageID,
additionalFeeAmount,
mockTokenAddress,
fundedKey,
- teleporter.TeleporterMessenger(subnetAInfo),
+ teleporter.TeleporterMessenger(L1AInfo),
)
- // Relay message from Subnet A to Subnet B
+ // Relay message from L1 A to L1 B
deliveryReceipt := teleporter.RelayTeleporterMessage(
ctx,
sendCrossChainMsgReceipt,
- subnetAInfo,
- subnetBInfo,
+ L1AInfo,
+ L1BInfo,
true,
fundedKey,
)
receiveEvent, err := utils.GetEventFromLogs(
deliveryReceipt.Logs,
- teleporter.TeleporterMessenger(subnetBInfo).ParseReceiveCrossChainMessage)
+ teleporter.TeleporterMessenger(L1BInfo).ParseReceiveCrossChainMessage)
Expect(err).Should(BeNil())
- // Check Teleporter message received on the destination (Subnet B)
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(&bind.CallOpts{}, messageID)
+ // Check Teleporter message received on the destination (L1 B)
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(&bind.CallOpts{}, messageID)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
- // Check the initial relayer reward amount on Subnet A.
- initialRewardAmount, err := teleporter.TeleporterMessenger(subnetAInfo).CheckRelayerRewardAmount(
+ // Check the initial relayer reward amount on L1 A.
+ initialRewardAmount, err := teleporter.TeleporterMessenger(L1AInfo).CheckRelayerRewardAmount(
&bind.CallOpts{},
receiveEvent.RewardRedeemer,
mockTokenAddress)
Expect(err).Should(BeNil())
- // Send a message from Subnet B back to Subnet A that includes the specific receipt for the message.
+ // Send a message from L1 B back to L1 A that includes the specific receipt for the message.
sendSpecificReceiptsReceipt, sendSpecificReceiptsMessageID := utils.SendSpecifiedReceiptsAndWaitForAcceptance(
ctx,
- teleporter.TeleporterMessenger(subnetBInfo),
- subnetBInfo,
- subnetAInfo.BlockchainID,
+ teleporter.TeleporterMessenger(L1BInfo),
+ L1BInfo,
+ L1AInfo.BlockchainID,
[][32]byte{receiveEvent.MessageID},
teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: mockTokenAddress,
@@ -111,11 +111,11 @@ func AddFeeAmount(network *localnetwork.LocalNetwork, teleporter utils.Teleporte
[]common.Address{},
fundedKey)
- // Relay message containing the specific receipt from Subnet B to Subnet A
- teleporter.RelayTeleporterMessage(ctx, sendSpecificReceiptsReceipt, subnetBInfo, subnetAInfo, true, fundedKey)
+ // Relay message containing the specific receipt from L1 B to L1 A
+ teleporter.RelayTeleporterMessage(ctx, sendSpecificReceiptsReceipt, L1BInfo, L1AInfo, true, fundedKey)
// Check message delivered
- delivered, err = teleporter.TeleporterMessenger(subnetAInfo).MessageReceived(
+ delivered, err = teleporter.TeleporterMessenger(L1AInfo).MessageReceived(
&bind.CallOpts{},
sendSpecificReceiptsMessageID,
)
@@ -124,7 +124,7 @@ func AddFeeAmount(network *localnetwork.LocalNetwork, teleporter utils.Teleporte
// Check the updated relayer reward amount
expectedIncrease := new(big.Int).Add(initFeeAmount, additionalFeeAmount)
- newRewardAmount, err := teleporter.TeleporterMessenger(subnetAInfo).CheckRelayerRewardAmount(
+ newRewardAmount, err := teleporter.TeleporterMessenger(L1AInfo).CheckRelayerRewardAmount(
&bind.CallOpts{},
receiveEvent.RewardRedeemer,
mockTokenAddress)
@@ -135,8 +135,8 @@ func AddFeeAmount(network *localnetwork.LocalNetwork, teleporter utils.Teleporte
if fundedAddress == receiveEvent.RewardRedeemer {
utils.RedeemRelayerRewardsAndConfirm(
ctx,
- teleporter.TeleporterMessenger(subnetAInfo),
- subnetAInfo,
+ teleporter.TeleporterMessenger(L1AInfo),
+ L1AInfo,
mockToken,
mockTokenAddress,
fundedKey,
diff --git a/tests/flows/teleporter/basic_send_receive.go b/tests/flows/teleporter/basic_send_receive.go
index 7a9764cea..dc0b138f0 100644
--- a/tests/flows/teleporter/basic_send_receive.go
+++ b/tests/flows/teleporter/basic_send_receive.go
@@ -12,26 +12,26 @@ import (
. "github.com/onsi/gomega"
)
-// Tests basic one-way send from Subnet A to Subnet B and vice versa
+// Tests basic one-way send from L1 A to L1 B and vice versa
func BasicSendReceive(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
- teleporterContractAddress := teleporter.TeleporterMessengerAddress(subnetAInfo)
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
+ teleporterContractAddress := teleporter.TeleporterMessengerAddress(L1AInfo)
fundedAddress, fundedKey := network.GetFundedAccountInfo()
- // Send a transaction to Subnet A to issue a Warp Message from the Teleporter contract to Subnet B
+ // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
ctx := context.Background()
- // Clear the receipt queue from Subnet B -> Subnet A to have a clean slate for the test flow.
+ // Clear the receipt queue from L1 B -> L1 A to have a clean slate for the test flow.
// This is only done if the test non-external networks because external networks may have
// an arbitrarily high number of receipts to be cleared from a given queue from unrelated messages.
- network.ClearReceiptQueue(ctx, teleporter, fundedKey, subnetBInfo, subnetAInfo)
+ network.ClearReceiptQueue(ctx, teleporter, fundedKey, L1BInfo, L1AInfo)
feeAmount := big.NewInt(1)
feeTokenAddress, feeToken := utils.DeployExampleERC20(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
)
utils.ERC20Approve(
ctx,
@@ -39,12 +39,12 @@ func BasicSendReceive(network *localnetwork.LocalNetwork, teleporter utils.Telep
teleporterContractAddress,
big.NewInt(0).Mul(big.NewInt(1e18),
big.NewInt(10)),
- subnetAInfo,
+ L1AInfo,
fundedKey,
)
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationAddress: fundedAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: feeTokenAddress,
@@ -57,60 +57,60 @@ func BasicSendReceive(network *localnetwork.LocalNetwork, teleporter utils.Telep
receipt, teleporterMessageID := utils.SendCrossChainMessageAndWaitForAcceptance(
ctx,
- teleporter.TeleporterMessenger(subnetAInfo),
- subnetAInfo,
- subnetBInfo,
+ teleporter.TeleporterMessenger(L1AInfo),
+ L1AInfo,
+ L1BInfo,
sendCrossChainMessageInput,
fundedKey,
)
expectedReceiptID := teleporterMessageID
// Relay the message to the destination
- deliveryReceipt := teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, true, fundedKey)
+ deliveryReceipt := teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, true, fundedKey)
receiveEvent, err := utils.GetEventFromLogs(
deliveryReceipt.Logs,
- teleporter.TeleporterMessenger(subnetBInfo).ParseReceiveCrossChainMessage)
+ teleporter.TeleporterMessenger(L1BInfo).ParseReceiveCrossChainMessage)
Expect(err).Should(BeNil())
// Check Teleporter message received on the destination
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(
&bind.CallOpts{}, teleporterMessageID,
)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
- // Send a transaction to Subnet B to issue a Warp Message from the Teleporter contract to Subnet A
- sendCrossChainMessageInput.DestinationBlockchainID = subnetAInfo.BlockchainID
+ // Send a transaction to L1 B to issue a Warp Message from the Teleporter contract to L1 A
+ sendCrossChainMessageInput.DestinationBlockchainID = L1AInfo.BlockchainID
sendCrossChainMessageInput.FeeInfo.Amount = big.NewInt(0)
receipt, teleporterMessageID = utils.SendCrossChainMessageAndWaitForAcceptance(
ctx,
- teleporter.TeleporterMessenger(subnetBInfo),
- subnetBInfo,
- subnetAInfo,
+ teleporter.TeleporterMessenger(L1BInfo),
+ L1BInfo,
+ L1AInfo,
sendCrossChainMessageInput,
fundedKey,
)
// Relay the message to the destination
- deliveryReceipt = teleporter.RelayTeleporterMessage(ctx, receipt, subnetBInfo, subnetAInfo, true, fundedKey)
+ deliveryReceipt = teleporter.RelayTeleporterMessage(ctx, receipt, L1BInfo, L1AInfo, true, fundedKey)
Expect(utils.CheckReceiptReceived(
deliveryReceipt,
expectedReceiptID,
- teleporter.TeleporterMessenger(subnetAInfo))).Should(BeTrue())
+ teleporter.TeleporterMessenger(L1AInfo))).Should(BeTrue())
// Check Teleporter message received on the destination
- delivered, err = teleporter.TeleporterMessenger(subnetAInfo).MessageReceived(
+ delivered, err = teleporter.TeleporterMessenger(L1AInfo).MessageReceived(
&bind.CallOpts{}, teleporterMessageID,
)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
// If the reward address of the message from A->B is the funded address, which is able to send
- // transactions on subnet A, then redeem the rewards.
+ // transactions on L1 A, then redeem the rewards.
if receiveEvent.RewardRedeemer == fundedAddress {
utils.RedeemRelayerRewardsAndConfirm(
- ctx, teleporter.TeleporterMessenger(subnetAInfo), subnetAInfo, feeToken, feeTokenAddress, fundedKey, feeAmount,
+ ctx, teleporter.TeleporterMessenger(L1AInfo), L1AInfo, feeToken, feeTokenAddress, fundedKey, feeAmount,
)
}
}
diff --git a/tests/flows/teleporter/deliver_to_nonexistent_contract.go b/tests/flows/teleporter/deliver_to_nonexistent_contract.go
index 9a4f976fc..e93d1c5c3 100644
--- a/tests/flows/teleporter/deliver_to_nonexistent_contract.go
+++ b/tests/flows/teleporter/deliver_to_nonexistent_contract.go
@@ -15,8 +15,8 @@ import (
)
func DeliverToNonExistentContract(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
deployerKey, err := crypto.GenerateKey()
@@ -24,46 +24,46 @@ func DeliverToNonExistentContract(network *localnetwork.LocalNetwork, teleporter
deployerAddress := crypto.PubkeyToAddress(deployerKey.PublicKey)
//
- // Fund the deployer address on Subnet B
+ // Fund the deployer address on L1 B
//
ctx := context.Background()
- log.Info("Funding address on subnet B", "address", deployerAddress.Hex())
+ log.Info("Funding address on L1 B", "address", deployerAddress.Hex())
fundAmount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(10)) // 10eth
fundDeployerTx := utils.CreateNativeTransferTransaction(
- ctx, subnetBInfo, fundedKey, deployerAddress, fundAmount,
+ ctx, L1BInfo, fundedKey, deployerAddress, fundAmount,
)
- utils.SendTransactionAndWaitForSuccess(ctx, subnetBInfo, fundDeployerTx)
+ utils.SendTransactionAndWaitForSuccess(ctx, L1BInfo, fundDeployerTx)
//
- // Deploy ExampleMessenger to Subnet A, but not to Subnet B
- // Send a message that should fail to be executed on Subnet B
+ // Deploy ExampleMessenger to L1 A, but not to L1 B
+ // Send a message that should fail to be executed on L1 B
//
- log.Info("Deploying ExampleMessenger to Subnet A")
- _, subnetAExampleMessenger := utils.DeployTestMessenger(
+ log.Info("Deploying ExampleMessenger to L1 A")
+ _, L1AExampleMessenger := utils.DeployTestMessenger(
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetAInfo),
- subnetAInfo,
+ teleporter.TeleporterRegistryAddress(L1AInfo),
+ L1AInfo,
)
- // Derive the eventual address of the destination contract on Subnet B
- nonce, err := subnetBInfo.RPCClient.NonceAt(ctx, deployerAddress, nil)
+ // Derive the eventual address of the destination contract on L1 B
+ nonce, err := L1BInfo.RPCClient.NonceAt(ctx, deployerAddress, nil)
Expect(err).Should(BeNil())
destinationContractAddress := crypto.CreateAddress(deployerAddress, nonce)
//
- // Call the example messenger contract on Subnet A
+ // Call the example messenger contract on L1 A
//
- log.Info("Calling ExampleMessenger on Subnet A")
+ log.Info("Calling ExampleMessenger on L1 A")
message := "Hello, world!"
optsA, err := bind.NewKeyedTransactorWithChainID(
- fundedKey, subnetAInfo.EVMChainID)
+ fundedKey, L1AInfo.EVMChainID)
Expect(err).Should(BeNil())
- tx, err := subnetAExampleMessenger.SendMessage(
+ tx, err := L1AExampleMessenger.SendMessage(
optsA,
- subnetBInfo.BlockchainID,
+ L1BInfo.BlockchainID,
destinationContractAddress,
common.BigToAddress(common.Big0),
big.NewInt(0),
@@ -73,14 +73,14 @@ func DeliverToNonExistentContract(network *localnetwork.LocalNetwork, teleporter
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- receipt := utils.WaitForTransactionSuccess(ctx, subnetAInfo, tx.Hash())
+ receipt := utils.WaitForTransactionSuccess(ctx, L1AInfo, tx.Hash())
sendEvent, err := utils.GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(subnetAInfo).ParseSendCrossChainMessage,
+ teleporter.TeleporterMessenger(L1AInfo).ParseSendCrossChainMessage,
)
Expect(err).Should(BeNil())
- Expect(sendEvent.DestinationBlockchainID[:]).Should(Equal(subnetBInfo.BlockchainID[:]))
+ Expect(sendEvent.DestinationBlockchainID[:]).Should(Equal(L1BInfo.BlockchainID[:]))
teleporterMessageID := sendEvent.MessageID
@@ -88,16 +88,16 @@ func DeliverToNonExistentContract(network *localnetwork.LocalNetwork, teleporter
// Relay the message to the destination
//
log.Info("Relaying the message to the destination")
- receipt = teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, true, fundedKey)
+ receipt = teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, true, fundedKey)
receiveEvent, err :=
- utils.GetEventFromLogs(receipt.Logs, teleporter.TeleporterMessenger(subnetAInfo).ParseReceiveCrossChainMessage)
+ utils.GetEventFromLogs(receipt.Logs, teleporter.TeleporterMessenger(L1AInfo).ParseReceiveCrossChainMessage)
Expect(err).Should(BeNil())
//
// Check that the message was successfully relayed
//
log.Info("Checking the message was successfully relayed")
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(
&bind.CallOpts{},
teleporterMessageID,
)
@@ -110,42 +110,42 @@ func DeliverToNonExistentContract(network *localnetwork.LocalNetwork, teleporter
log.Info("Checking the message was not successfully executed")
executionFailedEvent, err := utils.GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(subnetAInfo).ParseMessageExecutionFailed,
+ teleporter.TeleporterMessenger(L1AInfo).ParseMessageExecutionFailed,
)
Expect(err).Should(BeNil())
Expect(executionFailedEvent.MessageID).Should(Equal(receiveEvent.MessageID))
//
- // Deploy the contract on Subnet B
+ // Deploy the contract on L1 B
//
- log.Info("Deploying the contract on Subnet B")
- exampleMessengerContractB, subnetBExampleMessenger := utils.DeployTestMessenger(
+ log.Info("Deploying the contract on L1 B")
+ exampleMessengerContractB, L1BExampleMessenger := utils.DeployTestMessenger(
ctx,
deployerKey,
deployerAddress,
- teleporter.TeleporterRegistryAddress(subnetBInfo),
- subnetBInfo,
+ teleporter.TeleporterRegistryAddress(L1BInfo),
+ L1BInfo,
)
// Confirm that it was deployed at the expected address
Expect(exampleMessengerContractB).Should(Equal(destinationContractAddress))
//
- // Call retryMessageExecution on Subnet B
+ // Call retryMessageExecution on L1 B
//
- log.Info("Calling retryMessageExecution on Subnet B")
+ log.Info("Calling retryMessageExecution on L1 B")
receipt = utils.RetryMessageExecutionAndWaitForAcceptance(
ctx,
- subnetAInfo.BlockchainID,
- teleporter.TeleporterMessenger(subnetBInfo),
- subnetBInfo,
+ L1AInfo.BlockchainID,
+ teleporter.TeleporterMessenger(L1BInfo),
+ L1BInfo,
receiveEvent.Message,
fundedKey,
)
log.Info("Checking the message was successfully executed")
messageExecutedEvent, err := utils.GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(subnetAInfo).ParseMessageExecuted,
+ teleporter.TeleporterMessenger(L1AInfo).ParseMessageExecuted,
)
Expect(err).Should(BeNil())
Expect(messageExecutedEvent.MessageID).Should(Equal(receiveEvent.MessageID))
@@ -154,7 +154,7 @@ func DeliverToNonExistentContract(network *localnetwork.LocalNetwork, teleporter
// Verify we received the expected string
//
log.Info("Verifying we received the expected string")
- _, currMessage, err := subnetBExampleMessenger.GetCurrentMessage(&bind.CallOpts{}, subnetAInfo.BlockchainID)
+ _, currMessage, err := L1BExampleMessenger.GetCurrentMessage(&bind.CallOpts{}, L1AInfo.BlockchainID)
Expect(err).Should(BeNil())
Expect(currMessage).Should(Equal(message))
}
diff --git a/tests/flows/teleporter/deliver_to_wrong_chain.go b/tests/flows/teleporter/deliver_to_wrong_chain.go
index 3ce462d69..04ea59bf1 100644
--- a/tests/flows/teleporter/deliver_to_wrong_chain.go
+++ b/tests/flows/teleporter/deliver_to_wrong_chain.go
@@ -14,25 +14,25 @@ import (
)
func DeliverToWrongChain(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, subnetCInfo := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, L1CInfo := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Get the expected teleporter message ID for Subnet C
+ // Get the expected teleporter message ID for L1 C
//
- expectedAtoCMessageID, err := teleporter.TeleporterMessenger(subnetAInfo).GetNextMessageID(
+ expectedAtoCMessageID, err := teleporter.TeleporterMessenger(L1AInfo).GetNextMessageID(
&bind.CallOpts{},
- subnetCInfo.BlockchainID,
+ L1CInfo.BlockchainID,
)
Expect(err).Should(BeNil())
//
- // Submit a message to be sent from SubnetA to SubnetB
+ // Submit a message to be sent from L1A to L1B
//
ctx := context.Background()
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID, // Message intended for SubnetB
+ DestinationBlockchainID: L1BInfo.BlockchainID, // Message intended for L1B
DestinationAddress: common.HexToAddress("0x1111111111111111111111111111111111111111"),
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: fundedAddress,
@@ -45,24 +45,24 @@ func DeliverToWrongChain(network *localnetwork.LocalNetwork, teleporter utils.Te
log.Info(
"Sending Teleporter transaction on source chain",
- "destinationBlockchainID", subnetBInfo.BlockchainID,
+ "destinationBlockchainID", L1BInfo.BlockchainID,
)
receipt, _ := utils.SendCrossChainMessageAndWaitForAcceptance(
ctx,
- teleporter.TeleporterMessenger(subnetAInfo),
- subnetAInfo,
- subnetBInfo,
+ teleporter.TeleporterMessenger(L1AInfo),
+ L1AInfo,
+ L1BInfo,
sendCrossChainMessageInput,
fundedKey,
)
- teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetCInfo, false, fundedKey)
+ teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1CInfo, false, fundedKey)
//
- // Check that the message was not received on the Subnet C
+ // Check that the message was not received on the L1 C
//
- delivered, err := teleporter.TeleporterMessenger(subnetCInfo).MessageReceived(
+ delivered, err := teleporter.TeleporterMessenger(L1CInfo).MessageReceived(
&bind.CallOpts{}, expectedAtoCMessageID,
)
Expect(err).Should(BeNil())
diff --git a/tests/flows/teleporter/insufficient_gas.go b/tests/flows/teleporter/insufficient_gas.go
index 66bcef13c..2ded3b52e 100644
--- a/tests/flows/teleporter/insufficient_gas.go
+++ b/tests/flows/teleporter/insufficient_gas.go
@@ -11,89 +11,89 @@ import (
)
func InsufficientGas(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
- // Deploy TestMessenger to Subnets A
- _, subnetATestMessenger := utils.DeployTestMessenger(
+ // Deploy TestMessenger to L1s A
+ _, l1ATestMessenger := utils.DeployTestMessenger(
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetAInfo),
- subnetAInfo,
+ teleporter.TeleporterRegistryAddress(L1AInfo),
+ L1AInfo,
)
- // Deploy TestMessenger to Subnets B
- testMessengerContractB, subnetBTestMessenger := utils.DeployTestMessenger(
+ // Deploy TestMessenger to L1s B
+ testMessengerContractB, l1BTestMessenger := utils.DeployTestMessenger(
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetBInfo),
- subnetBInfo,
+ teleporter.TeleporterRegistryAddress(L1BInfo),
+ L1BInfo,
)
- // Send message from SubnetA to SubnetB with 0 execution gas, which should fail to execute
+ // Send message from L1A to L1B with 0 execution gas, which should fail to execute
message := "Hello, world!"
optsA, err := bind.NewKeyedTransactorWithChainID(
- fundedKey, subnetAInfo.EVMChainID)
+ fundedKey, L1AInfo.EVMChainID)
Expect(err).Should(BeNil())
- tx, err := subnetATestMessenger.SendMessage(
- optsA, subnetBInfo.BlockchainID, testMessengerContractB, fundedAddress, big.NewInt(0), big.NewInt(0), message,
+ tx, err := l1ATestMessenger.SendMessage(
+ optsA, L1BInfo.BlockchainID, testMessengerContractB, fundedAddress, big.NewInt(0), big.NewInt(0), message,
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- receipt := utils.WaitForTransactionSuccess(ctx, subnetAInfo, tx.Hash())
+ receipt := utils.WaitForTransactionSuccess(ctx, L1AInfo, tx.Hash())
event, err := utils.GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(subnetAInfo).ParseSendCrossChainMessage,
+ teleporter.TeleporterMessenger(L1AInfo).ParseSendCrossChainMessage,
)
Expect(err).Should(BeNil())
- Expect(event.DestinationBlockchainID[:]).Should(Equal(subnetBInfo.BlockchainID[:]))
+ Expect(event.DestinationBlockchainID[:]).Should(Equal(L1BInfo.BlockchainID[:]))
messageID := event.MessageID
- // Relay message from SubnetA to SubnetB
- receipt = teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, true, fundedKey)
+ // Relay message from L1A to L1B
+ receipt = teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, true, fundedKey)
// Check Teleporter message received on the destination
delivered, err :=
- teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(&bind.CallOpts{}, messageID)
+ teleporter.TeleporterMessenger(L1BInfo).MessageReceived(&bind.CallOpts{}, messageID)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
// Check message execution failed event
failedMessageExecutionEvent, err := utils.GetEventFromLogs(
- receipt.Logs, teleporter.TeleporterMessenger(subnetBInfo).ParseMessageExecutionFailed,
+ receipt.Logs, teleporter.TeleporterMessenger(L1BInfo).ParseMessageExecutionFailed,
)
Expect(err).Should(BeNil())
Expect(failedMessageExecutionEvent.MessageID[:]).Should(Equal(messageID[:]))
- Expect(failedMessageExecutionEvent.SourceBlockchainID[:]).Should(Equal(subnetAInfo.BlockchainID[:]))
+ Expect(failedMessageExecutionEvent.SourceBlockchainID[:]).Should(Equal(L1AInfo.BlockchainID[:]))
// Retry message execution. This will execute the message with as much gas as needed
// (up to the transaction gas limit), rather than using the required gas specified in the message itself.
receipt = utils.RetryMessageExecutionAndWaitForAcceptance(
ctx,
- subnetAInfo.BlockchainID,
- teleporter.TeleporterMessenger(subnetBInfo),
- subnetBInfo,
+ L1AInfo.BlockchainID,
+ teleporter.TeleporterMessenger(L1BInfo),
+ L1BInfo,
failedMessageExecutionEvent.Message,
fundedKey,
)
executedEvent, err := utils.GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(subnetBInfo).ParseMessageExecuted,
+ teleporter.TeleporterMessenger(L1BInfo).ParseMessageExecuted,
)
Expect(err).Should(BeNil())
Expect(executedEvent.MessageID[:]).Should(Equal(messageID[:]))
- Expect(executedEvent.SourceBlockchainID[:]).Should(Equal(subnetAInfo.BlockchainID[:]))
+ Expect(executedEvent.SourceBlockchainID[:]).Should(Equal(L1AInfo.BlockchainID[:]))
//
// Verify we received the expected string
//
- _, currMessage, err := subnetBTestMessenger.GetCurrentMessage(&bind.CallOpts{}, subnetAInfo.BlockchainID)
+ _, currMessage, err := l1BTestMessenger.GetCurrentMessage(&bind.CallOpts{}, L1AInfo.BlockchainID)
Expect(err).Should(BeNil())
Expect(currMessage).Should(Equal(message))
}
diff --git a/tests/flows/teleporter/registry/check_upgrade_access.go b/tests/flows/teleporter/registry/check_upgrade_access.go
index 07d66c2e7..ae80cbe30 100644
--- a/tests/flows/teleporter/registry/check_upgrade_access.go
+++ b/tests/flows/teleporter/registry/check_upgrade_access.go
@@ -14,20 +14,20 @@ import (
)
func CheckUpgradeAccess(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetInfo := network.GetPrimaryNetworkInfo()
+ l1Info := network.GetPrimaryNetworkInfo()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Deploy TestMessenger to the subnet
+ // Deploy TestMessenger to the L1
//
ctx := context.Background()
- teleporterAddress := teleporter.TeleporterMessengerAddress(subnetInfo)
+ teleporterAddress := teleporter.TeleporterMessengerAddress(l1Info)
_, testMessenger := utils.DeployTestMessenger(
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetInfo),
- subnetInfo,
+ teleporter.TeleporterRegistryAddress(l1Info),
+ l1Info,
)
// Check that owner is the funded address
@@ -44,7 +44,7 @@ func CheckUpgradeAccess(network *localnetwork.LocalNetwork, teleporter utils.Tel
fundAmount := big.NewInt(0.1e18) // 0.1avax
utils.SendNativeTransfer(
ctx,
- subnetInfo,
+ l1Info,
fundedKey,
nonOwnerAddress,
fundAmount,
@@ -52,7 +52,7 @@ func CheckUpgradeAccess(network *localnetwork.LocalNetwork, teleporter utils.Tel
// Check that access is not granted to the non owner and has no effect
nonOwnerOpts, err := bind.NewKeyedTransactorWithChainID(
- nonOwnerKey, subnetInfo.EVMChainID)
+ nonOwnerKey, l1Info.EVMChainID)
Expect(err).Should(BeNil())
_, err = testMessenger.PauseTeleporterAddress(nonOwnerOpts, teleporterAddress)
Expect(err).ShouldNot(BeNil())
@@ -65,12 +65,12 @@ func CheckUpgradeAccess(network *localnetwork.LocalNetwork, teleporter utils.Tel
// Check that the owner is able to pause the Teleporter address
ownerOpts, err := bind.NewKeyedTransactorWithChainID(
- fundedKey, subnetInfo.EVMChainID)
+ fundedKey, l1Info.EVMChainID)
Expect(err).Should(BeNil())
// Try to call pauseTeleporterAddress from the owner account
tx, err := testMessenger.PauseTeleporterAddress(ownerOpts, teleporterAddress)
Expect(err).Should(BeNil())
- receipt := utils.WaitForTransactionSuccess(ctx, subnetInfo, tx.Hash())
+ receipt := utils.WaitForTransactionSuccess(ctx, l1Info, tx.Hash())
pauseTeleporterEvent, err := utils.GetEventFromLogs(receipt.Logs, testMessenger.ParseTeleporterAddressPaused)
Expect(err).Should(BeNil())
Expect(pauseTeleporterEvent.TeleporterAddress).Should(Equal(teleporterAddress))
@@ -82,7 +82,7 @@ func CheckUpgradeAccess(network *localnetwork.LocalNetwork, teleporter utils.Tel
// Transfer ownership to the non owner account
tx, err = testMessenger.TransferOwnership(ownerOpts, nonOwnerAddress)
Expect(err).Should(BeNil())
- utils.WaitForTransactionSuccess(ctx, subnetInfo, tx.Hash())
+ utils.WaitForTransactionSuccess(ctx, l1Info, tx.Hash())
// Try to call unpauseTeleporterAddress from the previous owner account
_, err = testMessenger.UnpauseTeleporterAddress(ownerOpts, teleporterAddress)
@@ -97,7 +97,7 @@ func CheckUpgradeAccess(network *localnetwork.LocalNetwork, teleporter utils.Tel
// Try to call unpauseTeleporterAddress from the non owner account now
tx, err = testMessenger.UnpauseTeleporterAddress(nonOwnerOpts, teleporterAddress)
Expect(err).Should(BeNil())
- receipt = utils.WaitForTransactionSuccess(ctx, subnetInfo, tx.Hash())
+ receipt = utils.WaitForTransactionSuccess(ctx, l1Info, tx.Hash())
unpauseTeleporterEvent, err := utils.GetEventFromLogs(receipt.Logs, testMessenger.ParseTeleporterAddressUnpaused)
Expect(err).Should(BeNil())
Expect(unpauseTeleporterEvent.TeleporterAddress).Should(Equal(teleporterAddress))
diff --git a/tests/flows/teleporter/registry/pause_teleporter.go b/tests/flows/teleporter/registry/pause_teleporter.go
index 1f423660b..db1e1a580 100644
--- a/tests/flows/teleporter/registry/pause_teleporter.go
+++ b/tests/flows/teleporter/registry/pause_teleporter.go
@@ -10,38 +10,38 @@ import (
)
func PauseTeleporter(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Deploy TestMessenger to Subnets A and B
+ // Deploy TestMessenger to L1s A and B
//
ctx := context.Background()
- teleporterAddress := teleporter.TeleporterMessengerAddress(subnetAInfo)
+ teleporterAddress := teleporter.TeleporterMessengerAddress(L1AInfo)
_, testMessengerA := utils.DeployTestMessenger(
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetAInfo),
- subnetAInfo,
+ teleporter.TeleporterRegistryAddress(L1AInfo),
+ L1AInfo,
)
testMessengerAddressB, testMessengerB := utils.DeployTestMessenger(
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetBInfo),
- subnetBInfo,
+ teleporter.TeleporterRegistryAddress(L1BInfo),
+ L1BInfo,
)
- // Pause Teleporter on subnet B
+ // Pause Teleporter on L1 B
opts, err := bind.NewKeyedTransactorWithChainID(
- fundedKey, subnetBInfo.EVMChainID)
+ fundedKey, L1BInfo.EVMChainID)
Expect(err).Should(BeNil())
tx, err := testMessengerB.PauseTeleporterAddress(opts, teleporterAddress)
Expect(err).Should(BeNil())
- receipt := utils.WaitForTransactionSuccess(ctx, subnetBInfo, tx.Hash())
+ receipt := utils.WaitForTransactionSuccess(ctx, L1BInfo, tx.Hash())
pauseTeleporterEvent, err := utils.GetEventFromLogs(receipt.Logs, testMessengerB.ParseTeleporterAddressPaused)
Expect(err).Should(BeNil())
Expect(pauseTeleporterEvent.TeleporterAddress).Should(Equal(teleporterAddress))
@@ -50,13 +50,13 @@ func PauseTeleporter(network *localnetwork.LocalNetwork, teleporter utils.Telepo
Expect(err).Should(BeNil())
Expect(isPaused).Should(BeTrue())
- // Send a message from subnet A to subnet B, which should fail
+ // Send a message from L1 A to L1 B, which should fail
network.SendExampleCrossChainMessageAndVerify(
ctx,
teleporter,
- subnetAInfo,
+ L1AInfo,
testMessengerA,
- subnetBInfo,
+ L1BInfo,
testMessengerAddressB,
testMessengerB,
fundedKey,
@@ -64,11 +64,11 @@ func PauseTeleporter(network *localnetwork.LocalNetwork, teleporter utils.Telepo
false,
)
- // Unpause Teleporter on subnet B
+ // Unpause Teleporter on L1 B
tx, err = testMessengerB.UnpauseTeleporterAddress(opts, teleporterAddress)
Expect(err).Should(BeNil())
- receipt = utils.WaitForTransactionSuccess(ctx, subnetBInfo, tx.Hash())
+ receipt = utils.WaitForTransactionSuccess(ctx, L1BInfo, tx.Hash())
unpauseTeleporterEvent, err := utils.GetEventFromLogs(receipt.Logs, testMessengerB.ParseTeleporterAddressUnpaused)
Expect(err).Should(BeNil())
Expect(unpauseTeleporterEvent.TeleporterAddress).Should(Equal(teleporterAddress))
@@ -77,13 +77,13 @@ func PauseTeleporter(network *localnetwork.LocalNetwork, teleporter utils.Telepo
Expect(err).Should(BeNil())
Expect(isPaused).Should(BeFalse())
- // Send a message from subnet A to subnet B again, which should now succeed
+ // Send a message from L1 A to L1 B again, which should now succeed
network.SendExampleCrossChainMessageAndVerify(
ctx,
teleporter,
- subnetAInfo,
+ L1AInfo,
testMessengerA,
- subnetBInfo,
+ L1BInfo,
testMessengerAddressB,
testMessengerB,
fundedKey,
diff --git a/tests/flows/teleporter/registry/teleporter_registry.go b/tests/flows/teleporter/registry/teleporter_registry.go
index 43f328aa3..b366c2220 100644
--- a/tests/flows/teleporter/registry/teleporter_registry.go
+++ b/tests/flows/teleporter/registry/teleporter_registry.go
@@ -28,7 +28,7 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
// Retry the previously failed message execution, verify message is now able to be delivered to dApp
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, subnetBInfo := network.GetTwoSubnets()
+ L1AInfo, L1BInfo := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
@@ -45,14 +45,14 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetBInfo),
- subnetBInfo,
+ teleporter.TeleporterRegistryAddress(L1BInfo),
+ L1BInfo,
)
// Deploy the new version of Teleporter to both chains
var newTeleporterAddress common.Address
- for _, subnet := range network.GetAllSubnetsInfo() {
- newTeleporterAddress = utils.DeployNewTeleporterVersion(ctx, teleporter, subnet, fundedKey, teleporterByteCodeFile)
+ for _, l1 := range network.GetAllL1Infos() {
+ newTeleporterAddress = utils.DeployNewTeleporterVersion(ctx, teleporter, l1, fundedKey, teleporterByteCodeFile)
}
networkID := network.GetNetworkID()
@@ -66,15 +66,15 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
)
offchainMessageB, warpEnabledChainConfigB := utils.InitOffChainMessageChainConfig(
networkID,
- subnetBInfo,
- teleporter.TeleporterRegistryAddress(subnetBInfo),
+ L1BInfo,
+ teleporter.TeleporterRegistryAddress(L1BInfo),
newTeleporterAddress,
2,
)
offchainMessageA, warpEnabledChainConfigA := utils.InitOffChainMessageChainConfig(
networkID,
- subnetAInfo,
- teleporter.TeleporterRegistryAddress(subnetAInfo),
+ L1AInfo,
+ teleporter.TeleporterRegistryAddress(L1AInfo),
newTeleporterAddress,
2,
)
@@ -82,8 +82,8 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
// Create chain config with off chain messages
chainConfigs := make(utils.ChainConfigMap)
chainConfigs.Add(cChainInfo, warpEnabledChainConfigC)
- chainConfigs.Add(subnetBInfo, warpEnabledChainConfigB)
- chainConfigs.Add(subnetAInfo, warpEnabledChainConfigA)
+ chainConfigs.Add(L1BInfo, warpEnabledChainConfigB)
+ chainConfigs.Add(L1AInfo, warpEnabledChainConfigA)
// Restart nodes with new chain config
network.SetChainConfigs(chainConfigs)
@@ -91,11 +91,11 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
defer cancel()
network.RestartNodes(restartCtx, nil)
- // Call addProtocolVersion on subnetB to register the new Teleporter version
+ // Call addProtocolVersion on L1B to register the new Teleporter version
network.AddProtocolVersionAndWaitForAcceptance(
ctx,
teleporter,
- subnetBInfo,
+ L1BInfo,
newTeleporterAddress,
fundedKey,
offchainMessageB,
@@ -108,7 +108,7 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
teleporter,
cChainInfo,
testMessengerC,
- subnetBInfo,
+ L1BInfo,
testMessengerContractB,
testMessengerB,
fundedKey,
@@ -117,17 +117,17 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
)
// Update minimum Teleporter version on destination chain
- opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, subnetBInfo.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, L1BInfo.EVMChainID)
Expect(err).Should(BeNil())
- latestVersionB, err := teleporter.TeleporterRegistry(subnetBInfo).LatestVersion(&bind.CallOpts{})
+ latestVersionB, err := teleporter.TeleporterRegistry(L1BInfo).LatestVersion(&bind.CallOpts{})
Expect(err).Should(BeNil())
minTeleporterVersion, err := testMessengerB.GetMinTeleporterVersion(&bind.CallOpts{})
Expect(err).Should(BeNil())
tx, err := testMessengerB.UpdateMinTeleporterVersion(opts, latestVersionB)
Expect(err).Should(BeNil())
- receipt := utils.WaitForTransactionSuccess(ctx, subnetBInfo, tx.Hash())
+ receipt := utils.WaitForTransactionSuccess(ctx, L1BInfo, tx.Hash())
// Verify that minTeleporterVersion updated
minTeleporterVersionUpdatedEvent, err := utils.GetEventFromLogs(
@@ -145,7 +145,7 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
teleporter,
cChainInfo,
testMessengerC,
- subnetBInfo,
+ L1BInfo,
testMessengerContractB,
testMessengerB,
fundedKey,
@@ -154,15 +154,15 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
)
// Update teleporter with the new TeleporterMessengers
- for _, subnet := range network.GetAllSubnetsInfo() {
- teleporter.SetTeleporter(newTeleporterAddress, subnet)
- teleporter.InitializeBlockchainID(subnet, fundedKey)
+ for _, l1 := range network.GetAllL1Infos() {
+ teleporter.SetTeleporter(newTeleporterAddress, l1)
+ teleporter.InitializeBlockchainID(l1, fundedKey)
}
network.SendExampleCrossChainMessageAndVerify(
ctx,
teleporter,
- subnetBInfo,
+ L1BInfo,
testMessengerB,
cChainInfo,
testMessengerContractC,
@@ -172,7 +172,7 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
false,
)
- // Call addProtocolVersion on subnetA to register the new Teleporter version
+ // Call addProtocolVersion on L1A to register the new Teleporter version
network.AddProtocolVersionAndWaitForAcceptance(
ctx,
teleporter,
@@ -187,7 +187,7 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
network.SendExampleCrossChainMessageAndVerify(
ctx,
teleporter,
- subnetBInfo,
+ L1BInfo,
testMessengerB,
cChainInfo,
testMessengerContractC,
@@ -197,18 +197,18 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
true,
)
- // To make sure all subnets are using the same Teleporter version, call addProtocolVersion on subnetA
+ // To make sure all L1s are using the same Teleporter version, call addProtocolVersion on L1A
// to register the new Teleporter version
network.AddProtocolVersionAndWaitForAcceptance(
ctx,
teleporter,
- subnetAInfo,
+ L1AInfo,
newTeleporterAddress,
fundedKey,
offchainMessageA,
)
- latestVersionA, err := teleporter.TeleporterRegistry(subnetAInfo).LatestVersion(&bind.CallOpts{})
+ latestVersionA, err := teleporter.TeleporterRegistry(L1AInfo).LatestVersion(&bind.CallOpts{})
Expect(err).Should(BeNil())
Expect(latestVersionA.Cmp(latestVersionB)).Should(Equal(0))
diff --git a/tests/flows/teleporter/relay_message_twice.go b/tests/flows/teleporter/relay_message_twice.go
index 791e177b8..6ec7c913e 100644
--- a/tests/flows/teleporter/relay_message_twice.go
+++ b/tests/flows/teleporter/relay_message_twice.go
@@ -15,17 +15,17 @@ import (
)
func RelayMessageTwice(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Send a transaction to Subnet A to issue a Warp Message from the Teleporter contract to Subnet B
+ // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
//
ctx := context.Background()
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationAddress: fundedAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: fundedAddress,
@@ -38,22 +38,22 @@ func RelayMessageTwice(network *localnetwork.LocalNetwork, teleporter utils.Tele
log.Info(
"Sending Teleporter transaction on source chain",
- "destinationBlockchainID", subnetBInfo.BlockchainID,
+ "destinationBlockchainID", L1BInfo.BlockchainID,
)
receipt, teleporterMessageID := utils.SendCrossChainMessageAndWaitForAcceptance(
- ctx, teleporter.TeleporterMessenger(subnetAInfo), subnetAInfo, subnetBInfo, sendCrossChainMessageInput, fundedKey,
+ ctx, teleporter.TeleporterMessenger(L1AInfo), L1AInfo, L1BInfo, sendCrossChainMessageInput, fundedKey,
)
//
// Relay the message to the destination
//
- teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, true, fundedKey)
+ teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, true, fundedKey)
//
// Check Teleporter message received on the destination
//
log.Info("Checking the message was received on the destination")
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(
&bind.CallOpts{}, teleporterMessageID,
)
Expect(err).Should(BeNil())
@@ -63,5 +63,5 @@ func RelayMessageTwice(network *localnetwork.LocalNetwork, teleporter utils.Tele
// Attempt to send the same message again, should fail
//
log.Info("Relaying the same Teleporter message again on the destination")
- teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, false, fundedKey)
+ teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, false, fundedKey)
}
diff --git a/tests/flows/teleporter/relayer_modifies_message.go b/tests/flows/teleporter/relayer_modifies_message.go
index a328593c7..2f4c38d2e 100644
--- a/tests/flows/teleporter/relayer_modifies_message.go
+++ b/tests/flows/teleporter/relayer_modifies_message.go
@@ -24,15 +24,15 @@ import (
// Disallow this test from being run on anything but a local network, since it requires special behavior by the relayer
func RelayerModifiesMessage(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
- // Send a transaction to Subnet A to issue a Warp Message from the Teleporter contract to Subnet B
+ // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
ctx := context.Background()
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationAddress: fundedAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: fundedAddress,
@@ -44,7 +44,7 @@ func RelayerModifiesMessage(network *localnetwork.LocalNetwork, teleporter utils
}
receipt, messageID := utils.SendCrossChainMessageAndWaitForAcceptance(
- ctx, teleporter.TeleporterMessenger(subnetAInfo), subnetAInfo, subnetBInfo, sendCrossChainMessageInput, fundedKey)
+ ctx, teleporter.TeleporterMessenger(L1AInfo), L1AInfo, L1BInfo, sendCrossChainMessageInput, fundedKey)
// Relay the message to the destination
// Relayer modifies the message in flight
@@ -52,13 +52,13 @@ func RelayerModifiesMessage(network *localnetwork.LocalNetwork, teleporter utils
ctx,
teleporter,
receipt,
- subnetAInfo,
- subnetBInfo,
+ L1AInfo,
+ L1BInfo,
network,
)
// Check Teleporter message was not received on the destination
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(&bind.CallOpts{}, messageID)
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(&bind.CallOpts{}, messageID)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeFalse())
}
@@ -67,8 +67,8 @@ func relayAlteredMessage(
ctx context.Context,
teleporter utils.TeleporterTestInfo,
sourceReceipt *types.Receipt,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
network *localnetwork.LocalNetwork,
) {
// Fetch the Teleporter message from the logs
@@ -103,7 +103,7 @@ func createAlteredReceiveCrossChainMessageTransaction(
requiredGasLimit *big.Int,
teleporterContractAddress common.Address,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
) *types.Transaction {
fundedAddress := crypto.PubkeyToAddress(fundedKey.PublicKey)
// Construct the transaction to send the Warp message to the destination chain
@@ -124,12 +124,12 @@ func createAlteredReceiveCrossChainMessageTransaction(
callData, err := teleportermessenger.PackReceiveCrossChainMessage(0, fundedAddress)
Expect(err).Should(BeNil())
- gasFeeCap, gasTipCap, nonce := utils.CalculateTxParams(ctx, subnetInfo, fundedAddress)
+ gasFeeCap, gasTipCap, nonce := utils.CalculateTxParams(ctx, l1Info, fundedAddress)
alterTeleporterMessage(signedMessage)
destinationTx := predicateutils.NewPredicateTx(
- subnetInfo.EVMChainID,
+ l1Info.EVMChainID,
nonce,
&teleporterContractAddress,
gasLimit,
@@ -142,7 +142,7 @@ func createAlteredReceiveCrossChainMessageTransaction(
signedMessage.Bytes(),
)
- return utils.SignTransaction(destinationTx, fundedKey, subnetInfo.EVMChainID)
+ return utils.SignTransaction(destinationTx, fundedKey, l1Info.EVMChainID)
}
func alterTeleporterMessage(signedMessage *avalancheWarp.Message) {
diff --git a/tests/flows/teleporter/resubmit_altered_message.go b/tests/flows/teleporter/resubmit_altered_message.go
index 3df24f170..08c817244 100644
--- a/tests/flows/teleporter/resubmit_altered_message.go
+++ b/tests/flows/teleporter/resubmit_altered_message.go
@@ -14,15 +14,15 @@ import (
)
func ResubmitAlteredMessage(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
- // Send a transaction to Subnet A to issue a Warp Message from the Teleporter contract to Subnet B
+ // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
ctx := context.Background()
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationAddress: fundedAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: fundedAddress,
@@ -34,20 +34,20 @@ func ResubmitAlteredMessage(network *localnetwork.LocalNetwork, teleporter utils
}
receipt, messageID := utils.SendCrossChainMessageAndWaitForAcceptance(
- ctx, teleporter.TeleporterMessenger(subnetAInfo), subnetAInfo, subnetBInfo, sendCrossChainMessageInput, fundedKey)
+ ctx, teleporter.TeleporterMessenger(L1AInfo), L1AInfo, L1BInfo, sendCrossChainMessageInput, fundedKey)
// Relay the message to the destination
- receipt = teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, true, fundedKey)
+ receipt = teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, true, fundedKey)
log.Info("Checking the message was received on the destination")
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(&bind.CallOpts{}, messageID)
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(&bind.CallOpts{}, messageID)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
// Get the Teleporter message from receive event
event, err := utils.GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(subnetBInfo).ParseReceiveCrossChainMessage,
+ teleporter.TeleporterMessenger(L1BInfo).ParseReceiveCrossChainMessage,
)
Expect(err).Should(BeNil())
Expect(event.MessageID[:]).Should(Equal(messageID[:]))
@@ -62,9 +62,9 @@ func ResubmitAlteredMessage(network *localnetwork.LocalNetwork, teleporter utils
// Resubmit the altered message
log.Info("Submitting the altered Teleporter message on the source chain")
- opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, subnetAInfo.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, L1AInfo.EVMChainID)
Expect(err).Should(BeNil())
- tx, err := teleporter.TeleporterMessenger(subnetAInfo).RetrySendCrossChainMessage(opts, teleporterMessage)
+ tx, err := teleporter.TeleporterMessenger(L1AInfo).RetrySendCrossChainMessage(opts, teleporterMessage)
Expect(err).ShouldNot(BeNil())
// We expect the tx to be nil because the Warp message failed verification, which happens in the predicate
diff --git a/tests/flows/teleporter/retry_successful_execution.go b/tests/flows/teleporter/retry_successful_execution.go
index 23b9a64fe..4ee2673bf 100644
--- a/tests/flows/teleporter/retry_successful_execution.go
+++ b/tests/flows/teleporter/retry_successful_execution.go
@@ -12,39 +12,39 @@ import (
)
func RetrySuccessfulExecution(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Deploy TestMessenger to Subnets A and B
+ // Deploy TestMessenger to L1s A and B
//
ctx := context.Background()
- _, subnetATestMessenger := utils.DeployTestMessenger(
+ _, l1ATestMessenger := utils.DeployTestMessenger(
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetAInfo),
- subnetAInfo,
+ teleporter.TeleporterRegistryAddress(L1AInfo),
+ L1AInfo,
)
- testMessengerContractAddressB, subnetBTestMessenger := utils.DeployTestMessenger(
+ testMessengerContractAddressB, l1BTestMessenger := utils.DeployTestMessenger(
ctx,
fundedKey,
fundedAddress,
- teleporter.TeleporterRegistryAddress(subnetBInfo),
- subnetBInfo,
+ teleporter.TeleporterRegistryAddress(L1BInfo),
+ L1BInfo,
)
//
- // Call the test messenger contract on Subnet A
+ // Call the test messenger contract on L1 A
//
message := "Hello, world!"
- optsA, err := bind.NewKeyedTransactorWithChainID(fundedKey, subnetAInfo.EVMChainID)
+ optsA, err := bind.NewKeyedTransactorWithChainID(fundedKey, L1AInfo.EVMChainID)
Expect(err).Should(BeNil())
- tx, err := subnetATestMessenger.SendMessage(
+ tx, err := l1ATestMessenger.SendMessage(
optsA,
- subnetBInfo.BlockchainID,
+ L1BInfo.BlockchainID,
testMessengerContractAddressB,
fundedAddress,
big.NewInt(0),
@@ -54,30 +54,30 @@ func RetrySuccessfulExecution(network *localnetwork.LocalNetwork, teleporter uti
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- receipt := utils.WaitForTransactionSuccess(ctx, subnetAInfo, tx.Hash())
+ receipt := utils.WaitForTransactionSuccess(ctx, L1AInfo, tx.Hash())
event, err := utils.GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(subnetAInfo).ParseSendCrossChainMessage,
+ teleporter.TeleporterMessenger(L1AInfo).ParseSendCrossChainMessage,
)
Expect(err).Should(BeNil())
- Expect(event.DestinationBlockchainID[:]).Should(Equal(subnetBInfo.BlockchainID[:]))
+ Expect(event.DestinationBlockchainID[:]).Should(Equal(L1BInfo.BlockchainID[:]))
teleporterMessageID := event.MessageID
//
// Relay the message to the destination
//
- receipt = teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, true, fundedKey)
+ receipt = teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, true, fundedKey)
receiveEvent, err :=
- utils.GetEventFromLogs(receipt.Logs, teleporter.TeleporterMessenger(subnetBInfo).ParseReceiveCrossChainMessage)
+ utils.GetEventFromLogs(receipt.Logs, teleporter.TeleporterMessenger(L1BInfo).ParseReceiveCrossChainMessage)
Expect(err).Should(BeNil())
deliveredTeleporterMessage := receiveEvent.Message
//
// Check Teleporter message received on the destination
//
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(
&bind.CallOpts{}, teleporterMessageID,
)
Expect(err).Should(BeNil())
@@ -86,19 +86,19 @@ func RetrySuccessfulExecution(network *localnetwork.LocalNetwork, teleporter uti
//
// Verify we received the expected string
//
- _, currMessage, err := subnetBTestMessenger.GetCurrentMessage(&bind.CallOpts{}, subnetAInfo.BlockchainID)
+ _, currMessage, err := l1BTestMessenger.GetCurrentMessage(&bind.CallOpts{}, L1AInfo.BlockchainID)
Expect(err).Should(BeNil())
Expect(currMessage).Should(Equal(message))
//
// Attempt to retry message execution, which should fail
//
- optsB, err := bind.NewKeyedTransactorWithChainID(fundedKey, subnetBInfo.EVMChainID)
+ optsB, err := bind.NewKeyedTransactorWithChainID(fundedKey, L1BInfo.EVMChainID)
Expect(err).Should(BeNil())
- tx, err = teleporter.TeleporterMessenger(subnetBInfo).RetryMessageExecution(
+ tx, err = teleporter.TeleporterMessenger(L1BInfo).RetryMessageExecution(
optsB,
- subnetAInfo.BlockchainID,
+ L1AInfo.BlockchainID,
deliveredTeleporterMessage,
)
Expect(err).Should(Not(BeNil()))
diff --git a/tests/flows/teleporter/send_specific_receipts.go b/tests/flows/teleporter/send_specific_receipts.go
index fff563247..28f470a33 100644
--- a/tests/flows/teleporter/send_specific_receipts.go
+++ b/tests/flows/teleporter/send_specific_receipts.go
@@ -18,20 +18,20 @@ import (
)
func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
- subnetATeleporterMessenger := teleporter.TeleporterMessenger(subnetAInfo)
- subnetBTeleporterMessenger := teleporter.TeleporterMessenger(subnetBInfo)
- teleporterContractAddress := teleporter.TeleporterMessengerAddress(subnetAInfo)
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
+ l1ATeleporterMessenger := teleporter.TeleporterMessenger(L1AInfo)
+ l1BTeleporterMessenger := teleporter.TeleporterMessenger(L1BInfo)
+ teleporterContractAddress := teleporter.TeleporterMessengerAddress(L1AInfo)
_, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
- // Clear the receipt queue from Subnet B -> Subnet A to have a clean slate for the test flow.
- network.ClearReceiptQueue(ctx, teleporter, fundedKey, subnetBInfo, subnetAInfo)
+ // Clear the receipt queue from L1 B -> L1 A to have a clean slate for the test flow.
+ network.ClearReceiptQueue(ctx, teleporter, fundedKey, L1BInfo, L1AInfo)
// Use mock token as the fee token
mockTokenAddress, mockToken := utils.DeployExampleERC20(
- ctx, fundedKey, subnetAInfo,
+ ctx, fundedKey, L1AInfo,
)
utils.ERC20Approve(
ctx,
@@ -39,15 +39,15 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
teleporterContractAddress,
big.NewInt(0).Mul(big.NewInt(1e18),
big.NewInt(10)),
- subnetAInfo,
+ L1AInfo,
fundedKey,
)
- // Send two messages from Subnet A to Subnet B
+ // Send two messages from L1 A to L1 B
relayerFeePerMessage := big.NewInt(5)
destinationAddress := common.HexToAddress("0x1111111111111111111111111111111111111111")
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationAddress: destinationAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: mockTokenAddress,
@@ -58,60 +58,60 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
Message: []byte{1, 2, 3, 4},
}
- // Send first message from Subnet A to Subnet B with fee amount 5
+ // Send first message from L1 A to L1 B with fee amount 5
sendCrossChainMsgReceipt, messageID1 := utils.SendCrossChainMessageAndWaitForAcceptance(
- ctx, subnetATeleporterMessenger, subnetAInfo, subnetBInfo, sendCrossChainMessageInput, fundedKey)
+ ctx, l1ATeleporterMessenger, L1AInfo, L1BInfo, sendCrossChainMessageInput, fundedKey)
- // Relay the message from SubnetA to SubnetB
+ // Relay the message from L1A to L1B
deliveryReceipt1 := teleporter.RelayTeleporterMessage(
ctx,
sendCrossChainMsgReceipt,
- subnetAInfo,
- subnetBInfo,
+ L1AInfo,
+ L1BInfo,
true,
fundedKey,
)
receiveEvent1, err := utils.GetEventFromLogs(
deliveryReceipt1.Logs,
- subnetBTeleporterMessenger.ParseReceiveCrossChainMessage)
+ l1BTeleporterMessenger.ParseReceiveCrossChainMessage)
Expect(err).Should(BeNil())
Expect(receiveEvent1.MessageID[:]).Should(Equal(messageID1[:]))
// Check that the first message was delivered
- delivered, err := subnetBTeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID1)
+ delivered, err := l1BTeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID1)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
- // Send second message from Subnet A to Subnet B with fee amount 5
+ // Send second message from L1 A to L1 B with fee amount 5
sendCrossChainMsgReceipt, messageID2 := utils.SendCrossChainMessageAndWaitForAcceptance(
- ctx, subnetATeleporterMessenger, subnetAInfo, subnetBInfo, sendCrossChainMessageInput, fundedKey)
+ ctx, l1ATeleporterMessenger, L1AInfo, L1BInfo, sendCrossChainMessageInput, fundedKey)
- // Relay the message from SubnetA to SubnetB
+ // Relay the message from L1A to L1B
deliveryReceipt2 := teleporter.RelayTeleporterMessage(
ctx,
sendCrossChainMsgReceipt,
- subnetAInfo,
- subnetBInfo,
+ L1AInfo,
+ L1BInfo,
true,
fundedKey,
)
receiveEvent2, err := utils.GetEventFromLogs(
deliveryReceipt2.Logs,
- subnetBTeleporterMessenger.ParseReceiveCrossChainMessage)
+ l1BTeleporterMessenger.ParseReceiveCrossChainMessage)
Expect(err).Should(BeNil())
Expect(receiveEvent2.MessageID[:]).Should(Equal(messageID2[:]))
// Check that the second message was delivered
- delivered, err = subnetBTeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID2)
+ delivered, err = l1BTeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID2)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
// Call send specific receipts to get reward of relaying two messages
receipt, messageID := utils.SendSpecifiedReceiptsAndWaitForAcceptance(
ctx,
- subnetBTeleporterMessenger,
- subnetBInfo,
- subnetAInfo.BlockchainID,
+ l1BTeleporterMessenger,
+ L1BInfo,
+ L1AInfo.BlockchainID,
[][32]byte{messageID1, messageID2},
teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: mockTokenAddress,
@@ -121,35 +121,35 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
fundedKey,
)
- // Relay message from Subnet B to Subnet A
- receipt = teleporter.RelayTeleporterMessage(ctx, receipt, subnetBInfo, subnetAInfo, true, fundedKey)
+ // Relay message from L1 B to L1 A
+ receipt = teleporter.RelayTeleporterMessage(ctx, receipt, L1BInfo, L1AInfo, true, fundedKey)
- // Check that the message back to Subnet A was delivered
- delivered, err = subnetATeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID)
+ // Check that the message back to L1 A was delivered
+ delivered, err = l1ATeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID)
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
// Check that the expected receipts were received and emitted ReceiptReceived
- Expect(utils.CheckReceiptReceived(receipt, messageID1, subnetATeleporterMessenger)).Should(BeTrue())
- Expect(utils.CheckReceiptReceived(receipt, messageID2, subnetATeleporterMessenger)).Should(BeTrue())
+ Expect(utils.CheckReceiptReceived(receipt, messageID1, l1ATeleporterMessenger)).Should(BeTrue())
+ Expect(utils.CheckReceiptReceived(receipt, messageID2, l1ATeleporterMessenger)).Should(BeTrue())
// Check the reward amounts.
// Even on external networks, the relayer should only have the expected fee amount
// for this asset because the asset contract was newly deployed by this test.
checkExpectedRewardAmounts(
teleporter,
- subnetAInfo,
+ L1AInfo,
receiveEvent1,
receiveEvent2,
mockTokenAddress,
relayerFeePerMessage,
)
- // Send a message from Subnet B to Subnet A to trigger
+ // Send a message from L1 B to L1 A to trigger
// the "regular" method of delivering receipts. The next message from B->A will contain the same receipts
- // that were manually sent in the above steps, but they should not be processed again on Subnet A.
+ // that were manually sent in the above steps, but they should not be processed again on L1 A.
sendCrossChainMessageInput = teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetAInfo.BlockchainID,
+ DestinationBlockchainID: L1AInfo.BlockchainID,
DestinationAddress: destinationAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: mockTokenAddress,
@@ -162,12 +162,12 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
// This message will also have the same receipts as the previous message
receipt, messageID = utils.SendCrossChainMessageAndWaitForAcceptance(
- ctx, subnetBTeleporterMessenger, subnetBInfo, subnetAInfo, sendCrossChainMessageInput, fundedKey)
+ ctx, l1BTeleporterMessenger, L1BInfo, L1AInfo, sendCrossChainMessageInput, fundedKey)
- // Relay message from Subnet B to Subnet A
- receipt = teleporter.RelayTeleporterMessage(ctx, receipt, subnetBInfo, subnetAInfo, true, fundedKey)
+ // Relay message from L1 B to L1 A
+ receipt = teleporter.RelayTeleporterMessage(ctx, receipt, L1BInfo, L1AInfo, true, fundedKey)
// Check delivered
- delivered, err = subnetATeleporterMessenger.MessageReceived(
+ delivered, err = l1ATeleporterMessenger.MessageReceived(
&bind.CallOpts{},
messageID,
)
@@ -176,32 +176,32 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
// Check that the expected receipts were included in the message but did not emit ReceiptReceived
// because they were previously received
- Expect(utils.CheckReceiptReceived(receipt, messageID1, subnetATeleporterMessenger)).Should(BeFalse())
- Expect(utils.CheckReceiptReceived(receipt, messageID2, subnetATeleporterMessenger)).Should(BeFalse())
+ Expect(utils.CheckReceiptReceived(receipt, messageID1, l1ATeleporterMessenger)).Should(BeFalse())
+ Expect(utils.CheckReceiptReceived(receipt, messageID2, l1ATeleporterMessenger)).Should(BeFalse())
receiveEvent, err := utils.GetEventFromLogs(
receipt.Logs,
- subnetATeleporterMessenger.ParseReceiveCrossChainMessage,
+ l1ATeleporterMessenger.ParseReceiveCrossChainMessage,
)
Expect(err).Should(BeNil())
log.Info("Receipt included", "count", len(receiveEvent.Message.Receipts), "receipts", receiveEvent.Message.Receipts)
Expect(receiptIncluded(
teleporterContractAddress,
messageID1,
- subnetAInfo,
- subnetBInfo,
+ L1AInfo,
+ L1BInfo,
receiveEvent.Message.Receipts)).Should(BeTrue())
Expect(receiptIncluded(
teleporterContractAddress,
messageID2,
- subnetAInfo,
- subnetBInfo,
+ L1AInfo,
+ L1BInfo,
receiveEvent.Message.Receipts)).Should(BeTrue())
// Check the reward amount remains the same
checkExpectedRewardAmounts(
teleporter,
- subnetAInfo,
+ L1AInfo,
receiveEvent1,
receiveEvent2,
mockTokenAddress,
@@ -213,15 +213,15 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
func receiptIncluded(
teleporterMessengerAddress common.Address,
expectedMessageID ids.ID,
- sourceSubnet interfaces.SubnetTestInfo,
- destinationSubnet interfaces.SubnetTestInfo,
+ sourceL1 interfaces.L1TestInfo,
+ destinationL1 interfaces.L1TestInfo,
receipts []teleportermessenger.TeleporterMessageReceipt,
) bool {
for _, receipt := range receipts {
messageID, err := teleporterutils.CalculateMessageID(
teleporterMessengerAddress,
- sourceSubnet.BlockchainID,
- destinationSubnet.BlockchainID,
+ sourceL1.BlockchainID,
+ destinationL1.BlockchainID,
receipt.ReceivedMessageNonce,
)
Expect(err).Should(BeNil())
@@ -238,7 +238,7 @@ func receiptIncluded(
// and that each message individually had a fee of {feePerMessage}.
func checkExpectedRewardAmounts(
teleporter utils.TeleporterTestInfo,
- sourceSubnet interfaces.SubnetTestInfo,
+ sourceL1 interfaces.L1TestInfo,
receiveEvent1 *teleportermessenger.TeleporterMessengerReceiveCrossChainMessage,
receiveEvent2 *teleportermessenger.TeleporterMessengerReceiveCrossChainMessage,
tokenAddress common.Address,
@@ -249,20 +249,20 @@ func checkExpectedRewardAmounts(
// it should be able to redeem {feePerMessage}*2. Otherwise,
// each distinct reward redeemer should be able to redeem {feePerMessage}.
if receiveEvent1.RewardRedeemer == receiveEvent2.RewardRedeemer {
- amount, err := teleporter[sourceSubnet.BlockchainID].TeleporterMessenger.CheckRelayerRewardAmount(
+ amount, err := teleporter[sourceL1.BlockchainID].TeleporterMessenger.CheckRelayerRewardAmount(
&bind.CallOpts{},
receiveEvent1.RewardRedeemer,
tokenAddress)
Expect(err).Should(BeNil())
Expect(amount).Should(Equal(new(big.Int).Mul(feePerMessage, big.NewInt(2))))
} else {
- amount1, err := teleporter[sourceSubnet.BlockchainID].TeleporterMessenger.CheckRelayerRewardAmount(
+ amount1, err := teleporter[sourceL1.BlockchainID].TeleporterMessenger.CheckRelayerRewardAmount(
&bind.CallOpts{},
receiveEvent1.RewardRedeemer,
tokenAddress)
Expect(err).Should(BeNil())
Expect(amount1).Should(Equal(feePerMessage))
- amount2, err := teleporter[sourceSubnet.BlockchainID].TeleporterMessenger.CheckRelayerRewardAmount(
+ amount2, err := teleporter[sourceL1.BlockchainID].TeleporterMessenger.CheckRelayerRewardAmount(
&bind.CallOpts{},
receiveEvent2.RewardRedeemer,
tokenAddress)
diff --git a/tests/flows/teleporter/teleporter_message_ids.go b/tests/flows/teleporter/teleporter_message_ids.go
index a3be9ee3e..3b549811e 100644
--- a/tests/flows/teleporter/teleporter_message_ids.go
+++ b/tests/flows/teleporter/teleporter_message_ids.go
@@ -17,14 +17,14 @@ import (
// Tests Teleporter message ID calculation
func CalculateMessageID(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetInfo := network.GetPrimaryNetworkInfo()
- teleporterContractAddress := teleporter.TeleporterMessengerAddress(subnetInfo)
+ l1Info := network.GetPrimaryNetworkInfo()
+ teleporterContractAddress := teleporter.TeleporterMessengerAddress(l1Info)
sourceBlockchainID := common.HexToHash("0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd")
destinationBlockchainID := common.HexToHash("0x1234567812345678123456781234567812345678123456781234567812345678")
nonce := big.NewInt(42)
- expectedMessageID, err := teleporter.TeleporterMessenger(subnetInfo).CalculateMessageID(
+ expectedMessageID, err := teleporter.TeleporterMessenger(l1Info).CalculateMessageID(
&bind.CallOpts{},
sourceBlockchainID,
destinationBlockchainID,
diff --git a/tests/flows/teleporter/unallowed_relayer.go b/tests/flows/teleporter/unallowed_relayer.go
index 252523733..710aaba7f 100644
--- a/tests/flows/teleporter/unallowed_relayer.go
+++ b/tests/flows/teleporter/unallowed_relayer.go
@@ -14,18 +14,18 @@ import (
)
func UnallowedRelayer(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo := network.GetPrimaryNetworkInfo()
- subnetBInfo, _ := network.GetTwoSubnets()
+ L1AInfo := network.GetPrimaryNetworkInfo()
+ L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Send a transaction to Subnet A to issue a Warp Message from the Teleporter contract to Subnet B
+ // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
// The Teleporter message includes an allowed relayer list that does NOT include the relayer
//
ctx := context.Background()
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationAddress: fundedAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: fundedAddress,
@@ -40,21 +40,21 @@ func UnallowedRelayer(network *localnetwork.LocalNetwork, teleporter utils.Telep
log.Info(
"Sending Teleporter transaction on source chain",
- "destinationBlockchainID", subnetBInfo.BlockchainID,
+ "destinationBlockchainID", L1BInfo.BlockchainID,
)
receipt, teleporterMessageID := utils.SendCrossChainMessageAndWaitForAcceptance(
- ctx, teleporter.TeleporterMessenger(subnetAInfo), subnetAInfo, subnetBInfo, sendCrossChainMessageInput, fundedKey,
+ ctx, teleporter.TeleporterMessenger(L1AInfo), L1AInfo, L1BInfo, sendCrossChainMessageInput, fundedKey,
)
//
// Relay the message to the destination
//
- teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, false, fundedKey)
+ teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, false, fundedKey)
//
// Check Teleporter message was not received on the destination
//
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(
&bind.CallOpts{}, teleporterMessageID,
)
Expect(err).Should(BeNil())
diff --git a/tests/flows/teleporter/validator_churn.go b/tests/flows/teleporter/validator_churn.go
index ef4fc1f01..aa9e244b2 100644
--- a/tests/flows/teleporter/validator_churn.go
+++ b/tests/flows/teleporter/validator_churn.go
@@ -18,18 +18,18 @@ import (
const newNodeCount = 2
func ValidatorChurn(network *localnetwork.LocalNetwork, teleporter utils.TeleporterTestInfo) {
- subnetAInfo, subnetBInfo := network.GetTwoSubnets()
- teleporterContractAddress := teleporter.TeleporterMessengerAddress(subnetAInfo)
+ L1AInfo, L1BInfo := network.GetTwoL1s()
+ teleporterContractAddress := teleporter.TeleporterMessengerAddress(L1AInfo)
fundedAddress, fundedKey := network.GetFundedAccountInfo()
ctx := context.Background()
//
- // Send a Teleporter message on Subnet A
+ // Send a Teleporter message on L1 A
//
- log.Info("Sending Teleporter message on source chain", "destinationBlockchainID", subnetBInfo.BlockchainID)
+ log.Info("Sending Teleporter message on source chain", "destinationBlockchainID", L1BInfo.BlockchainID)
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
- DestinationBlockchainID: subnetBInfo.BlockchainID,
+ DestinationBlockchainID: L1BInfo.BlockchainID,
DestinationAddress: fundedAddress,
FeeInfo: teleportermessenger.TeleporterFeeInfo{
FeeTokenAddress: fundedAddress,
@@ -42,41 +42,41 @@ func ValidatorChurn(network *localnetwork.LocalNetwork, teleporter utils.Telepor
receipt, teleporterMessageID := utils.SendCrossChainMessageAndWaitForAcceptance(
ctx,
- teleporter.TeleporterMessenger(subnetAInfo),
- subnetAInfo,
- subnetBInfo,
+ teleporter.TeleporterMessenger(L1AInfo),
+ L1AInfo,
+ L1BInfo,
sendCrossChainMessageInput,
fundedKey,
)
sendEvent, err := utils.GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(subnetAInfo).ParseSendCrossChainMessage,
+ teleporter.TeleporterMessenger(L1AInfo).ParseSendCrossChainMessage,
)
Expect(err).Should(BeNil())
sentTeleporterMessage := sendEvent.Message
// Construct the signed warp message
- signedWarpMessage := utils.ConstructSignedWarpMessage(ctx, receipt, subnetAInfo, subnetBInfo)
+ signedWarpMessage := utils.ConstructSignedWarpMessage(ctx, receipt, L1AInfo, L1BInfo)
//
- // Modify the validator set on Subnet A
+ // Modify the validator set on L1 A
//
// Add new nodes to the validator set
addValidatorsCtx, cancel := context.WithTimeout(ctx, 60*time.Second)
defer cancel()
- network.AddSubnetValidators(addValidatorsCtx, subnetAInfo.SubnetID, newNodeCount)
+ network.AddL1Validators(addValidatorsCtx, L1AInfo.L1ID, newNodeCount)
- // Refresh the subnet info
- subnetAInfo, subnetBInfo = network.GetTwoSubnets()
+ // Refresh the L1 info
+ L1AInfo, L1BInfo = network.GetTwoL1s()
// Trigger the proposer VM to update its height so that the inner VM can see the new validator set
- // We have to update all subnets, not just the ones directly involved in this test to ensure that the
- // proposer VM is updated on all subnets.
- for _, subnetInfo := range network.GetSubnetsInfo() {
+ // We have to update all L1s, not just the ones directly involved in this test to ensure that the
+ // proposer VM is updated on all L1s.
+ for _, l1Info := range network.GetL1Infos() {
err = subnetEvmUtils.IssueTxsToActivateProposerVMFork(
- ctx, subnetInfo.EVMChainID, fundedKey, subnetInfo.WSClient,
+ ctx, l1Info.EVMChainID, fundedKey, l1Info.WSClient,
)
Expect(err).Should(BeNil())
}
@@ -91,14 +91,14 @@ func ValidatorChurn(network *localnetwork.LocalNetwork, teleporter utils.Telepor
sendEvent.Message.RequiredGasLimit,
teleporterContractAddress,
fundedKey,
- subnetBInfo,
+ L1BInfo,
)
log.Info("Sending transaction to destination chain")
- utils.SendTransactionAndWaitForFailure(ctx, subnetBInfo, signedTx)
+ utils.SendTransactionAndWaitForFailure(ctx, L1BInfo, signedTx)
// Verify the message was not delivered
- delivered, err := teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(
+ delivered, err := teleporter.TeleporterMessenger(L1BInfo).MessageReceived(
&bind.CallOpts{}, teleporterMessageID,
)
Expect(err).Should(BeNil())
@@ -108,20 +108,20 @@ func ValidatorChurn(network *localnetwork.LocalNetwork, teleporter utils.Telepor
// Retry sending the message, and attempt to relay again. This should succeed.
//
log.Info("Retrying message sending on source chain")
- optsA, err := bind.NewKeyedTransactorWithChainID(fundedKey, subnetAInfo.EVMChainID)
+ optsA, err := bind.NewKeyedTransactorWithChainID(fundedKey, L1AInfo.EVMChainID)
Expect(err).Should(BeNil())
- tx, err := teleporter.TeleporterMessenger(subnetAInfo).RetrySendCrossChainMessage(
+ tx, err := teleporter.TeleporterMessenger(L1AInfo).RetrySendCrossChainMessage(
optsA, sentTeleporterMessage,
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- receipt = utils.WaitForTransactionSuccess(ctx, subnetAInfo, tx.Hash())
+ receipt = utils.WaitForTransactionSuccess(ctx, L1AInfo, tx.Hash())
- teleporter.RelayTeleporterMessage(ctx, receipt, subnetAInfo, subnetBInfo, true, fundedKey)
+ teleporter.RelayTeleporterMessage(ctx, receipt, L1AInfo, L1BInfo, true, fundedKey)
// Verify the message was delivered
- delivered, err = teleporter.TeleporterMessenger(subnetBInfo).MessageReceived(
+ delivered, err = teleporter.TeleporterMessenger(L1BInfo).MessageReceived(
&bind.CallOpts{}, teleporterMessageID,
)
Expect(err).Should(BeNil())
diff --git a/tests/flows/validator-manager/erc20_token_staking.go b/tests/flows/validator-manager/erc20_token_staking.go
index 4ccf1243b..4af9ad1fa 100644
--- a/tests/flows/validator-manager/erc20_token_staking.go
+++ b/tests/flows/validator-manager/erc20_token_staking.go
@@ -14,32 +14,32 @@ import (
)
/*
- * Registers a erc20 token staking validator on a subnet. The steps are as follows:
+ * Registers a erc20 token staking validator on a L1. The steps are as follows:
* - Deploy the ERCTokenStakingManager
* - Initiate validator registration
* - Deliver the Warp message to the P-Chain (not implemented)
* - Aggregate P-Chain signatures on the response Warp message
- * - Deliver the Warp message to the subnet
+ * - Deliver the Warp message to the L1
* - Verify that the validator is registered in the staking contract
*
- * Delists the validator from the subnet. The steps are as follows:
+ * Delists the validator from the L1. The steps are as follows:
* - Initiate validator delisting
* - Deliver the Warp message to the P-Chain (not implemented)
* - Aggregate P-Chain signatures on the response Warp message
- * - Deliver the Warp message to the subnet
+ * - Deliver the Warp message to the L1
* - Verify that the validator is delisted from the staking contract
*/
func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
- // Get the subnets info
+ // Get the L1s info
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
_, fundedKey := network.GetFundedAccountInfo()
pChainInfo := utils.GetPChainInfo(cChainInfo)
signatureAggregator := utils.NewSignatureAggregator(
cChainInfo.NodeURIs[0],
[]ids.ID{
- subnetAInfo.SubnetID,
+ L1AInfo.L1ID,
},
)
ctx := context.Background()
@@ -48,24 +48,24 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
stakingManagerAddress, stakingManager, _, erc20 := utils.DeployAndInitializeERC20TokenStakingManager(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
)
nodes := utils.ConvertSubnet(
ctx,
- subnetAInfo,
+ L1AInfo,
network.GetPChainWallet(),
stakingManagerAddress,
fundedKey,
)
- // Initialize the validator set on the subnet
+ // Initialize the validator set on the L1
log.Println("Initializing validator set")
initialValidationIDs := utils.InitializeERC20TokenValidatorSet(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
stakingManager,
stakingManagerAddress,
@@ -81,7 +81,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
stakingManager,
stakingManagerAddress,
@@ -100,7 +100,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
stakingManager,
stakingManagerAddress,
@@ -135,7 +135,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
receipt := utils.InitializeERC20DelegatorRegistration(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
validationID,
delegatorStake,
erc20,
@@ -150,30 +150,30 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
delegationID = initRegistrationEvent.DelegationID
// Gather subnet-evm Warp signatures for the SubnetValidatorWeightUpdateMessage & relay to the P-Chain
- signedWarpMessage := utils.ConstructSignedWarpMessage(context.Background(), receipt, subnetAInfo, pChainInfo)
+ signedWarpMessage := utils.ConstructSignedWarpMessage(context.Background(), receipt, L1AInfo, pChainInfo)
// Issue a tx to update the validator's weight on the P-Chain
network.GetPChainWallet().IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
utils.PChainProposerVMWorkaround(network.GetPChainWallet())
- utils.AdvanceProposerVM(ctx, subnetAInfo, fundedKey, 5)
+ utils.AdvanceProposerVM(ctx, L1AInfo, fundedKey, 5)
// Construct a SubnetValidatorWeightUpdateMessage Warp message from the P-Chain
registrationSignedMessage := utils.ConstructSubnetValidatorWeightUpdateMessage(
validationID,
nonce,
newValidatorWeight,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
signatureAggregator,
network.GetNetworkID(),
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the L1
receipt = utils.CompleteERC20DelegatorRegistration(
ctx,
fundedKey,
delegationID,
- subnetAInfo,
+ L1AInfo,
stakingManagerAddress,
registrationSignedMessage,
)
@@ -196,7 +196,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
receipt := utils.InitializeEndERC20Delegation(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
stakingManager,
delegationID,
)
@@ -210,31 +210,31 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
// Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
- signedWarpMessage := utils.ConstructSignedWarpMessage(context.Background(), receipt, subnetAInfo, pChainInfo)
+ signedWarpMessage := utils.ConstructSignedWarpMessage(context.Background(), receipt, L1AInfo, pChainInfo)
Expect(err).Should(BeNil())
// Issue a tx to update the validator's weight on the P-Chain
network.GetPChainWallet().IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
utils.PChainProposerVMWorkaround(network.GetPChainWallet())
- utils.AdvanceProposerVM(ctx, subnetAInfo, fundedKey, 5)
+ utils.AdvanceProposerVM(ctx, L1AInfo, fundedKey, 5)
// Construct a SubnetValidatorWeightUpdateMessage Warp message from the P-Chain
signedMessage := utils.ConstructSubnetValidatorWeightUpdateMessage(
validationID,
nonce,
nodes[0].Weight,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
signatureAggregator,
network.GetNetworkID(),
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the L1
receipt = utils.CompleteEndERC20Delegation(
ctx,
fundedKey,
delegationID,
- subnetAInfo,
+ L1AInfo,
stakingManagerAddress,
signedMessage,
)
@@ -256,7 +256,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
stakingManager,
stakingManagerAddress,
diff --git a/tests/flows/validator-manager/native_token_staking.go b/tests/flows/validator-manager/native_token_staking.go
index b3ef833a4..3e40fbf4b 100644
--- a/tests/flows/validator-manager/native_token_staking.go
+++ b/tests/flows/validator-manager/native_token_staking.go
@@ -14,32 +14,32 @@ import (
)
/*
- * Registers a native token staking validator on a subnet. The steps are as follows:
+ * Registers a native token staking validator on a L1. The steps are as follows:
* - Deploy the NativeTokenStakingManager
* - Initiate validator registration
* - Deliver the Warp message to the P-Chain (not implemented)
* - Aggregate P-Chain signatures on the response Warp message
- * - Deliver the Warp message to the subnet
+ * - Deliver the Warp message to the L1
* - Verify that the validator is registered in the staking contract
*
- * Delists the validator from the subnet. The steps are as follows:
+ * Delists the validator from the L1. The steps are as follows:
* - Initiate validator delisting
* - Deliver the Warp message to the P-Chain (not implemented)
* - Aggregate P-Chain signatures on the response Warp message
- * - Deliver the Warp message to the subnet
+ * - Deliver the Warp message to the L1
* - Verify that the validator is delisted from the staking contract
*/
func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
- // Get the subnets info
+ // Get the L1s info
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
_, fundedKey := network.GetFundedAccountInfo()
pChainInfo := utils.GetPChainInfo(cChainInfo)
signatureAggregator := utils.NewSignatureAggregator(
cChainInfo.NodeURIs[0],
[]ids.ID{
- subnetAInfo.SubnetID,
+ L1AInfo.L1ID,
},
)
ctx := context.Background()
@@ -48,26 +48,26 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
stakingManagerAddress, stakingManager := utils.DeployAndInitializeNativeTokenStakingManager(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
)
- utils.AddNativeMinterAdmin(ctx, subnetAInfo, fundedKey, stakingManagerAddress)
+ utils.AddNativeMinterAdmin(ctx, L1AInfo, fundedKey, stakingManagerAddress)
nodes := utils.ConvertSubnet(
ctx,
- subnetAInfo,
+ L1AInfo,
network.GetPChainWallet(),
stakingManagerAddress,
fundedKey,
)
- // Initialize the validator set on the subnet
+ // Initialize the validator set on the L1
log.Println("Initializing validator set")
initialValidationIDs := utils.InitializeNativeTokenValidatorSet(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
stakingManager,
stakingManagerAddress,
@@ -83,7 +83,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
stakingManager,
stakingManagerAddress,
@@ -102,7 +102,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
stakingManager,
stakingManagerAddress,
@@ -136,7 +136,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
receipt := utils.InitializeNativeDelegatorRegistration(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
validationID,
delegatorStake,
stakingManagerAddress,
@@ -150,30 +150,30 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
delegationID = initRegistrationEvent.DelegationID
// Gather subnet-evm Warp signatures for the SubnetValidatorWeightUpdateMessage & relay to the P-Chain
- signedWarpMessage := utils.ConstructSignedWarpMessage(context.Background(), receipt, subnetAInfo, pChainInfo)
+ signedWarpMessage := utils.ConstructSignedWarpMessage(context.Background(), receipt, L1AInfo, pChainInfo)
// Issue a tx to update the validator's weight on the P-Chain
network.GetPChainWallet().IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
utils.PChainProposerVMWorkaround(network.GetPChainWallet())
- utils.AdvanceProposerVM(ctx, subnetAInfo, fundedKey, 5)
+ utils.AdvanceProposerVM(ctx, L1AInfo, fundedKey, 5)
// Construct a SubnetValidatorWeightUpdateMessage Warp message from the P-Chain
registrationSignedMessage := utils.ConstructSubnetValidatorWeightUpdateMessage(
validationID,
nonce,
newValidatorWeight,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
signatureAggregator,
network.GetNetworkID(),
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the L1
receipt = utils.CompleteNativeDelegatorRegistration(
ctx,
fundedKey,
delegationID,
- subnetAInfo,
+ L1AInfo,
stakingManagerAddress,
registrationSignedMessage,
)
@@ -195,7 +195,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
receipt := utils.InitializeEndNativeDelegation(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
stakingManager,
delegationID,
)
@@ -209,31 +209,31 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
// Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
- signedWarpMessage := utils.ConstructSignedWarpMessage(context.Background(), receipt, subnetAInfo, pChainInfo)
+ signedWarpMessage := utils.ConstructSignedWarpMessage(context.Background(), receipt, L1AInfo, pChainInfo)
Expect(err).Should(BeNil())
// Issue a tx to update the validator's weight on the P-Chain
network.GetPChainWallet().IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
utils.PChainProposerVMWorkaround(network.GetPChainWallet())
- utils.AdvanceProposerVM(ctx, subnetAInfo, fundedKey, 5)
+ utils.AdvanceProposerVM(ctx, L1AInfo, fundedKey, 5)
// Construct a SubnetValidatorWeightUpdateMessage Warp message from the P-Chain
signedMessage := utils.ConstructSubnetValidatorWeightUpdateMessage(
validationID,
nonce,
nodes[0].Weight,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
signatureAggregator,
network.GetNetworkID(),
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the L1
receipt = utils.CompleteEndNativeDelegation(
ctx,
fundedKey,
delegationID,
- subnetAInfo,
+ L1AInfo,
stakingManagerAddress,
signedMessage,
)
@@ -255,7 +255,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
stakingManager,
stakingManagerAddress,
diff --git a/tests/flows/validator-manager/poa_to_pos.go b/tests/flows/validator-manager/poa_to_pos.go
index 7114f4af2..9734bce91 100644
--- a/tests/flows/validator-manager/poa_to_pos.go
+++ b/tests/flows/validator-manager/poa_to_pos.go
@@ -38,14 +38,14 @@ import (
*/
func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
cChainInfo := network.GetPrimaryNetworkInfo()
- subnetAInfo, _ := network.GetTwoSubnets()
+ L1AInfo, _ := network.GetTwoL1s()
_, fundedKey := network.GetFundedAccountInfo()
pChainInfo := utils.GetPChainInfo(cChainInfo)
signatureAggregator := utils.NewSignatureAggregator(
cChainInfo.NodeURIs[0],
[]ids.ID{
- subnetAInfo.SubnetID,
+ L1AInfo.L1ID,
},
)
@@ -60,7 +60,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
fundAmount.Mul(fundAmount, big.NewInt(10))
utils.SendNativeTransfer(
ctx,
- subnetAInfo,
+ L1AInfo,
fundedKey,
ownerAddress,
fundAmount,
@@ -70,49 +70,49 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
implAddress, _ := utils.DeployPoAValidatorManager(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
)
// Deploy TransparentUpgradeableProxy contract pointing to PoAValidatorManager
proxyAddress, proxyAdmin, poaValidatorManager := utils.DeployTransparentUpgradeableProxy(
ctx,
- subnetAInfo,
+ L1AInfo,
fundedKey,
implAddress,
poavalidatormanager.NewPoAValidatorManager,
)
opts, err := bind.NewKeyedTransactorWithChainID(
fundedKey,
- subnetAInfo.EVMChainID,
+ L1AInfo.EVMChainID,
)
Expect(err).Should(BeNil())
tx, err := poaValidatorManager.Initialize(
opts,
poavalidatormanager.ValidatorManagerSettings{
- SubnetID: subnetAInfo.SubnetID,
+ L1ID: L1AInfo.L1ID,
ChurnPeriodSeconds: uint64(0),
MaximumChurnPercentage: uint8(20),
},
ownerAddress,
)
Expect(err).Should(BeNil())
- utils.WaitForTransactionSuccess(context.Background(), subnetAInfo, tx.Hash())
+ utils.WaitForTransactionSuccess(context.Background(), L1AInfo, tx.Hash())
nodes := utils.ConvertSubnet(
ctx,
- subnetAInfo,
+ L1AInfo,
network.GetPChainWallet(),
proxyAddress,
fundedKey,
)
- // Initialize the validator set on the subnet
+ // Initialize the validator set on the L1
log.Println("Initializing validator set")
initialValidationIDs := utils.InitializePoAValidatorSet(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
poaValidatorManager,
proxyAddress,
@@ -129,7 +129,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
signatureAggregator,
ownerKey,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
poaValidatorManager,
proxyAddress,
@@ -141,7 +141,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
)
// Try to call with invalid owner
- opts, err = bind.NewKeyedTransactorWithChainID(fundedKey, subnetAInfo.EVMChainID)
+ opts, err = bind.NewKeyedTransactorWithChainID(fundedKey, L1AInfo.EVMChainID)
Expect(err).Should(BeNil())
_, err = poaValidatorManager.InitializeValidatorRegistration(
@@ -164,7 +164,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
signatureAggregator,
ownerKey,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
poaValidatorManager,
proxyAddress,
@@ -187,27 +187,27 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
newImplAddress, _ := utils.DeployNativeTokenStakingManager(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
)
// Upgrade the TransparentUpgradeableProxy contract to use the new logic contract
tx, err = proxyAdmin.UpgradeAndCall(opts, proxyAddress, newImplAddress, []byte{})
Expect(err).Should(BeNil())
- utils.WaitForTransactionSuccess(ctx, subnetAInfo, tx.Hash())
+ utils.WaitForTransactionSuccess(ctx, L1AInfo, tx.Hash())
// Change the proxy contract type to NativeTokenStakingManager and initialize it
posValidatorManager, err := nativetokenstakingmanager.NewNativeTokenStakingManager(
proxyAddress,
- subnetAInfo.RPCClient,
+ L1AInfo.RPCClient,
)
Expect(err).Should(BeNil())
- utils.AddNativeMinterAdmin(ctx, subnetAInfo, fundedKey, proxyAddress)
+ utils.AddNativeMinterAdmin(ctx, L1AInfo, fundedKey, proxyAddress)
rewardCalculatorAddress, _ := utils.DeployExampleRewardCalculator(
ctx,
fundedKey,
- subnetAInfo,
+ L1AInfo,
uint64(10),
)
@@ -215,7 +215,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
opts,
nativetokenstakingmanager.PoSValidatorManagerSettings{
BaseSettings: nativetokenstakingmanager.ValidatorManagerSettings{
- SubnetID: subnetAInfo.SubnetID,
+ L1ID: L1AInfo.L1ID,
ChurnPeriodSeconds: utils.DefaultChurnPeriodSeconds,
MaximumChurnPercentage: utils.DefaultMaxChurnPercentage,
},
@@ -229,7 +229,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
},
)
Expect(err).Should(BeNil())
- utils.WaitForTransactionSuccess(context.Background(), subnetAInfo, tx.Hash())
+ utils.WaitForTransactionSuccess(context.Background(), L1AInfo, tx.Hash())
// Check that previous validator is still registered
validationID, err := posValidatorManager.RegisteredValidators(&bind.CallOpts{}, poaNodeID)
@@ -244,7 +244,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
ownerKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
posValidatorManager,
proxyAddress,
@@ -261,7 +261,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
posValidatorManager,
proxyAddress,
@@ -276,7 +276,7 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) {
ctx,
signatureAggregator,
fundedKey,
- subnetAInfo,
+ L1AInfo,
pChainInfo,
posValidatorManager,
proxyAddress,
diff --git a/tests/interfaces/subnet_test_info.go b/tests/interfaces/subnet_test_info.go
index 0ab8e6807..9e7bfd84d 100644
--- a/tests/interfaces/subnet_test_info.go
+++ b/tests/interfaces/subnet_test_info.go
@@ -8,9 +8,9 @@ import (
)
// Tracks information about a test subnet used for executing tests against.
-type SubnetTestInfo struct {
- SubnetName string
- SubnetID ids.ID
+type L1TestInfo struct {
+ L1Name string
+ L1ID ids.ID
BlockchainID ids.ID
NodeURIs []string
WSClient ethclient.Client
diff --git a/tests/network/network.go b/tests/network/network.go
index 7f51add76..f253a8e6f 100644
--- a/tests/network/network.go
+++ b/tests/network/network.go
@@ -41,10 +41,10 @@ import (
// Implements Network, pointing to the network setup in local_network_setup.go
type LocalNetwork struct {
- primaryNetworkInfo *interfaces.SubnetTestInfo
- subnetsInfo map[ids.ID]*interfaces.SubnetTestInfo
+ primaryNetworkInfo *interfaces.L1TestInfo
+ L1Infos map[ids.ID]*interfaces.L1TestInfo
- extraNodes []*tmpnet.Node // to add as more subnet validators in the tests
+ extraNodes []*tmpnet.Node // to add as more L1 validators in the tests
globalFundedKey *ecdsa.PrivateKey
pChainWallet pwallet.Wallet
@@ -58,7 +58,7 @@ const (
timeout = 120 * time.Second
)
-type SubnetSpec struct {
+type L1Spec struct {
Name string
EVMChainID uint64
NodeCount int
@@ -73,8 +73,8 @@ func NewLocalNetwork(
ctx context.Context,
name string,
warpGenesisTemplateFile string,
- subnetSpecs []SubnetSpec,
- extraNodeCount int, // for use by tests, eg to add new subnet validators
+ l1Specs []L1Spec,
+ extraNodeCount int, // for use by tests, eg to add new L1 validators
) *LocalNetwork {
var err error
@@ -82,7 +82,7 @@ func NewLocalNetwork(
extraNodes := subnetEvmTestUtils.NewTmpnetNodes(extraNodeCount)
var allNodes []*tmpnet.Node
- allNodes = append(allNodes, extraNodes...) // to be appended w/ subnet validators
+ allNodes = append(allNodes, extraNodes...) // to be appended w/ L1 validators
fundedKey, err := hex.DecodeString(fundedKeyStr)
Expect(err).Should(BeNil())
@@ -92,12 +92,12 @@ func NewLocalNetwork(
globalFundedECDSAKey := globalFundedKey.ToECDSA()
Expect(err).Should(BeNil())
- var subnets []*tmpnet.Subnet
- for _, subnetSpec := range subnetSpecs {
+ var l1s []*tmpnet.Subnet
+ for _, subnetSpec := range l1Specs {
nodes := subnetEvmTestUtils.NewTmpnetNodes(subnetSpec.NodeCount)
allNodes = append(allNodes, nodes...)
- subnet := subnetEvmTestUtils.NewTmpnetSubnet(
+ l1 := subnetEvmTestUtils.NewTmpnetSubnet(
subnetSpec.Name,
utils.InstantiateGenesisTemplate(
warpGenesisTemplateFile,
@@ -109,15 +109,15 @@ func NewLocalNetwork(
utils.WarpEnabledChainConfig,
nodes...,
)
- subnet.OwningKey = globalFundedKey
- subnets = append(subnets, subnet)
+ l1.OwningKey = globalFundedKey
+ l1s = append(l1s, l1)
}
network := subnetEvmTestUtils.NewTmpnetNetwork(
name,
allNodes,
utils.WarpEnabledChainConfig,
- subnets...,
+ l1s...,
)
Expect(network).ShouldNot(BeNil())
@@ -148,34 +148,34 @@ func NewLocalNetwork(
Expect(err).Should(BeNil())
// Issue transactions to activate the proposerVM fork on the chains
- for _, subnet := range network.Subnets {
- utils.SetupProposerVM(ctx, globalFundedECDSAKey, network, subnet.SubnetID)
+ for _, l1 := range network.Subnets {
+ utils.SetupProposerVM(ctx, globalFundedECDSAKey, network, l1.SubnetID)
}
localNetwork := &LocalNetwork{
- primaryNetworkInfo: &interfaces.SubnetTestInfo{},
- subnetsInfo: make(map[ids.ID]*interfaces.SubnetTestInfo),
+ primaryNetworkInfo: &interfaces.L1TestInfo{},
+ L1Infos: make(map[ids.ID]*interfaces.L1TestInfo),
extraNodes: extraNodes,
globalFundedKey: globalFundedECDSAKey,
tmpnet: network,
}
- for _, subnet := range network.Subnets {
- localNetwork.setSubnetValues(subnet)
+ for _, l1 := range network.Subnets {
+ localNetwork.setL1Values(l1)
}
localNetwork.setPrimaryNetworkValues()
// Create the P-Chain wallet to issue transactions
kc := secp256k1fx.NewKeychain(globalFundedKey)
- localNetwork.GetSubnetsInfo()
- var subnetIDs []ids.ID
- for _, subnet := range localNetwork.GetSubnetsInfo() {
- subnetIDs = append(subnetIDs, subnet.SubnetID)
+ localNetwork.GetL1Infos()
+ var l1IDs []ids.ID
+ for _, l1 := range localNetwork.GetL1Infos() {
+ l1IDs = append(l1IDs, l1.L1ID)
}
wallet, err := primary.MakeWallet(ctx, &primary.WalletConfig{
URI: localNetwork.GetPrimaryNetworkInfo().NodeURIs[0],
AVAXKeychain: kc,
EthKeychain: kc,
- SubnetIDs: subnetIDs,
+ SubnetIDs: l1IDs,
})
Expect(err).Should(BeNil())
localNetwork.pChainWallet = wallet.P()
@@ -183,13 +183,13 @@ func NewLocalNetwork(
return localNetwork
}
-// Should be called after setSubnetValues for all subnets
+// Should be called after setL1Values for all L1s
func (n *LocalNetwork) setPrimaryNetworkValues() {
// Get the C-Chain node URIs.
- // All subnet nodes validate the C-Chain, so we can include them all here
+ // All L1 nodes validate the C-Chain, so we can include them all here
var nodeURIs []string
- for _, subnetInfo := range n.subnetsInfo {
- nodeURIs = append(nodeURIs, subnetInfo.NodeURIs...)
+ for _, l1Info := range n.L1Infos {
+ nodeURIs = append(nodeURIs, l1Info.NodeURIs...)
}
for _, extraNode := range n.extraNodes {
uri, err := n.tmpnet.GetURIForNodeID(extraNode.NodeID)
@@ -216,7 +216,7 @@ func (n *LocalNetwork) setPrimaryNetworkValues() {
chainIDInt, err := chainRPCClient.ChainID(context.Background())
Expect(err).Should(BeNil())
- n.primaryNetworkInfo.SubnetID = constants.PrimaryNetworkID
+ n.primaryNetworkInfo.L1ID = constants.PrimaryNetworkID
n.primaryNetworkInfo.BlockchainID = cChainBlockchainID
n.primaryNetworkInfo.NodeURIs = nodeURIs
n.primaryNetworkInfo.WSClient = chainWSClient
@@ -224,11 +224,11 @@ func (n *LocalNetwork) setPrimaryNetworkValues() {
n.primaryNetworkInfo.EVMChainID = chainIDInt
}
-func (n *LocalNetwork) setSubnetValues(subnet *tmpnet.Subnet) {
- blockchainID := subnet.Chains[0].ChainID
+func (n *LocalNetwork) setL1Values(l1 *tmpnet.Subnet) {
+ blockchainID := l1.Chains[0].ChainID
var chainNodeURIs []string
- for _, validatorID := range subnet.ValidatorIDs {
+ for _, validatorID := range l1.ValidatorIDs {
uri, err := n.tmpnet.GetURIForNodeID(validatorID)
Expect(err).Should(BeNil(), "failed to get URI for node ID %s", validatorID)
Expect(uri).ShouldNot(HaveLen(0))
@@ -238,54 +238,54 @@ func (n *LocalNetwork) setSubnetValues(subnet *tmpnet.Subnet) {
chainWSURI := utils.HttpToWebsocketURI(chainNodeURIs[0], blockchainID.String())
chainRPCURI := utils.HttpToRPCURI(chainNodeURIs[0], blockchainID.String())
- subnetID := subnet.SubnetID
+ L1ID := l1.SubnetID
- if n.subnetsInfo[subnetID] != nil && n.subnetsInfo[subnetID].WSClient != nil {
- n.subnetsInfo[subnetID].WSClient.Close()
+ if n.L1Infos[L1ID] != nil && n.L1Infos[L1ID].WSClient != nil {
+ n.L1Infos[L1ID].WSClient.Close()
}
chainWSClient, err := ethclient.Dial(chainWSURI)
Expect(err).Should(BeNil())
- if n.subnetsInfo[subnetID] != nil && n.subnetsInfo[subnetID].RPCClient != nil {
- n.subnetsInfo[subnetID].RPCClient.Close()
+ if n.L1Infos[L1ID] != nil && n.L1Infos[L1ID].RPCClient != nil {
+ n.L1Infos[L1ID].RPCClient.Close()
}
chainRPCClient, err := ethclient.Dial(chainRPCURI)
Expect(err).Should(BeNil())
chainIDInt, err := chainRPCClient.ChainID(context.Background())
Expect(err).Should(BeNil())
- // Set the new values in the subnetsInfo map
- if n.subnetsInfo[subnetID] == nil {
- n.subnetsInfo[subnetID] = &interfaces.SubnetTestInfo{}
+ // Set the new values in the L1Infos map
+ if n.L1Infos[L1ID] == nil {
+ n.L1Infos[L1ID] = &interfaces.L1TestInfo{}
}
- n.subnetsInfo[subnetID].SubnetName = subnet.Name
- n.subnetsInfo[subnetID].SubnetID = subnetID
- n.subnetsInfo[subnetID].BlockchainID = blockchainID
- n.subnetsInfo[subnetID].NodeURIs = chainNodeURIs
- n.subnetsInfo[subnetID].WSClient = chainWSClient
- n.subnetsInfo[subnetID].RPCClient = chainRPCClient
- n.subnetsInfo[subnetID].EVMChainID = chainIDInt
+ n.L1Infos[L1ID].L1Name = l1.Name
+ n.L1Infos[L1ID].L1ID = L1ID
+ n.L1Infos[L1ID].BlockchainID = blockchainID
+ n.L1Infos[L1ID].NodeURIs = chainNodeURIs
+ n.L1Infos[L1ID].WSClient = chainWSClient
+ n.L1Infos[L1ID].RPCClient = chainRPCClient
+ n.L1Infos[L1ID].EVMChainID = chainIDInt
}
-// Returns all subnet info sorted in lexicographic order of SubnetName.
-func (n *LocalNetwork) GetSubnetsInfo() []interfaces.SubnetTestInfo {
- subnetsInfo := make([]interfaces.SubnetTestInfo, 0, len(n.subnetsInfo))
- for _, subnetInfo := range n.subnetsInfo {
- subnetsInfo = append(subnetsInfo, *subnetInfo)
+// Returns all L1 info sorted in lexicographic order of L1Name.
+func (n *LocalNetwork) GetL1Infos() []interfaces.L1TestInfo {
+ L1Infos := make([]interfaces.L1TestInfo, 0, len(n.L1Infos))
+ for _, l1Info := range n.L1Infos {
+ L1Infos = append(L1Infos, *l1Info)
}
- sort.Slice(subnetsInfo, func(i, j int) bool {
- return subnetsInfo[i].SubnetName < subnetsInfo[j].SubnetName
+ sort.Slice(L1Infos, func(i, j int) bool {
+ return L1Infos[i].L1Name < L1Infos[j].L1Name
})
- return subnetsInfo
+ return L1Infos
}
-func (n *LocalNetwork) GetPrimaryNetworkInfo() interfaces.SubnetTestInfo {
+func (n *LocalNetwork) GetPrimaryNetworkInfo() interfaces.L1TestInfo {
return *n.primaryNetworkInfo
}
-// Returns subnet info for all subnets, including the primary network
-func (n *LocalNetwork) GetAllSubnetsInfo() []interfaces.SubnetTestInfo {
- subnets := n.GetSubnetsInfo()
- return append(subnets, n.GetPrimaryNetworkInfo())
+// Returns L1 info for all L1s, including the primary network
+func (n *LocalNetwork) GetAllL1Infos() []interfaces.L1TestInfo {
+ l1s := n.GetL1Infos()
+ return append(l1s, n.GetPrimaryNetworkInfo())
}
func (n *LocalNetwork) GetFundedAccountInfo() (common.Address, *ecdsa.PrivateKey) {
@@ -293,14 +293,14 @@ func (n *LocalNetwork) GetFundedAccountInfo() (common.Address, *ecdsa.PrivateKey
return fundedAddress, n.globalFundedKey
}
-func (n *LocalNetwork) setAllSubnetValues() {
- subnetIDs := n.GetSubnetsInfo()
- Expect(len(subnetIDs)).Should(Equal(2))
+func (n *LocalNetwork) setAllL1Values() {
+ L1IDs := n.GetL1Infos()
+ Expect(len(L1IDs)).Should(Equal(2))
- for _, subnetInfo := range n.subnetsInfo {
- subnet := n.tmpnet.GetSubnet(subnetInfo.SubnetName)
- Expect(subnet).ShouldNot(BeNil())
- n.setSubnetValues(subnet)
+ for _, l1Info := range n.L1Infos {
+ l1 := n.tmpnet.GetSubnet(l1Info.L1Name)
+ Expect(l1).ShouldNot(BeNil())
+ n.setL1Values(l1)
}
n.setPrimaryNetworkValues()
@@ -313,16 +313,16 @@ func (n *LocalNetwork) TearDownNetwork() {
Expect(n.tmpnet.Stop(context.Background())).Should(BeNil())
}
-func (n *LocalNetwork) AddSubnetValidators(ctx context.Context, subnetID ids.ID, count uint) {
+func (n *LocalNetwork) AddL1Validators(ctx context.Context, l1ID ids.ID, count uint) {
Expect(count > 0).Should(BeTrue(), "can't add 0 validators")
Expect(uint(len(n.extraNodes)) >= count).Should(
BeTrue(),
"not enough extra nodes to use",
)
- subnet := n.tmpnet.Subnets[slices.IndexFunc(
+ l1 := n.tmpnet.Subnets[slices.IndexFunc(
n.tmpnet.Subnets,
- func(s *tmpnet.Subnet) bool { return s.SubnetID == subnetID },
+ func(s *tmpnet.Subnet) bool { return s.SubnetID == l1ID },
)]
// consume some of the extraNodes
@@ -330,12 +330,12 @@ func (n *LocalNetwork) AddSubnetValidators(ctx context.Context, subnetID ids.ID,
newValidatorNodes = append(newValidatorNodes, n.extraNodes[0:count]...)
n.extraNodes = n.extraNodes[count:]
- apiURI, err := n.tmpnet.GetURIForNodeID(subnet.ValidatorIDs[0])
+ apiURI, err := n.tmpnet.GetURIForNodeID(l1.ValidatorIDs[0])
Expect(err).Should(BeNil())
ctx, cancel := context.WithCancel(ctx)
defer cancel()
- err = subnet.AddValidators(
+ err = l1.AddValidators(
ctx,
os.Stdout,
apiURI,
@@ -344,11 +344,11 @@ func (n *LocalNetwork) AddSubnetValidators(ctx context.Context, subnetID ids.ID,
Expect(err).Should(BeNil())
for _, node := range newValidatorNodes {
- subnet.ValidatorIDs = append(subnet.ValidatorIDs, node.NodeID)
- node.Flags[config.TrackSubnetsKey] = subnetID.String()
+ l1.ValidatorIDs = append(l1.ValidatorIDs, node.NodeID)
+ node.Flags[config.TrackSubnetsKey] = l1ID.String()
}
- tmpnet.WaitForActiveValidators(ctx, os.Stdout, platformvm.NewClient(n.tmpnet.Nodes[0].URI), subnet)
+ tmpnet.WaitForActiveValidators(ctx, os.Stdout, platformvm.NewClient(n.tmpnet.Nodes[0].URI), l1)
nodeIdsToRestart := make([]ids.NodeID, len(newValidatorNodes))
for i, node := range newValidatorNodes {
@@ -356,7 +356,7 @@ func (n *LocalNetwork) AddSubnetValidators(ctx context.Context, subnetID ids.ID,
}
n.RestartNodes(ctx, nodeIdsToRestart)
- n.setAllSubnetValues()
+ n.setAllL1Values()
}
// Restarts the nodes with the given nodeIDs. If nodeIDs is empty, restarts all nodes.
@@ -396,7 +396,7 @@ func (n *LocalNetwork) RestartNodes(ctx context.Context, nodeIDs []ids.NodeID) {
Expect(err).Should(BeNil())
}
- n.setAllSubnetValues()
+ n.setAllL1Values()
}
func (n *LocalNetwork) SetChainConfigs(chainConfigs map[string]string) {
@@ -415,8 +415,8 @@ func (n *LocalNetwork) SetChainConfigs(chainConfigs map[string]string) {
continue
}
- for _, subnet := range n.tmpnet.Subnets {
- for _, chain := range subnet.Chains {
+ for _, l1 := range n.tmpnet.Subnets {
+ for _, chain := range l1.Chains {
if chain.ChainID.String() == chainIDStr {
chain.Config = chainConfig
}
@@ -427,10 +427,10 @@ func (n *LocalNetwork) SetChainConfigs(chainConfigs map[string]string) {
if err != nil {
log.Error("failed to write network", "error", err)
}
- for _, subnet := range n.tmpnet.Subnets {
- err := subnet.Write(n.tmpnet.GetSubnetDir(), n.tmpnet.GetChainConfigDir())
+ for _, l1 := range n.tmpnet.Subnets {
+ err := l1.Write(n.tmpnet.GetSubnetDir(), n.tmpnet.GetChainConfigDir())
if err != nil {
- log.Error("failed to write subnets", "error", err)
+ log.Error("failed to write L1s", "error", err)
}
}
}
@@ -451,8 +451,8 @@ func (n *LocalNetwork) ClearReceiptQueue(
ctx context.Context,
teleporter utils.TeleporterTestInfo,
fundedKey *ecdsa.PrivateKey,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
) {
sourceTeleporterMessenger := teleporter.TeleporterMessenger(source)
outstandReceiptCount := utils.GetOutstandingReceiptCount(
@@ -461,9 +461,9 @@ func (n *LocalNetwork) ClearReceiptQueue(
)
for outstandReceiptCount.Cmp(big.NewInt(0)) != 0 {
log.Info("Emptying receipt queue", "remainingReceipts", outstandReceiptCount.String())
- // Send message from Subnet B to Subnet A to trigger the "regular" method of delivering receipts.
+ // Send message from L1 B to L1 A to trigger the "regular" method of delivering receipts.
// The next message from B->A will contain the same receipts that were manually sent in the above steps,
- // but they should not be processed again on Subnet A.
+ // but they should not be processed again on L1 A.
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
DestinationBlockchainID: destination.BlockchainID,
DestinationAddress: common.HexToAddress("0x1111111111111111111111111111111111111111"),
@@ -489,11 +489,11 @@ func (n *LocalNetwork) ClearReceiptQueue(
}
// Returns Receipt for the transaction unlike TeleporterRegistry version since this is a non-teleporter case
-// and we don't want to add the ValidatorSetSig ABI to the subnetInfo
+// and we don't want to add the ValidatorSetSig ABI to the l1Info
func (n *LocalNetwork) ExecuteValidatorSetSigCallAndVerify(
ctx context.Context,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
validatorSetSigAddress common.Address,
senderKey *ecdsa.PrivateKey,
unsignedMessage *avalancheWarp.UnsignedMessage,
@@ -520,29 +520,29 @@ func (n *LocalNetwork) ExecuteValidatorSetSigCallAndVerify(
func (n *LocalNetwork) AddProtocolVersionAndWaitForAcceptance(
ctx context.Context,
teleporter utils.TeleporterTestInfo,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
newTeleporterAddress common.Address,
senderKey *ecdsa.PrivateKey,
unsignedMessage *avalancheWarp.UnsignedMessage,
) {
- signedWarpMsg := utils.GetSignedMessage(ctx, subnet, subnet, unsignedMessage.ID())
+ signedWarpMsg := utils.GetSignedMessage(ctx, l1, l1, unsignedMessage.ID())
log.Info("Got signed warp message", "messageID", signedWarpMsg.ID())
// Construct tx to add protocol version and send to destination chain
signedTx := utils.CreateAddProtocolVersionTransaction(
ctx,
signedWarpMsg,
- teleporter.TeleporterRegistryAddress(subnet),
+ teleporter.TeleporterRegistryAddress(l1),
senderKey,
- subnet,
+ l1,
)
- curLatestVersion := teleporter.GetLatestTeleporterVersion(subnet)
+ curLatestVersion := teleporter.GetLatestTeleporterVersion(l1)
expectedLatestVersion := big.NewInt(curLatestVersion.Int64() + 1)
// Wait for tx to be accepted, and verify events emitted
- receipt := utils.SendTransactionAndWaitForSuccess(ctx, subnet, signedTx)
- teleporterRegistry := teleporter.TeleporterRegistry(subnet)
+ receipt := utils.SendTransactionAndWaitForSuccess(ctx, l1, signedTx)
+ teleporterRegistry := teleporter.TeleporterRegistry(l1)
addProtocolVersionEvent, err := utils.GetEventFromLogs(receipt.Logs, teleporterRegistry.ParseAddProtocolVersion)
Expect(err).Should(BeNil())
Expect(addProtocolVersionEvent.Version.Cmp(expectedLatestVersion)).Should(Equal(0))
@@ -554,28 +554,28 @@ func (n *LocalNetwork) AddProtocolVersionAndWaitForAcceptance(
Expect(versionUpdatedEvent.NewVersion.Cmp(expectedLatestVersion)).Should(Equal(0))
}
-func (n *LocalNetwork) GetTwoSubnets() (
- interfaces.SubnetTestInfo,
- interfaces.SubnetTestInfo,
+func (n *LocalNetwork) GetTwoL1s() (
+ interfaces.L1TestInfo,
+ interfaces.L1TestInfo,
) {
- subnets := n.GetSubnetsInfo()
- Expect(len(subnets)).Should(BeNumerically(">=", 2))
- return subnets[0], subnets[1]
+ l1s := n.GetL1Infos()
+ Expect(len(l1s)).Should(BeNumerically(">=", 2))
+ return l1s[0], l1s[1]
}
func (n *LocalNetwork) SendExampleCrossChainMessageAndVerify(
ctx context.Context,
teleporter utils.TeleporterTestInfo,
- source interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
sourceExampleMessenger *testmessenger.TestMessenger,
- destination interfaces.SubnetTestInfo,
+ destination interfaces.L1TestInfo,
destExampleMessengerAddress common.Address,
destExampleMessenger *testmessenger.TestMessenger,
senderKey *ecdsa.PrivateKey,
message string,
expectSuccess bool,
) {
- // Call the example messenger contract on Subnet A
+ // Call the example messenger contract on L1 A
optsA, err := bind.NewKeyedTransactorWithChainID(senderKey, source.EVMChainID)
Expect(err).Should(BeNil())
tx, err := sourceExampleMessenger.SendMessage(
diff --git a/tests/suites/governance/governance_suite_test.go b/tests/suites/governance/governance_suite_test.go
index dc94a2cde..3a91fb569 100644
--- a/tests/suites/governance/governance_suite_test.go
+++ b/tests/suites/governance/governance_suite_test.go
@@ -40,7 +40,7 @@ var _ = ginkgo.BeforeSuite(func() {
ctx,
"governance-test-local-network",
warpGenesisTemplateFile,
- []localnetwork.SubnetSpec{
+ []localnetwork.L1Spec{
{
Name: "A",
EVMChainID: 12345,
diff --git a/tests/suites/ictt/ictt_suite_test.go b/tests/suites/ictt/ictt_suite_test.go
index d984c9877..10c9c0016 100644
--- a/tests/suites/ictt/ictt_suite_test.go
+++ b/tests/suites/ictt/ictt_suite_test.go
@@ -65,7 +65,7 @@ var _ = ginkgo.BeforeSuite(func() {
ctx,
"teleporter-test-local-network",
warpGenesisTemplateFile,
- []localnetwork.SubnetSpec{
+ []localnetwork.L1Spec{
{
Name: "A",
EVMChainID: 12345,
@@ -85,10 +85,10 @@ var _ = ginkgo.BeforeSuite(func() {
},
2,
)
- TeleporterInfo = utils.NewTeleporterTestInfo(LocalNetworkInstance.GetAllSubnetsInfo())
+ TeleporterInfo = utils.NewTeleporterTestInfo(LocalNetworkInstance.GetAllL1Infos())
log.Info("Started local network")
- // Only need to deploy Teleporter on the C-Chain since it is included in the genesis of the subnet chains.
+ // Only need to deploy Teleporter on the C-Chain since it is included in the genesis of the L1 chains.
_, fundedKey := LocalNetworkInstance.GetFundedAccountInfo()
TeleporterInfo.DeployTeleporterMessenger(
ctx,
@@ -98,10 +98,10 @@ var _ = ginkgo.BeforeSuite(func() {
teleporterContractAddress,
fundedKey,
)
- for _, subnet := range LocalNetworkInstance.GetAllSubnetsInfo() {
- TeleporterInfo.SetTeleporter(teleporterContractAddress, subnet)
- TeleporterInfo.InitializeBlockchainID(subnet, fundedKey)
- TeleporterInfo.DeployTeleporterRegistry(subnet, fundedKey)
+ for _, l1 := range LocalNetworkInstance.GetAllL1Infos() {
+ TeleporterInfo.SetTeleporter(teleporterContractAddress, l1)
+ TeleporterInfo.InitializeBlockchainID(l1, fundedKey)
+ TeleporterInfo.DeployTeleporterRegistry(l1, fundedKey)
}
})
@@ -113,7 +113,7 @@ var _ = ginkgo.AfterSuite(func() {
var _ = ginkgo.Describe("[Validator manager integration tests]", func() {
// ICTT tests
- ginkgo.It("Transfer an ERC20 token between two Subnets",
+ ginkgo.It("Transfer an ERC20 token between two L1s",
ginkgo.Label(icttLabel, erc20TokenHomeLabel, erc20TokenRemoteLabel),
func() {
icttFlows.ERC20TokenHomeERC20TokenRemote(LocalNetworkInstance, TeleporterInfo)
diff --git a/tests/suites/teleporter/teleporter_suite_test.go b/tests/suites/teleporter/teleporter_suite_test.go
index 9c97c806e..3de0063a3 100644
--- a/tests/suites/teleporter/teleporter_suite_test.go
+++ b/tests/suites/teleporter/teleporter_suite_test.go
@@ -64,7 +64,7 @@ var _ = ginkgo.BeforeSuite(func() {
ctx,
"teleporter-test-local-network",
warpGenesisTemplateFile,
- []localnetwork.SubnetSpec{
+ []localnetwork.L1Spec{
{
Name: "A",
EVMChainID: 12345,
@@ -84,10 +84,10 @@ var _ = ginkgo.BeforeSuite(func() {
},
2,
)
- TeleporterInfo = utils.NewTeleporterTestInfo(LocalNetworkInstance.GetAllSubnetsInfo())
+ TeleporterInfo = utils.NewTeleporterTestInfo(LocalNetworkInstance.GetAllL1Infos())
log.Info("Started local network")
- // Only need to deploy Teleporter on the C-Chain since it is included in the genesis of the subnet chains.
+ // Only need to deploy Teleporter on the C-Chain since it is included in the genesis of the l1 chains.
_, fundedKey := LocalNetworkInstance.GetFundedAccountInfo()
TeleporterInfo.DeployTeleporterMessenger(
ctx,
@@ -98,10 +98,10 @@ var _ = ginkgo.BeforeSuite(func() {
fundedKey,
)
- for _, subnet := range LocalNetworkInstance.GetAllSubnetsInfo() {
- TeleporterInfo.SetTeleporter(teleporterContractAddress, subnet)
- TeleporterInfo.InitializeBlockchainID(subnet, fundedKey)
- TeleporterInfo.DeployTeleporterRegistry(subnet, fundedKey)
+ for _, l1 := range LocalNetworkInstance.GetAllL1Infos() {
+ TeleporterInfo.SetTeleporter(teleporterContractAddress, l1)
+ TeleporterInfo.InitializeBlockchainID(l1, fundedKey)
+ TeleporterInfo.DeployTeleporterRegistry(l1, fundedKey)
}
log.Info("Set up ginkgo before suite")
@@ -114,7 +114,7 @@ var _ = ginkgo.AfterSuite(func() {
var _ = ginkgo.Describe("[Teleporter integration tests]", func() {
// Teleporter tests
- ginkgo.It("Send a message from Subnet A to Subnet B, and one from B to A",
+ ginkgo.It("Send a message from L1 A to L1 B, and one from B to A",
ginkgo.Label(teleporterMessengerLabel),
func() {
teleporterFlows.BasicSendReceive(LocalNetworkInstance, TeleporterInfo)
diff --git a/tests/suites/validator-manager/validator_manager_suite_test.go b/tests/suites/validator-manager/validator_manager_suite_test.go
index ccbd2f103..b7cc1e84a 100644
--- a/tests/suites/validator-manager/validator_manager_suite_test.go
+++ b/tests/suites/validator-manager/validator_manager_suite_test.go
@@ -40,7 +40,7 @@ var _ = ginkgo.BeforeEach(func() {
ctx,
"validator-manager-test-local-network",
warpGenesisTemplateFile,
- []localnetwork.SubnetSpec{
+ []localnetwork.L1Spec{
{
Name: "A",
EVMChainID: 12345,
diff --git a/tests/utils/chain.go b/tests/utils/chain.go
index 6286e7e92..6f97ea54e 100644
--- a/tests/utils/chain.go
+++ b/tests/utils/chain.go
@@ -126,16 +126,16 @@ func GetURIHostAndPort(uri string) (string, uint32, error) {
func CreateNativeTransferTransaction(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
fromKey *ecdsa.PrivateKey,
recipient common.Address,
amount *big.Int,
) *types.Transaction {
fromAddress := crypto.PubkeyToAddress(fromKey.PublicKey)
- gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, subnetInfo, fromAddress)
+ gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, l1Info, fromAddress)
tx := types.NewTx(&types.DynamicFeeTx{
- ChainID: subnetInfo.EVMChainID,
+ ChainID: l1Info.EVMChainID,
Nonce: nonce,
To: &recipient,
Gas: NativeTransferGas,
@@ -144,91 +144,91 @@ func CreateNativeTransferTransaction(
Value: amount,
})
- return SignTransaction(tx, fromKey, subnetInfo.EVMChainID)
+ return SignTransaction(tx, fromKey, l1Info.EVMChainID)
}
func SendNativeTransfer(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
fromKey *ecdsa.PrivateKey,
recipient common.Address,
amount *big.Int,
) *types.Receipt {
- tx := CreateNativeTransferTransaction(ctx, subnetInfo, fromKey, recipient, amount)
- return SendTransactionAndWaitForSuccess(ctx, subnetInfo, tx)
+ tx := CreateNativeTransferTransaction(ctx, l1Info, fromKey, recipient, amount)
+ return SendTransactionAndWaitForSuccess(ctx, l1Info, tx)
}
// Sends a tx, and waits for it to be mined.
// Asserts Receipt.status equals success.
func sendAndWaitForTransaction(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
tx *types.Transaction,
success bool,
) *types.Receipt {
- err := subnetInfo.RPCClient.SendTransaction(ctx, tx)
+ err := l1Info.RPCClient.SendTransaction(ctx, tx)
Expect(err).Should(BeNil())
- return waitForTransaction(ctx, subnetInfo, tx.Hash(), success)
+ return waitForTransaction(ctx, l1Info, tx.Hash(), success)
}
// Sends a tx, and waits for it to be mined.
// Asserts Receipt.status equals false.
func SendTransactionAndWaitForFailure(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
tx *types.Transaction,
) *types.Receipt {
- return sendAndWaitForTransaction(ctx, subnetInfo, tx, false)
+ return sendAndWaitForTransaction(ctx, l1Info, tx, false)
}
// Sends a tx, and waits for it to be mined.
// Asserts Receipt.status equals true.
func SendTransactionAndWaitForSuccess(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
tx *types.Transaction,
) *types.Receipt {
- return sendAndWaitForTransaction(ctx, subnetInfo, tx, true)
+ return sendAndWaitForTransaction(ctx, l1Info, tx, true)
}
// Waits for a transaction to be mined.
// Asserts Receipt.status equals true.
func WaitForTransactionSuccess(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
txHash common.Hash,
) *types.Receipt {
- return waitForTransaction(ctx, subnetInfo, txHash, true)
+ return waitForTransaction(ctx, l1Info, txHash, true)
}
// Waits for a transaction to be mined.
// Asserts Receipt.status equals false.
func WaitForTransactionFailure(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
txHash common.Hash,
) *types.Receipt {
- return waitForTransaction(ctx, subnetInfo, txHash, false)
+ return waitForTransaction(ctx, l1Info, txHash, false)
}
// Waits for a transaction to be mined.
// Asserts Receipt.status equals success.
func waitForTransaction(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
txHash common.Hash,
success bool,
) *types.Receipt {
cctx, cancel := context.WithTimeout(ctx, 20*time.Second)
defer cancel()
- receipt, err := WaitMined(cctx, subnetInfo.RPCClient, txHash)
+ receipt, err := WaitMined(cctx, l1Info.RPCClient, txHash)
Expect(err).Should(BeNil())
if success {
if receipt.Status == types.ReceiptStatusFailed {
- TraceTransactionAndExit(ctx, subnetInfo.RPCClient, receipt.TxHash)
+ TraceTransactionAndExit(ctx, l1Info.RPCClient, receipt.TxHash)
}
} else {
Expect(receipt.Status).Should(Equal(types.ReceiptStatusFailed))
@@ -279,16 +279,16 @@ func SignTransaction(tx *types.Transaction, key *ecdsa.PrivateKey, chainID *big.
// Returns the gasFeeCap, gasTipCap, and nonce the be used when constructing a transaction from fundedAddress
func CalculateTxParams(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
fundedAddress common.Address,
) (*big.Int, *big.Int, uint64) {
- baseFee, err := subnetInfo.RPCClient.EstimateBaseFee(ctx)
+ baseFee, err := l1Info.RPCClient.EstimateBaseFee(ctx)
Expect(err).Should(BeNil())
- gasTipCap, err := subnetInfo.RPCClient.SuggestGasTipCap(ctx)
+ gasTipCap, err := l1Info.RPCClient.SuggestGasTipCap(ctx)
Expect(err).Should(BeNil())
- nonce, err := subnetInfo.RPCClient.NonceAt(ctx, fundedAddress, nil)
+ nonce, err := l1Info.RPCClient.NonceAt(ctx, fundedAddress, nil)
Expect(err).Should(BeNil())
gasFeeCap := baseFee.Mul(baseFee, big.NewInt(gasUtils.BaseFeeFactor))
@@ -387,12 +387,12 @@ func waitForBlockHeight(
func GetEventFromLogsOrTrace[T any](
ctx context.Context,
receipt *types.Receipt,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
parser func(log types.Log) (T, error),
) T {
log, err := GetEventFromLogs(receipt.Logs, parser)
if err != nil {
- TraceTransactionAndExit(ctx, subnetInfo.RPCClient, receipt.TxHash)
+ TraceTransactionAndExit(ctx, l1Info.RPCClient, receipt.TxHash)
}
return log
}
@@ -444,23 +444,23 @@ func BigIntMul(v1 *big.Int, v2 *big.Int) *big.Int {
// Network utils
//
-func GetPChainInfo(cChainInfo interfaces.SubnetTestInfo) interfaces.SubnetTestInfo {
+func GetPChainInfo(cChainInfo interfaces.L1TestInfo) interfaces.L1TestInfo {
pChainBlockchainID, err := info.NewClient(cChainInfo.NodeURIs[0]).GetBlockchainID(context.Background(), "P")
Expect(err).Should(BeNil())
- return interfaces.SubnetTestInfo{
+ return interfaces.L1TestInfo{
BlockchainID: pChainBlockchainID,
- SubnetID: ids.Empty,
+ L1ID: ids.Empty,
}
}
type ChainConfigMap map[string]string
-// Sets the chain config in customChainConfigs for the specified subnet
-func (m ChainConfigMap) Add(subnet interfaces.SubnetTestInfo, chainConfig string) {
- if subnet.SubnetID == constants.PrimaryNetworkID {
+// Sets the chain config in customChainConfigs for the specified L!
+func (m ChainConfigMap) Add(l1 interfaces.L1TestInfo, chainConfig string) {
+ if l1.L1ID == constants.PrimaryNetworkID {
m[CChainPathSpecifier] = chainConfig
} else {
- m[subnet.BlockchainID.String()] = chainConfig
+ m[l1.BlockchainID.String()] = chainConfig
}
}
@@ -526,26 +526,26 @@ func InstantiateGenesisTemplate(
templateFileBytes, err := os.ReadFile(templateFileName)
Expect(err).Should(BeNil())
- subnetGenesisFile, err := os.CreateTemp(os.TempDir(), "")
+ l1GenesisFile, err := os.CreateTemp(os.TempDir(), "")
Expect(err).Should(BeNil())
- defer subnetGenesisFile.Close()
+ defer l1GenesisFile.Close()
var replaced string = string(templateFileBytes[:])
for _, s := range substitutions {
replaced = strings.ReplaceAll(replaced, s.Target, s.Value)
}
- subnetGenesisFile.WriteString(replaced)
+ l1GenesisFile.WriteString(replaced)
- return subnetGenesisFile.Name()
+ return l1GenesisFile.Name()
}
//
// Aggregator utils
//
-func NewSignatureAggregator(apiUri string, subnets []ids.ID) *aggregator.SignatureAggregator {
+func NewSignatureAggregator(apiUri string, l1IDs []ids.ID) *aggregator.SignatureAggregator {
cfg := sigAggConfig.Config{
PChainAPI: &relayerConfig.APIConfig{
BaseURL: apiUri,
@@ -554,13 +554,13 @@ func NewSignatureAggregator(apiUri string, subnets []ids.ID) *aggregator.Signatu
BaseURL: apiUri,
},
}
- trackedSubnets := set.NewSet[ids.ID](len(subnets))
- trackedSubnets.Add(subnets...)
+ trackedL1s := set.NewSet[ids.ID](len(l1IDs))
+ trackedL1s.Add(l1IDs...)
registry := prometheus.NewRegistry()
appRequestNetwork, err := peers.NewNetwork(
logging.Info,
registry,
- trackedSubnets,
+ trackedL1s,
&cfg,
)
Expect(err).Should(BeNil())
@@ -592,18 +592,18 @@ func NewSignatureAggregator(apiUri string, subnets []ids.ID) *aggregator.Signatu
// Funded key must have admin access to set new admin.
func AddNativeMinterAdmin(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
fundedKey *ecdsa.PrivateKey,
address common.Address,
) {
- nativeMinterPrecompile, err := nativeMinter.NewINativeMinter(nativeminter.ContractAddress, subnet.RPCClient)
+ nativeMinterPrecompile, err := nativeMinter.NewINativeMinter(nativeminter.ContractAddress, l1.RPCClient)
Expect(err).Should(BeNil())
- opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := nativeMinterPrecompile.SetAdmin(opts, address)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
// Blocks until all validators specified in nodeURIs have reached the specified block height
@@ -632,7 +632,7 @@ func WaitForAllValidatorsToAcceptBlock(ctx context.Context, nodeURIs []string, b
func ExtractWarpMessageFromLog(
ctx context.Context,
sourceReceipt *types.Receipt,
- source interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
) *avalancheWarp.UnsignedMessage {
log.Info("Fetching relevant warp logs from the newly produced block")
logs, err := source.RPCClient.FilterLogs(ctx, subnetEvmInterfaces.FilterQuery{
@@ -654,8 +654,8 @@ func ExtractWarpMessageFromLog(
func ConstructSignedWarpMessage(
ctx context.Context,
sourceReceipt *types.Receipt,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
) *avalancheWarp.Message {
unsignedMsg := ExtractWarpMessageFromLog(ctx, sourceReceipt, source)
@@ -679,17 +679,17 @@ func ConstructSignedWarpMessage(
func GetSignedMessage(
ctx context.Context,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
unsignedWarpMessageID ids.ID,
) *avalancheWarp.Message {
Expect(len(source.NodeURIs)).Should(BeNumerically(">", 0))
warpClient, err := warpBackend.NewClient(source.NodeURIs[0], source.BlockchainID.String())
Expect(err).Should(BeNil())
- signingSubnetID := source.SubnetID
- if source.SubnetID == constants.PrimaryNetworkID {
- signingSubnetID = destination.SubnetID
+ signingL1ID := source.L1ID
+ if source.L1ID == constants.PrimaryNetworkID {
+ signingL1ID = destination.L1ID
}
// Get the aggregate signature for the Warp message
@@ -697,7 +697,7 @@ func GetSignedMessage(
ctx,
unsignedWarpMessageID,
warp.WarpDefaultQuorumNumerator,
- signingSubnetID.String(),
+ signingL1ID.String(),
)
Expect(err).Should(BeNil())
@@ -707,15 +707,15 @@ func GetSignedMessage(
return signedWarpMsg
}
-func SetupProposerVM(ctx context.Context, fundedKey *ecdsa.PrivateKey, network *tmpnet.Network, subnetID ids.ID) {
- subnetDetails := network.Subnets[slices.IndexFunc(
+func SetupProposerVM(ctx context.Context, fundedKey *ecdsa.PrivateKey, network *tmpnet.Network, L1ID ids.ID) {
+ l1Details := network.Subnets[slices.IndexFunc(
network.Subnets,
- func(s *tmpnet.Subnet) bool { return s.SubnetID == subnetID },
+ func(s *tmpnet.Subnet) bool { return s.SubnetID == L1ID },
)]
- chainID := subnetDetails.Chains[0].ChainID
+ chainID := l1Details.Chains[0].ChainID
- nodeURI, err := network.GetURIForNodeID(subnetDetails.ValidatorIDs[0])
+ nodeURI, err := network.GetURIForNodeID(l1Details.ValidatorIDs[0])
Expect(err).Should(BeNil())
uri := HttpToWebsocketURI(nodeURI, chainID.String())
diff --git a/tests/utils/erc20.go b/tests/utils/erc20.go
index b235dbf6d..cf82a7c8b 100644
--- a/tests/utils/erc20.go
+++ b/tests/utils/erc20.go
@@ -21,7 +21,7 @@ var (
func DeployExampleERC20(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- source interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
) (common.Address, *exampleerc20.ExampleERC20) {
opts, err := bind.NewKeyedTransactorWithChainID(senderKey, source.EVMChainID)
Expect(err).Should(BeNil())
@@ -48,7 +48,7 @@ func ERC20Approve(
token *exampleerc20.ExampleERC20,
spender common.Address,
amount *big.Int,
- source interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
senderKey *ecdsa.PrivateKey,
) {
opts, err := bind.NewKeyedTransactorWithChainID(senderKey, source.EVMChainID)
diff --git a/tests/utils/governance.go b/tests/utils/governance.go
index 3df3ae29b..b65243e0d 100644
--- a/tests/utils/governance.go
+++ b/tests/utils/governance.go
@@ -18,30 +18,30 @@ import (
func DeployValidatorSetSig(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- contractSubnet interfaces.SubnetTestInfo,
- validatorSubnet interfaces.SubnetTestInfo,
+ contractL1 interfaces.L1TestInfo,
+ validatorL1 interfaces.L1TestInfo,
) (common.Address, *validatorsetsig.ValidatorSetSig) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, contractSubnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, contractL1.EVMChainID)
Expect(err).Should(BeNil())
address, tx, validatorSetSig, err := validatorsetsig.DeployValidatorSetSig(
opts,
- contractSubnet.RPCClient,
- validatorSubnet.BlockchainID,
+ contractL1.RPCClient,
+ validatorL1.BlockchainID,
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, contractSubnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, contractL1, tx.Hash())
return address, validatorSetSig
}
// Returns Receipt for the transaction unlike TeleporterRegistry version since this is a non-teleporter case
-// and we don't want to add the ValidatorSetSig ABI to the subnetInfo
+// and we don't want to add the ValidatorSetSig ABI to the l1Info
func ExecuteValidatorSetSigCallAndVerify(
ctx context.Context,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
validatorSetSigAddress common.Address,
senderKey *ecdsa.PrivateKey,
unsignedMessage *avalancheWarp.UnsignedMessage,
@@ -67,17 +67,17 @@ func ExecuteValidatorSetSigCallAndVerify(
func InitOffChainMessageChainConfigValidatorSetSig(
networkID uint32,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validatorSetSigAddress common.Address,
validatorSetSigMessages []validatorsetsig.ValidatorSetSigMessage,
) ([]avalancheWarp.UnsignedMessage, string) {
unsignedMessages := []avalancheWarp.UnsignedMessage{}
for _, message := range validatorSetSigMessages {
- unsignedMessage := CreateOffChainValidatorSetSigMessage(networkID, subnet, message)
+ unsignedMessage := CreateOffChainValidatorSetSigMessage(networkID, l1, message)
unsignedMessages = append(unsignedMessages, *unsignedMessage)
log.Info("Adding validatorSetSig off-chain message to Warp chain config",
"messageID", unsignedMessage.ID(),
- "blockchainID", subnet.BlockchainID.String())
+ "blockchainID", l1.BlockchainID.String())
}
return unsignedMessages, GetChainConfigWithOffChainMessages(unsignedMessages)
}
@@ -86,7 +86,7 @@ func InitOffChainMessageChainConfigValidatorSetSig(
// if the validator set signs this message
func CreateOffChainValidatorSetSigMessage(
networkID uint32,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
message validatorsetsig.ValidatorSetSigMessage,
) *avalancheWarp.UnsignedMessage {
sourceAddress := []byte{}
@@ -98,7 +98,7 @@ func CreateOffChainValidatorSetSigMessage(
unsignedMessage, err := avalancheWarp.NewUnsignedMessage(
networkID,
- subnet.BlockchainID,
+ l1.BlockchainID,
addressedPayload.Bytes(),
)
Expect(err).Should(BeNil())
diff --git a/tests/utils/ictt.go b/tests/utils/ictt.go
index d41e801d4..da7427b4d 100644
--- a/tests/utils/ictt.go
+++ b/tests/utils/ictt.go
@@ -72,27 +72,27 @@ func DeployERC20TokenHome(
ctx context.Context,
teleporter TeleporterTestInfo,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
teleporterManager common.Address,
tokenAddress common.Address,
tokenHomeDecimals uint8,
) (common.Address, *erc20tokenhome.ERC20TokenHome) {
opts, err := bind.NewKeyedTransactorWithChainID(
senderKey,
- subnet.EVMChainID,
+ l1.EVMChainID,
)
Expect(err).Should(BeNil())
implAddress, tx, erc20TokenHome, err := erc20tokenhome.DeployERC20TokenHome(
opts,
- subnet.RPCClient,
- teleporter.TeleporterRegistryAddress(subnet),
+ l1.RPCClient,
+ teleporter.TeleporterRegistryAddress(l1),
teleporterManager,
- teleporter.GetLatestTeleporterVersion(subnet),
+ teleporter.GetLatestTeleporterVersion(l1),
tokenAddress,
tokenHomeDecimals,
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return implAddress, erc20TokenHome
}
@@ -101,7 +101,7 @@ func DeployERC20TokenRemote(
ctx context.Context,
teleporter TeleporterTestInfo,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
teleporterManager common.Address,
tokenHomeBlockchainID ids.ID,
tokenHomeAddress common.Address,
@@ -112,16 +112,16 @@ func DeployERC20TokenRemote(
) (common.Address, *erc20tokenremote.ERC20TokenRemote) {
opts, err := bind.NewKeyedTransactorWithChainID(
senderKey,
- subnet.EVMChainID,
+ l1.EVMChainID,
)
Expect(err).Should(BeNil())
implAddress, tx, erc20TokenRemote, err := erc20tokenremote.DeployERC20TokenRemote(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
erc20tokenremote.TokenRemoteSettings{
- TeleporterRegistryAddress: teleporter.TeleporterRegistryAddress(subnet),
+ TeleporterRegistryAddress: teleporter.TeleporterRegistryAddress(l1),
TeleporterManager: teleporterManager,
- MinTeleporterVersion: teleporter.GetLatestTeleporterVersion(subnet),
+ MinTeleporterVersion: teleporter.GetLatestTeleporterVersion(l1),
TokenHomeBlockchainID: tokenHomeBlockchainID,
TokenHomeAddress: tokenHomeAddress,
TokenHomeDecimals: tokenHomeDecimals,
@@ -132,7 +132,7 @@ func DeployERC20TokenRemote(
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return implAddress, erc20TokenRemote
}
@@ -140,7 +140,7 @@ func DeployERC20TokenRemote(
func DeployNativeTokenRemote(
ctx context.Context,
teleporter TeleporterTestInfo,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
symbol string,
teleporterManager common.Address,
tokenHomeBlockchainID ids.ID,
@@ -158,17 +158,17 @@ func DeployNativeTokenRemote(
opts, err := bind.NewKeyedTransactorWithChainID(
deployerPK,
- subnet.EVMChainID,
+ l1.EVMChainID,
)
Expect(err).Should(BeNil())
implAddress, tx, nativeTokenRemote, err := nativetokenremote.DeployNativeTokenRemote(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
nativetokenremote.TokenRemoteSettings{
- TeleporterRegistryAddress: teleporter.TeleporterRegistryAddress(subnet),
+ TeleporterRegistryAddress: teleporter.TeleporterRegistryAddress(l1),
TeleporterManager: teleporterManager,
- MinTeleporterVersion: teleporter.GetLatestTeleporterVersion(subnet),
+ MinTeleporterVersion: teleporter.GetLatestTeleporterVersion(l1),
TokenHomeBlockchainID: tokenHomeBlockchainID,
TokenHomeAddress: tokenHomeAddress,
TokenHomeDecimals: tokenHomeDecimals,
@@ -178,7 +178,7 @@ func DeployNativeTokenRemote(
burnedFeesReportingRewardPercentage,
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
// Increment to the next deployer key so that the next contract deployment succeeds
nativeTokenRemoteDeployerKeyIndex++
@@ -190,25 +190,25 @@ func DeployNativeTokenHome(
ctx context.Context,
teleporter TeleporterTestInfo,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
teleporterManager common.Address,
tokenAddress common.Address,
) (common.Address, *nativetokenhome.NativeTokenHome) {
opts, err := bind.NewKeyedTransactorWithChainID(
senderKey,
- subnet.EVMChainID,
+ l1.EVMChainID,
)
Expect(err).Should(BeNil())
implAddress, tx, nativeTokenHome, err := nativetokenhome.DeployNativeTokenHome(
opts,
- subnet.RPCClient,
- teleporter.TeleporterRegistryAddress(subnet),
+ l1.RPCClient,
+ teleporter.TeleporterRegistryAddress(l1),
teleporterManager,
- teleporter.GetLatestTeleporterVersion(subnet),
+ teleporter.GetLatestTeleporterVersion(l1),
tokenAddress,
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return implAddress, nativeTokenHome
}
@@ -216,21 +216,21 @@ func DeployNativeTokenHome(
func DeployWrappedNativeToken(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
tokenSymbol string,
) (common.Address, *wrappednativetoken.WrappedNativeToken) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
// Deploy mock WAVAX contract
address, tx, token, err := wrappednativetoken.DeployWrappedNativeToken(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
tokenSymbol,
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return address, token
}
@@ -238,18 +238,18 @@ func DeployWrappedNativeToken(
func DeployMockNativeSendAndCallReceiver(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
) (common.Address, *mockNSACR.MockNativeSendAndCallReceiver) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
// Deploy MockNativeSendAndCallReceiver contract
- address, tx, contract, err := mockNSACR.DeployMockNativeSendAndCallReceiver(opts, subnet.RPCClient)
+ address, tx, contract, err := mockNSACR.DeployMockNativeSendAndCallReceiver(opts, l1.RPCClient)
Expect(err).Should(BeNil())
log.Info("Deployed MockNativeSendAndCallReceiver contract", "address", address.Hex(), "txHash", tx.Hash().Hex())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return address, contract
}
@@ -257,18 +257,18 @@ func DeployMockNativeSendAndCallReceiver(
func DeployMockERC20SendAndCallReceiver(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
) (common.Address, *mockERC20SACR.MockERC20SendAndCallReceiver) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
// Deploy MockERC20SendAndCallReceiver contract
- address, tx, contract, err := mockERC20SACR.DeployMockERC20SendAndCallReceiver(opts, subnet.RPCClient)
+ address, tx, contract, err := mockERC20SACR.DeployMockERC20SendAndCallReceiver(opts, l1.RPCClient)
Expect(err).Should(BeNil())
log.Info("Deployed MockERC20SendAndCallReceiver contract", "address", address.Hex(), "txHash", tx.Hash().Hex())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return address, contract
}
@@ -276,19 +276,19 @@ func DeployMockERC20SendAndCallReceiver(
func DeployExampleERC20Decimals(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
tokenDecimals uint8,
) (common.Address, *exampleerc20.ExampleERC20Decimals) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
// Deploy Mock ERC20 contract
- address, tx, token, err := exampleerc20.DeployExampleERC20Decimals(opts, subnet.RPCClient, tokenDecimals)
+ address, tx, token, err := exampleerc20.DeployExampleERC20Decimals(opts, l1.RPCClient, tokenDecimals)
Expect(err).Should(BeNil())
log.Info("Deployed Mock ERC20 contract", "address", address.Hex(), "txHash", tx.Hash().Hex())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
// Check that the deployer has the expected initial balance
senderAddress := crypto.PubkeyToAddress(senderKey.PublicKey)
@@ -302,18 +302,18 @@ func DeployExampleERC20Decimals(
func RegisterERC20TokenRemoteOnHome(
ctx context.Context,
teleporter TeleporterTestInfo,
- homeSubnet interfaces.SubnetTestInfo,
+ homeL1 interfaces.L1TestInfo,
homeAddress common.Address,
- remoteSubnet interfaces.SubnetTestInfo,
+ remoteL1 interfaces.L1TestInfo,
remoteAddress common.Address,
fundedKey *ecdsa.PrivateKey,
) {
RegisterTokenRemoteOnHome(
ctx,
teleporter,
- homeSubnet,
+ homeL1,
homeAddress,
- remoteSubnet,
+ remoteL1,
remoteAddress,
big.NewInt(0),
big.NewInt(1),
@@ -325,9 +325,9 @@ func RegisterERC20TokenRemoteOnHome(
func RegisterTokenRemoteOnHome(
ctx context.Context,
teleporter TeleporterTestInfo,
- homeSubnet interfaces.SubnetTestInfo,
+ homeL1 interfaces.L1TestInfo,
homeAddress common.Address,
- remoteSubnet interfaces.SubnetTestInfo,
+ remoteL1 interfaces.L1TestInfo,
remoteAddress common.Address,
expectedInitialReserveBalance *big.Int,
expectedTokenMultiplier *big.Int,
@@ -337,7 +337,7 @@ func RegisterTokenRemoteOnHome(
// Call the remote to send a register message to the home
tokenRemote, err := tokenremote.NewTokenRemote(
remoteAddress,
- remoteSubnet.RPCClient,
+ remoteL1.RPCClient,
)
Expect(err).Should(BeNil())
@@ -345,7 +345,7 @@ func RegisterTokenRemoteOnHome(
feeTokenAddress, feeToken := DeployExampleERC20Decimals(
ctx,
fundedKey,
- remoteSubnet,
+ remoteL1,
18,
)
@@ -356,11 +356,11 @@ func RegisterTokenRemoteOnHome(
feeToken,
remoteAddress,
feeAmount,
- remoteSubnet,
+ remoteL1,
fundedKey,
)
- opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, remoteSubnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, remoteL1.EVMChainID)
Expect(err).Should(BeNil())
sendRegisterTx, err := tokenRemote.RegisterWithHome(
@@ -371,24 +371,24 @@ func RegisterTokenRemoteOnHome(
},
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, remoteSubnet, sendRegisterTx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, remoteL1, sendRegisterTx.Hash())
// Relay the register message to the home
- receipt = teleporter.RelayTeleporterMessage(ctx, receipt, remoteSubnet, homeSubnet, true, fundedKey)
+ receipt = teleporter.RelayTeleporterMessage(ctx, receipt, remoteL1, homeL1, true, fundedKey)
_, err = GetEventFromLogs(
receipt.Logs,
- teleporter.TeleporterMessenger(homeSubnet).ParseMessageExecuted,
+ teleporter.TeleporterMessenger(homeL1).ParseMessageExecuted,
)
if err != nil {
- TraceTransactionAndExit(ctx, homeSubnet.RPCClient, receipt.TxHash)
+ TraceTransactionAndExit(ctx, homeL1.RPCClient, receipt.TxHash)
}
// Check that the remote registered event was emitted
- tokenHome, err := tokenhome.NewTokenHome(homeAddress, homeSubnet.RPCClient)
+ tokenHome, err := tokenhome.NewTokenHome(homeAddress, homeL1.RPCClient)
Expect(err).Should(BeNil())
registerEvent, err := GetEventFromLogs(receipt.Logs, tokenHome.ParseRemoteRegistered)
Expect(err).Should(BeNil())
- Expect(registerEvent.RemoteBlockchainID[:]).Should(Equal(remoteSubnet.BlockchainID[:]))
+ Expect(registerEvent.RemoteBlockchainID[:]).Should(Equal(remoteL1.BlockchainID[:]))
Expect(registerEvent.RemoteTokenTransferrerAddress).Should(Equal(remoteAddress))
// Based on the initial reserve balance of the TokenRemote instance,
@@ -408,7 +408,7 @@ func RegisterTokenRemoteOnHome(
// is returned to the caller.
func AddCollateralToERC20TokenHome(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
erc20TokenHome *erc20tokenhome.ERC20TokenHome,
erc20TokenHomeAddress common.Address,
exampleERC20 *exampleerc20.ExampleERC20Decimals,
@@ -423,12 +423,12 @@ func AddCollateralToERC20TokenHome(
exampleERC20,
erc20TokenHomeAddress,
collateralAmount,
- subnet,
+ l1,
senderKey,
)
// Add collateral to the ERC20TokenHome
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := erc20TokenHome.AddCollateral(
opts,
@@ -437,7 +437,7 @@ func AddCollateralToERC20TokenHome(
collateralAmount,
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, erc20TokenHome.ParseCollateralAdded)
Expect(err).Should(BeNil())
Expect(event.RemoteBlockchainID[:]).Should(Equal(remoteBlockchainID[:]))
@@ -460,7 +460,7 @@ func AddCollateralToERC20TokenHome(
// is returned to the caller.
func AddCollateralToNativeTokenHome(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
nativeTokenHome *nativetokenhome.NativeTokenHome,
nativeTokenHomeAddress common.Address,
remoteBlockchainID ids.ID,
@@ -469,7 +469,7 @@ func AddCollateralToNativeTokenHome(
senderKey *ecdsa.PrivateKey,
) {
// Add collateral to the ERC20TokenHome
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
opts.Value = collateralAmount
@@ -479,7 +479,7 @@ func AddCollateralToNativeTokenHome(
remoteAddress,
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, nativeTokenHome.ParseCollateralAdded)
Expect(err).Should(BeNil())
Expect(event.RemoteBlockchainID[:]).Should(Equal(remoteBlockchainID[:]))
@@ -498,7 +498,7 @@ func AddCollateralToNativeTokenHome(
func SendERC20TokenHome(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
erc20TokenHome *erc20tokenhome.ERC20TokenHome,
erc20TokenHomeAddress common.Address,
token *exampleerc20.ExampleERC20Decimals,
@@ -512,12 +512,12 @@ func SendERC20TokenHome(
token,
erc20TokenHomeAddress,
big.NewInt(0).Add(amount, input.PrimaryFee),
- subnet,
+ l1,
senderKey,
)
// Send the tokens and verify expected events
- optsA, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ optsA, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := erc20TokenHome.Send(
optsA,
@@ -526,7 +526,7 @@ func SendERC20TokenHome(
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, erc20TokenHome.ParseTokensSent)
Expect(err).Should(BeNil())
Expect(event.Sender).Should(Equal(crypto.PubkeyToAddress(senderKey.PublicKey)))
@@ -545,7 +545,7 @@ func SendERC20TokenHome(
func SendNativeTokenHome(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
nativeTokenHome *nativetokenhome.NativeTokenHome,
nativeTokenHomeAddress common.Address,
wrappedToken *wrappednativetoken.WrappedNativeToken,
@@ -555,14 +555,14 @@ func SendNativeTokenHome(
) (*types.Receipt, *big.Int) {
DepositAndApproveWrappedTokenForFees(
ctx,
- subnet,
+ l1,
wrappedToken,
input.PrimaryFee,
nativeTokenHomeAddress,
senderKey,
)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
opts.Value = amount
@@ -572,7 +572,7 @@ func SendNativeTokenHome(
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, nativeTokenHome.ParseTokensSent)
Expect(err).Should(BeNil())
Expect(event.Sender).Should(Equal(crypto.PubkeyToAddress(senderKey.PublicKey)))
@@ -591,7 +591,7 @@ func SendNativeTokenHome(
func SendNativeTokenRemote(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
nativeTokenRemote *nativetokenremote.NativeTokenRemote,
nativeTokenRemoteAddress common.Address,
input nativetokenremote.SendTokensInput,
@@ -600,14 +600,14 @@ func SendNativeTokenRemote(
) (*types.Receipt, *big.Int) {
DepositAndApproveWrappedTokenForFees(
ctx,
- subnet,
+ l1,
nativeTokenRemote,
input.PrimaryFee,
nativeTokenRemoteAddress,
senderKey,
)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
opts.Value = amount
@@ -617,7 +617,7 @@ func SendNativeTokenRemote(
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, nativeTokenRemote.ParseTokensSent)
Expect(err).Should(BeNil())
Expect(event.Sender).Should(Equal(crypto.PubkeyToAddress(senderKey.PublicKey)))
@@ -628,14 +628,14 @@ func SendNativeTokenRemote(
func SendERC20TokenRemote(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
erc20TokenRemote *erc20tokenremote.ERC20TokenRemote,
erc20TokenRemoteAddress common.Address,
input erc20tokenremote.SendTokensInput,
amount *big.Int,
senderKey *ecdsa.PrivateKey,
) (*types.Receipt, *big.Int) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := erc20TokenRemote.Approve(
opts,
@@ -644,9 +644,9 @@ func SendERC20TokenRemote(
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
- // Transfer the tokens back to subnet A
+ // Transfer the tokens back to l1 A
tx, err = erc20TokenRemote.Send(
opts,
input,
@@ -654,7 +654,7 @@ func SendERC20TokenRemote(
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, erc20TokenRemote.ParseTokensSent)
Expect(err).Should(BeNil())
Expect(event.Sender).Should(Equal(crypto.PubkeyToAddress(senderKey.PublicKey)))
@@ -665,7 +665,7 @@ func SendERC20TokenRemote(
func SendAndCallERC20TokenHome(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
erc20TokenHome *erc20tokenhome.ERC20TokenHome,
erc20TokenHomeAddress common.Address,
exampleToken *exampleerc20.ExampleERC20Decimals,
@@ -679,12 +679,12 @@ func SendAndCallERC20TokenHome(
exampleToken,
erc20TokenHomeAddress,
big.NewInt(0).Add(amount, input.PrimaryFee),
- subnet,
+ l1,
senderKey,
)
// Send the tokens and verify expected events
- optsA, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ optsA, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := erc20TokenHome.SendAndCall(
optsA,
@@ -693,7 +693,7 @@ func SendAndCallERC20TokenHome(
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, erc20TokenHome.ParseTokensAndCallSent)
Expect(err).Should(BeNil())
Expect(event.Input.RecipientContract).Should(Equal(input.RecipientContract))
@@ -712,13 +712,13 @@ func SendAndCallERC20TokenHome(
func SendAndCallNativeTokenHome(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
nativeTokenHome *nativetokenhome.NativeTokenHome,
input nativetokenhome.SendAndCallInput,
amount *big.Int,
senderKey *ecdsa.PrivateKey,
) (*types.Receipt, *big.Int) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
opts.Value = amount
@@ -728,7 +728,7 @@ func SendAndCallNativeTokenHome(
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, nativeTokenHome.ParseTokensAndCallSent)
Expect(err).Should(BeNil())
Expect(event.Input.RecipientContract).Should(Equal(input.RecipientContract))
@@ -752,7 +752,7 @@ func SendAndCallNativeTokenHome(
func SendAndCallNativeTokenRemote(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
nativeTokenRemote *nativetokenremote.NativeTokenRemote,
input nativetokenremote.SendAndCallInput,
amount *big.Int,
@@ -760,7 +760,7 @@ func SendAndCallNativeTokenRemote(
tokenMultiplier *big.Int,
multiplyOnRemote bool,
) (*types.Receipt, *big.Int) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
opts.Value = amount
@@ -772,7 +772,7 @@ func SendAndCallNativeTokenRemote(
transferredAmount := big.NewInt(0).Sub(amount, input.PrimaryFee)
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, nativeTokenRemote.ParseTokensAndCallSent)
Expect(err).Should(BeNil())
Expect(event.Input.RecipientContract).Should(Equal(input.RecipientContract))
@@ -783,14 +783,14 @@ func SendAndCallNativeTokenRemote(
func SendAndCallERC20TokenRemote(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
erc20TokenRemote *erc20tokenremote.ERC20TokenRemote,
erc20TokenRemoteAddress common.Address,
input erc20tokenremote.SendAndCallInput,
amount *big.Int,
senderKey *ecdsa.PrivateKey,
) (*types.Receipt, *big.Int) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := erc20TokenRemote.Approve(
opts,
@@ -799,9 +799,9 @@ func SendAndCallERC20TokenRemote(
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
- // Transfer the tokens back to subnet A
+ // Transfer the tokens back to l1 A
tx, err = erc20TokenRemote.SendAndCall(
opts,
input,
@@ -809,7 +809,7 @@ func SendAndCallERC20TokenRemote(
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
event, err := GetEventFromLogs(receipt.Logs, erc20TokenRemote.ParseTokensAndCallSent)
Expect(err).Should(BeNil())
Expect(event.Input.RecipientContract).Should(Equal(input.RecipientContract))
@@ -827,18 +827,18 @@ func SendNativeMultiHopAndVerify(
teleporter TeleporterTestInfo,
sendingKey *ecdsa.PrivateKey,
recipientAddress common.Address,
- fromSubnet interfaces.SubnetTestInfo,
+ fromL1 interfaces.L1TestInfo,
fromTokenTransferrer *nativetokenremote.NativeTokenRemote,
fromTokenTransferrerAddress common.Address,
- toSubnet interfaces.SubnetTestInfo,
+ toL1 interfaces.L1TestInfo,
toTokenTransferrer *nativetokenremote.NativeTokenRemote,
toTokenTransferrerAddress common.Address,
- cChainInfo interfaces.SubnetTestInfo,
+ cChainInfo interfaces.L1TestInfo,
amount *big.Int,
secondaryFeeAmount *big.Int,
) {
input := nativetokenremote.SendTokensInput{
- DestinationBlockchainID: toSubnet.BlockchainID,
+ DestinationBlockchainID: toL1.BlockchainID,
DestinationTokenTransferrerAddress: toTokenTransferrerAddress,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: fromTokenTransferrerAddress,
@@ -851,7 +851,7 @@ func SendNativeMultiHopAndVerify(
// Send tokens through a multi-hop transfer
originReceipt, amount := SendNativeTokenRemote(
ctx,
- fromSubnet,
+ fromL1,
fromTokenTransferrer,
fromTokenTransferrerAddress,
input,
@@ -864,13 +864,13 @@ func SendNativeMultiHopAndVerify(
intermediateReceipt := teleporter.RelayTeleporterMessage(
ctx,
originReceipt,
- fromSubnet,
+ fromL1,
cChainInfo,
true,
sendingKey,
)
- initialBalance, err := toSubnet.RPCClient.BalanceAt(ctx, recipientAddress, nil)
+ initialBalance, err := toL1.RPCClient.BalanceAt(ctx, recipientAddress, nil)
Expect(err).Should(BeNil())
// When we relay the above message to the home chain, a multi-hop transfer
@@ -880,7 +880,7 @@ func SendNativeMultiHopAndVerify(
ctx,
intermediateReceipt,
cChainInfo,
- toSubnet,
+ toL1,
true,
sendingKey,
)
@@ -890,7 +890,7 @@ func SendNativeMultiHopAndVerify(
ctx,
recipientAddress,
big.NewInt(0).Add(initialBalance, transferredAmount),
- toSubnet.RPCClient,
+ toL1.RPCClient,
)
}
@@ -900,26 +900,26 @@ func SendERC20TokenMultiHopAndVerify(
fundedKey *ecdsa.PrivateKey,
sendingKey *ecdsa.PrivateKey,
recipientAddress common.Address,
- fromSubnet interfaces.SubnetTestInfo,
+ fromL1 interfaces.L1TestInfo,
fromTokenTransferrer *erc20tokenremote.ERC20TokenRemote,
fromTokenTransferrerAddress common.Address,
- toSubnet interfaces.SubnetTestInfo,
+ toL1 interfaces.L1TestInfo,
toTokenTransferrer *erc20tokenremote.ERC20TokenRemote,
toTokenTransferrerAddress common.Address,
- cChainInfo interfaces.SubnetTestInfo,
+ cChainInfo interfaces.L1TestInfo,
amount *big.Int,
secondaryFeeAmount *big.Int,
) {
// Send tokens to the sender address to have gas for submitting the send tokens transaction
SendNativeTransfer(
ctx,
- fromSubnet,
+ fromL1,
fundedKey,
crypto.PubkeyToAddress(sendingKey.PublicKey),
big.NewInt(1e18),
)
input := erc20tokenremote.SendTokensInput{
- DestinationBlockchainID: toSubnet.BlockchainID,
+ DestinationBlockchainID: toL1.BlockchainID,
DestinationTokenTransferrerAddress: toTokenTransferrerAddress,
Recipient: recipientAddress,
PrimaryFeeTokenAddress: common.Address{},
@@ -932,7 +932,7 @@ func SendERC20TokenMultiHopAndVerify(
// Send tokens through a multi-hop transfer
originReceipt, amount := SendERC20TokenRemote(
ctx,
- fromSubnet,
+ fromL1,
fromTokenTransferrer,
fromTokenTransferrerAddress,
input,
@@ -945,7 +945,7 @@ func SendERC20TokenMultiHopAndVerify(
intermediateReceipt := teleporter.RelayTeleporterMessage(
ctx,
originReceipt,
- fromSubnet,
+ fromL1,
cChainInfo,
true,
fundedKey,
@@ -968,13 +968,13 @@ func SendERC20TokenMultiHopAndVerify(
ctx,
intermediateReceipt,
cChainInfo,
- toSubnet,
+ toL1,
true,
fundedKey,
)
- _, err = GetEventFromLogs(remoteReceipt.Logs, teleporter.TeleporterMessenger(toSubnet).ParseMessageExecuted)
+ _, err = GetEventFromLogs(remoteReceipt.Logs, teleporter.TeleporterMessenger(toL1).ParseMessageExecuted)
if err != nil {
- TraceTransactionAndExit(ctx, toSubnet.RPCClient, remoteReceipt.TxHash)
+ TraceTransactionAndExit(ctx, toL1.RPCClient, remoteReceipt.TxHash)
}
transferredAmount := big.NewInt(0).Sub(amount, input.SecondaryFee)
@@ -1046,7 +1046,7 @@ type WrappedToken interface {
func DepositAndApproveWrappedTokenForFees(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
wrappedToken WrappedToken,
amount *big.Int,
spender common.Address,
@@ -1057,20 +1057,20 @@ func DepositAndApproveWrappedTokenForFees(
}
// Deposit the native tokens for paying the fee
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
opts.Value = amount
tx, err := wrappedToken.Deposit(opts)
Expect(err).Should(BeNil())
- _ = WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ _ = WaitForTransactionSuccess(ctx, l1, tx.Hash())
- opts, err = bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err = bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err = wrappedToken.Approve(opts, spender, amount)
Expect(err).Should(BeNil())
- _ = WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ _ = WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
func ERC20DecimalsApprove(
@@ -1078,14 +1078,14 @@ func ERC20DecimalsApprove(
token *exampleerc20.ExampleERC20Decimals,
spender common.Address,
amount *big.Int,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
senderKey *ecdsa.PrivateKey,
) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := token.Approve(opts, spender, amount)
Expect(err).Should(BeNil())
log.Info("Approved ERC20", "spender", spender.Hex(), "txHash", tx.Hash().Hex())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
diff --git a/tests/utils/proxy.go b/tests/utils/proxy.go
index 36b6413d3..101fc6175 100644
--- a/tests/utils/proxy.go
+++ b/tests/utils/proxy.go
@@ -15,34 +15,34 @@ import (
func DeployTransparentUpgradeableProxy[T any](
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
senderKey *ecdsa.PrivateKey,
implAddress common.Address,
newInstance func(address common.Address, backend bind.ContractBackend) (*T, error),
) (common.Address, *proxyadmin.ProxyAdmin, *T) {
opts, err := bind.NewKeyedTransactorWithChainID(
senderKey,
- subnet.EVMChainID,
+ l1.EVMChainID,
)
Expect(err).Should((BeNil()))
senderAddress := crypto.PubkeyToAddress(senderKey.PublicKey)
proxyAddress, tx, proxy, err := transparentupgradeableproxy.DeployTransparentUpgradeableProxy(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
implAddress,
senderAddress,
[]byte{},
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
proxyAdminEvent, err := GetEventFromLogs(receipt.Logs, proxy.ParseAdminChanged)
Expect(err).Should(BeNil())
- proxyAdmin, err := proxyadmin.NewProxyAdmin(proxyAdminEvent.NewAdmin, subnet.RPCClient)
+ proxyAdmin, err := proxyadmin.NewProxyAdmin(proxyAdminEvent.NewAdmin, l1.RPCClient)
Expect(err).Should(BeNil())
- contract, err := newInstance(proxyAddress, subnet.RPCClient)
+ contract, err := newInstance(proxyAddress, l1.RPCClient)
Expect(err).Should(BeNil())
return proxyAddress, proxyAdmin, contract
diff --git a/tests/utils/teleporter.go b/tests/utils/teleporter.go
index 961184f89..b68b68f77 100644
--- a/tests/utils/teleporter.go
+++ b/tests/utils/teleporter.go
@@ -44,77 +44,77 @@ type ChainTeleporterInfo struct {
type TeleporterTestInfo map[ids.ID]*ChainTeleporterInfo
-func NewTeleporterTestInfo(subnets []interfaces.SubnetTestInfo) TeleporterTestInfo {
+func NewTeleporterTestInfo(l1s []interfaces.L1TestInfo) TeleporterTestInfo {
t := make(TeleporterTestInfo)
- for _, subnet := range subnets {
- t[subnet.BlockchainID] = &ChainTeleporterInfo{}
+ for _, l1 := range l1s {
+ t[l1.BlockchainID] = &ChainTeleporterInfo{}
}
return t
}
func (t TeleporterTestInfo) TeleporterMessenger(
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
) *teleportermessenger.TeleporterMessenger {
- return t[subnet.BlockchainID].TeleporterMessenger
+ return t[l1.BlockchainID].TeleporterMessenger
}
-func (t TeleporterTestInfo) TeleporterMessengerAddress(subnet interfaces.SubnetTestInfo) common.Address {
- return t[subnet.BlockchainID].TeleporterMessengerAddress
+func (t TeleporterTestInfo) TeleporterMessengerAddress(l1 interfaces.L1TestInfo) common.Address {
+ return t[l1.BlockchainID].TeleporterMessengerAddress
}
func (t TeleporterTestInfo) TeleporterRegistry(
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
) *teleporterregistry.TeleporterRegistry {
- return t[subnet.BlockchainID].TeleporterRegistry
+ return t[l1.BlockchainID].TeleporterRegistry
}
-func (t TeleporterTestInfo) TeleporterRegistryAddress(subnet interfaces.SubnetTestInfo) common.Address {
- return t[subnet.BlockchainID].TeleporterRegistryAddress
+func (t TeleporterTestInfo) TeleporterRegistryAddress(l1 interfaces.L1TestInfo) common.Address {
+ return t[l1.BlockchainID].TeleporterRegistryAddress
}
-func (t TeleporterTestInfo) SetTeleporter(address common.Address, subnet interfaces.SubnetTestInfo) {
+func (t TeleporterTestInfo) SetTeleporter(address common.Address, l1 interfaces.L1TestInfo) {
teleporterMessenger, err := teleportermessenger.NewTeleporterMessenger(
- address, subnet.RPCClient,
+ address, l1.RPCClient,
)
Expect(err).Should(BeNil())
- info := t[subnet.BlockchainID]
+ info := t[l1.BlockchainID]
info.TeleporterMessengerAddress = address
info.TeleporterMessenger = teleporterMessenger
}
-func (t TeleporterTestInfo) InitializeBlockchainID(subnet interfaces.SubnetTestInfo, fundedKey *ecdsa.PrivateKey) {
- opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, subnet.EVMChainID)
+func (t TeleporterTestInfo) InitializeBlockchainID(l1 interfaces.L1TestInfo, fundedKey *ecdsa.PrivateKey) {
+ opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, l1.EVMChainID)
Expect(err).Should(BeNil())
- tx, err := t.TeleporterMessenger(subnet).InitializeBlockchainID(opts)
+ tx, err := t.TeleporterMessenger(l1).InitializeBlockchainID(opts)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(context.Background(), subnet, tx.Hash())
+ WaitForTransactionSuccess(context.Background(), l1, tx.Hash())
}
-func (t TeleporterTestInfo) DeployTeleporterRegistry(subnet interfaces.SubnetTestInfo, deployerKey *ecdsa.PrivateKey) {
+func (t TeleporterTestInfo) DeployTeleporterRegistry(l1 interfaces.L1TestInfo, deployerKey *ecdsa.PrivateKey) {
ctx := context.Background()
entries := []teleporterregistry.ProtocolRegistryEntry{
{
Version: big.NewInt(1),
- ProtocolAddress: t.TeleporterMessengerAddress(subnet),
+ ProtocolAddress: t.TeleporterMessengerAddress(l1),
},
}
- opts, err := bind.NewKeyedTransactorWithChainID(deployerKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(deployerKey, l1.EVMChainID)
Expect(err).Should(BeNil())
teleporterRegistryAddress, tx, teleporterRegistry, err := teleporterregistry.DeployTeleporterRegistry(
- opts, subnet.RPCClient, entries,
+ opts, l1.RPCClient, entries,
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
- info := t[subnet.BlockchainID]
+ info := t[l1.BlockchainID]
info.TeleporterRegistryAddress = teleporterRegistryAddress
info.TeleporterRegistry = teleporterRegistry
}
func (t TeleporterTestInfo) DeployTeleporterMessenger(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
transactionBytes []byte,
deployerAddress common.Address,
contractAddress common.Address,
@@ -123,16 +123,16 @@ func (t TeleporterTestInfo) DeployTeleporterMessenger(
// Fund the deployer address
fundAmount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(11)) // 11 AVAX
fundDeployerTx := CreateNativeTransferTransaction(
- ctx, subnet, fundedKey, deployerAddress, fundAmount,
+ ctx, l1, fundedKey, deployerAddress, fundAmount,
)
- SendTransactionAndWaitForSuccess(ctx, subnet, fundDeployerTx)
+ SendTransactionAndWaitForSuccess(ctx, l1, fundDeployerTx)
- log.Info("Finished funding Teleporter deployer", "blockchainID", subnet.BlockchainID.Hex())
+ log.Info("Finished funding Teleporter deployer", "blockchainID", l1.BlockchainID.Hex())
// Deploy Teleporter contract
rpcClient, err := rpc.DialContext(
ctx,
- HttpToRPCURI(subnet.NodeURIs[0], subnet.BlockchainID.String()),
+ HttpToRPCURI(l1.NodeURIs[0], l1.BlockchainID.String()),
)
Expect(err).Should(BeNil())
defer rpcClient.Close()
@@ -140,9 +140,9 @@ func (t TeleporterTestInfo) DeployTeleporterMessenger(
txHash := common.Hash{}
err = rpcClient.CallContext(ctx, &txHash, "eth_sendRawTransaction", hexutil.Encode(transactionBytes))
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, txHash)
+ WaitForTransactionSuccess(ctx, l1, txHash)
- teleporterCode, err := subnet.RPCClient.CodeAt(ctx, contractAddress, nil)
+ teleporterCode, err := l1.RPCClient.CodeAt(ctx, contractAddress, nil)
Expect(err).Should(BeNil())
Expect(len(teleporterCode)).Should(BeNumerically(">", 2)) // 0x is an EOA, contract returns the bytecode
}
@@ -150,8 +150,8 @@ func (t TeleporterTestInfo) DeployTeleporterMessenger(
func (t TeleporterTestInfo) RelayTeleporterMessage(
ctx context.Context,
sourceReceipt *types.Receipt,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
expectSuccess bool,
fundedKey *ecdsa.PrivateKey,
) *types.Receipt {
@@ -197,7 +197,7 @@ func (t TeleporterTestInfo) RelayTeleporterMessage(
func DeployNewTeleporterVersion(
ctx context.Context,
teleporterInfo TeleporterTestInfo,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
fundedKey *ecdsa.PrivateKey,
teleporterByteCodeFile string,
) common.Address {
@@ -215,7 +215,7 @@ func DeployNewTeleporterVersion(
teleporterInfo.DeployTeleporterMessenger(
ctx,
- subnet,
+ l1,
teleporterDeployerTransaction,
teleporterDeployerAddress,
teleporterContractAddress,
@@ -230,16 +230,16 @@ func DeployTestMessenger(
senderKey *ecdsa.PrivateKey,
teleporterManager common.Address,
registryAddress common.Address,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
) (common.Address, *testmessenger.TestMessenger) {
opts, err := bind.NewKeyedTransactorWithChainID(
senderKey,
- subnet.EVMChainID,
+ l1.EVMChainID,
)
Expect(err).Should(BeNil())
address, tx, exampleMessenger, err := testmessenger.DeployTestMessenger(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
registryAddress,
teleporterManager,
big.NewInt(1),
@@ -247,7 +247,7 @@ func DeployTestMessenger(
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return address, exampleMessenger
}
@@ -273,8 +273,8 @@ func ParseTeleporterMessage(unsignedMessage avalancheWarp.UnsignedMessage) *tele
func SendAddFeeAmountAndWaitForAcceptance(
ctx context.Context,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
messageID ids.ID,
amount *big.Int,
feeContractAddress common.Address,
@@ -309,23 +309,23 @@ func RetryMessageExecutionAndWaitForAcceptance(
ctx context.Context,
sourceBlockchainID ids.ID,
destinationTeleporterMessenger *teleportermessenger.TeleporterMessenger,
- destinationSubnet interfaces.SubnetTestInfo,
+ destinationL1 interfaces.L1TestInfo,
message teleportermessenger.TeleporterMessage,
senderKey *ecdsa.PrivateKey,
) *types.Receipt {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, destinationSubnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, destinationL1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := destinationTeleporterMessenger.RetryMessageExecution(opts, sourceBlockchainID, message)
Expect(err).Should(BeNil())
- return WaitForTransactionSuccess(ctx, destinationSubnet, tx.Hash())
+ return WaitForTransactionSuccess(ctx, destinationL1, tx.Hash())
}
func RedeemRelayerRewardsAndConfirm(
ctx context.Context,
teleporterMessenger *teleportermessenger.TeleporterMessenger,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
feeToken *exampleerc20.ExampleERC20,
feeTokenAddress common.Address,
redeemerKey *ecdsa.PrivateKey,
@@ -341,14 +341,14 @@ func RedeemRelayerRewardsAndConfirm(
// Redeem the rewards
txOpts, err := bind.NewKeyedTransactorWithChainID(
- redeemerKey, subnet.EVMChainID,
+ redeemerKey, l1.EVMChainID,
)
Expect(err).Should(BeNil())
tx, err := teleporterMessenger.RedeemRelayerRewards(
txOpts, feeTokenAddress,
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
// Check that the ERC20 balance was incremented
balanceAfterRedemption, err := feeToken.BalanceOf(
@@ -378,7 +378,7 @@ func RedeemRelayerRewardsAndConfirm(
func SendSpecifiedReceiptsAndWaitForAcceptance(
ctx context.Context,
sourceTeleporterMessenger *teleportermessenger.TeleporterMessenger,
- source interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
destinationBlockchainID ids.ID,
messageIDs [][32]byte,
feeInfo teleportermessenger.TeleporterFeeInfo,
@@ -409,12 +409,12 @@ func SendSpecifiedReceiptsAndWaitForAcceptance(
func AddProtocolVersionAndWaitForAcceptance(
ctx context.Context,
sourceTeleporterInfo ChainTeleporterInfo,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
newTeleporterAddress common.Address,
senderKey *ecdsa.PrivateKey,
unsignedMessage *avalancheWarp.UnsignedMessage,
) {
- signedWarpMsg := GetSignedMessage(ctx, subnet, subnet, unsignedMessage.ID())
+ signedWarpMsg := GetSignedMessage(ctx, l1, l1, unsignedMessage.ID())
log.Info("Got signed warp message", "messageID", signedWarpMsg.ID())
// Construct tx to add protocol version and send to destination chain
@@ -423,7 +423,7 @@ func AddProtocolVersionAndWaitForAcceptance(
signedWarpMsg,
sourceTeleporterInfo.TeleporterRegistryAddress,
senderKey,
- subnet,
+ l1,
)
curLatestVersion, err := sourceTeleporterInfo.TeleporterRegistry.LatestVersion(&bind.CallOpts{})
@@ -431,7 +431,7 @@ func AddProtocolVersionAndWaitForAcceptance(
expectedLatestVersion := big.NewInt(curLatestVersion.Int64() + 1)
// Wait for tx to be accepted, and verify events emitted
- receipt := SendTransactionAndWaitForSuccess(ctx, subnet, signedTx)
+ receipt := SendTransactionAndWaitForSuccess(ctx, l1, signedTx)
addProtocolVersionEvent, err := GetEventFromLogs(
receipt.Logs,
sourceTeleporterInfo.TeleporterRegistry.ParseAddProtocolVersion,
@@ -449,8 +449,8 @@ func AddProtocolVersionAndWaitForAcceptance(
Expect(versionUpdatedEvent.NewVersion.Cmp(expectedLatestVersion)).Should(Equal(0))
}
-func (t TeleporterTestInfo) GetLatestTeleporterVersion(subnet interfaces.SubnetTestInfo) *big.Int {
- version, err := t.TeleporterRegistry(subnet).LatestVersion(&bind.CallOpts{})
+func (t TeleporterTestInfo) GetLatestTeleporterVersion(l1 interfaces.L1TestInfo) *big.Int {
+ version, err := t.TeleporterRegistry(l1).LatestVersion(&bind.CallOpts{})
Expect(err).Should(BeNil())
return version
}
@@ -458,8 +458,8 @@ func (t TeleporterTestInfo) GetLatestTeleporterVersion(subnet interfaces.SubnetT
func SendCrossChainMessageAndWaitForAcceptance(
ctx context.Context,
sourceTeleporterMessenger *teleportermessenger.TeleporterMessenger,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
input teleportermessenger.TeleporterMessageInput,
senderKey *ecdsa.PrivateKey,
) (*types.Receipt, ids.ID) {
@@ -503,8 +503,8 @@ func CheckReceiptReceived(
func ClearReceiptQueue(
ctx context.Context,
teleporterInfo TeleporterTestInfo,
- source interfaces.SubnetTestInfo,
- destination interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
+ destination interfaces.L1TestInfo,
fundedKey *ecdsa.PrivateKey,
) {
outstandReceiptCount := GetOutstandingReceiptCount(
@@ -513,9 +513,9 @@ func ClearReceiptQueue(
)
for outstandReceiptCount.Cmp(big.NewInt(0)) != 0 {
log.Info("Emptying receipt queue", "remainingReceipts", outstandReceiptCount.String())
- // Send message from Subnet B to Subnet A to trigger the "regular" method of delivering receipts.
+ // Send message from L1 B to L1 A to trigger the "regular" method of delivering receipts.
// The next message from B->A will contain the same receipts that were manually sent in the above steps,
- // but they should not be processed again on Subnet A.
+ // but they should not be processed again on L1 A.
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
DestinationBlockchainID: destination.BlockchainID,
DestinationAddress: common.HexToAddress("0x1111111111111111111111111111111111111111"),
@@ -555,16 +555,16 @@ func GetOutstandingReceiptCount(
func SendExampleCrossChainMessageAndVerify(
ctx context.Context,
teleporterInfo TeleporterTestInfo,
- source interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
sourceExampleMessenger *testmessenger.TestMessenger,
- destination interfaces.SubnetTestInfo,
+ destination interfaces.L1TestInfo,
destExampleMessengerAddress common.Address,
destExampleMessenger *testmessenger.TestMessenger,
senderKey *ecdsa.PrivateKey,
message string,
expectSuccess bool,
) {
- // Call the example messenger contract on Subnet A
+ // Call the example messenger contract on L1 A
optsA, err := bind.NewKeyedTransactorWithChainID(senderKey, source.EVMChainID)
Expect(err).Should(BeNil())
tx, err := sourceExampleMessenger.SendMessage(
@@ -639,7 +639,7 @@ func SendExampleCrossChainMessageAndVerify(
// Returns the signed transaction.
func CreateSendCrossChainMessageTransaction(
ctx context.Context,
- source interfaces.SubnetTestInfo,
+ source interfaces.L1TestInfo,
input teleportermessenger.TeleporterMessageInput,
senderKey *ecdsa.PrivateKey,
teleporterContractAddress common.Address,
@@ -672,7 +672,7 @@ func CreateReceiveCrossChainMessageTransaction(
requiredGasLimit *big.Int,
teleporterContractAddress common.Address,
senderKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
) *types.Transaction {
// Construct the transaction to send the Warp message to the destination chain
log.Info("Constructing receiveCrossChainMessage transaction for the destination chain")
@@ -692,10 +692,10 @@ func CreateReceiveCrossChainMessageTransaction(
callData, err := teleportermessenger.PackReceiveCrossChainMessage(0, PrivateKeyToAddress(senderKey))
Expect(err).Should(BeNil())
- gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, subnetInfo, PrivateKeyToAddress(senderKey))
+ gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, l1Info, PrivateKeyToAddress(senderKey))
destinationTx := predicateutils.NewPredicateTx(
- subnetInfo.EVMChainID,
+ l1Info.EVMChainID,
nonce,
&teleporterContractAddress,
gasLimit,
@@ -708,7 +708,7 @@ func CreateReceiveCrossChainMessageTransaction(
signedMessage.Bytes(),
)
- return SignTransaction(destinationTx, senderKey, subnetInfo.EVMChainID)
+ return SignTransaction(destinationTx, senderKey, l1Info.EVMChainID)
}
// Constructs a transaction to call addProtocolVersion
@@ -718,7 +718,7 @@ func CreateAddProtocolVersionTransaction(
signedMessage *avalancheWarp.Message,
teleporterRegistryAddress common.Address,
senderKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
) *types.Transaction {
// Construct the transaction to send the Warp message to the destination chain
log.Info("Constructing addProtocolVersion transaction for the destination chain")
@@ -726,10 +726,10 @@ func CreateAddProtocolVersionTransaction(
callData, err := teleporterregistry.PackAddProtocolVersion(0)
Expect(err).Should(BeNil())
- gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, subnetInfo, PrivateKeyToAddress(senderKey))
+ gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, l1Info, PrivateKeyToAddress(senderKey))
destinationTx := predicateutils.NewPredicateTx(
- subnetInfo.EVMChainID,
+ l1Info.EVMChainID,
nonce,
&teleporterRegistryAddress,
500_000,
@@ -742,7 +742,7 @@ func CreateAddProtocolVersionTransaction(
signedMessage.Bytes(),
)
- return SignTransaction(destinationTx, senderKey, subnetInfo.EVMChainID)
+ return SignTransaction(destinationTx, senderKey, l1Info.EVMChainID)
}
func CreateExecuteCallPredicateTransaction(
@@ -750,17 +750,17 @@ func CreateExecuteCallPredicateTransaction(
signedMessage *avalancheWarp.Message,
validatorSetSigAddress common.Address,
senderKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
) *types.Transaction {
log.Info("Constructing executeCall transaction for the destination chain")
callData, err := validatorsetsig.PackExecuteCall(0)
Expect(err).Should(BeNil())
- gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, subnetInfo, PrivateKeyToAddress(senderKey))
+ gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, l1Info, PrivateKeyToAddress(senderKey))
destinationTx := predicateutils.NewPredicateTx(
- subnetInfo.EVMChainID,
+ l1Info.EVMChainID,
nonce,
&validatorSetSigAddress,
500_000,
@@ -772,7 +772,7 @@ func CreateExecuteCallPredicateTransaction(
warp.ContractAddress,
signedMessage.Bytes(),
)
- return SignTransaction(destinationTx, senderKey, subnetInfo.EVMChainID)
+ return SignTransaction(destinationTx, senderKey, l1Info.EVMChainID)
}
//
@@ -784,14 +784,14 @@ func CreateExecuteCallPredicateTransaction(
// off-chain Warp messages
func InitOffChainMessageChainConfig(
networkID uint32,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
registryAddress common.Address,
teleporterAddress common.Address,
version uint64,
) (*avalancheWarp.UnsignedMessage, string) {
unsignedMessage := CreateOffChainRegistryMessage(
networkID,
- subnet,
+ l1,
registryAddress,
teleporterregistry.ProtocolRegistryEntry{
Version: big.NewInt(int64(version)),
@@ -800,7 +800,7 @@ func InitOffChainMessageChainConfig(
)
log.Info("Adding off-chain message to Warp chain config",
"messageID", unsignedMessage.ID(),
- "blockchainID", subnet.BlockchainID.String(),
+ "blockchainID", l1.BlockchainID.String(),
)
return unsignedMessage, GetChainConfigWithOffChainMessages([]avalancheWarp.UnsignedMessage{*unsignedMessage})
@@ -809,7 +809,7 @@ func InitOffChainMessageChainConfig(
// Creates an off-chain Warp message that registers a Teleporter protocol version with TeleporterRegistry
func CreateOffChainRegistryMessage(
networkID uint32,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
registryAddress common.Address,
entry teleporterregistry.ProtocolRegistryEntry,
) *avalancheWarp.UnsignedMessage {
@@ -822,7 +822,7 @@ func CreateOffChainRegistryMessage(
unsignedMessage, err := avalancheWarp.NewUnsignedMessage(
networkID,
- subnet.BlockchainID,
+ l1.BlockchainID,
addressedPayload.Bytes(),
)
Expect(err).Should(BeNil())
diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go
index 648488f8e..dd031e004 100644
--- a/tests/utils/validator_manager.go
+++ b/tests/utils/validator_manager.go
@@ -63,23 +63,23 @@ const (
func DeployNativeTokenStakingManager(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
) (common.Address, *nativetokenstakingmanager.NativeTokenStakingManager) {
// Reset the global binary data for better test isolation
nativetokenstakingmanager.NativeTokenStakingManagerBin =
nativetokenstakingmanager.NativeTokenStakingManagerMetaData.Bin
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
address, tx, stakingManager, err := nativetokenstakingmanager.DeployNativeTokenStakingManager(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
0, // ICMInitializable.Allowed
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return address, stakingManager
}
@@ -87,27 +87,27 @@ func DeployNativeTokenStakingManager(
func DeployAndInitializeNativeTokenStakingManager(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
) (common.Address, *nativetokenstakingmanager.NativeTokenStakingManager) {
stakingManagerContractAddress, stakingManager := DeployNativeTokenStakingManager(
ctx,
senderKey,
- subnet,
+ l1,
)
rewardCalculatorAddress, _ := DeployExampleRewardCalculator(
ctx,
senderKey,
- subnet,
+ l1,
uint64(10),
)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.Initialize(
opts,
nativetokenstakingmanager.PoSValidatorManagerSettings{
BaseSettings: nativetokenstakingmanager.ValidatorManagerSettings{
- SubnetID: subnet.SubnetID,
+ L1ID: l1.L1ID,
ChurnPeriodSeconds: DefaultChurnPeriodSeconds,
MaximumChurnPercentage: DefaultMaxChurnPercentage,
},
@@ -121,7 +121,7 @@ func DeployAndInitializeNativeTokenStakingManager(
},
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return stakingManagerContractAddress, stakingManager
}
@@ -129,23 +129,23 @@ func DeployAndInitializeNativeTokenStakingManager(
func DeployERC20TokenStakingManager(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
) (common.Address, *erc20tokenstakingmanager.ERC20TokenStakingManager) {
// Reset the global binary data for better test isolation
erc20tokenstakingmanager.ERC20TokenStakingManagerBin =
erc20tokenstakingmanager.ERC20TokenStakingManagerMetaData.Bin
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
address, tx, stakingManager, err := erc20tokenstakingmanager.DeployERC20TokenStakingManager(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
0, // ICMInitializable.Allowed
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return address, stakingManager
}
@@ -153,8 +153,8 @@ func DeployERC20TokenStakingManager(
func DeployAndInitializeERC20TokenStakingManager(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
) (
common.Address,
*erc20tokenstakingmanager.ERC20TokenStakingManager,
@@ -164,23 +164,23 @@ func DeployAndInitializeERC20TokenStakingManager(
stakingManagerContractAddress, stakingManager := DeployERC20TokenStakingManager(
ctx,
senderKey,
- subnet,
+ l1,
)
- erc20Address, erc20 := DeployExampleERC20(ctx, senderKey, subnet)
+ erc20Address, erc20 := DeployExampleERC20(ctx, senderKey, l1)
rewardCalculatorAddress, _ := DeployExampleRewardCalculator(
ctx,
senderKey,
- subnet,
+ l1,
uint64(10),
)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.Initialize(
opts,
erc20tokenstakingmanager.PoSValidatorManagerSettings{
BaseSettings: erc20tokenstakingmanager.ValidatorManagerSettings{
- SubnetID: subnet.SubnetID,
+ L1ID: l1.L1ID,
ChurnPeriodSeconds: DefaultChurnPeriodSeconds,
MaximumChurnPercentage: DefaultMaxChurnPercentage,
},
@@ -195,7 +195,7 @@ func DeployAndInitializeERC20TokenStakingManager(
erc20Address,
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return stakingManagerContractAddress, stakingManager, erc20Address, erc20
}
@@ -203,22 +203,22 @@ func DeployAndInitializeERC20TokenStakingManager(
func DeployPoAValidatorManager(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
) (common.Address, *poavalidatormanager.PoAValidatorManager) {
// Reset the global binary data for better test isolation
poavalidatormanager.PoAValidatorManagerBin = poavalidatormanager.PoAValidatorManagerMetaData.Bin
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
address, tx, validatorManager, err := poavalidatormanager.DeployPoAValidatorManager(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
0, // ICMInitializable.Allowed
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return address, validatorManager
}
@@ -226,28 +226,28 @@ func DeployPoAValidatorManager(
func DeployAndInitializePoAValidatorManager(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
ownerAddress common.Address,
) (common.Address, *poavalidatormanager.PoAValidatorManager) {
validatorManagerAddress, validatorManager := DeployPoAValidatorManager(
ctx,
senderKey,
- subnet,
+ l1,
)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := validatorManager.Initialize(
opts,
poavalidatormanager.ValidatorManagerSettings{
- SubnetID: subnet.SubnetID,
+ L1ID: l1.L1ID,
ChurnPeriodSeconds: uint64(0),
MaximumChurnPercentage: uint8(20),
},
ownerAddress,
)
Expect(err).Should(BeNil())
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return validatorManagerAddress, validatorManager
}
@@ -255,20 +255,20 @@ func DeployAndInitializePoAValidatorManager(
func DeployExampleRewardCalculator(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
rewardBasisPoints uint64,
) (common.Address, *examplerewardcalculator.ExampleRewardCalculator) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
address, tx, calculator, err := examplerewardcalculator.DeployExampleRewardCalculator(
opts,
- subnet.RPCClient,
+ l1.RPCClient,
rewardBasisPoints,
)
Expect(err).Should(BeNil())
// Wait for the transaction to be mined
- WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ WaitForTransactionSuccess(ctx, l1, tx.Hash())
return address, calculator
}
@@ -280,8 +280,8 @@ func DeployExampleRewardCalculator(
func InitializeNativeTokenValidatorSet(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
validatorManager *nativetokenstakingmanager.NativeTokenStakingManager,
validatorManagerAddress common.Address,
networkID uint32,
@@ -303,35 +303,35 @@ func InitializeNativeTokenValidatorSet(
}
}
- subnetConversionData := warpMessage.SubnetConversionData{
- SubnetID: subnetInfo.SubnetID,
- ManagerChainID: subnetInfo.BlockchainID,
+ l1ConversionData := warpMessage.SubnetConversionData{
+ SubnetID: l1Info.L1ID,
+ ManagerChainID: l1Info.BlockchainID,
ManagerAddress: validatorManagerAddress[:],
Validators: initialValidators,
}
- subnetConversionDataABI := nativetokenstakingmanager.ConversionData{
- SubnetID: subnetInfo.SubnetID,
- ValidatorManagerBlockchainID: subnetInfo.BlockchainID,
+ l1ConversionDataABI := nativetokenstakingmanager.ConversionData{
+ L1ID: l1Info.L1ID,
+ ValidatorManagerBlockchainID: l1Info.BlockchainID,
ValidatorManagerAddress: validatorManagerAddress,
InitialValidators: initialValidatorsABI,
}
- subnetConversionID, err := warpMessage.SubnetConversionID(subnetConversionData)
+ l1ConversionID, err := warpMessage.SubnetConversionID(l1ConversionData)
Expect(err).Should(BeNil())
- subnetConversionSignedMessage := ConstructSubnetConversionMessage(
- subnetConversionID,
- subnetInfo,
+ l1ConversionSignedMessage := ConstructSubnetConversionMessage(
+ l1ConversionID,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt := DeliverNativeTokenSubnetConversion(
ctx,
senderKey,
- subnetInfo,
+ l1Info,
validatorManagerAddress,
- subnetConversionSignedMessage,
- subnetConversionDataABI,
+ l1ConversionSignedMessage,
+ l1ConversionDataABI,
)
initialValidatorCreatedEvent, err := GetEventFromLogs(
receipt.Logs,
@@ -340,7 +340,7 @@ func InitializeNativeTokenValidatorSet(
Expect(err).Should(BeNil())
var validationIDs []ids.ID
for i := range nodes {
- validationIDs = append(validationIDs, subnetInfo.SubnetID.Append(uint32(i)))
+ validationIDs = append(validationIDs, l1Info.L1ID.Append(uint32(i)))
}
Expect(initialValidatorCreatedEvent.Weight).Should(Equal(new(big.Int).SetUint64(nodes[0].Weight)))
@@ -354,8 +354,8 @@ func InitializeNativeTokenValidatorSet(
func InitializeERC20TokenValidatorSet(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
validatorManager *erc20tokenstakingmanager.ERC20TokenStakingManager,
validatorManagerAddress common.Address,
networkID uint32,
@@ -377,36 +377,36 @@ func InitializeERC20TokenValidatorSet(
}
}
- subnetConversionData := warpMessage.SubnetConversionData{
- SubnetID: subnetInfo.SubnetID,
- ManagerChainID: subnetInfo.BlockchainID,
+ l1ConversionData := warpMessage.SubnetConversionData{
+ SubnetID: l1Info.L1ID,
+ ManagerChainID: l1Info.BlockchainID,
ManagerAddress: validatorManagerAddress[:],
Validators: initialValidators,
}
- subnetConversionDataABI := erc20tokenstakingmanager.ConversionData{
- SubnetID: subnetInfo.SubnetID,
- ValidatorManagerBlockchainID: subnetInfo.BlockchainID,
+ l1ConversionDataABI := erc20tokenstakingmanager.ConversionData{
+ L1ID: l1Info.L1ID,
+ ValidatorManagerBlockchainID: l1Info.BlockchainID,
ValidatorManagerAddress: validatorManagerAddress,
InitialValidators: initialValidatorsABI,
}
- subnetConversionID, err := warpMessage.SubnetConversionID(subnetConversionData)
+ l1ConversionID, err := warpMessage.SubnetConversionID(l1ConversionData)
Expect(err).Should(BeNil())
- subnetConversionSignedMessage := ConstructSubnetConversionMessage(
- subnetConversionID,
- subnetInfo,
+ l1ConversionSignedMessage := ConstructSubnetConversionMessage(
+ l1ConversionID,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt := DeliverERC20TokenSubnetConversion(
ctx,
senderKey,
- subnetInfo,
+ l1Info,
validatorManagerAddress,
- subnetConversionSignedMessage,
- subnetConversionDataABI,
+ l1ConversionSignedMessage,
+ l1ConversionDataABI,
)
initialValidatorCreatedEvent, err := GetEventFromLogs(
receipt.Logs,
@@ -415,7 +415,7 @@ func InitializeERC20TokenValidatorSet(
Expect(err).Should(BeNil())
var validationIDs []ids.ID
for i := range nodes {
- validationIDs = append(validationIDs, subnetInfo.SubnetID.Append(uint32(i)))
+ validationIDs = append(validationIDs, l1Info.L1ID.Append(uint32(i)))
}
Expect(initialValidatorCreatedEvent.Weight).Should(Equal(new(big.Int).SetUint64(nodes[0].Weight)))
@@ -429,8 +429,8 @@ func InitializeERC20TokenValidatorSet(
func InitializePoAValidatorSet(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
validatorManager *poavalidatormanager.PoAValidatorManager,
validatorManagerAddress common.Address,
networkID uint32,
@@ -452,35 +452,35 @@ func InitializePoAValidatorSet(
}
}
- subnetConversionData := warpMessage.SubnetConversionData{
- SubnetID: subnetInfo.SubnetID,
- ManagerChainID: subnetInfo.BlockchainID,
+ l1ConversionData := warpMessage.SubnetConversionData{
+ SubnetID: l1Info.L1ID,
+ ManagerChainID: l1Info.BlockchainID,
ManagerAddress: validatorManagerAddress[:],
Validators: initialValidators,
}
- subnetConversionDataABI := poavalidatormanager.ConversionData{
- SubnetID: subnetInfo.SubnetID,
- ValidatorManagerBlockchainID: subnetInfo.BlockchainID,
+ l1ConversionDataABI := poavalidatormanager.ConversionData{
+ L1ID: l1Info.L1ID,
+ ValidatorManagerBlockchainID: l1Info.BlockchainID,
ValidatorManagerAddress: validatorManagerAddress,
InitialValidators: initialValidatorsABI,
}
- subnetConversionID, err := warpMessage.SubnetConversionID(subnetConversionData)
+ l1ConversionID, err := warpMessage.SubnetConversionID(l1ConversionData)
Expect(err).Should(BeNil())
- subnetConversionSignedMessage := ConstructSubnetConversionMessage(
- subnetConversionID,
- subnetInfo,
+ l1ConversionSignedMessage := ConstructSubnetConversionMessage(
+ l1ConversionID,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt := DeliverPoASubnetConversion(
ctx,
senderKey,
- subnetInfo,
+ l1Info,
validatorManagerAddress,
- subnetConversionSignedMessage,
- subnetConversionDataABI,
+ l1ConversionSignedMessage,
+ l1ConversionDataABI,
)
initialValidatorCreatedEvent, err := GetEventFromLogs(
receipt.Logs,
@@ -489,7 +489,7 @@ func InitializePoAValidatorSet(
Expect(err).Should(BeNil())
var validationIDs []ids.ID
for i := range nodes {
- validationIDs = append(validationIDs, subnetInfo.SubnetID.Append(uint32(i)))
+ validationIDs = append(validationIDs, l1Info.L1ID.Append(uint32(i)))
}
Expect(initialValidatorCreatedEvent.Weight).Should(Equal(new(big.Int).SetUint64(nodes[0].Weight)))
@@ -503,66 +503,66 @@ func InitializePoAValidatorSet(
func DeliverNativeTokenSubnetConversion(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validatorManagerAddress common.Address,
- subnetConversionSignedMessage *avalancheWarp.Message,
- subnetConversionData nativetokenstakingmanager.ConversionData,
+ l1ConversionSignedMessage *avalancheWarp.Message,
+ l1ConversionData nativetokenstakingmanager.ConversionData,
) *types.Receipt {
abi, err := nativetokenstakingmanager.NativeTokenStakingManagerMetaData.GetAbi()
Expect(err).Should(BeNil())
- callData, err := abi.Pack("initializeValidatorSet", subnetConversionData, uint32(0))
+ callData, err := abi.Pack("initializeValidatorSet", l1ConversionData, uint32(0))
Expect(err).Should(BeNil())
return CallWarpReceiver(
ctx,
callData,
senderKey,
- subnet,
+ l1,
validatorManagerAddress,
- subnetConversionSignedMessage,
+ l1ConversionSignedMessage,
)
}
func DeliverERC20TokenSubnetConversion(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validatorManagerAddress common.Address,
- subnetConversionSignedMessage *avalancheWarp.Message,
- subnetConversionData erc20tokenstakingmanager.ConversionData,
+ l1ConversionSignedMessage *avalancheWarp.Message,
+ l1ConversionData erc20tokenstakingmanager.ConversionData,
) *types.Receipt {
abi, err := erc20tokenstakingmanager.ERC20TokenStakingManagerMetaData.GetAbi()
Expect(err).Should(BeNil())
- callData, err := abi.Pack("initializeValidatorSet", subnetConversionData, uint32(0))
+ callData, err := abi.Pack("initializeValidatorSet", l1ConversionData, uint32(0))
Expect(err).Should(BeNil())
return CallWarpReceiver(
ctx,
callData,
senderKey,
- subnet,
+ l1,
validatorManagerAddress,
- subnetConversionSignedMessage,
+ l1ConversionSignedMessage,
)
}
func DeliverPoASubnetConversion(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validatorManagerAddress common.Address,
- subnetConversionSignedMessage *avalancheWarp.Message,
- subnetConversionData poavalidatormanager.ConversionData,
+ l1ConversionSignedMessage *avalancheWarp.Message,
+ l1ConversionData poavalidatormanager.ConversionData,
) *types.Receipt {
abi, err := poavalidatormanager.PoAValidatorManagerMetaData.GetAbi()
Expect(err).Should(BeNil())
- callData, err := abi.Pack("initializeValidatorSet", subnetConversionData, uint32(0))
+ callData, err := abi.Pack("initializeValidatorSet", l1ConversionData, uint32(0))
Expect(err).Should(BeNil())
return CallWarpReceiver(
ctx,
callData,
senderKey,
- subnet,
+ l1,
validatorManagerAddress,
- subnetConversionSignedMessage,
+ l1ConversionSignedMessage,
)
}
@@ -573,13 +573,13 @@ func DeliverPoASubnetConversion(
func InitializeNativeValidatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakeAmount *big.Int,
node Node,
expiry uint64,
stakingManager *nativetokenstakingmanager.NativeTokenStakingManager,
) (*types.Receipt, ids.ID) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
opts.Value = stakeAmount
@@ -594,7 +594,7 @@ func InitializeNativeValidatorRegistration(
DefaultMinStakeDurationSeconds,
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
registrationInitiatedEvent, err := GetEventFromLogs(
receipt.Logs,
stakingManager.ParseValidationPeriodCreated,
@@ -606,7 +606,7 @@ func InitializeNativeValidatorRegistration(
func InitializeERC20ValidatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakeAmount *big.Int,
token *exampleerc20.ExampleERC20,
stakingManagerAddress common.Address,
@@ -619,11 +619,11 @@ func InitializeERC20ValidatorRegistration(
token,
stakingManagerAddress,
stakeAmount,
- subnet,
+ l1,
senderKey,
)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.InitializeValidatorRegistration(
@@ -638,7 +638,7 @@ func InitializeERC20ValidatorRegistration(
stakeAmount,
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
registrationInitiatedEvent, err := GetEventFromLogs(
receipt.Logs,
stakingManager.ParseValidationPeriodCreated,
@@ -650,12 +650,12 @@ func InitializeERC20ValidatorRegistration(
func InitializePoAValidatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
node Node,
expiry uint64,
validatorManager *poavalidatormanager.PoAValidatorManager,
) (*types.Receipt, ids.ID) {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := validatorManager.InitializeValidatorRegistration(
@@ -668,7 +668,7 @@ func InitializePoAValidatorRegistration(
node.Weight,
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
registrationInitiatedEvent, err := GetEventFromLogs(
receipt.Logs,
validatorManager.ParseValidationPeriodCreated,
@@ -680,7 +680,7 @@ func InitializePoAValidatorRegistration(
func CompleteNativeValidatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManagerContractAddress common.Address,
registrationSignedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -692,7 +692,7 @@ func CompleteNativeValidatorRegistration(
ctx,
callData,
senderKey,
- subnet,
+ l1,
stakingManagerContractAddress,
registrationSignedMessage,
)
@@ -701,7 +701,7 @@ func CompleteNativeValidatorRegistration(
func CompleteERC20ValidatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManagerContractAddress common.Address,
registrationSignedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -713,7 +713,7 @@ func CompleteERC20ValidatorRegistration(
ctx,
callData,
senderKey,
- subnet,
+ l1,
stakingManagerContractAddress,
registrationSignedMessage,
)
@@ -722,7 +722,7 @@ func CompleteERC20ValidatorRegistration(
func CompletePoAValidatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validatorManagerAddress common.Address,
registrationSignedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -734,7 +734,7 @@ func CompletePoAValidatorRegistration(
ctx,
callData,
senderKey,
- subnet,
+ l1,
validatorManagerAddress,
registrationSignedMessage,
)
@@ -745,13 +745,13 @@ func CallWarpReceiver(
ctx context.Context,
callData []byte,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
contract common.Address,
signedMessage *avalancheWarp.Message,
) *types.Receipt {
- gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, subnet, PrivateKeyToAddress(senderKey))
+ gasFeeCap, gasTipCap, nonce := CalculateTxParams(ctx, l1, PrivateKeyToAddress(senderKey))
registrationTx := predicateutils.NewPredicateTx(
- subnet.EVMChainID,
+ l1.EVMChainID,
nonce,
&contract,
2_000_000,
@@ -763,16 +763,16 @@ func CallWarpReceiver(
warp.ContractAddress,
signedMessage.Bytes(),
)
- signedRegistrationTx := SignTransaction(registrationTx, senderKey, subnet.EVMChainID)
- return SendTransactionAndWaitForSuccess(ctx, subnet, signedRegistrationTx)
+ signedRegistrationTx := SignTransaction(registrationTx, senderKey, l1.EVMChainID)
+ return SendTransactionAndWaitForSuccess(ctx, l1, signedRegistrationTx)
}
func InitializeAndCompleteNativeValidatorRegistration(
ctx context.Context,
signatureAggregator *aggregator.SignatureAggregator,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
stakingManager *nativetokenstakingmanager.NativeTokenStakingManager,
stakingManagerContractAddress common.Address,
expiry uint64,
@@ -789,7 +789,7 @@ func InitializeAndCompleteNativeValidatorRegistration(
receipt, validationID := InitializeNativeValidatorRegistration(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakeAmount,
node,
expiry,
@@ -798,7 +798,7 @@ func InitializeAndCompleteNativeValidatorRegistration(
// Gather subnet-evm Warp signatures for the RegisterSubnetValidatorMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
- signedWarpMessage := ConstructSignedWarpMessage(ctx, receipt, subnetInfo, pChainInfo)
+ signedWarpMessage := ConstructSignedWarpMessage(ctx, receipt, l1Info, pChainInfo)
_, err = pchainWallet.IssueRegisterSubnetValidatorTx(
100*units.Avax,
@@ -807,7 +807,7 @@ func InitializeAndCompleteNativeValidatorRegistration(
)
Expect(err).Should(BeNil())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
// Construct a SubnetValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator registration")
@@ -816,17 +816,17 @@ func InitializeAndCompleteNativeValidatorRegistration(
expiry,
node,
true,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompleteNativeValidatorRegistration(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManagerContractAddress,
registrationSignedMessage,
)
@@ -845,8 +845,8 @@ func InitializeAndCompleteERC20ValidatorRegistration(
ctx context.Context,
signatureAggregator *aggregator.SignatureAggregator,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
stakingManager *erc20tokenstakingmanager.ERC20TokenStakingManager,
stakingManagerAddress common.Address,
erc20 *exampleerc20.ExampleERC20,
@@ -866,7 +866,7 @@ func InitializeAndCompleteERC20ValidatorRegistration(
receipt, validationID := InitializeERC20ValidatorRegistration(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakeAmount,
erc20,
stakingManagerAddress,
@@ -876,7 +876,7 @@ func InitializeAndCompleteERC20ValidatorRegistration(
)
// Gather subnet-evm Warp signatures for the RegisterSubnetValidatorMessage & relay to the P-Chain
- signedWarpMessage := ConstructSignedWarpMessage(ctx, receipt, subnetInfo, pChainInfo)
+ signedWarpMessage := ConstructSignedWarpMessage(ctx, receipt, l1Info, pChainInfo)
_, err = pchainWallet.IssueRegisterSubnetValidatorTx(
100*units.Avax,
@@ -885,7 +885,7 @@ func InitializeAndCompleteERC20ValidatorRegistration(
)
Expect(err).Should(BeNil())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
// Construct a SubnetValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator registration")
@@ -894,17 +894,17 @@ func InitializeAndCompleteERC20ValidatorRegistration(
expiry,
node,
true,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompleteERC20ValidatorRegistration(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManagerAddress,
registrationSignedMessage,
)
@@ -924,8 +924,8 @@ func InitializeAndCompletePoAValidatorRegistration(
signatureAggregator *aggregator.SignatureAggregator,
ownerKey *ecdsa.PrivateKey,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
validatorManager *poavalidatormanager.PoAValidatorManager,
validatorManagerAddress common.Address,
expiry uint64,
@@ -937,14 +937,14 @@ func InitializeAndCompletePoAValidatorRegistration(
receipt, validationID := InitializePoAValidatorRegistration(
ctx,
ownerKey,
- subnetInfo,
+ l1Info,
node,
expiry,
validatorManager,
)
// Gather subnet-evm Warp signatures for the RegisterSubnetValidatorMessage & relay to the P-Chain
- signedWarpMessage := ConstructSignedWarpMessage(ctx, receipt, subnetInfo, pChainInfo)
+ signedWarpMessage := ConstructSignedWarpMessage(ctx, receipt, l1Info, pChainInfo)
_, err := pchainWallet.IssueRegisterSubnetValidatorTx(
100*units.Avax,
@@ -953,7 +953,7 @@ func InitializeAndCompletePoAValidatorRegistration(
)
Expect(err).Should(BeNil())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
// Construct a SubnetValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator registration")
@@ -962,17 +962,17 @@ func InitializeAndCompletePoAValidatorRegistration(
expiry,
node,
true,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompletePoAValidatorRegistration(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
validatorManagerAddress,
registrationSignedMessage,
)
@@ -990,11 +990,11 @@ func InitializeAndCompletePoAValidatorRegistration(
func InitializeEndNativeValidation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManager *nativetokenstakingmanager.NativeTokenStakingManager,
validationID ids.ID,
) *types.Receipt {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.InitializeEndValidation(
opts,
@@ -1003,17 +1003,17 @@ func InitializeEndNativeValidation(
0,
)
Expect(err).Should(BeNil())
- return WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ return WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
func ForceInitializeEndNativeValidation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManager *nativetokenstakingmanager.NativeTokenStakingManager,
validationID ids.ID,
) *types.Receipt {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.ForceInitializeEndValidation(
opts,
@@ -1022,18 +1022,18 @@ func ForceInitializeEndNativeValidation(
0,
)
Expect(err).Should(BeNil())
- return WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ return WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
func InitializeEndERC20Validation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManager *erc20tokenstakingmanager.ERC20TokenStakingManager,
validationID ids.ID,
force bool,
) *types.Receipt {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.InitializeEndValidation(
opts,
@@ -1042,17 +1042,17 @@ func InitializeEndERC20Validation(
0,
)
Expect(err).Should(BeNil())
- return WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ return WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
func ForceInitializeEndERC20Validation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManager *erc20tokenstakingmanager.ERC20TokenStakingManager,
validationID ids.ID,
) *types.Receipt {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.ForceInitializeEndValidation(
opts,
@@ -1061,30 +1061,30 @@ func ForceInitializeEndERC20Validation(
0,
)
Expect(err).Should(BeNil())
- return WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ return WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
func InitializeEndPoAValidation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validatorManager *poavalidatormanager.PoAValidatorManager,
validationID ids.ID,
) *types.Receipt {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := validatorManager.InitializeEndValidation(
opts,
validationID,
)
Expect(err).Should(BeNil())
- return WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ return WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
func CompleteEndNativeValidation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManagerContractAddress common.Address,
registrationSignedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -1096,7 +1096,7 @@ func CompleteEndNativeValidation(
ctx,
callData,
senderKey,
- subnet,
+ l1,
stakingManagerContractAddress,
registrationSignedMessage,
)
@@ -1105,7 +1105,7 @@ func CompleteEndNativeValidation(
func CompleteEndERC20Validation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManagerContractAddress common.Address,
registrationSignedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -1117,7 +1117,7 @@ func CompleteEndERC20Validation(
ctx,
callData,
senderKey,
- subnet,
+ l1,
stakingManagerContractAddress,
registrationSignedMessage,
)
@@ -1126,7 +1126,7 @@ func CompleteEndERC20Validation(
func CompleteEndPoAValidation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validatorManagerAddress common.Address,
registrationSignedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -1138,7 +1138,7 @@ func CompleteEndPoAValidation(
ctx,
callData,
senderKey,
- subnet,
+ l1,
validatorManagerAddress,
registrationSignedMessage,
)
@@ -1147,7 +1147,7 @@ func CompleteEndPoAValidation(
func InitializeERC20DelegatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validationID ids.ID,
delegationAmount *big.Int,
token *exampleerc20.ExampleERC20,
@@ -1159,11 +1159,11 @@ func InitializeERC20DelegatorRegistration(
token,
stakingManagerAddress,
delegationAmount,
- subnet,
+ l1,
senderKey,
)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.InitializeDelegatorRegistration(
@@ -1172,7 +1172,7 @@ func InitializeERC20DelegatorRegistration(
delegationAmount,
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
_, err = GetEventFromLogs(
receipt.Logs,
stakingManager.ParseDelegatorAdded,
@@ -1185,7 +1185,7 @@ func CompleteERC20DelegatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
delegationID ids.ID,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManagerContractAddress common.Address,
signedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -1197,7 +1197,7 @@ func CompleteERC20DelegatorRegistration(
ctx,
callData,
senderKey,
- subnet,
+ l1,
stakingManagerContractAddress,
signedMessage,
)
@@ -1206,12 +1206,12 @@ func CompleteERC20DelegatorRegistration(
func InitializeEndERC20Delegation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManager *erc20tokenstakingmanager.ERC20TokenStakingManager,
delegationID ids.ID,
) *types.Receipt {
- WaitMinStakeDuration(ctx, subnet, senderKey)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ WaitMinStakeDuration(ctx, l1, senderKey)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.ForceInitializeEndDelegation(
opts,
@@ -1220,14 +1220,14 @@ func InitializeEndERC20Delegation(
0,
)
Expect(err).Should(BeNil())
- return WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ return WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
func CompleteEndERC20Delegation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
delegationID ids.ID,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManagerContractAddress common.Address,
signedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -1239,7 +1239,7 @@ func CompleteEndERC20Delegation(
ctx,
callData,
senderKey,
- subnet,
+ l1,
stakingManagerContractAddress,
signedMessage,
)
@@ -1248,13 +1248,13 @@ func CompleteEndERC20Delegation(
func InitializeNativeDelegatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
validationID ids.ID,
delegationAmount *big.Int,
stakingManagerAddress common.Address,
stakingManager *nativetokenstakingmanager.NativeTokenStakingManager,
) *types.Receipt {
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
opts.Value = delegationAmount
@@ -1263,7 +1263,7 @@ func InitializeNativeDelegatorRegistration(
validationID,
)
Expect(err).Should(BeNil())
- receipt := WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash())
_, err = GetEventFromLogs(
receipt.Logs,
stakingManager.ParseDelegatorAdded,
@@ -1276,7 +1276,7 @@ func CompleteNativeDelegatorRegistration(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
delegationID ids.ID,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManagerContractAddress common.Address,
signedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -1288,7 +1288,7 @@ func CompleteNativeDelegatorRegistration(
ctx,
callData,
senderKey,
- subnet,
+ l1,
stakingManagerContractAddress,
signedMessage,
)
@@ -1297,12 +1297,12 @@ func CompleteNativeDelegatorRegistration(
func InitializeEndNativeDelegation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManager *nativetokenstakingmanager.NativeTokenStakingManager,
delegationID ids.ID,
) *types.Receipt {
- WaitMinStakeDuration(ctx, subnet, senderKey)
- opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID)
+ WaitMinStakeDuration(ctx, l1, senderKey)
+ opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID)
Expect(err).Should(BeNil())
tx, err := stakingManager.ForceInitializeEndDelegation(
opts,
@@ -1311,14 +1311,14 @@ func InitializeEndNativeDelegation(
0,
)
Expect(err).Should(BeNil())
- return WaitForTransactionSuccess(ctx, subnet, tx.Hash())
+ return WaitForTransactionSuccess(ctx, l1, tx.Hash())
}
func CompleteEndNativeDelegation(
ctx context.Context,
senderKey *ecdsa.PrivateKey,
delegationID ids.ID,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
stakingManagerContractAddress common.Address,
signedMessage *avalancheWarp.Message,
) *types.Receipt {
@@ -1330,7 +1330,7 @@ func CompleteEndNativeDelegation(
ctx,
callData,
senderKey,
- subnet,
+ l1,
stakingManagerContractAddress,
signedMessage,
)
@@ -1340,8 +1340,8 @@ func InitializeAndCompleteEndInitialNativeValidation(
ctx context.Context,
signatureAggregator *aggregator.SignatureAggregator,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
stakingManager *nativetokenstakingmanager.NativeTokenStakingManager,
stakingManagerAddress common.Address,
validationID ids.ID,
@@ -1351,11 +1351,11 @@ func InitializeAndCompleteEndInitialNativeValidation(
networkID uint32,
) {
log.Println("Initializing initial validator removal")
- WaitMinStakeDuration(ctx, subnetInfo, fundedKey)
+ WaitMinStakeDuration(ctx, l1Info, fundedKey)
receipt := ForceInitializeEndNativeValidation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManager,
validationID,
)
@@ -1369,11 +1369,11 @@ func InitializeAndCompleteEndInitialNativeValidation(
// Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
- unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, subnetInfo)
+ unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, l1Info)
signedWarpMessage, err := signatureAggregator.CreateSignedMessage(
unsignedMessage,
nil,
- subnetInfo.SubnetID,
+ l1Info.L1ID,
67,
)
Expect(err).Should(BeNil())
@@ -1381,7 +1381,7 @@ func InitializeAndCompleteEndInitialNativeValidation(
// Deliver the Warp message to the P-Chain
pchainWallet.IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
// Construct a SubnetValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing initial validator removal")
@@ -1389,17 +1389,17 @@ func InitializeAndCompleteEndInitialNativeValidation(
validationID,
index,
false,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompleteEndNativeValidation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManagerAddress,
registrationSignedMessage,
)
@@ -1417,8 +1417,8 @@ func InitializeAndCompleteEndNativeValidation(
ctx context.Context,
signatureAggregator *aggregator.SignatureAggregator,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
stakingManager *nativetokenstakingmanager.NativeTokenStakingManager,
stakingManagerAddress common.Address,
validationID ids.ID,
@@ -1429,11 +1429,11 @@ func InitializeAndCompleteEndNativeValidation(
networkID uint32,
) {
log.Println("Initializing validator removal")
- WaitMinStakeDuration(ctx, subnetInfo, fundedKey)
+ WaitMinStakeDuration(ctx, l1Info, fundedKey)
receipt := ForceInitializeEndNativeValidation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManager,
validationID,
)
@@ -1446,11 +1446,11 @@ func InitializeAndCompleteEndNativeValidation(
Expect(validatorRemovalEvent.Weight.Uint64()).Should(Equal(node.Weight))
// Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
- unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, subnetInfo)
+ unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, l1Info)
signedWarpMessage, err := signatureAggregator.CreateSignedMessage(
unsignedMessage,
nil,
- subnetInfo.SubnetID,
+ l1Info.L1ID,
67,
)
Expect(err).Should(BeNil())
@@ -1458,7 +1458,7 @@ func InitializeAndCompleteEndNativeValidation(
// Deliver the Warp message to the P-Chain
pchainWallet.IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
// Construct a SubnetValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator removal")
@@ -1467,17 +1467,17 @@ func InitializeAndCompleteEndNativeValidation(
expiry,
node,
false,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompleteEndNativeValidation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManagerAddress,
registrationSignedMessage,
)
@@ -1495,8 +1495,8 @@ func InitializeAndCompleteEndInitialERC20Validation(
ctx context.Context,
signatureAggregator *aggregator.SignatureAggregator,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
stakingManager *erc20tokenstakingmanager.ERC20TokenStakingManager,
stakingManagerAddress common.Address,
validationID ids.ID,
@@ -1506,11 +1506,11 @@ func InitializeAndCompleteEndInitialERC20Validation(
networkID uint32,
) {
log.Println("Initializing initial validator removal")
- WaitMinStakeDuration(ctx, subnetInfo, fundedKey)
+ WaitMinStakeDuration(ctx, l1Info, fundedKey)
receipt := ForceInitializeEndERC20Validation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManager,
validationID,
)
@@ -1524,11 +1524,11 @@ func InitializeAndCompleteEndInitialERC20Validation(
// Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
- unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, subnetInfo)
+ unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, l1Info)
signedWarpMessage, err := signatureAggregator.CreateSignedMessage(
unsignedMessage,
nil,
- subnetInfo.SubnetID,
+ l1Info.L1ID,
67,
)
Expect(err).Should(BeNil())
@@ -1536,7 +1536,7 @@ func InitializeAndCompleteEndInitialERC20Validation(
// Deliver the Warp message to the P-Chain
pchainWallet.IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
// Construct a SubnetValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing initial validator removal")
@@ -1544,17 +1544,17 @@ func InitializeAndCompleteEndInitialERC20Validation(
validationID,
index,
false,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompleteEndERC20Validation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManagerAddress,
registrationSignedMessage,
)
@@ -1572,8 +1572,8 @@ func InitializeAndCompleteEndERC20Validation(
ctx context.Context,
signatureAggregator *aggregator.SignatureAggregator,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
stakingManager *erc20tokenstakingmanager.ERC20TokenStakingManager,
stakingManagerAddress common.Address,
validationID ids.ID,
@@ -1584,11 +1584,11 @@ func InitializeAndCompleteEndERC20Validation(
networkID uint32,
) {
log.Println("Initializing validator removal")
- WaitMinStakeDuration(ctx, subnetInfo, fundedKey)
+ WaitMinStakeDuration(ctx, l1Info, fundedKey)
receipt := ForceInitializeEndERC20Validation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManager,
validationID,
)
@@ -1601,11 +1601,11 @@ func InitializeAndCompleteEndERC20Validation(
Expect(validatorRemovalEvent.Weight.Uint64()).Should(Equal(node.Weight))
// Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
- unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, subnetInfo)
+ unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, l1Info)
signedWarpMessage, err := signatureAggregator.CreateSignedMessage(
unsignedMessage,
nil,
- subnetInfo.SubnetID,
+ l1Info.L1ID,
67,
)
Expect(err).Should(BeNil())
@@ -1613,7 +1613,7 @@ func InitializeAndCompleteEndERC20Validation(
// Deliver the Warp message to the P-Chain
pchainWallet.IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
// Construct a SubnetValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator removal")
@@ -1622,17 +1622,17 @@ func InitializeAndCompleteEndERC20Validation(
expiry,
node,
false,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompleteEndERC20Validation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManagerAddress,
registrationSignedMessage,
)
@@ -1651,8 +1651,8 @@ func InitializeAndCompleteEndInitialPoAValidation(
signatureAggregator *aggregator.SignatureAggregator,
ownerKey *ecdsa.PrivateKey,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
stakingManager *poavalidatormanager.PoAValidatorManager,
stakingManagerAddress common.Address,
validationID ids.ID,
@@ -1662,11 +1662,11 @@ func InitializeAndCompleteEndInitialPoAValidation(
networkID uint32,
) {
log.Println("Initializing initial validator removal")
- WaitMinStakeDuration(ctx, subnetInfo, fundedKey)
+ WaitMinStakeDuration(ctx, l1Info, fundedKey)
receipt := InitializeEndPoAValidation(
ctx,
ownerKey,
- subnetInfo,
+ l1Info,
stakingManager,
validationID,
)
@@ -1680,11 +1680,11 @@ func InitializeAndCompleteEndInitialPoAValidation(
// Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
- unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, subnetInfo)
+ unsignedMessage := ExtractWarpMessageFromLog(ctx, receipt, l1Info)
signedWarpMessage, err := signatureAggregator.CreateSignedMessage(
unsignedMessage,
nil,
- subnetInfo.SubnetID,
+ l1Info.L1ID,
67,
)
Expect(err).Should(BeNil())
@@ -1692,7 +1692,7 @@ func InitializeAndCompleteEndInitialPoAValidation(
// Deliver the Warp message to the P-Chain
pchainWallet.IssueSetSubnetValidatorWeightTx(signedWarpMessage.Bytes())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
// Construct a SubnetValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing initial validator removal")
@@ -1700,17 +1700,17 @@ func InitializeAndCompleteEndInitialPoAValidation(
validationID,
index,
false,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompleteEndPoAValidation(
ctx,
fundedKey,
- subnetInfo,
+ l1Info,
stakingManagerAddress,
registrationSignedMessage,
)
@@ -1729,8 +1729,8 @@ func InitializeAndCompleteEndPoAValidation(
signatureAggregator *aggregator.SignatureAggregator,
ownerKey *ecdsa.PrivateKey,
fundedKey *ecdsa.PrivateKey,
- subnetInfo interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
validatorManager *poavalidatormanager.PoAValidatorManager,
validatorManagerAddress common.Address,
validationID ids.ID,
@@ -1741,7 +1741,7 @@ func InitializeAndCompleteEndPoAValidation(
receipt := InitializeEndPoAValidation(
ctx,
ownerKey,
- subnetInfo,
+ l1Info,
validatorManager,
validationID,
)
@@ -1755,7 +1755,7 @@ func InitializeAndCompleteEndPoAValidation(
// Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
- signedWarpMessage := ConstructSignedWarpMessage(ctx, receipt, subnetInfo, pChainInfo)
+ signedWarpMessage := ConstructSignedWarpMessage(ctx, receipt, l1Info, pChainInfo)
Expect(err).Should(BeNil())
// Validate the Warp message, (this will be done on the P-Chain in the future)
@@ -1767,17 +1767,17 @@ func InitializeAndCompleteEndPoAValidation(
0,
Node{},
false,
- subnetInfo,
+ l1Info,
pChainInfo,
networkID,
signatureAggregator,
)
- // Deliver the Warp message to the subnet
+ // Deliver the Warp message to the l1
receipt = CompleteEndPoAValidation(
ctx,
ownerKey,
- subnetInfo,
+ l1Info,
validatorManagerAddress,
registrationSignedMessage,
)
@@ -1799,15 +1799,15 @@ func ConstructSubnetValidatorRegistrationMessageForInitialValidator(
validationID ids.ID,
index uint32,
valid bool,
- subnet interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
networkID uint32,
signatureAggregator *aggregator.SignatureAggregator,
) *avalancheWarp.Message {
justification := platformvm.SubnetValidatorRegistrationJustification{
Preimage: &platformvm.SubnetValidatorRegistrationJustification_ConvertSubnetTxData{
ConvertSubnetTxData: &platformvm.SubnetIDIndex{
- SubnetId: subnet.SubnetID[:],
+ SubnetId: l1.L1ID[:],
Index: index,
},
},
@@ -1829,7 +1829,7 @@ func ConstructSubnetValidatorRegistrationMessageForInitialValidator(
registrationSignedMessage, err := signatureAggregator.CreateSignedMessage(
registrationUnsignedMessage,
justificationBytes,
- subnet.SubnetID,
+ l1.L1ID,
67,
)
Expect(err).Should(BeNil())
@@ -1842,13 +1842,13 @@ func ConstructSubnetValidatorRegistrationMessage(
expiry uint64,
node Node,
valid bool,
- subnet interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
networkID uint32,
signatureAggregator *aggregator.SignatureAggregator,
) *avalancheWarp.Message {
msg, err := warpMessage.NewRegisterSubnetValidator(
- subnet.SubnetID,
+ l1.L1ID,
node.NodeID,
node.NodePoP.PublicKey,
expiry,
@@ -1879,7 +1879,7 @@ func ConstructSubnetValidatorRegistrationMessage(
registrationSignedMessage, err := signatureAggregator.CreateSignedMessage(
registrationUnsignedMessage,
justificationBytes,
- subnet.SubnetID,
+ l1.L1ID,
67,
)
Expect(err).Should(BeNil())
@@ -1891,8 +1891,8 @@ func ConstructSubnetValidatorWeightUpdateMessage(
validationID ids.ID,
nonce uint64,
weight uint64,
- subnet interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
signatureAggregator *aggregator.SignatureAggregator,
networkID uint32,
) *avalancheWarp.Message {
@@ -1910,7 +1910,7 @@ func ConstructSubnetValidatorWeightUpdateMessage(
updateSignedMessage, err := signatureAggregator.CreateSignedMessage(
updateUnsignedMessage,
nil,
- subnet.SubnetID,
+ l1.L1ID,
67,
)
Expect(err).Should(BeNil())
@@ -1918,34 +1918,34 @@ func ConstructSubnetValidatorWeightUpdateMessage(
}
func ConstructSubnetConversionMessage(
- subnetConversionID ids.ID,
- subnet interfaces.SubnetTestInfo,
- pChainInfo interfaces.SubnetTestInfo,
+ l1ConversionID ids.ID,
+ l1 interfaces.L1TestInfo,
+ pChainInfo interfaces.L1TestInfo,
networkID uint32,
signatureAggregator *aggregator.SignatureAggregator,
) *avalancheWarp.Message {
- subnetConversionPayload, err := warpMessage.NewSubnetConversion(subnetConversionID)
+ l1ConversionPayload, err := warpMessage.NewSubnetConversion(l1ConversionID)
Expect(err).Should(BeNil())
- subnetConversionAddressedCall, err := warpPayload.NewAddressedCall(
+ l1ConversionAddressedCall, err := warpPayload.NewAddressedCall(
nil,
- subnetConversionPayload.Bytes(),
+ l1ConversionPayload.Bytes(),
)
Expect(err).Should(BeNil())
- subnetConversionUnsignedMessage, err := avalancheWarp.NewUnsignedMessage(
+ l1ConversionUnsignedMessage, err := avalancheWarp.NewUnsignedMessage(
networkID,
pChainInfo.BlockchainID,
- subnetConversionAddressedCall.Bytes(),
+ l1ConversionAddressedCall.Bytes(),
)
Expect(err).Should(BeNil())
- subnetConversionSignedMessage, err := signatureAggregator.CreateSignedMessage(
- subnetConversionUnsignedMessage,
- subnet.SubnetID[:],
- subnet.SubnetID,
+ l1ConversionSignedMessage, err := signatureAggregator.CreateSignedMessage(
+ l1ConversionUnsignedMessage,
+ l1.L1ID[:],
+ l1.L1ID,
67,
)
Expect(err).Should(BeNil())
- return subnetConversionSignedMessage
+ return l1ConversionSignedMessage
}
//
@@ -1957,7 +1957,7 @@ func ValidateRegisterSubnetValidatorMessage(
signedWarpMessage *avalancheWarp.Message,
nodeID ids.ID,
weight uint64,
- subnetID ids.ID,
+ l1ID ids.ID,
blsPublicKey [bls.PublicKeyLen]byte,
) {
// Validate the Warp message, (this will be done on the P-Chain in the future)
@@ -1973,7 +1973,7 @@ func ValidateRegisterSubnetValidatorMessage(
Expect(ver).Should(Equal(uint16(warpMessage.CodecVersion)))
Expect(payload.NodeID).Should(Equal(nodeID))
Expect(payload.Weight).Should(Equal(weight))
- Expect(payload.SubnetID).Should(Equal(subnetID))
+ Expect(payload.SubnetID).Should(Equal(l1ID))
Expect(payload.BLSPublicKey[:]).Should(Equal(blsPublicKey[:]))
}
@@ -2000,7 +2000,7 @@ func ValidateSubnetValidatorWeightMessage(
func WaitMinStakeDuration(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
fundedKey *ecdsa.PrivateKey,
) {
// Make sure minimum stake duration has passed
@@ -2010,16 +2010,16 @@ func WaitMinStakeDuration(
// before delisting the validator.
SendNativeTransfer(
ctx,
- subnet,
+ l1,
fundedKey,
common.Address{},
big.NewInt(10),
)
}
-func CalculateSubnetConversionValidationId(subnetID ids.ID, validatorIdx uint32) ids.ID {
+func CalculateSubnetConversionValidationId(l1ID ids.ID, validatorIdx uint32) ids.ID {
preImage := make([]byte, 36)
- copy(preImage[0:32], subnetID[:])
+ copy(preImage[0:32], l1ID[:])
binary.BigEndian.PutUint32(preImage[32:36], validatorIdx)
return sha256.Sum256(preImage)
}
@@ -2059,7 +2059,7 @@ func PackSubnetConversionData(data interface{}) ([]byte, error) {
}
}
- subnetID := v.FieldByName("SubnetID").Interface().([32]byte)
+ l1ID := v.FieldByName("SubnetID").Interface().([32]byte)
validatorManagerBlockchainID := v.FieldByName("ValidatorManagerBlockchainID").Interface().([32]byte)
validatorManagerAddress := v.FieldByName("ValidatorManagerAddress").Interface().(common.Address)
initialValidators := v.FieldByName("InitialValidators")
@@ -2080,7 +2080,7 @@ func PackSubnetConversionData(data interface{}) ([]byte, error) {
b := make([]byte, 94+packedInitialValidatorsLen)
binary.BigEndian.PutUint16(b[0:2], uint16(warpMessage.CodecVersion))
- copy(b[2:34], subnetID[:])
+ copy(b[2:34], l1ID[:])
copy(b[34:66], validatorManagerBlockchainID[:])
// These are evm addresses and have lengths of 20 so hardcoding here
binary.BigEndian.PutUint32(b[66:70], uint32(20))
@@ -2199,13 +2199,13 @@ func PChainProposerVMWorkaround(
func AdvanceProposerVM(
ctx context.Context,
- subnet interfaces.SubnetTestInfo,
+ l1 interfaces.L1TestInfo,
fundedKey *ecdsa.PrivateKey,
blocks int,
) {
for i := 0; i < blocks; i++ {
err := subnetEvmUtils.IssueTxsToActivateProposerVMFork(
- ctx, subnet.EVMChainID, fundedKey, subnet.WSClient,
+ ctx, l1.EVMChainID, fundedKey, l1.WSClient,
)
Expect(err).Should(BeNil())
}
@@ -2213,14 +2213,14 @@ func AdvanceProposerVM(
func ConvertSubnet(
ctx context.Context,
- subnetInfo interfaces.SubnetTestInfo,
+ l1Info interfaces.L1TestInfo,
pchainWallet pwallet.Wallet,
stakingManagerAddress common.Address,
fundedKey *ecdsa.PrivateKey,
) []Node {
- // Remove the current validators before converting the subnet
+ // Remove the current validators before converting the l1
var nodes []Node
- for _, uri := range subnetInfo.NodeURIs {
+ for _, uri := range l1Info.NodeURIs {
infoClient := info.NewClient(uri)
nodeID, nodePoP, err := infoClient.GetNodeID(ctx)
Expect(err).Should(BeNil())
@@ -2231,12 +2231,12 @@ func ConvertSubnet(
_, err = pchainWallet.IssueRemoveSubnetValidatorTx(
nodeID,
- subnetInfo.SubnetID,
+ l1Info.L1ID,
)
Expect(err).Should(BeNil())
}
- // Sort the nodeIDs so that the subnet conversion ID matches the P-Chain
+ // Sort the nodeIDs so that the l1 conversion ID matches the P-Chain
sort.Slice(nodes, func(i, j int) bool {
return string(nodes[i].NodeID.Bytes()) < string(nodes[j].NodeID.Bytes())
})
@@ -2249,7 +2249,7 @@ func ConvertSubnet(
// Set the last node's weight such that removing any other node will not violate the churn limit
nodes[len(nodes)-1].Weight = 4 * totalWeight
- // Construct the convert subnet info
+ // Construct the convert l1 info
destAddr, err := address.ParseToID(DefaultPChainAddress)
Expect(err).Should(BeNil())
vdrs := make([]*txs.ConvertSubnetValidator, len(nodes))
@@ -2272,15 +2272,15 @@ func ConvertSubnet(
log.Println("Issuing ConvertSubnetTx")
_, err = pchainWallet.IssueConvertSubnetTx(
- subnetInfo.SubnetID,
- subnetInfo.BlockchainID,
+ l1Info.L1ID,
+ l1Info.BlockchainID,
stakingManagerAddress[:],
vdrs,
)
Expect(err).Should(BeNil())
PChainProposerVMWorkaround(pchainWallet)
- AdvanceProposerVM(ctx, subnetInfo, fundedKey, 5)
+ AdvanceProposerVM(ctx, l1Info, fundedKey, 5)
return nodes
}
From 4b3432d69934ba28f0c67ce8fa285a79baa07153 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 20 Nov 2024 06:22:30 -0500
Subject: [PATCH 02/15] Warp to ICM
---
README.md | 14 +++++-----
cmd/teleporter-cli/README.md | 2 +-
cmd/teleporter-cli/root.go | 2 +-
cmd/teleporter-cli/transaction.go | 26 +++++++++----------
contracts/README.md | 2 +-
contracts/governance/README.md | 8 +++---
contracts/governance/ValidatorSetSig.sol | 10 +++----
contracts/teleporter/README.md | 12 ++++-----
contracts/teleporter/registry/README.md | 4 +--
contracts/teleporter/registry/UPGRADING.md | 26 +++++++++----------
.../validator-manager/ValidatorMessages.sol | 4 +--
.../interfaces/IPoSValidatorManager.sol | 16 ++++++------
.../interfaces/IValidatorManager.sol | 12 ++++-----
tests/flows/governance/validator_set_sig.go | 6 ++---
tests/flows/teleporter/basic_send_receive.go | 4 +--
tests/flows/teleporter/relay_message_twice.go | 2 +-
.../teleporter/resubmit_altered_message.go | 4 +--
tests/flows/teleporter/unallowed_relayer.go | 2 +-
utils/contract-deployment/README.md | 2 +-
19 files changed, 79 insertions(+), 79 deletions(-)
diff --git a/README.md b/README.md
index 88c9cca90..6768c8249 100644
--- a/README.md
+++ b/README.md
@@ -2,13 +2,13 @@
-To get started with building applications on top of Teleporter, refer to [the avalanche-starter-kit repository](https://github.com/ava-labs/avalanche-starter-kit). This README is focused on the development of the Teleporter protocol itself.
+To get started with building ICM contracts, refer to [the avalanche-starter-kit repository](https://github.com/ava-labs/avalanche-starter-kit). This README is focused on the development of the `TeleporterMessenger` contract itself.
-Teleporter is an EVM compatible cross-L1 communication protocol built on top of [Avalanche Warp Messaging (AWM)](https://docs.avax.network/learn/avalanche/awm), and implemented as a Solidity smart contract. It provides a mechanism to asynchronously invoke smart contract functions on other EVM blockchains within Avalanche. Teleporter provides a handful of useful features on top of AWM, such as specifying relayer incentives for message delivery, replay protection, message delivery and execution retries, and a standard interface for sending and receiving messages within a dApp deployed across multiple Avalanche L1s.
+`TeleporterMessenger` is an EVM compatible cross-L1 communication protocol built on top of [Avalanche Interchain Messaging (ICM)](https://academy.avax.network/course/interchain-messaging/04-icm-basics/01-icm-basics), and implemented as a Solidity smart contract. It provides a mechanism to asynchronously invoke smart contract functions on other EVM blockchains within Avalanche. `TeleporterMessenger` provides a handful of useful features of ICM, such as specifying relayer incentives for message delivery, replay protection, message delivery and execution retries, and a standard interface for sending and receiving messages within a dApp deployed across multiple Avalanche L1s.
-It's important to understand the distinction between Avalanche Warp Messaging and Teleporter. AWM allows Avalanche L1s to communicate with each other via authenticated messages by providing signing and verification primitives in Avalanchego. These are used by the blockchain VMs to sign outgoing messages and verify incoming messages.
+It's important to understand the distinction between Avalanche I Messaging and Teleporter. AWM allows Avalanche L1s to communicate with each other via authenticated messages by providing signing and verification primitives in Avalanchego. These are used by the blockchain VMs to sign outgoing messages and verify incoming messages.
-The Teleporter protocol, on the other hand, is implemented at the smart contract level, and is a user-friendly interface to AWM, aimed at dApp developers. All of the message signing and verification is abstracted away from developers. Instead, developers simply call `sendCrossChainMessage` on the `TeleporterMessenger` contract to send a message invoking a smart contract on another Avalanche L1, and implement the `ITeleporterReceiver` interface to receive messages on the destination Avalanche L!. Teleporter handles all of the Warp message construction and sending, as well as the message delivery and execution.
+The `TeleporterMessenger` contract is a user-friendly interface to ICM, aimed at dApp developers. All of the message signing and verification is abstracted away from developers. Instead, developers simply call `sendCrossChainMessage` on the `TeleporterMessenger` contract to send a message invoking a smart contract on another Avalanche L1, and implement the `ITeleporterReceiver` interface to receive messages on the destination Avalanche L1. Teleporter handles all of the ICM message construction and sending, as well as the message delivery and execution.
To get started with using Teleporter, see [How to Deploy Teleporter Enabled Avalanche L1s on a Local Network](https://docs.avax.network/tooling/cli-cross-chain/teleporter-on-local-networks)
@@ -21,7 +21,7 @@ To get started with using Teleporter, see [How to Deploy Teleporter Enabled Aval
- [E2E tests](#e2e-tests)
- [Run specific E2E tests](#run-specific-e2e-tests)
- [Upgradability](#upgradability)
-- [Deploy Teleporter to an L1](#deploy-teleporter-to-an-avalanche-l1)
+- [Deploy TeleporterMessenger to an L1](#deploy-teleportermessenger-to-an-avalanche-l1)
- [Deploy TeleporterRegistry to an L1](#deploy-teleporterregistry-to-an-avalanche-l1)
- [ABI Bindings](#abi-bindings)
- [Docs](#docs)
@@ -35,7 +35,7 @@ To get started with using Teleporter, see [How to Deploy Teleporter Enabled Aval
| `TeleporterRegistry` | **0x7C43605E14F391720e1b37E49C78C4b03A488d98** | Mainnet C-Chain |
| `TeleporterRegistry` | **0xF86Cb19Ad8405AEFa7d09C778215D2Cb6eBfB228** | Fuji C-Chain |
-- Using [Nick's method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c#), `TeleporterMessenger` deploys at a universal address across all chains, varying with each `teleporter` Major release. **Compatibility exists only between same-version `TeleporterMessenger` instances.** See [Teleporter Contract Deployment](./utils/contract-deployment/README.md) and [Deploy Teleporter to an Avalanche L1](#deploy-teleporter-to-an-avalanche-l1) for more details.
+- Using [Nick's method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c#), `TeleporterMessenger` deploys at a universal address across all chains, varying with each `teleporter` Major release. **Compatibility exists only between same-version `TeleporterMessenger` instances.** See [Teleporter Contract Deployment](./utils/contract-deployment/README.md) and [Deploy Teleporter to an Avalanche L1](#deploy-teleportermessenger-to-an-avalanche-l1) for more details.
- `TeleporterRegistry` can be deployed to any address. See [Deploy TeleporterRegistry to an Avalanche L1](#deploy-teleporterregistry-to-an-avalanche-l1) for details. The table above enumerates the canonical registry addresses on the Mainnet and Fuji C-Chains.
@@ -117,7 +117,7 @@ The Teleporter contract is non-upgradeable and can not be changed once it is dep
For more information on the registry and how to integrate with Teleporter dApps, see the [Upgradability doc](./contracts/teleporter/registry/README.md).
-## Deploy Teleporter to an Avalanche L1
+## Deploy TeleporterMessenger to an Avalanche L1
From the root of the repo, the TeleporterMessenger contract can be deployed by calling
diff --git a/cmd/teleporter-cli/README.md b/cmd/teleporter-cli/README.md
index fe912c114..f3252e1b3 100644
--- a/cmd/teleporter-cli/README.md
+++ b/cmd/teleporter-cli/README.md
@@ -14,4 +14,4 @@ The supported subcommands include:
- `event`: given a log event's topics and data, attempts to decode into a Teleporter event in a more readable format.
- `message`: given a Teleporter message encoded as a hex string, attempts to decode into a Teleporter message in a more readable format.
-- `transaction`: given a transaction hash, attempts to decode all relevant Teleporter and Warp log events in a more readable format.
+- `transaction`: given a transaction hash, attempts to decode all relevant TeleporterMessenger and ICM log events in a more readable format.
diff --git a/cmd/teleporter-cli/root.go b/cmd/teleporter-cli/root.go
index c73416a34..b6fef09ac 100644
--- a/cmd/teleporter-cli/root.go
+++ b/cmd/teleporter-cli/root.go
@@ -22,7 +22,7 @@ var rootCmd = &cobra.Command{
Short: "A CLI that integrates with the Teleporter protocol",
Long: `A CLI that integrates with the Teleporter protocol, and allows you
to debug Teleporter on chain activity. The CLI can help decode
-Teleporter and Warp events, as well as parsing Teleporter messages.`,
+TeleporterMessenger and ICM events, as well as parsing Teleporter messages.`,
}
// Execute adds all child commands to the root command and sets flags appropriately.
diff --git a/cmd/teleporter-cli/transaction.go b/cmd/teleporter-cli/transaction.go
index f78048ef3..ad7316eb5 100644
--- a/cmd/teleporter-cli/transaction.go
+++ b/cmd/teleporter-cli/transaction.go
@@ -18,7 +18,7 @@ import (
)
const (
- warpPrecompileAddressHex = "0x0200000000000000000000000000000000000005"
+ ICMPrecompileAddressHex = "0x0200000000000000000000000000000000000005"
)
var (
@@ -32,7 +32,7 @@ var transactionCmd = &cobra.Command{
Use: "transaction --rpc RPC_URL --teleporter-address CONTRACT_ADDRESS TRANSACTION_HASH",
Short: "Parses relevant Teleporter logs from a transaction",
Long: `Given a transaction this command looks through the transaction's receipt
-for Teleporter and Warp log events. When corresponding log events are found,
+for TeleporterMessenger and ICM log events. When corresponding log events are found,
the command parses to log event fields to a more human readable format. Optionally pass -d
or --debug for extra transaction output. This may require enabling debug enpoints on your RPC node`,
Args: cobra.ExactArgs(1),
@@ -51,13 +51,13 @@ func checkReceipt(cmd *cobra.Command, txHash common.Hash) {
receipt, err := client.TransactionReceipt(context.Background(), txHash)
cobra.CheckErr(err)
- warpPrecompileAddress := common.HexToAddress(warpPrecompileAddressHex)
+ ICMPrecompileAddress := common.HexToAddress(ICMPrecompileAddressHex)
for _, log := range receipt.Logs {
switch log.Address {
case teleporterAddress:
printTeleporterLogs(cmd, log)
- case warpPrecompileAddress:
- printWarpLogs(cmd, log)
+ case ICMPrecompileAddress:
+ printICMLogs(cmd, log)
}
}
}
@@ -78,26 +78,26 @@ func printTeleporterLogs(cmd *cobra.Command, log *types.Log) {
cmd.Println(out.String() + "\n")
}
-func printWarpLogs(cmd *cobra.Command, log *types.Log) {
+func printICMLogs(cmd *cobra.Command, log *types.Log) {
logJson, err := json.MarshalIndent(log, "", " ")
cobra.CheckErr(err)
- cmd.Println("Warp Log:\n" + string(logJson) + "\n")
+ cmd.Println("ICM Log:\n" + string(logJson) + "\n")
unsignedMsg, err := warp.UnpackSendWarpEventDataToMessage(log.Data)
cobra.CheckErr(err)
- cmd.Println("Warp Message ID: " + unsignedMsg.ID().Hex())
+ cmd.Println("ICM Message ID: " + unsignedMsg.ID().Hex())
- warpPayload, err := warpPayload.ParseAddressedCall(unsignedMsg.Payload)
+ icmPayload, err := warpPayload.ParseAddressedCall(unsignedMsg.Payload)
cobra.CheckErr(err)
- warpPayloadJson, err := json.MarshalIndent(warpPayload, "", " ")
+ icmPayloadJson, err := json.MarshalIndent(icmPayload, "", " ")
cobra.CheckErr(err)
- cmd.Println("Warp Payload:")
- cmd.Println(string(warpPayloadJson))
+ cmd.Println("ICM Payload:")
+ cmd.Println(string(icmPayloadJson))
teleporterMessage := teleportermessenger.TeleporterMessage{}
- err = teleporterMessage.Unpack(warpPayload.Payload)
+ err = teleporterMessage.Unpack(icmPayload.Payload)
cobra.CheckErr(err)
cmd.Println("Teleporter Message:")
diff --git a/contracts/README.md b/contracts/README.md
index f94cd1227..0236b75c6 100644
--- a/contracts/README.md
+++ b/contracts/README.md
@@ -1,5 +1,5 @@
## Contracts
-This directory contains Solidity contracts that leverage Avalanche Warp Messaging to implement unique cross-chain functions.
+This directory contains Solidity contracts that leverage Avalanche Interchain Messaging to implement unique cross-chain functions.
This directory is set up as a [Foundry](https://github.com/foundry-rs/foundry) project. Use the `scripts/install_foundry.sh` to install the correct version of the ava-labs fork of foundry.
diff --git a/contracts/governance/README.md b/contracts/governance/README.md
index 7dbc4a453..9fd06683d 100644
--- a/contracts/governance/README.md
+++ b/contracts/governance/README.md
@@ -4,15 +4,15 @@
This contract provides an alternative to traditional multi-signature contracts where instead of requiring signatures from `K` of `N` pre-specified signers, an aggregate signature is required from a quorum of the current validators for a given blockchain.
-The contract leverages off-chain [Avalanche Warp Messages](https://docs.avax.network/build/cross-chain/awm/overview), which are manually approved for signing by a chain's validators. It requires these messages to have the source address set to the zero address to enforce this, since on-chain warp messages cannot have zero source address.
+The contract leverages off-chain [Avalanche ICM Messages](https://docs.avax.network/build/cross-chain/awm/overview), which are manually approved for signing by a chain's validators. It requires these messages to have the source address set to the zero address to enforce this, since on-chain ICM messages cannot have zero source address.
Note:
1. The blockchain validating the message may or may not be the same chain where the target contract and the `ValidatorSetSig` contract are deployed.
-2. [Off-Chain Warp messages](https://github.com/ava-labs/subnet-evm/issues/729) are Warp messages that validators can include in their config to indicate that they are willing to sign them even though they are not a result of on-chain activity.
+2. [Off-Chain ICM messages](https://github.com/ava-labs/subnet-evm/issues/729) are ICM messages that validators can include in their config to indicate that they are willing to sign them even though they are not a result of on-chain activity.
-#### Creating a valid Off-chain Warp Message for interaction with the ValidatorSetSig Contract
+#### Creating a valid Off-chain ICM Message for interaction with the ValidatorSetSig Contract
1. ABI-encode a `ValidatorSetSigMessage` as defined in `ValidatorSetSig.sol`
2. OPTIONAL: call `validateMessage` view method of the intended contract to confirm that the message has correct fields, including the nonce.
-3. Pack that as the payload of an [AddressedCall](https://github.com/ava-labs/avalanchego/blob/0c4efd743e1d737f4e8970d0e0ebf229ea44406c/vms/platformvm/warp/payload/addressed_call.go#L15) Warp Message format. Note that the `SourceAddress` field has to be set to the zero address.
+3. Pack that as the payload of an [AddressedCall](https://github.com/ava-labs/avalanchego/blob/0c4efd743e1d737f4e8970d0e0ebf229ea44406c/vms/platformvm/warp/payload/addressed_call.go#L15) ICM Message format. Note that the `SourceAddress` field has to be set to the zero address.
4. Pack the `AddressedCall` as the payload of the [UnsignedWarpMessage](https://github.com/ava-labs/avalanchego/blob/f17ea6a7ab4036c41b693e47b94d8f0c81cb69ec/vms/platformvm/warp/unsigned_message.go#L14).
diff --git a/contracts/governance/ValidatorSetSig.sol b/contracts/governance/ValidatorSetSig.sol
index 2393b121e..f706fbe4e 100644
--- a/contracts/governance/ValidatorSetSig.sol
+++ b/contracts/governance/ValidatorSetSig.sol
@@ -37,8 +37,8 @@ struct ValidatorSetSigMessage {
/**
* @dev Contract that verifies that a set threshold of validators from a given blockchainID
- * have signed an off-chain Warp message and forwards the payload to the target contract specified in the ValidatorSetSigMessage.
- * The threshold itself is set by the validator themselves in their Warp configs:
+ * have signed an off-chain ICM message and forwards the payload to the target contract specified in the ValidatorSetSigMessage.
+ * The threshold itself is set by the validator themselves in their ICM configs:
* https://github.com/ava-labs/subnet-evm/blob/6c018f89339f3d381909e02013f002f234dc7ae3/precompile/contracts/warp/config.go#L50
*
* This is intended to be used for safe off-chain governance of enabled contracts. An example use case would be
@@ -62,9 +62,9 @@ contract ValidatorSetSig is ReentrancyGuard {
mapping(address targetContractAddress => uint256 nonce) public nonces;
/**
- * @notice Address that the off-chain Warp message sets as the "source" address.
+ * @notice Address that the off-chain ICM message sets as the "source" address.
* @dev The address is not owned by any EOA or smart contract account, so it
- * cannot possibly be the source address of any other Warp message emitted by the VM.
+ * cannot possibly be the source address of any other ICM message emitted by the VM.
*/
address public constant VALIDATORS_SOURCE_ADDRESS = address(0);
@@ -74,7 +74,7 @@ contract ValidatorSetSig is ReentrancyGuard {
bytes32 public immutable blockchainID;
/**
- * @notice Warp precompile used for sending and receiving Warp messages.
+ * @notice ICM precompile used for sending and receiving ICM messages.
*/
IWarpMessenger public constant WARP_MESSENGER =
IWarpMessenger(0x0200000000000000000000000000000000000005);
diff --git a/contracts/teleporter/README.md b/contracts/teleporter/README.md
index 55085192f..e93f2bca9 100644
--- a/contracts/teleporter/README.md
+++ b/contracts/teleporter/README.md
@@ -2,7 +2,7 @@
## Overview
-Teleporter is a messaging protocol built on top of [Avalanche Warp Messaging (AWM)](https://docs.avax.network/learn/avalanche/awm) that provides a developer-friendly interface for sending and receiving cross-chain messages from within the EVM.
+Teleporter is a messaging protocol built on top of [Avalanche Interchain Messaging (ICM)](https://docs.avax.network/learn/avalanche/awm) that provides a developer-friendly interface for sending and receiving cross-chain messages from within the EVM.
The `ITeleporterMessenger` interface provides two primary methods:
@@ -23,17 +23,17 @@ The `ITeleporterReceiver` interface provides a single method. All contracts that
## Properties
-Teleporter provides a handful of useful properties to cross-chain applications that Avalanche Warp Messages do not provide by default. These include:
+TeleporterMessenger provides a handful of useful properties to cross-chain applications that ICM messages do not provide by default. These include:
1. Replay protection: Teleporter ensures that a cross-chain message is not delivered multiple times.
-2. Retries: In certain edge cases when there is significant validator churn, it is possible for an Avalanche Warp Message to be dropped before a valid aggregate signature is created for it. Teleporter ensures that messages can still be delivered even in this event by allowing for retries of previously submitted messages.
+2. Retries: In certain edge cases when there is significant validator churn, it is possible for an ICM Message to be dropped before a valid aggregate signature is created for it. Teleporter ensures that messages can still be delivered even in this event by allowing for retries of previously submitted messages.
3. Relay incentivization: Teleporter provides a mechanism for messages to optionally incentivize relayers to perform the necessary signature aggregation and pay the transaction fee to broadcast the signed message on the destination chain.
4. Allowed relayers: Teleporter allows users to specify a list of `allowedRelayerAddresses`, where only the specified addresses can relay and deliver the Teleporter message. Leaving this list empty allows all relayers to deliver.
5. Message execution: Teleporter enables cross-chain messages to have direct effect on their destination chain by using `evm.Call()` to invoke the `receiveTeleporterMessage` function of destination contracts that implement the `ITeleporterReceiver` interface.
## Fees
-Fees can be paid on a per message basis by specifing the ERC20 asset and amount to be used to incentivize a relayer to deliver the message in the call to `sendCrossChainMessage`. The fee amount is transferred into the control of the Teleporter contract (i.e. locked) before the Warp message is sent. The Teleporter contract tracks the fee amount for each message ID it creates. When it subsequently receives a message back from the destination chain of the original message, the new message will have a list of receipts identifying the relayer that delivered the given message ID. At this point, the fee amount originally locked by Teleporter for the given message will be redeemable by the relayer identified in the receipt. If the initial fee amount was not sufficient to incentivize a relayer, it can be added to by using `addFeeAmount`.
+Fees can be paid on a per message basis by specifing the ERC20 asset and amount to be used to incentivize a relayer to deliver the message in the call to `sendCrossChainMessage`. The fee amount is transferred into the control of the Teleporter contract (i.e. locked) before the ICM message is sent. The Teleporter contract tracks the fee amount for each message ID it creates. When it subsequently receives a message back from the destination chain of the original message, the new message will have a list of receipts identifying the relayer that delivered the given message ID. At this point, the fee amount originally locked by Teleporter for the given message will be redeemable by the relayer identified in the receipt. If the initial fee amount was not sufficient to incentivize a relayer, it can be added to by using `addFeeAmount`.
### Message Receipts and Fee Redemption
@@ -61,9 +61,9 @@ Note that due to [EIP-150](https://eips.ethereum.org/EIPS/eip-150), the lesser o
## Resending a Message
-If the sending Avalanche L1's validator set changes, then it's possible for the receiving Avalanche L1 to reject the underlying Warp message due to insufficient signing stake. For example, suppose L1 A has 5 validators with equal stake weight who all sign a Teleporter message sent to L1 B. 100% of L1 A's stake has signed the message. Also suppose L1 B requires 67% of the sending L1's stake to have signed a given Warp message in order for it to be accepted. Before the message can be delivered, however, 5 _more_ validators are added to L1 A's validator set (all with the same stake weight as the original validators), meaning that the Teleporter message was signed by _only 50%_ of L1 A's stake. L1 B will reject this message.
+If the sending Avalanche L1's validator set changes, then it's possible for the receiving Avalanche L1 to reject the underlying ICM message due to insufficient signing stake. For example, suppose L1 A has 5 validators with equal stake weight who all sign a Teleporter message sent to L1 B. 100% of L1 A's stake has signed the message. Also suppose L1 B requires 67% of the sending L1's stake to have signed a given ICM message in order for it to be accepted. Before the message can be delivered, however, 5 _more_ validators are added to L1 A's validator set (all with the same stake weight as the original validators), meaning that the Teleporter message was signed by _only 50%_ of L1 A's stake. L1 B will reject this message.
-Once sent on chain, Warp messages cannot be re-signed by a new validator set in such a scenario. Teleporter, however, does support re-signing via the function `retrySendCrossChainMessage`, which can be called for any message that has not been acknowledged as delivered to its destination. Under the hood, this packages the Teleporter message into a brand new Warp message that is re-signed by the current validator set.
+Once sent on chain, ICM messages cannot be re-signed by a new validator set in such a scenario. Teleporter, however, does support re-signing via the function `retrySendCrossChainMessage`, which can be called for any message that has not been acknowledged as delivered to its destination. Under the hood, this packages the Teleporter message into a brand new ICM message that is re-signed by the current validator set.
## Teleporter Messenger Contract Deployment
diff --git a/contracts/teleporter/registry/README.md b/contracts/teleporter/registry/README.md
index d728b7d1b..9918da0d3 100644
--- a/contracts/teleporter/registry/README.md
+++ b/contracts/teleporter/registry/README.md
@@ -6,10 +6,10 @@ The `TeleporterMessenger` contract is non-upgradable, once a version of the cont
However, there could still be new versions of `TeleporterMessenger` contracts needed to be deployed in the future. `TeleporterRegistry` provides applications that use a `TeleporterMessenger` instance a minimal step process to integrate with new versions of `TeleporterMessenger`.
-The `TeleporterRegistry` maintains a mapping of `TeleporterMessenger` contract versions to their addresses. When a new `TeleporterMessenger` version is deployed, its address can be added to the `TeleporterRegistry`. The `TeleporterRegistry` can only be updated through a Warp off-chain message that meets the following requirements:
+The `TeleporterRegistry` maintains a mapping of `TeleporterMessenger` contract versions to their addresses. When a new `TeleporterMessenger` version is deployed, its address can be added to the `TeleporterRegistry`. The `TeleporterRegistry` can only be updated through an ICM off-chain message that meets the following requirements:
- `sourceChainAddress` must match `VALIDATORS_SOURCE_ADDRESS = address(0)`
- - The zero address can only be set as the source chain address by a Warp off-chain message, and cannot be set by an on-chain Warp message.
+ - The zero address can only be set as the source chain address by an ICM off-chain message, and cannot be set by an on-chain ICM message.
- `sourceBlockchainID` must match the blockchain ID that the registry is deployed on
- `destinationBlockchainID` must match the blockchain ID that the registry is deployed on
- `destinationAddress` must match the address of the registry
diff --git a/contracts/teleporter/registry/UPGRADING.md b/contracts/teleporter/registry/UPGRADING.md
index d4fc3d1d2..c42723fdb 100644
--- a/contracts/teleporter/registry/UPGRADING.md
+++ b/contracts/teleporter/registry/UPGRADING.md
@@ -1,36 +1,36 @@
-# Upgrading Teleporter
+# Upgrading TeleporterMessenger
This document outlines the high-level steps necessary to upgrade Teleporter as an Avalanche L1 operator, a relayer operator, and a dApp admin. As a reference, the [Teleporter Registry test suite](../../../tests/flows/teleporter_registry.go) implements the steps described in a test environment.
-## Register a New Teleporter Version
+## Register a New TeleporterMessenger Version
-Once a new Teleporter contract instance is [deployed](../../../utils/contract-deployment/README.md), the `addProtocolVersion` method of [TeleporterRegistry.sol](./TeleporterRegistry.sol) must be called. This method is only callable if the associated Warp message was sent via an off-chain Warp message, which is provided by a validator's chain config.
+Once a new Teleporter contract instance is [deployed](../../../utils/contract-deployment/README.md), the `addProtocolVersion` method of [TeleporterRegistry.sol](./TeleporterRegistry.sol) must be called. This method is only callable if the associated ICM message was sent via an off-chain ICM message, which is provided by a validator's chain config.
The steps to do so are as follows:
-1. Construct the unsigned Warp message bytes:
+1. Construct the unsigned ICM message bytes:
- a. Pack the Warp payload to be parsed by `addProtocolVersion`. This is a tuple of `(ProtocolRegistryEntry, address)`, where the `ProtocolRegistryEntry` specifies the new `TeleporterMessenger` contract address and the version, and the `address` specifies the `TeleporterRegistry` contract address that the new Teleporter version will be registered with.
+ a. Pack the ICM payload to be parsed by `addProtocolVersion`. This is a tuple of `(ProtocolRegistryEntry, address)`, where the `ProtocolRegistryEntry` specifies the new `TeleporterMessenger` contract address and the version, and the `address` specifies the `TeleporterRegistry` contract address that the new Teleporter version will be registered with.
- b. Pack the Warp payload as an [AddressedCall](https://github.com/ava-labs/avalanchego/blob/v1.11.3/vms/platformvm/warp/payload/addressed_call.go#L15), with the source address set to the zero address. This is how `addProtocolVersion` identifies this message as an off-chain Warp message.
+ b. Pack the ICM payload as an [AddressedCall](https://github.com/ava-labs/avalanchego/blob/v1.11.3/vms/platformvm/warp/payload/addressed_call.go#L15), with the source address set to the zero address. This is how `addProtocolVersion` identifies this message as an off-chain ICM message.
- c. Pack the `AddressedCall` message into an [unsigned Warp message](https://github.com/ava-labs/avalanchego/blob/v1.11.3/vms/platformvm/warp/unsigned_message.go#L14), specifying the blockchain ID that `TeleporterRegistry` and the new `TeleporterMessenger` are deployed to.
+ c. Pack the `AddressedCall` message into an [unsigned ICM message](https://github.com/ava-labs/avalanchego/blob/v1.11.3/vms/platformvm/warp/unsigned_message.go#L14), specifying the blockchain ID that `TeleporterRegistry` and the new `TeleporterMessenger` are deployed to.
-2. Populate the "warp-off-chain-messages" field of each validator node's chain config with the hex-encoded unsigned Warp message bytes.
+2. Populate the "warp-off-chain-messages" field of each validator node's chain config with the hex-encoded unsigned ICM message bytes.
-3. Restart the node to mark the off-chain Warp message as eligible for signing by the validator.
+3. Restart the node to mark the off-chain ICM message as eligible for signing by the validator.
-To actually register the new Teleporter version with the registry, the validators must be queried for their signature of the message, the signatures aggregated, and a signed Warp message created to be included in the transaction that calls `addProtocolVersion`. As an example, [AWM Relayer](https://github.com/ava-labs/awm-relayer) provides this functionality. The following steps illustrate how to use AWM Relayer to register the new Teleporter version.
+To actually register the new Teleporter version with the registry, the validators must be queried for their signature of the message, the signatures aggregated, and a signed ICM message created to be included in the transaction that calls `addProtocolVersion`. As an example, [AWM Relayer](https://github.com/ava-labs/awm-relayer) provides this functionality. The following steps illustrate how to use AWM Relayer to register the new Teleporter version.
1. Construct a "manual-warp-messages" entry in the AWM Relayer configuration file, using the following values:
- a. "unsigned-message-bytes": the hex-encoded unsigned Warp message bytes derived above.
+ a. "unsigned-message-bytes": the hex-encoded unsigned ICM message bytes derived above.
b. "source-blockchain-id": the blockchain ID that that `TeleporterRegistry` and the new `TeleporterMessenger` are deployed to.
c. "destination-blockchain-id": the blockchain ID that that `TeleporterRegistry` and the new `TeleporterMessenger` are deployed to.
- d. "source-address": the zero address, "0x0000000000000000000000000000000000000000". This is the "source" address for off-chain Warp messages.
+ d. "source-address": the zero address, "0x0000000000000000000000000000000000000000". This is the "source" address for off-chain ICM messages.
2. Add the `TeleporterRegistry` as a supported message type by adding the following entry to the list of "message-contracts":
@@ -46,4 +46,4 @@ To actually register the new Teleporter version with the registry, the validator
}
```
-3. Restart the relayer. On startup, it will query the validator nodes for their BLS signatures on the off-chain Warp message, construct an aggregate signature and signed Warp message, and use it to call `addProtocolVersion` in the registry.
+3. Restart the relayer. On startup, it will query the validator nodes for their BLS signatures on the off-chain ICM message, construct an aggregate signature and signed ICM message, and use it to call `addProtocolVersion` in the registry.
diff --git a/contracts/validator-manager/ValidatorMessages.sol b/contracts/validator-manager/ValidatorMessages.sol
index 4c9185869..b54b51e38 100644
--- a/contracts/validator-manager/ValidatorMessages.sol
+++ b/contracts/validator-manager/ValidatorMessages.sol
@@ -7,7 +7,7 @@ pragma solidity 0.8.25;
import {PChainOwner, ConversionData} from "./interfaces/IValidatorManager.sol";
/**
- * @dev Packing utilities for the Warp message types used by the Validator Manager contracts, as specified in ACP-77:
+ * @dev Packing utilities for the ICM message types used by the Validator Manager contracts, as specified in ACP-77:
* https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets
*/
library ValidatorMessages {
@@ -148,7 +148,7 @@ library ValidatorMessages {
* +------------------------+
*
* @dev Input validation is skipped, since the returned value is intended to be compared
- * directly with an authenticated Warp message.
+ * directly with an authenticated ICM message.
* @param conversionData The struct representing data to pack into the message.
* @return The packed message.
*/
diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol
index 3a7597f5e..1bf619ca8 100644
--- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol
+++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol
@@ -67,7 +67,7 @@ interface IPoSValidatorManager is IValidatorManager {
* @param nonce The message nonce used to update the validator weight
* @param validatorWeight The updated validator weight that is sent to the P-Chain
* @param delegatorWeight The weight of the delegator
- * @param setWeightMessageID The ID of the Warp message that updates the validator's weight on the P-Chain
+ * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain
*/
event DelegatorAdded(
bytes32 indexed delegationID,
@@ -118,7 +118,7 @@ interface IPoSValidatorManager is IValidatorManager {
* @notice Updates the uptime of the validationID if the submitted proof is greated than the stored uptime.
* Anybody may call this function to ensure the stored uptime is accurate. Callable only when the validation period is active.
* @param validationID The ID of the validation period
- * @param messageIndex The index of the Warp message to be received providing the uptime proof
+ * @param messageIndex The index of the ICM message to be received providing the uptime proof
*/
function submitUptimeProof(bytes32 validationID, uint32 messageIndex) external;
@@ -131,7 +131,7 @@ interface IPoSValidatorManager is IValidatorManager {
* @param validationID The ID of the validation period being ended.
* @param includeUptimeProof Whether or not an uptime proof is provided for the validation period. If no uptime proof is provided,
* the latest known uptime will be used.
- * @param messageIndex The index of the Warp message to be received providing the uptime proof.
+ * @param messageIndex The index of the ICM message to be received providing the uptime proof.
*/
function initializeEndValidation(
bytes32 validationID,
@@ -148,7 +148,7 @@ interface IPoSValidatorManager is IValidatorManager {
* @param validationID The ID of the validation period being ended.
* @param includeUptimeProof Whether or not an uptime proof is provided for the validation period. If no uptime proof is provided,
* the latest known uptime will be used.
- * @param messageIndex The index of the Warp message to be received providing the uptime proof.
+ * @param messageIndex The index of the ICM message to be received providing the uptime proof.
*/
function forceInitializeEndValidation(
bytes32 validationID,
@@ -165,7 +165,7 @@ interface IPoSValidatorManager is IValidatorManager {
* Note: Only the specified delegation will be marked as registered, even if the validator weight update
* message implicitly includes multiple weight changes.
* @param delegationID The ID of the delegation being registered.
- * @param messageIndex The index of the Warp message to be received providing the acknowledgement.
+ * @param messageIndex The index of the ICM message to be received providing the acknowledgement.
*/
function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) external;
@@ -181,7 +181,7 @@ interface IPoSValidatorManager is IValidatorManager {
* If the validator has completed its validation period, it has already provided an uptime proof, so {includeUptimeProof}
* will be ignored and can be set to false. If the validator has not completed its validation period and no uptime proof
* is provided, the latest known uptime will be used.
- * @param messageIndex If {includeUptimeProof} is true, the index of the Warp message to be received providing the
+ * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the
* uptime proof.
*/
function initializeEndDelegation(
@@ -201,7 +201,7 @@ interface IPoSValidatorManager is IValidatorManager {
* If the validator has completed its validation period, it has already provided an uptime proof, so {includeUptimeProof}
* will be ignored and can be set to false. If the validator has not completed its validation period and no uptime proof
* is provided, the latest known uptime will be used.
- * @param messageIndex If {includeUptimeProof} is true, the index of the Warp message to be received providing the
+ * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the
* uptime proof.
*/
function forceInitializeEndDelegation(
@@ -226,7 +226,7 @@ interface IPoSValidatorManager is IValidatorManager {
* Note: Only the specified delegation will be marked as completed, even if the validator weight update
* message implicitly includes multiple weight changes.
* @param delegationID The ID of the delegation being removed.
- * @param messageIndex The index of the Warp message to be received providing the acknowledgement.
+ * @param messageIndex The index of the ICM message to be received providing the acknowledgement.
*/
function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) external;
diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol
index 660e64858..3d7dfe7b4 100644
--- a/contracts/validator-manager/interfaces/IValidatorManager.sol
+++ b/contracts/validator-manager/interfaces/IValidatorManager.sol
@@ -102,7 +102,7 @@ interface IValidatorManager {
* emitted.
* @param validationID The ID of the validation period being created.
* @param nodeID The node ID of the validator being registered.
- * @param registerValidationMessageID The ID of the Warp message that will be sent to the P-Chain to register the
+ * @param registerValidationMessageID The ID of the ICM message that will be sent to the P-Chain to register the
* validation period.
* @param weight The weight of the validator being registered.
* @param registrationExpiry The Unix timestamp after which the reigistration is no longer valid on the P-Chain.
@@ -135,7 +135,7 @@ interface IValidatorManager {
* {initializeEndValidation}.
* Note: The stake for this validation period remains locked until a {ValidationPeriodRemoved} event is emitted.
* @param validationID The ID of the validation period being removed.
- * @param setWeightMessageID The ID of the Warp message that updates the validator's weight on the P-Chain.
+ * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain.
* @param weight The weight of the validator being removed.
* @param endTime The time at which the removal was initiated.
*/
@@ -159,7 +159,7 @@ interface IValidatorManager {
* @param validationID The ID of the validation period being updated
* @param nonce The message nonce used to update the validator weight
* @param validatorWeight The updated validator weight that is sent to the P-Chain
- * @param setWeightMessageID The ID of the Warp message that updates the validator's weight on the P-Chain
+ * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain
*/
event ValidatorWeightUpdate(
bytes32 indexed validationID,
@@ -171,7 +171,7 @@ interface IValidatorManager {
/**
* @notice Verifies and sets the initial validator set for the chain through a P-Chain SubnetToL1ConversionMessage.
* @param conversionData The subnet conversion message data used to recompute and verify against the conversionID.
- * @param messsageIndex The index that contains the SubnetToL1ConversionMessage Warp message containing the conversionID to be verified against the provided {ConversionData}
+ * @param messsageIndex The index that contains the SubnetToL1ConversionMessage ICM message containing the conversionID to be verified against the provided {ConversionData}
*/
function initializeValidatorSet(
ConversionData calldata conversionData,
@@ -188,7 +188,7 @@ interface IValidatorManager {
/**
* @notice Completes the validator registration process by returning an acknowledgement of the registration of a
* validationID from the P-Chain.
- * @param messageIndex The index of the Warp message to be received providing the acknowledgement.
+ * @param messageIndex The index of the ICM message to be received providing the acknowledgement.
*/
function completeValidatorRegistration(uint32 messageIndex) external;
@@ -205,7 +205,7 @@ interface IValidatorManager {
* with the validation.
* Note: This function can be used for successful validation periods that have been explicitly ended by calling
* {initializeEndValidation} or for validation periods that never began on the P-Chain due to the {registrationExpiry} being reached.
- * @param messageIndex The index of the Warp message to be received providing the proof the validation is not active
+ * @param messageIndex The index of the ICM message to be received providing the proof the validation is not active
* and never will be active on the P-Chain.
*/
function completeEndValidation(uint32 messageIndex) external;
diff --git a/tests/flows/governance/validator_set_sig.go b/tests/flows/governance/validator_set_sig.go
index 6a757c89f..655e58222 100644
--- a/tests/flows/governance/validator_set_sig.go
+++ b/tests/flows/governance/validator_set_sig.go
@@ -20,7 +20,7 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
// Deploy ValidatorSetSig expecting signatures from L1B instances to both L1s
// Deploy exampleERC20 instance to both L1s
// Construct ValidatorSetSig message with mock ERC20 as the target contract
- // Create off-chain Warp messages using the ValidatorSetSig message to be signed by the L1B
+ // Create off-chain ICM messages using the ValidatorSetSig message to be signed by the L1B
// ************************************************************************************************
// Test Case 1: validatorChain (L1B) != targetChain (L1A)
// ************************************************************************************************
@@ -128,7 +128,7 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
// Create chain config file with off-chain validatorsetsig message
networkID := network.GetNetworkID()
- offchainMessages, warpEnabledChainConfigWithMsg := utils.InitOffChainMessageChainConfigValidatorSetSig(
+ offchainMessages, icmEnabledChainConfigWithMsg := utils.InitOffChainMessageChainConfigValidatorSetSig(
networkID,
L1B,
validatorSetSigContractAddress,
@@ -137,7 +137,7 @@ func ValidatorSetSig(network *localnetwork.LocalNetwork) {
// Create chain config with off-chain messages
chainConfigs := make(utils.ChainConfigMap)
- chainConfigs.Add(L1B, warpEnabledChainConfigWithMsg)
+ chainConfigs.Add(L1B, icmEnabledChainConfigWithMsg)
// Restart nodes with new chain config
network.SetChainConfigs(chainConfigs)
diff --git a/tests/flows/teleporter/basic_send_receive.go b/tests/flows/teleporter/basic_send_receive.go
index dc0b138f0..8c0569b28 100644
--- a/tests/flows/teleporter/basic_send_receive.go
+++ b/tests/flows/teleporter/basic_send_receive.go
@@ -19,7 +19,7 @@ func BasicSendReceive(network *localnetwork.LocalNetwork, teleporter utils.Telep
teleporterContractAddress := teleporter.TeleporterMessengerAddress(L1AInfo)
fundedAddress, fundedKey := network.GetFundedAccountInfo()
- // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
+ // Send a transaction to L1 A to issue a ICM Message from the Teleporter contract to L1 B
ctx := context.Background()
// Clear the receipt queue from L1 B -> L1 A to have a clean slate for the test flow.
@@ -79,7 +79,7 @@ func BasicSendReceive(network *localnetwork.LocalNetwork, teleporter utils.Telep
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
- // Send a transaction to L1 B to issue a Warp Message from the Teleporter contract to L1 A
+ // Send a transaction to L1 B to issue a ICM Message from the Teleporter contract to L1 A
sendCrossChainMessageInput.DestinationBlockchainID = L1AInfo.BlockchainID
sendCrossChainMessageInput.FeeInfo.Amount = big.NewInt(0)
receipt, teleporterMessageID = utils.SendCrossChainMessageAndWaitForAcceptance(
diff --git a/tests/flows/teleporter/relay_message_twice.go b/tests/flows/teleporter/relay_message_twice.go
index 6ec7c913e..c3eef93ec 100644
--- a/tests/flows/teleporter/relay_message_twice.go
+++ b/tests/flows/teleporter/relay_message_twice.go
@@ -20,7 +20,7 @@ func RelayMessageTwice(network *localnetwork.LocalNetwork, teleporter utils.Tele
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
+ // Send a transaction to L1 A to issue a ICM Message from the Teleporter contract to L1 B
//
ctx := context.Background()
diff --git a/tests/flows/teleporter/resubmit_altered_message.go b/tests/flows/teleporter/resubmit_altered_message.go
index 08c817244..d4cbc9e32 100644
--- a/tests/flows/teleporter/resubmit_altered_message.go
+++ b/tests/flows/teleporter/resubmit_altered_message.go
@@ -18,7 +18,7 @@ func ResubmitAlteredMessage(network *localnetwork.LocalNetwork, teleporter utils
L1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
- // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
+ // Send a transaction to L1 A to issue a ICM Message from the Teleporter contract to L1 B
ctx := context.Background()
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
@@ -67,7 +67,7 @@ func ResubmitAlteredMessage(network *localnetwork.LocalNetwork, teleporter utils
tx, err := teleporter.TeleporterMessenger(L1AInfo).RetrySendCrossChainMessage(opts, teleporterMessage)
Expect(err).ShouldNot(BeNil())
- // We expect the tx to be nil because the Warp message failed verification, which happens in the predicate
+ // We expect the tx to be nil because the ICM message failed verification, which happens in the predicate
// In that case, the block is never built, and the transaction is never mined
Expect(tx).Should(BeNil())
}
diff --git a/tests/flows/teleporter/unallowed_relayer.go b/tests/flows/teleporter/unallowed_relayer.go
index 710aaba7f..910e0d68d 100644
--- a/tests/flows/teleporter/unallowed_relayer.go
+++ b/tests/flows/teleporter/unallowed_relayer.go
@@ -19,7 +19,7 @@ func UnallowedRelayer(network *localnetwork.LocalNetwork, teleporter utils.Telep
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Send a transaction to L1 A to issue a Warp Message from the Teleporter contract to L1 B
+ // Send a transaction to L1 A to issue a ICM Message from the Teleporter contract to L1 B
// The Teleporter message includes an allowed relayer list that does NOT include the relayer
//
ctx := context.Background()
diff --git a/utils/contract-deployment/README.md b/utils/contract-deployment/README.md
index 5af9f384c..a4cb0b4cf 100644
--- a/utils/contract-deployment/README.md
+++ b/utils/contract-deployment/README.md
@@ -1,6 +1,6 @@
# Teleporter Contract Deployment
-The `TeleporterMessenger` contract is designed to only send and receive Avalanche Warp messages to and from its own address on different chains. We ensure that the contract can be deployed to the same address on every EVM based chain by using [Nick's Method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c). Only allowing messages to be sent and received by the same address guarantees that all messages use the same Teleporter message format because only the same exact contract bytecode could have been deployed to the same address.
+The `TeleporterMessenger` contract is designed to only send and receive Avalanche ICM messages to and from its own address on different chains. We ensure that the contract can be deployed to the same address on every EVM based chain by using [Nick's Method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c). Only allowing messages to be sent and received by the same address guarantees that all messages use the same Teleporter message format because only the same exact contract bytecode could have been deployed to the same address.
This directory contains scripts written in Golang to construct a raw transaction using Nick's method that deploys the Teleporter contract, and determine the keyless address that must be prefunded in order for the transaction to be sent.
From ba76f3fb26eef7fe9ab2e377c61c767c5848a6e4 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 20 Nov 2024 06:49:32 -0500
Subject: [PATCH 03/15] Teleporter to ICM or TeleporterMessenger
---
CONTRIBUTING.md | 2 +-
README.md | 26 ++++-----
SECURITY.md | 2 +-
cmd/teleporter-cli/message.go | 6 +-
contracts/ictt/README.md | 14 ++---
contracts/teleporter/README.md | 46 +++++++--------
contracts/teleporter/registry/README.md | 66 +++++++++++-----------
contracts/teleporter/registry/UPGRADING.md | 8 +--
utils/contract-deployment/README.md | 10 ++--
utils/deployment-utils/deployment_utils.go | 4 +-
10 files changed, 91 insertions(+), 93 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d9f4c8306..e3ac5926b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -53,4 +53,4 @@ To start developing on Teleporter, you'll need Solidity >= v0.8.25. [Foundry](ht
### Do you have questions about the source code?
-- Ask any question about Teleporter under GitHub [discussions](https://github.com/ava-labs/teleporter/discussions/categories/q-a).
+- Ask any question about ICM or ICM contracts under GitHub [discussions](https://github.com/ava-labs/teleporter/discussions/categories/q-a).
diff --git a/README.md b/README.md
index 6768c8249..0608c0697 100644
--- a/README.md
+++ b/README.md
@@ -8,9 +8,9 @@ To get started with building ICM contracts, refer to [the avalanche-starter-kit
It's important to understand the distinction between Avalanche I Messaging and Teleporter. AWM allows Avalanche L1s to communicate with each other via authenticated messages by providing signing and verification primitives in Avalanchego. These are used by the blockchain VMs to sign outgoing messages and verify incoming messages.
-The `TeleporterMessenger` contract is a user-friendly interface to ICM, aimed at dApp developers. All of the message signing and verification is abstracted away from developers. Instead, developers simply call `sendCrossChainMessage` on the `TeleporterMessenger` contract to send a message invoking a smart contract on another Avalanche L1, and implement the `ITeleporterReceiver` interface to receive messages on the destination Avalanche L1. Teleporter handles all of the ICM message construction and sending, as well as the message delivery and execution.
+The `TeleporterMessenger` contract is a user-friendly interface to ICM, aimed at dApp developers. All of the message signing and verification is abstracted away from developers. Instead, developers simply call `sendCrossChainMessage` on the `TeleporterMessenger` contract to send a message invoking a smart contract on another Avalanche L1, and implement the `ITeleporterReceiver` interface to receive messages on the destination Avalanche L1. `TeleporterMessenger` handles all of the ICM message construction and sending, as well as the message delivery and execution.
-To get started with using Teleporter, see [How to Deploy Teleporter Enabled Avalanche L1s on a Local Network](https://docs.avax.network/tooling/cli-cross-chain/teleporter-on-local-networks)
+To get started with using `TeleporterMessenger`, see [How to Deploy ICM Enabled Avalanche L1s on a Local Network](https://docs.avax.network/tooling/cli-cross-chain/teleporter-on-local-networks)
- [Deployed Addresses](#deployed-addresses)
- [A Note on Versioning](#a-note-on-versioning)
@@ -35,13 +35,13 @@ To get started with using Teleporter, see [How to Deploy Teleporter Enabled Aval
| `TeleporterRegistry` | **0x7C43605E14F391720e1b37E49C78C4b03A488d98** | Mainnet C-Chain |
| `TeleporterRegistry` | **0xF86Cb19Ad8405AEFa7d09C778215D2Cb6eBfB228** | Fuji C-Chain |
-- Using [Nick's method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c#), `TeleporterMessenger` deploys at a universal address across all chains, varying with each `teleporter` Major release. **Compatibility exists only between same-version `TeleporterMessenger` instances.** See [Teleporter Contract Deployment](./utils/contract-deployment/README.md) and [Deploy Teleporter to an Avalanche L1](#deploy-teleportermessenger-to-an-avalanche-l1) for more details.
+- Using [Nick's method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c#), `TeleporterMessenger` deploys at a universal address across all chains, varying with each `teleporter` Major release. **Compatibility exists only between same-version `TeleporterMessenger` instances.** See [TeleporterMessenger Contract Deployment](./utils/contract-deployment/README.md) and [Deploy TeleporterMessenger to an Avalanche L1](#deploy-teleportermessenger-to-an-avalanche-l1) for more details.
- `TeleporterRegistry` can be deployed to any address. See [Deploy TeleporterRegistry to an Avalanche L1](#deploy-teleporterregistry-to-an-avalanche-l1) for details. The table above enumerates the canonical registry addresses on the Mainnet and Fuji C-Chains.
## A Note on Versioning
-Release versions follow the [semver](https://semver.org/) convention of incompatible Major releases. A new Major version is released whenever the `TeleporterMessenger` bytecode is changed, and a new version of `TeleporterMessenger` is meant to be deployed. Due to the use of Nick's method to deploy the contract to the same address on all chains (see [Teleporter Contract Deployment](./utils/contract-deployment/README.md) for details), this also means that new release versions would result in different Teleporter contract addresses. Minor and Patch versions may pertain to contract changes that do not change the `TeleporterMessenger` bytecode, or to changes in the test frameworks, and will only be included in tags.
+Release versions follow the [semver](https://semver.org/) convention of incompatible Major releases. A new Major version is released whenever the `TeleporterMessenger` bytecode is changed, and a new version of `TeleporterMessenger` is meant to be deployed. Due to the use of Nick's method to deploy the contract to the same address on all chains (see [TeleporterMessenger Contract Deployment](./utils/contract-deployment/README.md) for details), this also means that new release versions would result in different `TeleporterMessenger` contract addresses. Minor and Patch versions may pertain to contract changes that do not change the `TeleporterMessenger` bytecode, or to changes in the test frameworks, and will only be included in tags.
## Setup
@@ -63,11 +63,9 @@ Release versions follow the [semver](https://semver.org/) convention of incompat
- `abi-bindings/` includes Go ABI bindings for the contracts in `contracts/`.
- `tests/` includes integration tests for the contracts in `contracts/`, written using the [Ginkgo](https://onsi.github.io/ginkgo/) testing framework.
- `utils/` includes Go utility functions for interacting with the contracts in `contracts/`. Included are Golang scripts to derive the expected EVM contract address deployed from a given EOA at a specific nonce, and also construct a transaction to deploy provided byte code to the same address on any EVM chain using [Nick's method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c#).
-- `scripts/` includes bash scripts for interacting with Teleporter in various environments, as well as utility scripts.
+- `scripts/` includes bash scripts for interacting with TeleporterMessenger in various environments, as well as utility scripts.
- `abi_bindings.sh` generates ABI bindings for the contracts in `contracts/` and outputs them to `abi-bindings/`.
- `lint.sh` performs Solidity and Golang linting.
- - `scripts/` includes scripts for running Teleporter in Docker.
-- `docker/` includes configurations for a local, containerized setup of Teleporter.
## E2E tests
@@ -111,11 +109,11 @@ GINKGO_LABEL_FILTER="cross chain apps" ./scripts/e2e_test.sh
## Upgradability
-The Teleporter contract is non-upgradeable and can not be changed once it is deployed. This provides immutability to the contracts, and ensures that the contract's behavior at each address is unchanging. However, to allow for new features and potential bug fixes, new versions of the Teleporter contract can be deployed to different addresses. The [TeleporterRegistry](./contracts/teleporter/TeleporterRegistry.sol) is used to keep track of the deployed versions of Teleporter, and to provide a standard interface for dApps to interact with the different Teleporter versions.
+`TeleporterMessenger` is a non-upgradeable contract and can not be changed once it is deployed. This provides immutability to the contracts, and ensures that the contract's behavior at each address is unchanging. However, to allow for new features and potential bug fixes, new versions of `TeleporterMessenger` can be deployed to different addresses. The [TeleporterRegistry](./contracts/teleporter/TeleporterRegistry.sol) is used to keep track of the deployed versions of Teleporter, and to provide a standard interface for dApps to interact with the different `TeleporterMessenger` versions.
-`TeleporterRegistry` **is not mandatory** for dApps built on top of Teleporter, but dApp's are recommended to leverage the registry to ensure they use the latest Teleporter version available. Another recommendation standard is to have a single canonical `TeleporterRegistry` for each Avalanche L1, and unlike the Teleporter contract, the registry does not need to be deployed to the same address on every chain. This means the registry does not need a Nick's method deployment, and can be at different contract addresses on different chains.
+`TeleporterRegistry` **is not mandatory** for dApps built on top of ICM, but dApp's are recommended to leverage the registry to ensure they use the latest `TeleporterMessenger` version available. Another recommendation standard is to have a single canonical `TeleporterRegistry` for each Avalanche L1, and unlike the `TeleporterMessenger` contract, the registry does not need to be deployed to the same address on every chain. This means the registry does not need a Nick's method deployment, and can be at different contract addresses on different chains.
-For more information on the registry and how to integrate with Teleporter dApps, see the [Upgradability doc](./contracts/teleporter/registry/README.md).
+For more information on the registry and how to integrate with ICM contracts, see the [Upgradability doc](./contracts/teleporter/registry/README.md).
## Deploy TeleporterMessenger to an Avalanche L1
@@ -127,14 +125,14 @@ From the root of the repo, the TeleporterMessenger contract can be deployed by c
Required arguments:
-- `--version ` Specify the release version to deploy. These will all be of the form `v1.X.0`. Each Teleporter version can only send and receive messages from the **same** Teleporter version on another chain. You can see a list of released versions at https://github.com/ava-labs/teleporter/releases.
+- `--version ` Specify the release version to deploy. These will all be of the form `v1.X.0`. Each `TeleporterMessenger` version can only send and receive messages from the **same** `TeleporterMessenger` version on another chain. You can see a list of released versions at https://github.com/ava-labs/teleporter/releases.
- `--rpc-url ` Specify the rpc url of the node to use.
Options:
- `--private-key ` Funds the deployer address with the account held by ``
-To ensure that Teleporter can be deployed to the same address on every EVM based chain, it uses [Nick's Method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c) to deploy from a static deployer address. Teleporter costs exactly `10eth` in the Avalanche L1's native gas token to deploy, which must be sent to the deployer address.
+To ensure that `TeleporterMessenger` can be deployed to the same address on every EVM based chain, it uses [Nick's Method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c) to deploy from a static deployer address. Teleporter costs exactly `10eth` in the Avalanche L1's native gas token to deploy, which must be sent to the deployer address.
`deploy_teleporter.sh` will send the necessary native tokens to the deployer address if it is provided with a private key for an account with sufficient funds. Alternatively, the deployer address can be funded externally. The deployer address for each version can be found by looking up the appropriate version at https://github.com/ava-labs/teleporter/releases and downloading `TeleporterMessenger_Deployer_Address_.txt`.
@@ -142,7 +140,7 @@ Alternatively for new Avalanche L1s, the `TeleporterMessenger` contract can be d
## Deploy TeleporterRegistry to an Avalanche L1
-There should only be one canonical `TeleporterRegistry` deployed for each chain, but if one does not exist, it is recommended to deploy the registry so Teleporter dApps can always use the most recent Teleporter version available. The registry does not need to be deployed to the same address on every chain, and therefore does not need a Nick's method transaction. To deploy, run the following command from the root of the repository:
+There should only be one canonical `TeleporterRegistry` deployed for each chain, but if one does not exist, it is recommended to deploy the registry so ICM contracts can always use the most recent `TeleporterMessenger` version available. The registry does not need to be deployed to the same address on every chain, and therefore does not need a Nick's method transaction. To deploy, run the following command from the root of the repository:
```bash
./scripts/deploy_registry.sh --version --rpc-url --private-key [OPTIONS]
@@ -168,7 +166,7 @@ The auto-generated bindings should be written under the `abi-bindings/` director
## Docs
-- [Teleporter Protocol Overview](./contracts/teleporter/README.md)
+- [ICM Protocol Overview](./contracts/teleporter/README.md)
- [Teleporter Registry and Upgrades](./contracts/teleporter/registry/README.md)
- [Contract Deployment](./utils/contract-deployment/README.md)
- [Teleporter CLI](./cmd/teleporter-cli/README.md)
diff --git a/SECURITY.md b/SECURITY.md
index abe186d82..b3bd2c686 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -18,4 +18,4 @@ Please use the most recently released version to perform testing and to validate
## Audit Reports
-All complete audit reports for Teleporter can be found in the [audits](./audits/) directory.
+All complete audit reports for `TeleporterMessenger` can be found in the [audits](./audits/) directory.
diff --git a/cmd/teleporter-cli/message.go b/cmd/teleporter-cli/message.go
index 276d56ba4..435e367bd 100644
--- a/cmd/teleporter-cli/message.go
+++ b/cmd/teleporter-cli/message.go
@@ -13,8 +13,8 @@ import (
var messageCmd = &cobra.Command{
Use: "message MESSAGE_BYTES",
- Short: "Decodes hex encoded Teleporter message bytes into a TeleporterMessage struct",
- Long: `Given the hex encoded bytes of a Teleporter message, this command will decode
+ Short: "Decodes hex encoded TeleporterMessenger message bytes into a TeleporterMessage struct",
+ Long: `Given the hex encoded bytes of a TeleporterMessenger message, this command will decode
the bytes into a TeleporterMessage struct and print the struct fields.`,
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
@@ -25,7 +25,7 @@ the bytes into a TeleporterMessage struct and print the struct fields.`,
msg := teleportermessenger.TeleporterMessage{}
err = msg.Unpack(b)
cobra.CheckErr(err)
- logger.Info("Teleporter Message unpacked", zap.Any("message", msg))
+ logger.Info("TeleporterMessenger Message unpacked", zap.Any("message", msg))
cmd.Println("Message command ran successfully")
},
}
diff --git a/contracts/ictt/README.md b/contracts/ictt/README.md
index 8a637302a..e7a3942b3 100644
--- a/contracts/ictt/README.md
+++ b/contracts/ictt/README.md
@@ -4,7 +4,7 @@
Avalanche Interchain Token Transfer (ICTT) is an application that allows users to transfer tokens between L1s. The implementation is a set of smart contracts that are deployed across multiple L1s, and leverages [Teleporter](https://github.com/ava-labs/teleporter) for cross-chain communication.
-Each token transferrer instance consists of one "home" contract and at least one but possibly many "remote" contracts. Each home contract instance manages one asset to be transferred out to `TokenRemote` instances. The home contract lives on the L1 where the asset to be transferred exists. A transfer consists of locking the asset as collateral on the home L1 and minting a representation of the asset on the remote L1. The remote contracts, each of which has a single specified home contract, live on other L1s that want to import the asset transferred by their specified home. The token transferrers are designed to be permissionless: anyone can register compatible `TokenRemote` instances to allow for transferring tokens from the `TokenHome` instance to that new `TokenRemote` instance. The home contract keeps track of token balances transferred to each `TokenRemote` instance, and handles returning the original tokens back to the user when assets are transferred back to the `TokenHome` instance. `TokenRemote` instances are registered with their home contract via a Teleporter message upon creation.
+Each token transferrer instance consists of one "home" contract and at least one but possibly many "remote" contracts. Each home contract instance manages one asset to be transferred out to `TokenRemote` instances. The home contract lives on the L1 where the asset to be transferred exists. A transfer consists of locking the asset as collateral on the home L1 and minting a representation of the asset on the remote L1. The remote contracts, each of which has a single specified home contract, live on other L1s that want to import the asset transferred by their specified home. The token transferrers are designed to be permissionless: anyone can register compatible `TokenRemote` instances to allow for transferring tokens from the `TokenHome` instance to that new `TokenRemote` instance. The home contract keeps track of token balances transferred to each `TokenRemote` instance, and handles returning the original tokens back to the user when assets are transferred back to the `TokenHome` instance. `TokenRemote` instances are registered with their home contract via an ICM message upon creation.
Home contract instances specify the asset to be transferred as either an ERC20 token or the native token, and they allow for transferring the token to any registered `TokenRemote` instances. The token representation on the remote chain can also either be an ERC20 or native token, allowing users to have any combination of ERC20 and native tokens between home and remote chains:
@@ -17,7 +17,7 @@ The remote tokens are designed to have compatibility with the token transferrer
The token transferrer also supports "multi-hop" transfers, where tokens can be transferred between remote chains. To illustrate, consider two remotes _Ra_ and _Rb_ that are both connected to the same home _H_. A multi-hop transfer from _Ra_ to _Rb_ first gets routed from _Ra_ to _H_, where remote balances are updated, and then _H_ automatically routes the transfer on to _Rb_.
-In addition to supporting basic token transfers, the token transferrer contracts offer a `sendAndCall` interface for transferring tokens and using them in a smart contract interaction all within a single Teleporter message. If the call to the recipient smart contract fails, the transferred tokens are sent to a fallback recipient address on the destination chain of the transfer. The `sendAndCall` interface enables the direct use of transferred tokens in dApps on other chains, such as performing swaps, using the tokens to pay for fees when invoking services, etc.
+In addition to supporting basic token transfers, the token transferrer contracts offer a `sendAndCall` interface for transferring tokens and using them in a smart contract interaction all within a single ICM message. If the call to the recipient smart contract fails, the transferred tokens are sent to a fallback recipient address on the destination chain of the transfer. The `sendAndCall` interface enables the direct use of transferred tokens in dApps on other chains, such as performing swaps, using the tokens to pay for fees when invoking services, etc.
A breakdown of the structure of the contracts that implement this function can be found under `./contracts` [here](./contracts/README.md).
@@ -52,7 +52,7 @@ A concrete implementation of `TokenHome` and `INativeTokenTransferrer` that hand
## `TokenRemote`
-An abstract implementation of `ITokenTransferrer` for a token transfer contract on a "remote" chain that receives transferred assets from a specific `TokenHome` instance. Each `TokenRemote` instance has a single `TokenHome` instance that it receives token transfers from to mint tokens. It also handles sending messages (and correspondingly burning tokens) to route tokens back to other chains (either its `TokenHome`, or other `TokenRemote` instances). Once deployed, a `TokenRemote` instance must be registered with its specified `TokenHome` contract. This is done by calling `registerWithHome` on the remote contract, which will send a Teleporter message to the home contract with the information to register.
+An abstract implementation of `ITokenTransferrer` for a token transfer contract on a "remote" chain that receives transferred assets from a specific `TokenHome` instance. Each `TokenRemote` instance has a single `TokenHome` instance that it receives token transfers from to mint tokens. It also handles sending messages (and correspondingly burning tokens) to route tokens back to other chains (either its `TokenHome`, or other `TokenRemote` instances). Once deployed, a `TokenRemote` instance must be registered with its specified `TokenHome` contract. This is done by calling `registerWithHome` on the remote contract, which will send a ICM message to the home contract with the information to register.
All messages sent by `TokenRemote` instances are sent to the specified `TokenHome` contract, whether they are to redeem the collateral from the `TokenHome` instance or route the tokens to another `TokenRemote` instance. Routing tokens from one `TokenRemote` instance to another is referred to as a "multi-hop", where the tokens are first sent back to their `TokenHome` contract to update its accounting, and then automatically routed on to their intended destination `TokenRemote` instance.
@@ -74,7 +74,7 @@ To account for the need to bootstrap the chain using a transferred asset as its
1. Create a new blockchain with 100 native tokens allocated in its genesis block, and set the pre-derived `NativeTokenRemote` contract address (based on the deployer nonce) to have the permission to mint native tokens using the native minter precompile. Note that the deployer account will need to be funded in order to deploy the `NativeTokenRemote` contract, and an account used to relay messages into this chain must also be funded to relay the first messages.
2. Deploy the `NativeTokenRemote` contract to the pre-derived address set in the blockchain configuration of step 1. The `initialReserveImbalance` should be 100, matching the number of tokens allocated in the genesis block that were not initially backed by collateral in the `TokenHome` instance.
-3. Call the `registerWithHome` function on the `NativeTokenRemote` instance to send a Teleporter message registering this remote with its `TokenHome`. This message should be relayed and delivered to the `TokenHome` instance.
+3. Call the `registerWithHome` function on the `NativeTokenRemote` instance to send a ICM message registering this remote with its `TokenHome`. This message should be relayed and delivered to the `TokenHome` instance.
4. Once registered on the `TokenHome` contract, add 100 tokens as collateral for the new `NativeTokenRemote` instance by calling the `addCollateral` function on the `TokenHome` contract. A `CollateralAdded` event will be emitted by the `TokenHome` contract with a `remaining` amount of 0 once the `NativeTokenRemote` is fully collateralized.
5. Now that the `NativeTokenRemote` contract is fully collateralized, tokens can be moved normally in both directions across the token transfer contracts by calling their `send` functions.
@@ -87,8 +87,8 @@ The `totalNativeAssetSupply` implementation of `NativeTokenRemote` takes into ac
Note that the value returned by `totalNativeAssetSupply` is an upper bound on the circulating supply of the native asset on the chain using the `NativeTokenRemote` instance since tokens could be burned in other ways that it does not account for.
-## Teleporter Message Fees
+## ICM Message Fees
-Fees can be optionally added to Teleporter messages in order to incentivize relayers to deliver them, as documented [here](https://github.com/ava-labs/teleporter/tree/main/contracts/teleporter#fees). The token transfer contracts in this repository allow for specifying any ERC20 token and amount to be used as the Teleporter message fee for single-hop transfers in either direction between `TokenHome` and `TokenRemote` instances. Fee amounts must be pre-approved to be spent by the token transfer contract before initiating a transfer.
+Fees can be optionally added to ICM messages in order to incentivize relayers to deliver them, as documented [here](https://github.com/ava-labs/teleporter/tree/main/contracts/teleporter#fees). The token transfer contracts in this repository allow for specifying any ERC20 token and amount to be used as the ICM message fee for single-hop transfers in either direction between `TokenHome` and `TokenRemote` instances. Fee amounts must be pre-approved to be spent by the token transfer contract before initiating a transfer.
-Multi-hop transfers between two `TokenRemote` instances involve two Teleporter messages: the first from the initiating `TokenRemote` instance to its home, and the second from its home to the destination `TokenRemote` instance. In the multi-hop case, the first message fee can be paid in any ERC20 token and amount (similar to the single-hop case), but the second message fee must be paid in-kind of the asset being transferred and is deducted from the amount being transferred. This restriction on the secondary message fee is necessary because the transaction on the intermediate chain routing the funds to the destination `TokenRemote` instance is not sent by the wallet performing the transfer. Because of this, it can not directly spend an arbitrary ERC20 token from that wallet. Using the asset being transferred for the optional secondary fee allows users to perform an incentivized multi-hop transfer without needing to make any interaction with the home themselves. If there is a need for the second message from the home to the destination `TokenRemote` instance to pay a fee in another asset, it is recommended to perform two single-hop transfers, which allows for specifying an arbitrary ERC20 token to be used for the fee of each.
+Multi-hop transfers between two `TokenRemote` instances involve two ICM messages: the first from the initiating `TokenRemote` instance to its home, and the second from its home to the destination `TokenRemote` instance. In the multi-hop case, the first message fee can be paid in any ERC20 token and amount (similar to the single-hop case), but the second message fee must be paid in-kind of the asset being transferred and is deducted from the amount being transferred. This restriction on the secondary message fee is necessary because the transaction on the intermediate chain routing the funds to the destination `TokenRemote` instance is not sent by the wallet performing the transfer. Because of this, it can not directly spend an arbitrary ERC20 token from that wallet. Using the asset being transferred for the optional secondary fee allows users to perform an incentivized multi-hop transfer without needing to make any interaction with the home themselves. If there is a need for the second message from the home to the destination `TokenRemote` instance to pay a fee in another asset, it is recommended to perform two single-hop transfers, which allows for specifying an arbitrary ERC20 token to be used for the fee of each.
diff --git a/contracts/teleporter/README.md b/contracts/teleporter/README.md
index e93f2bca9..5689b8cf0 100644
--- a/contracts/teleporter/README.md
+++ b/contracts/teleporter/README.md
@@ -1,19 +1,19 @@
-# Teleporter Protocol
+# ICM Protocol
## Overview
-Teleporter is a messaging protocol built on top of [Avalanche Interchain Messaging (ICM)](https://docs.avax.network/learn/avalanche/awm) that provides a developer-friendly interface for sending and receiving cross-chain messages from within the EVM.
+`TeleporterMessenger` is a smart contract that is part of [Avalanche Interchain Messaging (ICM)](https://docs.avax.network/learn/avalanche/awm) that provides a developer-friendly interface for sending and receiving cross-chain messages from within the EVM.
The `ITeleporterMessenger` interface provides two primary methods:
- `sendCrossChainMessage`: called by contracts on the origin chain to initiate the sending of a message to a contract on another EVM instance.
- `receiveCrossChainMessage`: called by cross-chain relayers on the destination chain to deliver signed messages to the destination EVM instance.
-The `ITeleporterReceiver` interface provides a single method. All contracts that wish to receive Teleporter messages on the destination chain must implement this interface:
+The `ITeleporterReceiver` interface provides a single method. All contracts that wish to receive ICM messages on the destination chain must implement this interface:
-- `receiveTeleporterMessage`: called by the Teleporter contract on the destination chain to deliver a message to the destination contract.
+- `receiveTeleporterMessage`: called by `TeleporterMessenger` on the destination chain to deliver a message to the destination contract.
-> Note: If a contract does not implement `ITeleporterReceiver`, but instead implements [fallback](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function), the fallback function will be called when Teleporter attempts to perform message execution. The message execution is marked as failed if the fallback function reverts, otherwise it is marked as successfully executed.
+> Note: If a contract does not implement `ITeleporterReceiver`, but instead implements [fallback](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function), the fallback function will be called when `TeleporterMessenger` attempts to perform message execution. The message execution is marked as failed if the fallback function reverts, otherwise it is marked as successfully executed.
## Data Flow
@@ -25,47 +25,47 @@ The `ITeleporterReceiver` interface provides a single method. All contracts that
TeleporterMessenger provides a handful of useful properties to cross-chain applications that ICM messages do not provide by default. These include:
-1. Replay protection: Teleporter ensures that a cross-chain message is not delivered multiple times.
-2. Retries: In certain edge cases when there is significant validator churn, it is possible for an ICM Message to be dropped before a valid aggregate signature is created for it. Teleporter ensures that messages can still be delivered even in this event by allowing for retries of previously submitted messages.
-3. Relay incentivization: Teleporter provides a mechanism for messages to optionally incentivize relayers to perform the necessary signature aggregation and pay the transaction fee to broadcast the signed message on the destination chain.
-4. Allowed relayers: Teleporter allows users to specify a list of `allowedRelayerAddresses`, where only the specified addresses can relay and deliver the Teleporter message. Leaving this list empty allows all relayers to deliver.
-5. Message execution: Teleporter enables cross-chain messages to have direct effect on their destination chain by using `evm.Call()` to invoke the `receiveTeleporterMessage` function of destination contracts that implement the `ITeleporterReceiver` interface.
+1. Replay protection: `TeleporterMessenger` ensures that a cross-chain message is not delivered multiple times.
+2. Retries: In certain edge cases when there is significant validator churn, it is possible for an ICM Message to be dropped before a valid aggregate signature is created for it. `TeleporterMessenger` ensures that messages can still be delivered even in this event by allowing for retries of previously submitted messages.
+3. Relay incentivization: `TeleporterMessenger` provides a mechanism for messages to optionally incentivize relayers to perform the necessary signature aggregation and pay the transaction fee to broadcast the signed message on the destination chain.
+4. Allowed relayers: `TeleporterMessenger` allows users to specify a list of `allowedRelayerAddresses`, where only the specified addresses can relay and deliver the `TeleporterMessenger` message. Leaving this list empty allows all relayers to deliver.
+5. Message execution: `TeleporterMessenger` enables cross-chain messages to have direct effect on their destination chain by using `evm.Call()` to invoke the `receiveTeleporterMessage` function of destination contracts that implement the `ITeleporterReceiver` interface.
## Fees
-Fees can be paid on a per message basis by specifing the ERC20 asset and amount to be used to incentivize a relayer to deliver the message in the call to `sendCrossChainMessage`. The fee amount is transferred into the control of the Teleporter contract (i.e. locked) before the ICM message is sent. The Teleporter contract tracks the fee amount for each message ID it creates. When it subsequently receives a message back from the destination chain of the original message, the new message will have a list of receipts identifying the relayer that delivered the given message ID. At this point, the fee amount originally locked by Teleporter for the given message will be redeemable by the relayer identified in the receipt. If the initial fee amount was not sufficient to incentivize a relayer, it can be added to by using `addFeeAmount`.
+Fees can be paid on a per message basis by specifing the ERC20 asset and amount to be used to incentivize a relayer to deliver the message in the call to `sendCrossChainMessage`. The fee amount is transferred into the control of `TeleporterMessenger` (i.e. locked) before the ICM message is sent. `TeleporterMessenger` tracks the fee amount for each message ID it creates. When it subsequently receives a message back from the destination chain of the original message, the new message will have a list of receipts identifying the relayer that delivered the given message ID. At this point, the fee amount originally locked by `TeleporterMessenger` for the given message will be redeemable by the relayer identified in the receipt. If the initial fee amount was not sufficient to incentivize a relayer, it can be added to by using `addFeeAmount`.
### Message Receipts and Fee Redemption
-In order to confirm delivery of a Teleporter message from a source chain to a destination chain, a receipt is included in the next Teleporter message sent in the opposite direction, from the destination chain back to the source chain. This receipt contains the message ID of the original message, as well as the reward address that the delivering relayer specified. That reward address is then able to redeem the corresponding reward on the original chain by calling `redeemRelayerRewards`. The following example illustrates this flow:
+In order to confirm delivery of a `TeleporterMessenger` message from a source chain to a destination chain, a receipt is included in the next `TeleporterMessenger` message sent in the opposite direction, from the destination chain back to the source chain. This receipt contains the message ID of the original message, as well as the reward address that the delivering relayer specified. That reward address is then able to redeem the corresponding reward on the original chain by calling `redeemRelayerRewards`. The following example illustrates this flow:
-- A Teleporter message is sent from Chain A to Chain B, with a relayer incentive of `10` `USDC`. This message is assigned the ID `1` by the Teleporter contract on Chain A.
+- A `TeleporterMessenger` message is sent from Chain A to Chain B, with a relayer incentive of `10` `USDC`. This message is assigned the ID `1` by the `TeleporterMessenger` contract on Chain A.
- On Chain A, this is done by calling `sendCrossChainMessage`, and providing the `USDC` contract address and amount in the function call.
- A relayer delivers the message on Chain B by calling `receiveCrossChainMessage` and providing its address, `0x123...`
-- The Teleporter contract on Chain B stores the relayer address in a receipt for the message ID.
-- Some time later, a separate Teleporter message is sent from Chain B to Chain A. The Teleporter contract on Chain B includes the receipt for the original message in this new message.
-- When this new message is delivered on Chain A, the Teleporter contract on Chain A reads the receipt and attributes the rewards for delivering the original message (message ID `1`) to the address `0x123...`.
+- The `TeleporterMessenger` contract on Chain B stores the relayer address in a receipt for the message ID.
+- Some time later, a separate `TeleporterMessenger` message is sent from Chain B to Chain A. The `TeleporterMessenger` contract on Chain B includes the receipt for the original message in this new message.
+- When this new message is delivered on Chain A, the `TeleporterMessenger` contract on Chain A reads the receipt and attributes the rewards for delivering the original message (message ID `1`) to the address `0x123...`.
- Address `0x123...` may now call `redeemRelayerRewards` on Chain A, which transfers the `10` `USDC` to its address. If it tries to do this before the receipt is received on Chain A, the call will fail.
-It is possible for receipts to get "stuck" on the destination chain in the event that Teleporter traffic between two chains is skewed in one direction. In such a scenario, incoming messages on one chain may cause the rate at which receipts are generated to outpace the rate at which they are sent back to the other chain. To mitigate this, the method `sendSpecifiedReceipts` can be called to immediately send the receipts associated with the given message IDs back to the original chain.
+It is possible for receipts to get "stuck" on the destination chain in the event that `TeleporterMessenger` traffic between two chains is skewed in one direction. In such a scenario, incoming messages on one chain may cause the rate at which receipts are generated to outpace the rate at which they are sent back to the other chain. To mitigate this, the method `sendSpecifiedReceipts` can be called to immediately send the receipts associated with the given message IDs back to the original chain.
## Required Interface
-Teleporter messages are delivered by calling the `receiveTeleporterMessage` function defined by the `ITeleporterReceiver` interface. Contracts must implement this interface in order to be able to receive messages. The first two parameters of `receiveTeleporterMessage` identify the original sender of the given message on the origin chain and are set by the `TeleporterMessenger`. The third parameter to `receiveTeleporterMessage`, is the raw message payload. Applications using Teleporter are responsible for defining the exact format of this payload in a way that can be decoded on the receiving end. For example, applications may encode an action enum value along with the target method parameters on the sending side, then decode this data and route to the target method within `receiveTeleporterMessage`. See `ERC20Bridge.sol` for an example of this approach.
+`TeleporterMessenger` messages are delivered by calling the `receiveTeleporterMessage` function defined by the `ITeleporterReceiver` interface. Contracts must implement this interface in order to be able to receive messages. The first two parameters of `receiveTeleporterMessage` identify the original sender of the given message on the origin chain and are set by the `TeleporterMessenger`. The third parameter to `receiveTeleporterMessage`, is the raw message payload. Applications using `TeleporterMessenger` are responsible for defining the exact format of this payload in a way that can be decoded on the receiving end. For example, applications may encode an action enum value along with the target method parameters on the sending side, then decode this data and route to the target method within `receiveTeleporterMessage`. See `ERC20Bridge.sol` for an example of this approach.
## Message Delivery and Execution
-Teleporter is able to ensure that messages are considered delivered even if their execution fails (i.e. reverts) by using `evm.Call()` with a pre-defined gas limit to execute the message payload. This gas limit is specified by each message in the call to `sendCrossChainMessage`. Relayers must provide at least enough gas for the sub-call in addition to the standard gas used by a call to `receiveCrossChainMessage`. In the event that a message execution runs out of gas or reverts for any other reason, the hash of the message payload is stored by the receiving Teleporter contract instance. This allows for the message execution to be retried in the future, with possibly a higher gas limit by calling `retryMessageExecution`. Importantly, a message is still considered delivered on its destination chain even if its execution fails. This allows the relayer of the message to redeem their reward for deliverying the message, because they have no control on whether or not its execution will succeed or not so long as they provide sufficient gas to meet the specified `requiredGasLimit`.
+`TeleporterMessenger` is able to ensure that messages are considered delivered even if their execution fails (i.e. reverts) by using `evm.Call()` with a pre-defined gas limit to execute the message payload. This gas limit is specified by each message in the call to `sendCrossChainMessage`. Relayers must provide at least enough gas for the sub-call in addition to the standard gas used by a call to `receiveCrossChainMessage`. In the event that a message execution runs out of gas or reverts for any other reason, the hash of the message payload is stored by the receiving `TeleporterMessenger` contract instance. This allows for the message execution to be retried in the future, with possibly a higher gas limit by calling `retryMessageExecution`. Importantly, a message is still considered delivered on its destination chain even if its execution fails. This allows the relayer of the message to redeem their reward for deliverying the message, because they have no control on whether or not its execution will succeed or not so long as they provide sufficient gas to meet the specified `requiredGasLimit`.
-Note that due to [EIP-150](https://eips.ethereum.org/EIPS/eip-150), the lesser of 63/64ths of the remaining gas and the `requiredGasLimit` will be provided to the code executed using `evm.Call()`. This creates an edge case where sufficient gas is provided by the relayer at time of the `requiredGasLimit` check, but less than the `requiredGasLimit` is provided for the message execution. In such a case, the message execution may fail due to having less than the `requiredGasLimit` available, but the message would still be considered received. Such a case is only possible if the remaining 1/64th of the `requiredGasLimit` is sufficient for executing the remaining logic of `receiveCrossChainMessage` so that the top level transaction does not also revert. Based on the current implementation, a message must have a `requiredGasLimit` of over 1,200,000 gas for this to be possible. In order to avoid this case entirely, it is recommended for applications sending Teleporter messages to add a buffer to the `requiredGasLimit` such that 63/64ths of the value passed is sufficient for the message execution.
+Note that due to [EIP-150](https://eips.ethereum.org/EIPS/eip-150), the lesser of 63/64ths of the remaining gas and the `requiredGasLimit` will be provided to the code executed using `evm.Call()`. This creates an edge case where sufficient gas is provided by the relayer at time of the `requiredGasLimit` check, but less than the `requiredGasLimit` is provided for the message execution. In such a case, the message execution may fail due to having less than the `requiredGasLimit` available, but the message would still be considered received. Such a case is only possible if the remaining 1/64th of the `requiredGasLimit` is sufficient for executing the remaining logic of `receiveCrossChainMessage` so that the top level transaction does not also revert. Based on the current implementation, a message must have a `requiredGasLimit` of over 1,200,000 gas for this to be possible. In order to avoid this case entirely, it is recommended for applications sending `TeleporterMessenger` messages to add a buffer to the `requiredGasLimit` such that 63/64ths of the value passed is sufficient for the message execution.
## Resending a Message
-If the sending Avalanche L1's validator set changes, then it's possible for the receiving Avalanche L1 to reject the underlying ICM message due to insufficient signing stake. For example, suppose L1 A has 5 validators with equal stake weight who all sign a Teleporter message sent to L1 B. 100% of L1 A's stake has signed the message. Also suppose L1 B requires 67% of the sending L1's stake to have signed a given ICM message in order for it to be accepted. Before the message can be delivered, however, 5 _more_ validators are added to L1 A's validator set (all with the same stake weight as the original validators), meaning that the Teleporter message was signed by _only 50%_ of L1 A's stake. L1 B will reject this message.
+If the sending Avalanche L1's validator set changes, then it's possible for the receiving Avalanche L1 to reject the underlying ICM message due to insufficient signing stake. For example, suppose L1 A has 5 validators with equal stake weight who all sign a `TeleporterMessenger` message sent to L1 B. 100% of L1 A's stake has signed the message. Also suppose L1 B requires 67% of the sending L1's stake to have signed a given ICM message in order for it to be accepted. Before the message can be delivered, however, 5 _more_ validators are added to L1 A's validator set (all with the same stake weight as the original validators), meaning that the `TeleporterMessenger` message was signed by _only 50%_ of L1 A's stake. L1 B will reject this message.
-Once sent on chain, ICM messages cannot be re-signed by a new validator set in such a scenario. Teleporter, however, does support re-signing via the function `retrySendCrossChainMessage`, which can be called for any message that has not been acknowledged as delivered to its destination. Under the hood, this packages the Teleporter message into a brand new ICM message that is re-signed by the current validator set.
+Once sent on chain, ICM messages cannot be re-signed by a new validator set in such a scenario. Teleporter, however, does support re-signing via the function `retrySendCrossChainMessage`, which can be called for any message that has not been acknowledged as delivered to its destination. Under the hood, this packages the `TeleporterMessenger` message into a brand new ICM message that is re-signed by the current validator set.
-## Teleporter Messenger Contract Deployment
+## TeleporterMessenger Contract Deployment
**Do not deploy the `TeleporterMessenger` contract using `forge create`**. The `TeleporterMessenger` contract must be deployed to the same contract address on every chain. To achieve this, the contract can be deployed using a static transaction that uses Nick's method as documented in [this guide](../..//utils/contract-deployment/README.md). Alternatively, if creating a new L1, the contract can be pre-allocated with the proper address and state in the new chain's [genesis file](https://docs.avax.network/build/subnet/upgrade/customize-a-subnet#setting-the-genesis-allocation).
diff --git a/contracts/teleporter/registry/README.md b/contracts/teleporter/registry/README.md
index 9918da0d3..e62b749a7 100644
--- a/contracts/teleporter/registry/README.md
+++ b/contracts/teleporter/registry/README.md
@@ -1,4 +1,4 @@
-# Teleporter Contracts Upgradability
+# TeleporterMessenger Contracts Upgradability
## Overview
@@ -25,7 +25,7 @@ In the `TeleporterRegistry` contract, the `latestVersion` state variable returns
- `TeleporterRegistry` contract can be initialized through a list of initial registry entries, which are `TeleporterMessenger` contract versions and their addresses.
- The registry keeps track of a mapping of `TeleporterMessenger` contract versions to their addresses, and vice versa, a mapping of `TeleporterMessenger` contract addresses to their versions.
- Version zero is an invalid version, and is used to indicate that a `TeleporterMessenger` contract has not been registered yet.
-- Once a version number is registered in the registry, it cannot be changed, but a previous registered protocol address can be added to the registry with a new version. This is especially important in the case of a rollback to a previous Teleporter version, in which case the previous Teleporter contract address would need to be registered with a new version to the registry.
+- Once a version number is registered in the registry, it cannot be changed, but a previous registered protocol address can be added to the registry with a new version. This is especially important in the case of a rollback to a previous `TeleporterMessenger` version, in which case the previous `TeleporterMessenger` contract address would need to be registered with a new version to the registry.
## Integrating `TeleporterRegistryApp` into a dApp
@@ -33,18 +33,18 @@ In the `TeleporterRegistry` contract, the `latestVersion` state variable returns
-[TeleporterRegistryApp](./TeleporterRegistryApp.sol) is an abstract contract that helps integrate the `TeleporterRegistry` into a dApp built on top of Teleporter. To support upgradeable contracts, there is also a corresponding `TeleporterRegistryAppUpgradeable` contract that is upgrade compatible. By inheriting from `TeleporterRegistryApp`, dApps get:
+[TeleporterRegistryApp](./TeleporterRegistryApp.sol) is an abstract contract that helps integrate the `TeleporterRegistry` into ICM contracts. To support upgradeable contracts, there is also a corresponding `TeleporterRegistryAppUpgradeable` contract that is upgrade compatible. By inheriting from `TeleporterRegistryApp`, dApps get:
-- Ability to send Teleporter messages through the latest version of the Teleporter contract registered in the Teleporter registry. (The dApp can also override this to use a specific version of the Teleporter contract.)
-- `minTeleporterVersion` management that allows the dApp to specify the minimum Teleporter version that can send messages to the dApp.
+- Ability to send ICM messages through the latest version of the `TeleporterMessenger` contract registered in the Teleporter registry. (The dApp can also override this to use a specific version of the `TeleporterMessenger` contract.)
+- `minTeleporterVersion` management that allows the dApp to specify the minimum `TeleporterMessenger` version that can send messages to the dApp.
- Access controlled utility to update the `minTeleporterVersion`
-- Access controlled utility to pause/unpause interaction with specific Teleporter addresses.
+- Access controlled utility to pause/unpause interaction with specific `TeleporterMessenger` addresses.
To integrate `TeleporterRegistryApp` with a dApp, pass in the Teleporter registry address inside the constructor. For upgradeable contracts `TeleporterRegistryAppUpgradeable` can be inherited, and the derived contract's `initializer` function should call either `__TeleporterRegistryApp_init` or `__TeleporterRegistryApp_init_unchained` An example dApp looks like:
```solidity
// An example dApp that integrates with the Teleporter registry
-// to send/receive Teleporter messages.
+// to send/receive ICM messages.
contract ExampleApp is
TeleporterRegistryApp
{
@@ -59,8 +59,8 @@ contract ExampleApp is
.getBlockchainID();
}
...
- // Handles receiving Teleporter messages,
- // and also checks that the sender is a valid Teleporter contract.
+ // Handles receiving ICM messages,
+ // and also checks that the sender is a valid TeleporterMessenger contract.
function _receiveTeleporterMessage(
bytes32 sourceBlockchainID,
address originSenderAddress,
@@ -69,7 +69,7 @@ contract ExampleApp is
// implementation
}
- // Implements the access control checks for the dApp's interaction with Teleporter versions.
+ // Implements the access control checks for the dApp's interaction with TeleporterMessenger versions.
function _checkTeleporterRegistryAppAccess() internal view virtual override {
//implementation
}
@@ -79,7 +79,7 @@ contract ExampleApp is
### Checking TeleporterRegistryApp access
-To prevent anyone from calling the dApp's `updateMinTeleporterVersion`, which would disallow messages from old Teleporter versions from being received, this function should be safeguarded with access controls. All contracts deriving from `TeleporterRegistryApp` will need to implement `TeleporterRegistryApp._checkTeleporterRegistryAppAccess`. For example, [TeleporterRegistryOwnableApp](./TeleporterRegistryOwnableApp.sol) is an abstract contract that inherits `TeleporterRegistryApp`, and implements `_checkTeleporterRegistryAppAccess` to check whether the caller is the owner. There is also a corresponding `TeleporterRegistryOwnableAppUpgradeable` contract that is upgrade compatible.
+To prevent anyone from calling the dApp's `updateMinTeleporterVersion`, which would disallow messages from old `TeleporterMessenger` versions from being received, this function should be safeguarded with access controls. All contracts deriving from `TeleporterRegistryApp` will need to implement `TeleporterRegistryApp._checkTeleporterRegistryAppAccess`. For example, [TeleporterRegistryOwnableApp](./TeleporterRegistryOwnableApp.sol) is an abstract contract that inherits `TeleporterRegistryApp`, and implements `_checkTeleporterRegistryAppAccess` to check whether the caller is the owner. There is also a corresponding `TeleporterRegistryOwnableAppUpgradeable` contract that is upgrade compatible.
```solidity
function _checkTeleporterRegistryAppAccess() internal view virtual override {
@@ -98,11 +98,11 @@ Another example would be a dApp that has different roles and priveleges. `_check
}
```
-### Sending with specific Teleporter version
+### Sending with specific TeleporterMessenger version
-For sending messages with the Teleporter registry, dApps should use `TeleporterRegistryApp._getTeleporterMessenger`. This function by default extends `TeleporterRegistry.getLatestTeleporter`, using the latest version, and adds an extra check on whether the latest Teleporter address is paused. If the dApp wants to send a message through a specific Teleporter version, it can override `_getTeleporterMessenger()` to use the specific Teleporter version with `TeleporterRegistry.getTeleporterFromVersion`.
+For sending messages with the Teleporter registry, dApps should use `TeleporterRegistryApp._getTeleporterMessenger`. This function by default extends `TeleporterRegistry.getLatestTeleporter`, using the latest version, and adds an extra check on whether the latest `TeleporterMessenger` address is paused. If the dApp wants to send a message through a specific `TeleporterMessenger` version, it can override `_getTeleporterMessenger()` to use the specific `TeleporterMessenger` version with `TeleporterRegistry.getTeleporterFromVersion`.
-The `TeleporterRegistryApp._sendTeleporterMessage` function makes sending Teleporter messages easier. The function uses `_getTeleporterMessenger` to get the sending Teleporter version, pays for Teleporter fees from the dApp's balance, and sends the cross chain message.
+The `TeleporterRegistryApp._sendTeleporterMessage` function makes sending ICM messages easier. The function uses `_getTeleporterMessenger` to get the sending `TeleporterMessenger` version, pays for `TeleporterMessenger` fees from the dApp's balance, and sends the cross chain message.
Using latest version:
@@ -128,53 +128,53 @@ Using specific version:
ITeleporterMessenger teleporterMessenger = _getTeleporterMessenger();
```
-### Receiving from specific Teleporter versions
+### Receiving from specific TeleporterMessenger versions
-`TeleporterRegistryApp` also provides an initial implementation of [ITeleporterReceiver.receiveTeleporterMessage](../ITeleporterReceiver.sol) that ensures `_msgSender` is a `TeleporterMessenger` contract with a version greater than or equal to `minTeleporterVersion`. This supports the case where a dApp wants to use a new version of the `TeleporterMessenger` contract, but still wants to be able to receive messages from the old Teleporter contract.The dApp can override `_receiveTeleporterMessage` to implement its own logic for receiving messages from Teleporter contracts.
+`TeleporterRegistryApp` also provides an initial implementation of [ITeleporterReceiver.receiveTeleporterMessage](../ITeleporterReceiver.sol) that ensures `_msgSender` is a `TeleporterMessenger` contract with a version greater than or equal to `minTeleporterVersion`. This supports the case where a dApp wants to use a new version of the `TeleporterMessenger` contract, but still wants to be able to receive messages from the old `TeleporterMessenger` contract.The dApp can override `_receiveTeleporterMessage` to implement its own logic for receiving messages from `TeleporterMessenger` contracts.
## Managing a TeleporterRegistryApp dApp
-dApps that implement `TeleporterRegistryApp` automatically use the latest Teleporter version registered with the `TeleporterRegistry`. Interaction with underlying `TeleporterMessenger` versions can be managed by setting the minimum Teleporter version, and pausing and unpausing specific versions.
+dApps that implement `TeleporterRegistryApp` automatically use the latest `TeleporterMessenger` version registered with the `TeleporterRegistry`. Interaction with underlying `TeleporterMessenger` versions can be managed by setting the minimum `TeleporterMessenger` version, and pausing and unpausing specific versions.
The following sections include example `cast send` commands for issuing transactions that call contract functions. See the [Foundry Book](https://book.getfoundry.sh/reference/cast/cast-send) for details on how to issue transactions using common wallet options.
-### Managing the Minimum Teleporter version
+### Managing the Minimum TeleporterMessenger version
-The `TeleporterRegistryApp` contract constructor saves the Teleporter registry in a state variable used by the inheriting dApp contract, and initializes a `minTeleporterVersion` to the highest `TeleporterMessenger` version registered in `TeleporterRegistry`. `minTeleporterVersion` is used to allow dApp's to specify the Teleporter versions allowed to interact with it.
+The `TeleporterRegistryApp` contract constructor saves the Teleporter registry in a state variable used by the inheriting dApp contract, and initializes a `minTeleporterVersion` to the highest `TeleporterMessenger` version registered in `TeleporterRegistry`. `minTeleporterVersion` is used to allow dApp's to specify the `TeleporterMessenger` versions allowed to interact with it.
#### Updating `minTeleporterVersion`
-The `TeleporterRegistryApp.updateMinTeleporterVersion` function updates the `minTeleporterVersion` used to check which Teleporter versions can be used for sending and receiving messages. **Once the `minTeleporterVersion` is increased, any undelivered messages sent by other chains using older versions of Teleporter will never be able to be received**. The `updateMinTeleporterVersion` function can only be called with a version greater than the current `minTeleporterVersion` and less than `latestVersion` in the Teleporter registry.
+The `TeleporterRegistryApp.updateMinTeleporterVersion` function updates the `minTeleporterVersion` used to check which `TeleporterMessenger` versions can be used for sending and receiving messages. **Once the `minTeleporterVersion` is increased, any undelivered messages sent by other chains using older versions of `TeleporterMessenger` will never be able to be received**. The `updateMinTeleporterVersion` function can only be called with a version greater than the current `minTeleporterVersion` and less than `latestVersion` in the Teleporter registry.
-> Example: Update the minimum Teleporter version to 2
+> Example: Update the minimum TeleporterMessenger version to 2
>
> ```
> cast send "updateMinTeleporterVersion(uint256)" 2
> ```
-### Pausing Teleporter version interactions
+### Pausing TeleporterMessenger version interactions
-dApps that inherit from `TeleporterRegistryApp` can pause Teleporter interactions by calling `TeleporterRegistryApp.pauseTeleporterAddress`. This function prevents the dApp contract from interacting with the paused Teleporter address when sending or receiving Teleporter messages.
+dApps that inherit from `TeleporterRegistryApp` can pause `TeleporterMessenger` interactions by calling `TeleporterRegistryApp.pauseTeleporterAddress`. This function prevents the dApp contract from interacting with the paused `TeleporterMessenger` address when sending or receiving ICM messages.
`pauseTeleporterAddress` can only be called by addresses that passes the dApp's `TeleporterRegistryApp._checkTeleporterRegistryAppAccess` check.
-The Teleporter address corresponding to a Teleporter version can be fetched from the registry with `TeleporterRegistry.getAddressFromVersion`
+The `TeleporterMessenger` address corresponding to a `TeleporterMessenger` version can be fetched from the registry with `TeleporterRegistry.getAddressFromVersion`
-> Example: Pause Teleporter version 3
+> Example: Pause TeleporterMessenger version 3
>
> ```
> versionThreeAddress=$(cast call "getAddressFromVersion(uint256)(address)" 3)
> cast send "pauseTeleporterAddress(address)" $versionThreeAddress
> ```
-#### Pause all Teleporter interactions
+#### Pause all TeleporterMessenger interactions
-To pause all Teleporter interactions, `TeleporterRegistryApp.pauseTeleporterAddress` must be called for every Teleporter version from the `minTeleporterVersion` to the latest Teleporter version registered in `TeleporterRegistry`. Note that there may be gaps in Teleporter versions registered with `TeleporterRegistry`, but they will always be in increasing order. The latest Teleporter version can be obtained by inspecting the public variable `TeleporterRegistry.latestVersion`. The `minTeleporterVersion` can be obtained by calling `TeleporterRegistryApp.getMinTeleporterVersion`.
+To pause all `TeleporterMessenger` interactions, `TeleporterRegistryApp.pauseTeleporterAddress` must be called for every `TeleporterMessenger` version from the `minTeleporterVersion` to the latest `TeleporterMessenger` version registered in `TeleporterRegistry`. Note that there may be gaps in `TeleporterMessenger` versions registered with `TeleporterRegistry`, but they will always be in increasing order. The latest `TeleporterMessenger` version can be obtained by inspecting the public variable `TeleporterRegistry.latestVersion`. The `minTeleporterVersion` can be obtained by calling `TeleporterRegistryApp.getMinTeleporterVersion`.
-> Example: Pause all registered Teleporter versions
+> Example: Pause all registered TeleporterMessenger versions
>
> ```
-> # Fetch the minimum Teleporter version
+> # Fetch the minimum TeleporterMessenger version
> minVersion=$(cast call "getMinTeleporterVersion()(uint256)")
>
> # Fetch the latest registered version
@@ -196,13 +196,13 @@ To pause all Teleporter interactions, `TeleporterRegistryApp.pauseTeleporterAddr
> done
> ```
-#### Unpausing Teleporter version interactions
+#### Unpausing TeleporterMessenger version interactions
-As with pausing, dApps can unpause Teleporter interactions by calling `TeleporterRegistryApp.unpauseTeleporterAddress`. This unpause function allows receiving Teleporter message from the unpaused Teleporter address, and also enables the sending of messages through the unpaused Teleporter address in `_getTeleporterMessenger()`. Unpausing is also only allowed by addresses passing the dApp's `_checkTeleporterRegistryAppAccess` check.
+As with pausing, dApps can unpause `TeleporterMessenger` interactions by calling `TeleporterRegistryApp.unpauseTeleporterAddress`. This unpause function allows receiving `TeleporterMessenger` message from the unpaused `TeleporterMessenger` address, and also enables the sending of messages through the unpaused `TeleporterMessenger` address in `_getTeleporterMessenger()`. Unpausing is also only allowed by addresses passing the dApp's `_checkTeleporterRegistryAppAccess` check.
-Note that receiving Teleporter messages is still governed by the `minTeleporterVersion` check, so even if a Teleporter address is unpaused, the dApp will not receive messages from the unpaused Teleporter address if the Teleporter version is less than `minTeleporterVersion`.
+Note that receiving `TeleporterMessenger` messages is still governed by the `minTeleporterVersion` check, so even if a `TeleporterMessenger` address is unpaused, the dApp will not receive messages from the unpaused `TeleporterMessenger` address if the `TeleporterMessenger` version is less than `minTeleporterVersion`.
-> Example: Unpause Teleporter version 3
+> Example: Unpause TeleporterMessenger version 3
>
> ```
> versionThreeAddress=$(cast call "getAddressFromVersion(uint256)(address)" 3)
diff --git a/contracts/teleporter/registry/UPGRADING.md b/contracts/teleporter/registry/UPGRADING.md
index c42723fdb..9b4a2331a 100644
--- a/contracts/teleporter/registry/UPGRADING.md
+++ b/contracts/teleporter/registry/UPGRADING.md
@@ -1,16 +1,16 @@
# Upgrading TeleporterMessenger
-This document outlines the high-level steps necessary to upgrade Teleporter as an Avalanche L1 operator, a relayer operator, and a dApp admin. As a reference, the [Teleporter Registry test suite](../../../tests/flows/teleporter_registry.go) implements the steps described in a test environment.
+This document outlines the high-level steps necessary to upgrade `TeleporterMessenger` as an Avalanche L1 operator, a relayer operator, and a dApp admin. As a reference, the [Teleporter Registry test suite](../../../tests/flows/teleporter_registry.go) implements the steps described in a test environment.
## Register a New TeleporterMessenger Version
-Once a new Teleporter contract instance is [deployed](../../../utils/contract-deployment/README.md), the `addProtocolVersion` method of [TeleporterRegistry.sol](./TeleporterRegistry.sol) must be called. This method is only callable if the associated ICM message was sent via an off-chain ICM message, which is provided by a validator's chain config.
+Once a new `TeleporterMessenger` contract instance is [deployed](../../../utils/contract-deployment/README.md), the `addProtocolVersion` method of [TeleporterRegistry.sol](./TeleporterRegistry.sol) must be called. This method is only callable if the associated ICM message was sent via an off-chain ICM message, which is provided by a validator's chain config.
The steps to do so are as follows:
1. Construct the unsigned ICM message bytes:
- a. Pack the ICM payload to be parsed by `addProtocolVersion`. This is a tuple of `(ProtocolRegistryEntry, address)`, where the `ProtocolRegistryEntry` specifies the new `TeleporterMessenger` contract address and the version, and the `address` specifies the `TeleporterRegistry` contract address that the new Teleporter version will be registered with.
+ a. Pack the ICM payload to be parsed by `addProtocolVersion`. This is a tuple of `(ProtocolRegistryEntry, address)`, where the `ProtocolRegistryEntry` specifies the new `TeleporterMessenger` contract address and the version, and the `address` specifies the `TeleporterRegistry` contract address that the new `TeleporterMessenger` version will be registered with.
b. Pack the ICM payload as an [AddressedCall](https://github.com/ava-labs/avalanchego/blob/v1.11.3/vms/platformvm/warp/payload/addressed_call.go#L15), with the source address set to the zero address. This is how `addProtocolVersion` identifies this message as an off-chain ICM message.
@@ -20,7 +20,7 @@ The steps to do so are as follows:
3. Restart the node to mark the off-chain ICM message as eligible for signing by the validator.
-To actually register the new Teleporter version with the registry, the validators must be queried for their signature of the message, the signatures aggregated, and a signed ICM message created to be included in the transaction that calls `addProtocolVersion`. As an example, [AWM Relayer](https://github.com/ava-labs/awm-relayer) provides this functionality. The following steps illustrate how to use AWM Relayer to register the new Teleporter version.
+To actually register the new `TeleporterMessenger` version with the registry, the validators must be queried for their signature of the message, the signatures aggregated, and a signed ICM message created to be included in the transaction that calls `addProtocolVersion`. As an example, [AWM Relayer](https://github.com/ava-labs/awm-relayer) provides this functionality. The following steps illustrate how to use AWM Relayer to register the new `TeleporterMessenger` version.
1. Construct a "manual-warp-messages" entry in the AWM Relayer configuration file, using the following values:
diff --git a/utils/contract-deployment/README.md b/utils/contract-deployment/README.md
index a4cb0b4cf..74263e859 100644
--- a/utils/contract-deployment/README.md
+++ b/utils/contract-deployment/README.md
@@ -1,8 +1,8 @@
-# Teleporter Contract Deployment
+# TeleporterMessenger Contract Deployment
-The `TeleporterMessenger` contract is designed to only send and receive Avalanche ICM messages to and from its own address on different chains. We ensure that the contract can be deployed to the same address on every EVM based chain by using [Nick's Method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c). Only allowing messages to be sent and received by the same address guarantees that all messages use the same Teleporter message format because only the same exact contract bytecode could have been deployed to the same address.
+The `TeleporterMessenger` contract is designed to only send and receive Avalanche ICM messages to and from its own address on different chains. We ensure that the contract can be deployed to the same address on every EVM based chain by using [Nick's Method](https://yamenmerhi.medium.com/nicks-method-ethereum-keyless-execution-168a6659479c). Only allowing messages to be sent and received by the same address guarantees that all messages use the same TeleporterMessenger message format because only the same exact contract bytecode could have been deployed to the same address.
-This directory contains scripts written in Golang to construct a raw transaction using Nick's method that deploys the Teleporter contract, and determine the keyless address that must be prefunded in order for the transaction to be sent.
+This directory contains scripts written in Golang to construct a raw transaction using Nick's method that deploys the TeleporterMessenger contract, and determine the keyless address that must be prefunded in order for the transaction to be sent.
## Running
@@ -30,11 +30,11 @@ teleporter_deployer_address=$(cat UniversalTeleporterDeployerAddress.txt)
cast send --private-key $my_private_key --value 10ether $teleporter_deployer_address --rpc-url $my_rpc_url
```
-Then, deploy Teleporter by sending the keyless transaction:
+Then, deploy TeleporterMessenger by sending the keyless transaction:
```bash
teleporter_deploy_tx=$(cat UniversalTeleporterDeployerTransaction.txt)
cast publish --rpc-url $my_rpc_url $teleporter_deploy_tx
```
-Once you've verified that Teleporter was deployed to the address in `UniversalTeleporterMessengerContractAddress.txt`, Teleporter is ready to use.
+Once you've verified that TeleporterMessenger was deployed to the address in `UniversalTeleporterMessengerContractAddress.txt`, TeleporterMessenger and ICM is ready to use.
diff --git a/utils/deployment-utils/deployment_utils.go b/utils/deployment-utils/deployment_utils.go
index 3f0ba81ca..bce12172a 100644
--- a/utils/deployment-utils/deployment_utils.go
+++ b/utils/deployment-utils/deployment_utils.go
@@ -126,8 +126,8 @@ func ConstructKeylessTransaction(
contractAddress := crypto.CreateAddress(senderAddress, 0)
contractAddressString := contractAddress.Hex() // "0x" prepended by Hex() already.
- log.Println("Teleporter Contract Keyless Deployer Address: ", senderAddressString)
- log.Println("Teleporter Messenger Universal Contract Address: ", contractAddressString)
+ log.Println("TeleporterMessenger Keyless Deployer Address: ", senderAddressString)
+ log.Println("TeleporterMessenger Universal Contract Address: ", contractAddressString)
if writeFile {
err = os.WriteFile(
From df21bc2af58050beca3e385700f93b45a0cfe68c Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 20 Nov 2024 06:57:40 -0500
Subject: [PATCH 04/15] Small changes
---
README.md | 4 +---
contracts/README.md | 2 +-
contracts/ictt/README.md | 2 +-
3 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 0608c0697..3a0af74cd 100644
--- a/README.md
+++ b/README.md
@@ -4,9 +4,7 @@
To get started with building ICM contracts, refer to [the avalanche-starter-kit repository](https://github.com/ava-labs/avalanche-starter-kit). This README is focused on the development of the `TeleporterMessenger` contract itself.
-`TeleporterMessenger` is an EVM compatible cross-L1 communication protocol built on top of [Avalanche Interchain Messaging (ICM)](https://academy.avax.network/course/interchain-messaging/04-icm-basics/01-icm-basics), and implemented as a Solidity smart contract. It provides a mechanism to asynchronously invoke smart contract functions on other EVM blockchains within Avalanche. `TeleporterMessenger` provides a handful of useful features of ICM, such as specifying relayer incentives for message delivery, replay protection, message delivery and execution retries, and a standard interface for sending and receiving messages within a dApp deployed across multiple Avalanche L1s.
-
-It's important to understand the distinction between Avalanche I Messaging and Teleporter. AWM allows Avalanche L1s to communicate with each other via authenticated messages by providing signing and verification primitives in Avalanchego. These are used by the blockchain VMs to sign outgoing messages and verify incoming messages.
+`TeleporterMessenger` is a smart contract that serves as the interface for ICM contracts to [Avalanche Interchain Messaging (ICM)](https://academy.avax.network/course/interchain-messaging/04-icm-basics/01-icm-basics). It provides a mechanism to asynchronously invoke smart contract functions on other EVM blockchains within Avalanche. `TeleporterMessenger` provides a handful of useful features of ICM, such as specifying relayer incentives for message delivery, replay protection, message delivery and execution retries, and a standard interface for sending and receiving messages within a dApp deployed across multiple Avalanche L1s.
The `TeleporterMessenger` contract is a user-friendly interface to ICM, aimed at dApp developers. All of the message signing and verification is abstracted away from developers. Instead, developers simply call `sendCrossChainMessage` on the `TeleporterMessenger` contract to send a message invoking a smart contract on another Avalanche L1, and implement the `ITeleporterReceiver` interface to receive messages on the destination Avalanche L1. `TeleporterMessenger` handles all of the ICM message construction and sending, as well as the message delivery and execution.
diff --git a/contracts/README.md b/contracts/README.md
index 0236b75c6..121d71e29 100644
--- a/contracts/README.md
+++ b/contracts/README.md
@@ -1,5 +1,5 @@
## Contracts
-This directory contains Solidity contracts that leverage Avalanche Interchain Messaging to implement unique cross-chain functions.
+This directory contains Solidity contracts that leverage Avalanche Interchain Messaging (ICM) to implement unique cross-chain functions.
This directory is set up as a [Foundry](https://github.com/foundry-rs/foundry) project. Use the `scripts/install_foundry.sh` to install the correct version of the ava-labs fork of foundry.
diff --git a/contracts/ictt/README.md b/contracts/ictt/README.md
index e7a3942b3..915123d3f 100644
--- a/contracts/ictt/README.md
+++ b/contracts/ictt/README.md
@@ -2,7 +2,7 @@
## Overview
-Avalanche Interchain Token Transfer (ICTT) is an application that allows users to transfer tokens between L1s. The implementation is a set of smart contracts that are deployed across multiple L1s, and leverages [Teleporter](https://github.com/ava-labs/teleporter) for cross-chain communication.
+Avalanche Interchain Token Transfer (ICTT) is an application that allows users to transfer tokens between L1s. The implementation is a set of smart contracts that are deployed across multiple L1s, and leverages [ICM](https://github.com/ava-labs/teleporter) for cross-chain communication.
Each token transferrer instance consists of one "home" contract and at least one but possibly many "remote" contracts. Each home contract instance manages one asset to be transferred out to `TokenRemote` instances. The home contract lives on the L1 where the asset to be transferred exists. A transfer consists of locking the asset as collateral on the home L1 and minting a representation of the asset on the remote L1. The remote contracts, each of which has a single specified home contract, live on other L1s that want to import the asset transferred by their specified home. The token transferrers are designed to be permissionless: anyone can register compatible `TokenRemote` instances to allow for transferring tokens from the `TokenHome` instance to that new `TokenRemote` instance. The home contract keeps track of token balances transferred to each `TokenRemote` instance, and handles returning the original tokens back to the user when assets are transferred back to the `TokenHome` instance. `TokenRemote` instances are registered with their home contract via an ICM message upon creation.
From 0ff2572d567991e876e6b0899097e67f8bc232d2 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 20 Nov 2024 09:40:36 -0500
Subject: [PATCH 05/15] Fix unit test
---
cmd/teleporter-cli/message_test.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/teleporter-cli/message_test.go b/cmd/teleporter-cli/message_test.go
index 59443a2e6..d4fe5b397 100644
--- a/cmd/teleporter-cli/message_test.go
+++ b/cmd/teleporter-cli/message_test.go
@@ -23,7 +23,7 @@ func TestMessageCmd(t *testing.T) {
name: "help",
args: []string{"message", "--help"},
err: nil,
- out: "Given the hex encoded bytes of a Teleporter message",
+ out: "Given the hex encoded bytes of a TeleporterMessenger message",
},
}
From 8e953791a53880ca7f38c3301d07615b178a6fad Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 20 Nov 2024 09:44:17 -0500
Subject: [PATCH 06/15] Fix infinite recursion
---
tests/network/network.go | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/tests/network/network.go b/tests/network/network.go
index 5c5d7f3f6..cd1eda9c8 100644
--- a/tests/network/network.go
+++ b/tests/network/network.go
@@ -155,7 +155,6 @@ func NewLocalNetwork(
// Create the P-Chain wallet to issue transactions
kc := secp256k1fx.NewKeychain(globalFundedKey)
- localNetwork.GetAllL1Infos()
var l1IDs []ids.ID
for _, l1 := range localNetwork.GetAllL1Infos() {
l1IDs = append(l1IDs, l1.L1ID)
@@ -203,7 +202,7 @@ func (n *LocalNetwork) GetPrimaryNetworkInfo() interfaces.L1TestInfo {
}
// Returns all subnet info sorted in lexicographic order of SubnetName.
-func (n *LocalNetwork) GetSubnetsInfo() []interfaces.L1TestInfo {
+func (n *LocalNetwork) GetL1Infos() []interfaces.L1TestInfo {
subnets := make([]interfaces.L1TestInfo, len(n.Network.Subnets))
for i, subnet := range n.Network.Subnets {
var nodeURIs []string
@@ -235,7 +234,7 @@ func (n *LocalNetwork) GetSubnetsInfo() []interfaces.L1TestInfo {
// Returns L1 info for all L1s, including the primary network
func (n *LocalNetwork) GetAllL1Infos() []interfaces.L1TestInfo {
- l1s := n.GetAllL1Infos()
+ l1s := n.GetL1Infos()
return append(l1s, n.GetPrimaryNetworkInfo())
}
@@ -387,7 +386,7 @@ func (n *LocalNetwork) GetTwoL1s() (
interfaces.L1TestInfo,
interfaces.L1TestInfo,
) {
- l1s := n.GetAllL1Infos()
+ l1s := n.GetL1Infos()
Expect(len(l1s)).Should(BeNumerically(">=", 2))
return l1s[0], l1s[1]
}
From b7b146306a80ce5799f37330b2240b15260ee062 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 20 Nov 2024 13:35:45 -0500
Subject: [PATCH 07/15] Fix some tests
---
.../registry/teleporter_registry.go | 2 +-
tests/flows/teleporter/validator_churn.go | 2 +-
tests/network/network.go | 20 +++++++++----------
3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/tests/flows/teleporter/registry/teleporter_registry.go b/tests/flows/teleporter/registry/teleporter_registry.go
index 59ee4dad7..18c429767 100644
--- a/tests/flows/teleporter/registry/teleporter_registry.go
+++ b/tests/flows/teleporter/registry/teleporter_registry.go
@@ -151,7 +151,7 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
)
// Update teleporter with the new TeleporterMessengers
- for _, l1 := range network.GetAllL1Infos() {
+ for _, l1 := range network.GetL1Infos() {
teleporter.SetTeleporter(newTeleporterAddress, l1)
teleporter.InitializeBlockchainID(l1, fundedKey)
}
diff --git a/tests/flows/teleporter/validator_churn.go b/tests/flows/teleporter/validator_churn.go
index 01d860497..7fb612aba 100644
--- a/tests/flows/teleporter/validator_churn.go
+++ b/tests/flows/teleporter/validator_churn.go
@@ -74,7 +74,7 @@ func ValidatorChurn(network *localnetwork.LocalNetwork, teleporter utils.Telepor
// Trigger the proposer VM to update its height so that the inner VM can see the new validator set
// We have to update all L1s, not just the ones directly involved in this test to ensure that the
// proposer VM is updated on all L1s.
- for _, l1Info := range network.GetAllL1Infos() {
+ for _, l1Info := range network.GetL1Infos() {
err = subnetEvmUtils.IssueTxsToActivateProposerVMFork(
ctx, l1Info.EVMChainID, fundedKey, l1Info.WSClient,
)
diff --git a/tests/network/network.go b/tests/network/network.go
index cd1eda9c8..18054a5d3 100644
--- a/tests/network/network.go
+++ b/tests/network/network.go
@@ -35,7 +35,7 @@ import (
type LocalNetwork struct {
tmpnet.Network
- extraNodes []*tmpnet.Node // to add as more subnet validators in the tests
+ extraNodes []*tmpnet.Node // to add as more l1 validators in the tests
primaryNetworkValidators []ids.NodeID
globalFundedKey *ecdsa.PrivateKey
pChainWallet pwallet.Wallet
@@ -156,7 +156,7 @@ func NewLocalNetwork(
// Create the P-Chain wallet to issue transactions
kc := secp256k1fx.NewKeychain(globalFundedKey)
var l1IDs []ids.ID
- for _, l1 := range localNetwork.GetAllL1Infos() {
+ for _, l1 := range localNetwork.GetL1Infos() {
l1IDs = append(l1IDs, l1.L1ID)
}
wallet, err := primary.MakeWallet(ctx, &primary.WalletConfig{
@@ -201,18 +201,18 @@ func (n *LocalNetwork) GetPrimaryNetworkInfo() interfaces.L1TestInfo {
}
}
-// Returns all subnet info sorted in lexicographic order of SubnetName.
+// Returns all L1 info sorted in lexicographic order of L1Name.
func (n *LocalNetwork) GetL1Infos() []interfaces.L1TestInfo {
- subnets := make([]interfaces.L1TestInfo, len(n.Network.Subnets))
- for i, subnet := range n.Network.Subnets {
+ l1s := make([]interfaces.L1TestInfo, len(n.Network.Subnets))
+ for i, l1 := range n.Network.Subnets {
var nodeURIs []string
- for _, nodeID := range subnet.ValidatorIDs {
+ for _, nodeID := range l1.ValidatorIDs {
uri, err := n.Network.GetURIForNodeID(nodeID)
Expect(err).Should(BeNil())
nodeURIs = append(nodeURIs, uri)
}
- blockchainID := subnet.Chains[0].ChainID
+ blockchainID := l1.Chains[0].ChainID
wsClient, err := ethclient.Dial(utils.HttpToWebsocketURI(nodeURIs[0], blockchainID.String()))
Expect(err).Should(BeNil())
@@ -220,8 +220,8 @@ func (n *LocalNetwork) GetL1Infos() []interfaces.L1TestInfo {
Expect(err).Should(BeNil())
evmChainID, err := rpcClient.ChainID(context.Background())
Expect(err).Should(BeNil())
- subnets[i] = interfaces.L1TestInfo{
- L1ID: subnet.SubnetID,
+ l1s[i] = interfaces.L1TestInfo{
+ L1ID: l1.SubnetID,
BlockchainID: blockchainID,
NodeURIs: nodeURIs,
WSClient: wsClient,
@@ -229,7 +229,7 @@ func (n *LocalNetwork) GetL1Infos() []interfaces.L1TestInfo {
EVMChainID: evmChainID,
}
}
- return subnets
+ return l1s
}
// Returns L1 info for all L1s, including the primary network
From 297ba32f88815b52fd12569fd50cbe8d72075b91 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 20 Nov 2024 14:35:24 -0500
Subject: [PATCH 08/15] Fix some tests
---
tests/flows/teleporter/registry/pause_teleporter.go | 4 +++-
tests/flows/teleporter/registry/teleporter_registry.go | 6 +++---
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/tests/flows/teleporter/registry/pause_teleporter.go b/tests/flows/teleporter/registry/pause_teleporter.go
index 9651f52a5..a1b1528a0 100644
--- a/tests/flows/teleporter/registry/pause_teleporter.go
+++ b/tests/flows/teleporter/registry/pause_teleporter.go
@@ -36,7 +36,9 @@ func PauseTeleporter(network *localnetwork.LocalNetwork, teleporter utils.Telepo
// Pause Teleporter on L1 B
opts, err := bind.NewKeyedTransactorWithChainID(
- fundedKey, l1BInfo.EVMChainID)
+ fundedKey,
+ l1BInfo.EVMChainID,
+ )
Expect(err).Should(BeNil())
tx, err := testMessengerB.PauseTeleporterAddress(opts, teleporterAddress)
Expect(err).Should(BeNil())
diff --git a/tests/flows/teleporter/registry/teleporter_registry.go b/tests/flows/teleporter/registry/teleporter_registry.go
index 18c429767..f1b3a9e7e 100644
--- a/tests/flows/teleporter/registry/teleporter_registry.go
+++ b/tests/flows/teleporter/registry/teleporter_registry.go
@@ -151,7 +151,7 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
)
// Update teleporter with the new TeleporterMessengers
- for _, l1 := range network.GetL1Infos() {
+ for _, l1 := range network.GetAllL1Infos() {
teleporter.SetTeleporter(newTeleporterAddress, l1)
teleporter.InitializeBlockchainID(l1, fundedKey)
}
@@ -181,9 +181,9 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
// Teleporter versions should match, so message should be received successfully.
teleporter.SendExampleCrossChainMessageAndVerify(
ctx,
- l1AInfo,
- testMessengerB,
l1BInfo,
+ testMessengerB,
+ cChainInfo,
testMessengerContractC,
testMessengerC,
fundedKey,
From 48c8314a1b82f5b24ebeade11763eb626866416d Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Fri, 22 Nov 2024 05:03:35 -0500
Subject: [PATCH 09/15] Review fixes
---
.../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 2 +-
.../NativeTokenStakingManager/NativeTokenStakingManager.go | 2 +-
.../PoAValidatorManager/PoAValidatorManager.go | 2 +-
contracts/ictt/README.md | 4 ++--
contracts/validator-manager/ValidatorManager.sol | 2 +-
tests/flows/teleporter/basic_send_receive.go | 4 ++--
tests/flows/teleporter/relay_message_twice.go | 2 +-
tests/flows/teleporter/resubmit_altered_message.go | 2 +-
tests/flows/teleporter/unallowed_relayer.go | 2 +-
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
index 8ce102b72..156ddc3c1 100644
--- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
+++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
@@ -104,7 +104,7 @@ type ValidatorRegistrationInput struct {
// ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract.
var ERC20TokenStakingManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b50604051615af0380380615af083398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6159a38061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063b771b3bc116100a9578063c974d1b611610079578063c974d1b61461046d578063d5f20ff614610475578063df93d8de14610495578063e4a63c401461049f578063fd7ac5e7146104b3575f80fd5b8063b771b3bc1461040d578063ba3a4b9714610433578063bc5fbfec14610446578063bee0a03f1461045a575f80fd5b80639e478eea116100e45780639e478eea146103c0578063a3a65e48146103d3578063a9778a7a146102ac578063afb98096146103e6575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f366004614961565b6104c6565b005b61021461022436600461499c565b6104fb565b610231600a81565b60405160ff90911681526020015b60405180910390f35b610214610256366004614961565b610782565b6102146102693660046149b3565b61078d565b61021461027c366004614a01565b610d12565b61029461028f36600461499c565b610d86565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d6366004614961565b610dda565b6102146102e9366004614a22565b610de5565b6103016102fc366004614a60565b610e8d565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614a01565b610ec2565b61030161034d366004614ac7565b61118f565b61029461036036600461499c565b6111af565b6103015f81565b61021461037a366004614961565b6111c3565b61021461038d366004614a01565b6111ee565b610231603081565b6102146103a836600461499c565b611428565b6103016103bb366004614ae2565b6114dd565b6102146103ce366004614b16565b611509565b6102146103e1366004614a22565b6115e8565b6103017f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61041b6005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461044136600461499c565b6117dd565b6103015f8051602061590e83398151915281565b61021461046836600461499c565b611a3d565b610231601481565b61048861048336600461499c565b611b7a565b60405161023f9190614bc9565b6102946202a30081565b6103015f805160206158ee83398151915281565b6103016104c1366004614c49565b611cc9565b6104d1838383611d24565b6104f657604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f8051602061594e8339815191526020526040808220815160e0810190925280545f8051602061590e83398151915293929190829060ff16600581111561054857610548614b54565b600581111561055957610559614b54565b815260200160018201805461056d90614cb4565b80601f016020809104026020016040519081016040528092919081815260200182805461059990614cb4565b80156105e45780601f106105bb576101008083540402835291602001916105e4565b820191905f5260205f20905b8154815290600101906020018083116105c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561064f5761064f614b54565b14610682575f8381526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106f9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107209190810190614df5565b6040518263ffffffff1660e01b815260040161073c9190614e26565b6020604051808303815f875af1158015610758573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077c9190614e38565b50505050565b61077c838383611d24565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061590e8339815191529060ff16156107df57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610822573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190614e38565b83602001351461086f576040516372b0a7e760e11b8152602084013560048201526024016104ed565b306108806060850160408601614e4f565b6001600160a01b0316146108c35761089e6060840160408501614e4f565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104ed565b5f6108d16060850185614e6a565b905090505f805b828163ffffffff161015610b38575f6108f46060880188614e6a565b8363ffffffff1681811061090a5761090a614eaf565b905060200281019061091c9190614ec3565b61092590614f2e565b80516040519192505f91600888019161093d91614fa9565b9081526020016040518091039020541461096d57805160405163a41f772f60e01b81526104ed9190600401614e26565b5f6002885f01358460405160200161099c92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109b691614fa9565b602060405180830381855afa1580156109d1573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109f49190614e38565b90508086600801835f0151604051610a0c9190614fa9565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a4c9082614ffe565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610acb90856150cd565b8251604051919550610adc91614fa9565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b31906150e0565b90506108d8565b50600483018190556001830154606490610b5c90600160401b900460ff1683615102565b1015610b7e57604051635943317f60e01b8152600481018290526024016104ed565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ba287612071565b604001516040518263ffffffff1660e01b8152600401610bc29190614e26565b602060405180830381865af4158015610bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c019190614e38565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c3b9190615244565b5f60405180830381865af4158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c7c9190810190614df5565b90505f600282604051610c8f9190614fa9565b602060405180830381855afa158015610caa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ccd9190614e38565b9050828114610cf95760405163baaea89d60e01b815260048101829052602481018490526044016104ed565b5050506009909201805460ff1916600117905550505050565b610d1b82612187565b610d3b576040516330efa98b60e01b8152600481018390526024016104ed565b5f610d4583611b7a565b5190506002816005811115610d5c57610d5c614b54565b14610d7c578060405163170cc93360e21b81526004016104ed9190614cec565b61077c83836121b0565b5f80610d9061244f565b60030154610d9e90846152cf565b9050801580610db357506001600160401b0381115b15610dd45760405163222d164360e21b8152600481018490526024016104ed565b92915050565b61077c838383612473565b610ded61265c565b5f610df661244f565b90505f80610e0384612693565b91509150610e1082612187565b610e1c57505050610e74565b5f8281526006840160205260409020546001600160a01b0316600482516005811115610e4a57610e4a614b54565b03610e5957610e598184612a46565b610e6f81610e6a846040015161118f565b612a70565b505050505b610e8a60015f8051602061592e83398151915255565b50565b5f610e9661265c565b610ea285858585612aa6565b9050610eba60015f8051602061592e83398151915255565b949350505050565b5f610ecb61244f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f0457610f04614b54565b6003811115610f1557610f15614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610f8b82611b7a565b9050600183516003811115610fa257610fa2614b54565b14610fc3578251604051633b0d540d60e21b81526104ed91906004016152ee565b600481516005811115610fd857610fd8614b54565b03610fee57610fe686612c0b565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61101389612071565b604001516040518263ffffffff1660e01b81526004016110339190614e26565b606060405180830381865af415801561104e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110729190615308565b509150915081841461109f57846040015160405163089938b360e11b81526004016104ed91815260200190565b806001600160401b031683606001516001600160401b031610806110d85750806001600160401b03168560a001516001600160401b0316115b1561110157604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61119861244f565b60030154610dd4906001600160401b038416615102565b5f6111b982611b7a565b6080015192915050565b6111ce838383612473565b6104f657604051635bff683f60e11b8152600481018490526024016104ed565b6111f661265c565b5f6111ff61244f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561123857611238614b54565b600381111561124957611249614b54565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112c2576112c2614b54565b146112e3578051604051633b0d540d60e21b81526104ed91906004016152ee565b60046112f28260400151611b7a565b51600581111561130457611304614b54565b14611403575f61131384612071565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016113529190614e26565b606060405180830381865af415801561136d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113919190615308565b5091509150818460400151146113bd5760405163089938b360e11b8152600481018390526024016104ed565b806001600160401b03168460c001516001600160401b031611156113ff57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5050505b61140c84612c0b565b505061142460015f8051602061592e83398151915255565b5050565b5f61143161244f565b90505f61143d83611b7a565b519050600481600581111561145457611454614b54565b14611474578060405163170cc93360e21b81526004016104ed9190614cec565b5f8381526006830160205260409020546001600160a01b031633146114ba57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104ed565b5f8381526006830160205260409020546104f6906001600160a01b031684612a46565b5f6114e661265c565b6114f1833384612dd9565b9050610dd460015f8051602061592e83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611552575080546001600160401b03808416911610155b156115705760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561159b848461301c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f8051602061590e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61161b86612071565b604001516040518263ffffffff1660e01b815260040161163b9190614e26565b6040805180830381865af4158015611655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116799190615348565b915091508061169f57604051632d07135360e01b815281151560048201526024016104ed565b5f828152600684016020526040902080546116b990614cb4565b90505f036116dd5760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078501602052604090205460ff16600581111561170357611703614b54565b14611736575f8281526007840160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b5f828152600684016020526040812061174e916148b0565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6117e661244f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561181f5761181f614b54565b600381111561183057611830614b54565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156118a9576118a9614b54565b141580156118ca57506003815160038111156118c7576118c7614b54565b14155b156118eb578051604051633b0d540d60e21b81526104ed91906004016152ee565b5f6118f98260400151611b7a565b905080606001516001600160401b03165f0361192b576040516339b894f960e21b8152600481018590526024016104ed565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361199993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af41580156119b3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119da9190810190614df5565b6040518263ffffffff1660e01b81526004016119f69190614e26565b6020604051808303815f875af1158015611a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a369190614e38565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061590e8339815191529190611a8490614cb4565b90505f03611aa85760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078301602052604090205460ff166005811115611ace57611ace614b54565b14611b01575f8281526007820160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611b3a919060040161536b565b6020604051808303815f875af1158015611b56573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f69190614e38565b611b826148e7565b5f8281525f8051602061594e833981519152602052604090819020815160e0810190925280545f8051602061590e833981519152929190829060ff166005811115611bcf57611bcf614b54565b6005811115611be057611be0614b54565b8152602001600182018054611bf490614cb4565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614cb4565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061590e833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d0c90869086906153f5565b90815260200160405180910390205491505092915050565b5f80611d2e61244f565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611d6757611d67614b54565b6003811115611d7857611d78614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611dee82611b7a565b9050600283516003811115611e0557611e05614b54565b14611e26578251604051633b0d540d60e21b81526104ed91906004016152ee565b60208301516001600160a01b03163314611ec2575f8281526006850160205260409020546001600160a01b03163314611e5f5733611495565b5f82815260068501602052604090205460a0820151611e8e91600160b01b90046001600160401b031690615404565b6001600160401b0316421015611ec25760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b600281516005811115611ed757611ed7614b54565b036120055760028401546080840151611ef9916001600160401b031690615404565b6001600160401b0316421015611f2d5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b8615611f3f57611f3d82876121b0565b505b5f8881526007850160205260409020805460ff1916600317905560608301516080820151611f78918491611f739190615424565b613036565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611fb98461320d565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061206a9350505050565b60048151600581111561201a5761201a614b54565b0361204e576120288361320d565b5f89815260088601602052604090205561204188612c0b565b600194505050505061206a565b805160405163170cc93360e21b81526104ed9190600401614cec565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156120d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120fc9190810190615444565b915091508061211e57604051636b2f19e960e01b815260040160405180910390fd5b815115612144578151604051636ba589a560e01b815260048101919091526024016104ed565b60208201516001600160a01b031615612180576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5092915050565b5f8061219161244f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156121fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122229190810190615444565b915091508061224457604051636b2f19e960e01b815260040160405180910390fd5b5f61224d61244f565b600581015484519192501461227b578251604051636ba589a560e01b815260048101919091526024016104ed565b60208301516001600160a01b0316156122b7576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b60208301516001600160a01b0316156122f3576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016123309190614e26565b6040805180830381865af415801561234a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236e91906154d4565b915091508188146123955760405163089938b360e11b8152600481018990526024016104ed565b5f8881526006840160205260409020600101546001600160401b039081169082161115612426575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612444565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061247d61244f565b90505f612489866133a4565b905061249486612187565b6124a35760019250505061206a565b5f8681526006830160205260409020546001600160a01b031633146124c85733611495565b5f86815260068301602052604090205460a08201516124f791600160b01b90046001600160401b031690615404565b6001600160401b03168160c001516001600160401b0316101561253e5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104ed565b5f85156125565761254f87866121b0565b9050612574565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125999061118f565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612602573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126269190614e38565b905080846009015f8a81526020019081526020015f205f82825461264a91906150cd565b90915550501515979650505050505050565b5f8051602061592e83398151915280546001190161268d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61269c6148e7565b5f8051602061590e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6126cf88612071565b604001516040518263ffffffff1660e01b81526004016126ef9190614e26565b6040805180830381865af4158015612709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272d9190615348565b91509150801561275457604051632d07135360e01b815281151560048201526024016104ed565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561278557612785614b54565b600581111561279657612796614b54565b81526020016001820180546127aa90614cb4565b80601f01602080910402602001604051908101604052809291908181526020018280546127d690614cb4565b80156128215780601f106127f857610100808354040283529160200191612821565b820191905f5260205f20905b81548152906001019060200180831161280457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561288c5761288c614b54565b141580156128ad57506001815160058111156128aa576128aa614b54565b14155b156128ce57805160405163170cc93360e21b81526104ed9190600401614cec565b6003815160058111156128e3576128e3614b54565b036128f157600481526128f6565b600581525b83600801816020015160405161290c9190614fa9565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561295057612950614b54565b0217905550602082015160018201906129699082614ffe565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612a0f57612a0f614b54565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612a4f61244f565b5f8381526009820160205260408120805491905590915061077c8482613688565b5f805160206158ee83398151915254611424906001600160a01b031683836136fe565b60015f8051602061592e83398151915255565b5f80612ab061244f565b600281015490915061ffff600160401b90910481169086161080612ad9575061271061ffff8616115b15612afd57604051635f12e6c360e11b815261ffff861660048201526024016104ed565b60028101546001600160401b039081169085161015612b39576040516202a06d60e11b81526001600160401b03851660048201526024016104ed565b8054831080612b4b5750806001015483115b15612b6c5760405163222d164360e21b8152600481018490526024016104ed565b5f612b768461375d565b90505f612b8282610d86565b90505f612b8f8983613780565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f612c1461244f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c4d57612c4d614b54565b6003811115612c5e57612c5e614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cfb7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d0a9190615404565b6001600160401b0316421015612d3e5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d7a838886613ca5565b91509150612d938560200151610e6a876060015161118f565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612de361244f565b90505f612df261028f8561375d565b90505f612dfe87611b7a565b9050612e0987612187565b612e29576040516330efa98b60e01b8152600481018890526024016104ed565b600281516005811115612e3e57612e3e614b54565b14612e5f57805160405163170cc93360e21b81526104ed9190600401614cec565b5f828260800151612e709190615404565b905083600201600a9054906101000a90046001600160401b03168260400151612e9991906154f7565b6001600160401b0316816001600160401b03161115612ed657604051636d51fe0560e11b81526001600160401b03821660048201526024016104ed565b5f80612ee28a84613036565b915091505f8a83604051602001612f1092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b613024613d52565b61302d82613d9d565b61142481613e17565b5f8281525f8051602061594e833981519152602052604081206002015481905f8051602061590e83398151915290600160801b90046001600160401b031661307e8582613e7f565b5f613088876140a2565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613131573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131589190810190614df5565b6040518263ffffffff1660e01b81526004016131749190614e26565b6020604051808303815f875af1158015613190573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b49190614e38565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061321761244f565b90505f6132278460400151611b7a565b90505f60038251600581111561323f5761323f614b54565b148061325d575060048251600581111561325b5761325b614b54565b145b1561326d575060c08101516132aa565b60028251600581111561328257613282614b54565b0361328e5750426132aa565b815160405163170cc93360e21b81526104ed9190600401614cec565b84608001516001600160401b0316816001600160401b0316116132d157505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906132f69061118f565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613377573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061339b9190614e38565b95945050505050565b6133ac6148e7565b5f8281525f8051602061594e8339815191526020526040808220815160e0810190925280545f8051602061590e83398151915293929190829060ff1660058111156133f9576133f9614b54565b600581111561340a5761340a614b54565b815260200160018201805461341e90614cb4565b80601f016020809104026020016040519081016040528092919081815260200182805461344a90614cb4565b80156134955780601f1061346c57610100808354040283529160200191613495565b820191905f5260205f20905b81548152906001019060200180831161347857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561350357613503614b54565b14613536575f8481526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561357a5761357a614b54565b0217905550602082015160018201906135939082614ffe565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6136318582613036565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f805160206158ee83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b1580156136e3575f80fd5b505af11580156136f5573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614117565b5f610dd4825f805160206158ee833981519152546001600160a01b031690614178565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166137c457604051637fab81e560e01b815260040160405180910390fd5b5f8051602061590e833981519152426137e36060860160408701614ac7565b6001600160401b031611158061381d57506138016202a300426150cd565b6138116060860160408701614ac7565b6001600160401b031610155b15613857576138326060850160408601614ac7565b604051635879da1360e11b81526001600160401b0390911660048201526024016104ed565b61386c6138676060860186615522565b614184565b61387c6138676080860186615522565b603061388b6020860186615536565b9050146138bd5761389f6020850185615536565b6040516326475b2f60e11b81526104ed925060040190815260200190565b6138c78480615536565b90505f036138f4576138d98480615536565b604051633e08a12560e11b81526004016104ed929190615578565b5f600882016139038680615536565b6040516139119291906153f5565b9081526020016040518091039020541461394a5761392f8480615536565b60405163a41f772f60e01b81526004016104ed929190615578565b613954835f613e7f565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016139918a80615536565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906139d9908b018b615536565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613a2260608b0160408c01614ac7565b6001600160401b03168152602001613a3d60608b018b615522565b613a469061558b565b8152602001613a5860808b018b615522565b613a619061558b565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613a8f91906156b8565b5f60405180830381865af4158015613aa9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ad0919081019061576f565b5f82815260068601602052604090209193509150613aee8282614ffe565b508160088401613afe8880615536565b604051613b0c9291906153f5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613b48908590600401614e26565b6020604051808303815f875af1158015613b64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b889190614e38565b5f8481526007860160205260409020805460ff191660011790559050613bae8780615536565b5f858152600787016020526040902060010191613bcc9190836157b2565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613c2b8880615536565b604051613c399291906153f5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613c779190614ac7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f613cb061244f565b5f86815260088201602052604081208054908290559192509081908015613d44575f87815260068501602052604090205461271090613cfa90600160a01b900461ffff1683615102565b613d0491906152cf565b915081846009015f8981526020019081526020015f205f828254613d2891906150cd565b90915550613d389050828261586b565b9250613d448984613688565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613d9b57604051631afcd79f60e31b815260040160405180910390fd5b565b613da5613d52565b613dae816142ed565b613db6614306565b610e8a60608201356080830135613dd360c0850160a08601614ac7565b613de360e0860160c0870161587e565b613df4610100870160e08801615897565b610100870135613e0c61014089016101208a01614e4f565b886101400135614316565b613e1f613d52565b5f805160206158ee8339815191526001600160a01b038216613e5f57604051637330680360e01b81526001600160a01b03831660048201526024016104ed565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061590e8339815191525f6001600160401b038084169085161115613eb357613eac8385615424565b9050613ec0565b613ebd8484615424565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f22575060018401548151613f1e916001600160401b0316906150cd565b8210155b15613f48576001600160401b038316606082015281815260408101516020820152613f67565b8281606001818151613f5a9190615404565b6001600160401b03169052505b6060810151613f779060646154f7565b602082015160018601546001600160401b039290921691613fa29190600160401b900460ff16615102565b1015613fd257606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104ed565b856001600160401b031681604001818151613fed91906150cd565b9052506040810180516001600160401b038716919061400d90839061586b565b9052506001840154604082015160649161403291600160401b90910460ff1690615102565b1015614059578060400151604051635943317f60e01b81526004016104ed91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f8051602061594e8339815191526020526040812060020180545f8051602061590e83398151915291906008906140ec90600160401b90046001600160401b03166158b7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61412b6001600160a01b038416836144fb565b905080515f1415801561414f57508080602001905181019061414d91906158d2565b155b156104f657604051635274afe760e01b81526001600160a01b03841660048201526024016104ed565b5f61206a833384614508565b6141916020820182614a22565b63ffffffff161580156141b157506141ac6020820182614e6a565b151590505b156141f8576141c36020820182614a22565b6141d06020830183614e6a565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104ed565b6142056020820182614e6a565b90506142146020830183614a22565b63ffffffff16111561422d576141c36020820182614a22565b60015b61423d6020830183614e6a565b9050811015611424576142536020830183614e6a565b61425e60018461586b565b81811061426d5761426d614eaf565b90506020020160208101906142829190614e4f565b6001600160a01b03166142986020840184614e6a565b838181106142a8576142a8614eaf565b90506020020160208101906142bd9190614e4f565b6001600160a01b031610156142e557604051630dbc8d5f60e31b815260040160405180910390fd5b600101614230565b6142f5613d52565b6142fd61466b565b610e8a81614673565b61430e613d52565b613d9b61475b565b61431e613d52565b5f61432761244f565b905061ffff8616158061433f575061271061ffff8716115b1561436357604051635f12e6c360e11b815261ffff871660048201526024016104ed565b878911156143875760405163222d164360e21b8152600481018a90526024016104ed565b60ff8516158061439a5750600a60ff8616115b156143bd5760405163170db35960e31b815260ff861660048201526024016104ed565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614424576040516202a06d60e11b81526001600160401b03881660048201526024016104ed565b835f036144445760405163a733007160e01b815260040160405180910390fd5b8161446557604051632f6bd1db60e01b8152600481018390526024016104ed565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061206a83835f614763565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561454e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145729190614e38565b90506145896001600160a01b0386168530866147f2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156145cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145f19190614e38565b90508181116146575760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104ed565b614661828261586b565b9695505050505050565b613d9b613d52565b61467b613d52565b80355f8051602061590e83398151915290815560146146a06060840160408501615897565b60ff1611806146bf57506146ba6060830160408401615897565b60ff16155b156146f3576146d46060830160408401615897565b604051634a59bbff60e11b815260ff90911660048201526024016104ed565b6147036060830160408401615897565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556147346040830160208401614ac7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612a93613d52565b6060814710156147885760405163cd78605960e01b81523060048201526024016104ed565b5f80856001600160a01b031684866040516147a39190614fa9565b5f6040518083038185875af1925050503d805f81146147dd576040519150601f19603f3d011682016040523d82523d5f602084013e6147e2565b606091505b509150915061466186838361482b565b6040516001600160a01b03848116602483015283811660448301526064820183905261077c9186918216906323b872dd9060840161372b565b6060826148405761483b82614887565b61206a565b815115801561485757506001600160a01b0384163b155b1561488057604051639996b31560e01b81526001600160a01b03851660048201526024016104ed565b508061206a565b8051156148975780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546148bc90614cb4565b5f825580601f106148cb575050565b601f0160209004905f5260205f2090810190610e8a9190614924565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614938575f8155600101614925565b5090565b8015158114610e8a575f80fd5b803563ffffffff8116811461495c575f80fd5b919050565b5f805f60608486031215614973575f80fd5b8335925060208401356149858161493c565b915061499360408501614949565b90509250925092565b5f602082840312156149ac575f80fd5b5035919050565b5f80604083850312156149c4575f80fd5b82356001600160401b038111156149d9575f80fd5b8301608081860312156149ea575f80fd5b91506149f860208401614949565b90509250929050565b5f8060408385031215614a12575f80fd5b823591506149f860208401614949565b5f60208284031215614a32575f80fd5b61206a82614949565b803561ffff8116811461495c575f80fd5b6001600160401b0381168114610e8a575f80fd5b5f805f8060808587031215614a73575f80fd5b84356001600160401b03811115614a88575f80fd5b850160a08188031215614a99575f80fd5b9350614aa760208601614a3b565b92506040850135614ab781614a4c565b9396929550929360600135925050565b5f60208284031215614ad7575f80fd5b813561206a81614a4c565b5f8060408385031215614af3575f80fd5b50508035926020909101359150565b6001600160a01b0381168114610e8a575f80fd5b5f80828403610180811215614b29575f80fd5b61016080821215614b38575f80fd5b8493508301359050614b4981614b02565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110614b7857614b78614b54565b9052565b5f5b83811015614b96578181015183820152602001614b7e565b50505f910152565b5f8151808452614bb5816020860160208601614b7c565b601f01601f19169290920160200192915050565b60208152614bdb602082018351614b68565b5f602083015160e06040840152614bf6610100840182614b9e565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614c5a575f80fd5b82356001600160401b0380821115614c70575f80fd5b818501915085601f830112614c83575f80fd5b813581811115614c91575f80fd5b866020828501011115614ca2575f80fd5b60209290920196919550909350505050565b600181811c90821680614cc857607f821691505b602082108103614ce657634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dd48284614b68565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d3057614d30614cfa565b60405290565b604080519081016001600160401b0381118282101715614d3057614d30614cfa565b604051601f8201601f191681016001600160401b0381118282101715614d8057614d80614cfa565b604052919050565b5f6001600160401b03821115614da057614da0614cfa565b50601f01601f191660200190565b5f82601f830112614dbd575f80fd5b8151614dd0614dcb82614d88565b614d58565b818152846020838601011115614de4575f80fd5b610eba826020830160208701614b7c565b5f60208284031215614e05575f80fd5b81516001600160401b03811115614e1a575f80fd5b610eba84828501614dae565b602081525f61206a6020830184614b9e565b5f60208284031215614e48575f80fd5b5051919050565b5f60208284031215614e5f575f80fd5b813561206a81614b02565b5f808335601e19843603018112614e7f575f80fd5b8301803591506001600160401b03821115614e98575f80fd5b6020019150600581901b3603821315613206575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614ed7575f80fd5b9190910192915050565b5f82601f830112614ef0575f80fd5b8135614efe614dcb82614d88565b818152846020838601011115614f12575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f3e575f80fd5b614f46614d0e565b82356001600160401b0380821115614f5c575f80fd5b614f6836838701614ee1565b83526020850135915080821115614f7d575f80fd5b50614f8a36828601614ee1565b6020830152506040830135614f9e81614a4c565b604082015292915050565b5f8251614ed7818460208701614b7c565b601f8211156104f657805f5260205f20601f840160051c81016020851015614fdf5750805b601f840160051c820191505b81811015611a36575f8155600101614feb565b81516001600160401b0381111561501757615017614cfa565b61502b816150258454614cb4565b84614fba565b602080601f83116001811461505e575f84156150475750858301515b5f19600386901b1c1916600185901b178555610fe6565b5f85815260208120601f198616915b8281101561508c5788860151825594840194600190910190840161506d565b50858210156150a957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dd457610dd46150b9565b5f63ffffffff8083168181036150f8576150f86150b9565b6001019392505050565b8082028115828204841417610dd457610dd46150b9565b5f808335601e1984360301811261512e575f80fd5b83016020810192503590506001600160401b0381111561514c575f80fd5b803603821315613206575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561523757848303601f19018952813536889003605e190181126151be575f80fd5b870160606151cc8280615119565b8287526151dc838801828461515a565b925050506151ec86830183615119565b868303888801526151fe83828461515a565b92505050604080830135925061521383614a4c565b6001600160401b039290921694909101939093529783019790830190600101615199565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561526881614b02565b6001600160a01b031660608381019190915283013536849003601e1901811261528f575f80fd5b83016020810190356001600160401b038111156152aa575f80fd5b8060051b36038213156152bb575f80fd5b60808085015261339b60a085018284615182565b5f826152e957634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061530257615302614b54565b91905290565b5f805f6060848603121561531a575f80fd5b83519250602084015161532c81614a4c565b604085015190925061533d81614a4c565b809150509250925092565b5f8060408385031215615359575f80fd5b825191506020830151614b498161493c565b5f60208083525f845461537d81614cb4565b806020870152604060018084165f811461539e57600181146153ba576153e7565b60ff19851660408a0152604084151560051b8a010195506153e7565b895f5260205f205f5b858110156153de5781548b82018601529083019088016153c3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612180576121806150b9565b6001600160401b03828116828216039080821115612180576121806150b9565b5f8060408385031215615455575f80fd5b82516001600160401b038082111561546b575f80fd5b908401906060828703121561547e575f80fd5b615486614d0e565b82518152602083015161549881614b02565b60208201526040830151828111156154ae575f80fd5b6154ba88828601614dae565b6040830152508094505050506020830151614b498161493c565b5f80604083850312156154e5575f80fd5b825191506020830151614b4981614a4c565b6001600160401b0381811683821602808216919082811461551a5761551a6150b9565b505092915050565b5f8235603e19833603018112614ed7575f80fd5b5f808335601e1984360301811261554b575f80fd5b8301803591506001600160401b03821115615564575f80fd5b602001915036819003821315613206575f80fd5b602081525f610eba60208301848661515a565b5f6040823603121561559b575f80fd5b6155a3614d36565b6155ac83614949565b81526020808401356001600160401b03808211156155c8575f80fd5b9085019036601f8301126155da575f80fd5b8135818111156155ec576155ec614cfa565b8060051b91506155fd848301614d58565b8181529183018401918481019036841115615616575f80fd5b938501935b83851015615640578435925061563083614b02565b828252938501939085019061561b565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156156ad5784516001600160a01b03168252938301936001929092019190830190615684565b509695505050505050565b60208152815160208201525f602083015160e060408401526156de610100840182614b9e565b90506040840151601f19808584030160608601526156fc8383614b9e565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261572c8383615652565b925060a08601519150808584030160c08601525061574a8282615652565b91505060c084015161576760e08501826001600160401b03169052565b509392505050565b5f8060408385031215615780575f80fd5b8251915060208301516001600160401b0381111561579c575f80fd5b6157a885828601614dae565b9150509250929050565b6001600160401b038311156157c9576157c9614cfa565b6157dd836157d78354614cb4565b83614fba565b5f601f84116001811461580e575f85156157f75750838201355b5f19600387901b1c1916600186901b178355611a36565b5f83815260208120601f198716915b8281101561583d578685013582556020948501946001909201910161581d565b5086821015615859575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610dd457610dd46150b9565b5f6020828403121561588e575f80fd5b61206a82614a3b565b5f602082840312156158a7575f80fd5b813560ff8116811461206a575f80fd5b5f6001600160401b038083168181036150f8576150f86150b9565b5f602082840312156158e2575f80fd5b815161206a8161493c56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220cf837a9f83c03928d6753024276104b1e4d961ae7dd899e716d50ea5d34f8f2364736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b50604051615af0380380615af083398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6159a38061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063b771b3bc116100a9578063c974d1b611610079578063c974d1b61461046d578063d5f20ff614610475578063df93d8de14610495578063e4a63c401461049f578063fd7ac5e7146104b3575f80fd5b8063b771b3bc1461040d578063ba3a4b9714610433578063bc5fbfec14610446578063bee0a03f1461045a575f80fd5b80639e478eea116100e45780639e478eea146103c0578063a3a65e48146103d3578063a9778a7a146102ac578063afb98096146103e6575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f366004614961565b6104c6565b005b61021461022436600461499c565b6104fb565b610231600a81565b60405160ff90911681526020015b60405180910390f35b610214610256366004614961565b610782565b6102146102693660046149b3565b61078d565b61021461027c366004614a01565b610d12565b61029461028f36600461499c565b610d86565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d6366004614961565b610dda565b6102146102e9366004614a22565b610de5565b6103016102fc366004614a60565b610e8d565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614a01565b610ec2565b61030161034d366004614ac7565b61118f565b61029461036036600461499c565b6111af565b6103015f81565b61021461037a366004614961565b6111c3565b61021461038d366004614a01565b6111ee565b610231603081565b6102146103a836600461499c565b611428565b6103016103bb366004614ae2565b6114dd565b6102146103ce366004614b16565b611509565b6102146103e1366004614a22565b6115e8565b6103017f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61041b6005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461044136600461499c565b6117dd565b6103015f8051602061590e83398151915281565b61021461046836600461499c565b611a3d565b610231601481565b61048861048336600461499c565b611b7a565b60405161023f9190614bc9565b6102946202a30081565b6103015f805160206158ee83398151915281565b6103016104c1366004614c49565b611cc9565b6104d1838383611d24565b6104f657604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f8051602061594e8339815191526020526040808220815160e0810190925280545f8051602061590e83398151915293929190829060ff16600581111561054857610548614b54565b600581111561055957610559614b54565b815260200160018201805461056d90614cb4565b80601f016020809104026020016040519081016040528092919081815260200182805461059990614cb4565b80156105e45780601f106105bb576101008083540402835291602001916105e4565b820191905f5260205f20905b8154815290600101906020018083116105c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561064f5761064f614b54565b14610682575f8381526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106f9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107209190810190614df5565b6040518263ffffffff1660e01b815260040161073c9190614e26565b6020604051808303815f875af1158015610758573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077c9190614e38565b50505050565b61077c838383611d24565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061590e8339815191529060ff16156107df57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610822573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190614e38565b83602001351461086f576040516372b0a7e760e11b8152602084013560048201526024016104ed565b306108806060850160408601614e4f565b6001600160a01b0316146108c35761089e6060840160408501614e4f565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104ed565b5f6108d16060850185614e6a565b905090505f805b828163ffffffff161015610b38575f6108f46060880188614e6a565b8363ffffffff1681811061090a5761090a614eaf565b905060200281019061091c9190614ec3565b61092590614f2e565b80516040519192505f91600888019161093d91614fa9565b9081526020016040518091039020541461096d57805160405163a41f772f60e01b81526104ed9190600401614e26565b5f6002885f01358460405160200161099c92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109b691614fa9565b602060405180830381855afa1580156109d1573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109f49190614e38565b90508086600801835f0151604051610a0c9190614fa9565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a4c9082614ffe565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610acb90856150cd565b8251604051919550610adc91614fa9565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b31906150e0565b90506108d8565b50600483018190556001830154606490610b5c90600160401b900460ff1683615102565b1015610b7e57604051635943317f60e01b8152600481018290526024016104ed565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ba287612071565b604001516040518263ffffffff1660e01b8152600401610bc29190614e26565b602060405180830381865af4158015610bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c019190614e38565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c3b9190615244565b5f60405180830381865af4158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c7c9190810190614df5565b90505f600282604051610c8f9190614fa9565b602060405180830381855afa158015610caa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ccd9190614e38565b9050828114610cf95760405163baaea89d60e01b815260048101829052602481018490526044016104ed565b5050506009909201805460ff1916600117905550505050565b610d1b82612187565b610d3b576040516330efa98b60e01b8152600481018390526024016104ed565b5f610d4583611b7a565b5190506002816005811115610d5c57610d5c614b54565b14610d7c578060405163170cc93360e21b81526004016104ed9190614cec565b61077c83836121b0565b5f80610d9061244f565b60030154610d9e90846152cf565b9050801580610db357506001600160401b0381115b15610dd45760405163222d164360e21b8152600481018490526024016104ed565b92915050565b61077c838383612473565b610ded61265c565b5f610df661244f565b90505f80610e0384612693565b91509150610e1082612187565b610e1c57505050610e74565b5f8281526006840160205260409020546001600160a01b0316600482516005811115610e4a57610e4a614b54565b03610e5957610e598184612a46565b610e6f81610e6a846040015161118f565b612a70565b505050505b610e8a60015f8051602061592e83398151915255565b50565b5f610e9661265c565b610ea285858585612aa6565b9050610eba60015f8051602061592e83398151915255565b949350505050565b5f610ecb61244f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f0457610f04614b54565b6003811115610f1557610f15614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610f8b82611b7a565b9050600183516003811115610fa257610fa2614b54565b14610fc3578251604051633b0d540d60e21b81526104ed91906004016152ee565b600481516005811115610fd857610fd8614b54565b03610fee57610fe686612c0b565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61101389612071565b604001516040518263ffffffff1660e01b81526004016110339190614e26565b606060405180830381865af415801561104e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110729190615308565b509150915081841461109f57846040015160405163089938b360e11b81526004016104ed91815260200190565b806001600160401b031683606001516001600160401b031610806110d85750806001600160401b03168560a001516001600160401b0316115b1561110157604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61119861244f565b60030154610dd4906001600160401b038416615102565b5f6111b982611b7a565b6080015192915050565b6111ce838383612473565b6104f657604051635bff683f60e11b8152600481018490526024016104ed565b6111f661265c565b5f6111ff61244f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561123857611238614b54565b600381111561124957611249614b54565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112c2576112c2614b54565b146112e3578051604051633b0d540d60e21b81526104ed91906004016152ee565b60046112f28260400151611b7a565b51600581111561130457611304614b54565b14611403575f61131384612071565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016113529190614e26565b606060405180830381865af415801561136d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113919190615308565b5091509150818460400151146113bd5760405163089938b360e11b8152600481018390526024016104ed565b806001600160401b03168460c001516001600160401b031611156113ff57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5050505b61140c84612c0b565b505061142460015f8051602061592e83398151915255565b5050565b5f61143161244f565b90505f61143d83611b7a565b519050600481600581111561145457611454614b54565b14611474578060405163170cc93360e21b81526004016104ed9190614cec565b5f8381526006830160205260409020546001600160a01b031633146114ba57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104ed565b5f8381526006830160205260409020546104f6906001600160a01b031684612a46565b5f6114e661265c565b6114f1833384612dd9565b9050610dd460015f8051602061592e83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611552575080546001600160401b03808416911610155b156115705760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561159b848461301c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f8051602061590e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61161b86612071565b604001516040518263ffffffff1660e01b815260040161163b9190614e26565b6040805180830381865af4158015611655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116799190615348565b915091508061169f57604051632d07135360e01b815281151560048201526024016104ed565b5f828152600684016020526040902080546116b990614cb4565b90505f036116dd5760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078501602052604090205460ff16600581111561170357611703614b54565b14611736575f8281526007840160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b5f828152600684016020526040812061174e916148b0565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6117e661244f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561181f5761181f614b54565b600381111561183057611830614b54565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156118a9576118a9614b54565b141580156118ca57506003815160038111156118c7576118c7614b54565b14155b156118eb578051604051633b0d540d60e21b81526104ed91906004016152ee565b5f6118f98260400151611b7a565b905080606001516001600160401b03165f0361192b576040516339b894f960e21b8152600481018590526024016104ed565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361199993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af41580156119b3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119da9190810190614df5565b6040518263ffffffff1660e01b81526004016119f69190614e26565b6020604051808303815f875af1158015611a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a369190614e38565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061590e8339815191529190611a8490614cb4565b90505f03611aa85760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078301602052604090205460ff166005811115611ace57611ace614b54565b14611b01575f8281526007820160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611b3a919060040161536b565b6020604051808303815f875af1158015611b56573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f69190614e38565b611b826148e7565b5f8281525f8051602061594e833981519152602052604090819020815160e0810190925280545f8051602061590e833981519152929190829060ff166005811115611bcf57611bcf614b54565b6005811115611be057611be0614b54565b8152602001600182018054611bf490614cb4565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614cb4565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061590e833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d0c90869086906153f5565b90815260200160405180910390205491505092915050565b5f80611d2e61244f565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611d6757611d67614b54565b6003811115611d7857611d78614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611dee82611b7a565b9050600283516003811115611e0557611e05614b54565b14611e26578251604051633b0d540d60e21b81526104ed91906004016152ee565b60208301516001600160a01b03163314611ec2575f8281526006850160205260409020546001600160a01b03163314611e5f5733611495565b5f82815260068501602052604090205460a0820151611e8e91600160b01b90046001600160401b031690615404565b6001600160401b0316421015611ec25760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b600281516005811115611ed757611ed7614b54565b036120055760028401546080840151611ef9916001600160401b031690615404565b6001600160401b0316421015611f2d5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b8615611f3f57611f3d82876121b0565b505b5f8881526007850160205260409020805460ff1916600317905560608301516080820151611f78918491611f739190615424565b613036565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611fb98461320d565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061206a9350505050565b60048151600581111561201a5761201a614b54565b0361204e576120288361320d565b5f89815260088601602052604090205561204188612c0b565b600194505050505061206a565b805160405163170cc93360e21b81526104ed9190600401614cec565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156120d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120fc9190810190615444565b915091508061211e57604051636b2f19e960e01b815260040160405180910390fd5b815115612144578151604051636ba589a560e01b815260048101919091526024016104ed565b60208201516001600160a01b031615612180576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5092915050565b5f8061219161244f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156121fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122229190810190615444565b915091508061224457604051636b2f19e960e01b815260040160405180910390fd5b5f61224d61244f565b600581015484519192501461227b578251604051636ba589a560e01b815260048101919091526024016104ed565b60208301516001600160a01b0316156122b7576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b60208301516001600160a01b0316156122f3576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016123309190614e26565b6040805180830381865af415801561234a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236e91906154d4565b915091508188146123955760405163089938b360e11b8152600481018990526024016104ed565b5f8881526006840160205260409020600101546001600160401b039081169082161115612426575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612444565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061247d61244f565b90505f612489866133a4565b905061249486612187565b6124a35760019250505061206a565b5f8681526006830160205260409020546001600160a01b031633146124c85733611495565b5f86815260068301602052604090205460a08201516124f791600160b01b90046001600160401b031690615404565b6001600160401b03168160c001516001600160401b0316101561253e5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104ed565b5f85156125565761254f87866121b0565b9050612574565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125999061118f565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612602573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126269190614e38565b905080846009015f8a81526020019081526020015f205f82825461264a91906150cd565b90915550501515979650505050505050565b5f8051602061592e83398151915280546001190161268d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61269c6148e7565b5f8051602061590e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6126cf88612071565b604001516040518263ffffffff1660e01b81526004016126ef9190614e26565b6040805180830381865af4158015612709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272d9190615348565b91509150801561275457604051632d07135360e01b815281151560048201526024016104ed565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561278557612785614b54565b600581111561279657612796614b54565b81526020016001820180546127aa90614cb4565b80601f01602080910402602001604051908101604052809291908181526020018280546127d690614cb4565b80156128215780601f106127f857610100808354040283529160200191612821565b820191905f5260205f20905b81548152906001019060200180831161280457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561288c5761288c614b54565b141580156128ad57506001815160058111156128aa576128aa614b54565b14155b156128ce57805160405163170cc93360e21b81526104ed9190600401614cec565b6003815160058111156128e3576128e3614b54565b036128f157600481526128f6565b600581525b83600801816020015160405161290c9190614fa9565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561295057612950614b54565b0217905550602082015160018201906129699082614ffe565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612a0f57612a0f614b54565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612a4f61244f565b5f8381526009820160205260408120805491905590915061077c8482613688565b5f805160206158ee83398151915254611424906001600160a01b031683836136fe565b60015f8051602061592e83398151915255565b5f80612ab061244f565b600281015490915061ffff600160401b90910481169086161080612ad9575061271061ffff8616115b15612afd57604051635f12e6c360e11b815261ffff861660048201526024016104ed565b60028101546001600160401b039081169085161015612b39576040516202a06d60e11b81526001600160401b03851660048201526024016104ed565b8054831080612b4b5750806001015483115b15612b6c5760405163222d164360e21b8152600481018490526024016104ed565b5f612b768461375d565b90505f612b8282610d86565b90505f612b8f8983613780565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f612c1461244f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c4d57612c4d614b54565b6003811115612c5e57612c5e614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cfb7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d0a9190615404565b6001600160401b0316421015612d3e5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d7a838886613ca5565b91509150612d938560200151610e6a876060015161118f565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612de361244f565b90505f612df261028f8561375d565b90505f612dfe87611b7a565b9050612e0987612187565b612e29576040516330efa98b60e01b8152600481018890526024016104ed565b600281516005811115612e3e57612e3e614b54565b14612e5f57805160405163170cc93360e21b81526104ed9190600401614cec565b5f828260800151612e709190615404565b905083600201600a9054906101000a90046001600160401b03168260400151612e9991906154f7565b6001600160401b0316816001600160401b03161115612ed657604051636d51fe0560e11b81526001600160401b03821660048201526024016104ed565b5f80612ee28a84613036565b915091505f8a83604051602001612f1092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b613024613d52565b61302d82613d9d565b61142481613e17565b5f8281525f8051602061594e833981519152602052604081206002015481905f8051602061590e83398151915290600160801b90046001600160401b031661307e8582613e7f565b5f613088876140a2565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613131573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131589190810190614df5565b6040518263ffffffff1660e01b81526004016131749190614e26565b6020604051808303815f875af1158015613190573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b49190614e38565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061321761244f565b90505f6132278460400151611b7a565b90505f60038251600581111561323f5761323f614b54565b148061325d575060048251600581111561325b5761325b614b54565b145b1561326d575060c08101516132aa565b60028251600581111561328257613282614b54565b0361328e5750426132aa565b815160405163170cc93360e21b81526104ed9190600401614cec565b84608001516001600160401b0316816001600160401b0316116132d157505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906132f69061118f565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613377573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061339b9190614e38565b95945050505050565b6133ac6148e7565b5f8281525f8051602061594e8339815191526020526040808220815160e0810190925280545f8051602061590e83398151915293929190829060ff1660058111156133f9576133f9614b54565b600581111561340a5761340a614b54565b815260200160018201805461341e90614cb4565b80601f016020809104026020016040519081016040528092919081815260200182805461344a90614cb4565b80156134955780601f1061346c57610100808354040283529160200191613495565b820191905f5260205f20905b81548152906001019060200180831161347857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561350357613503614b54565b14613536575f8481526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561357a5761357a614b54565b0217905550602082015160018201906135939082614ffe565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6136318582613036565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f805160206158ee83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b1580156136e3575f80fd5b505af11580156136f5573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614117565b5f610dd4825f805160206158ee833981519152546001600160a01b031690614178565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166137c457604051637fab81e560e01b815260040160405180910390fd5b5f8051602061590e833981519152426137e36060860160408701614ac7565b6001600160401b031611158061381d57506138016202a300426150cd565b6138116060860160408701614ac7565b6001600160401b031610155b15613857576138326060850160408601614ac7565b604051635879da1360e11b81526001600160401b0390911660048201526024016104ed565b61386c6138676060860186615522565b614184565b61387c6138676080860186615522565b603061388b6020860186615536565b9050146138bd5761389f6020850185615536565b6040516326475b2f60e11b81526104ed925060040190815260200190565b6138c78480615536565b90505f036138f4576138d98480615536565b604051633e08a12560e11b81526004016104ed929190615578565b5f600882016139038680615536565b6040516139119291906153f5565b9081526020016040518091039020541461394a5761392f8480615536565b60405163a41f772f60e01b81526004016104ed929190615578565b613954835f613e7f565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016139918a80615536565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906139d9908b018b615536565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613a2260608b0160408c01614ac7565b6001600160401b03168152602001613a3d60608b018b615522565b613a469061558b565b8152602001613a5860808b018b615522565b613a619061558b565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613a8f91906156b8565b5f60405180830381865af4158015613aa9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ad0919081019061576f565b5f82815260068601602052604090209193509150613aee8282614ffe565b508160088401613afe8880615536565b604051613b0c9291906153f5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613b48908590600401614e26565b6020604051808303815f875af1158015613b64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b889190614e38565b5f8481526007860160205260409020805460ff191660011790559050613bae8780615536565b5f858152600787016020526040902060010191613bcc9190836157b2565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613c2b8880615536565b604051613c399291906153f5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613c779190614ac7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f613cb061244f565b5f86815260088201602052604081208054908290559192509081908015613d44575f87815260068501602052604090205461271090613cfa90600160a01b900461ffff1683615102565b613d0491906152cf565b915081846009015f8981526020019081526020015f205f828254613d2891906150cd565b90915550613d389050828261586b565b9250613d448984613688565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613d9b57604051631afcd79f60e31b815260040160405180910390fd5b565b613da5613d52565b613dae816142ed565b613db6614306565b610e8a60608201356080830135613dd360c0850160a08601614ac7565b613de360e0860160c0870161587e565b613df4610100870160e08801615897565b610100870135613e0c61014089016101208a01614e4f565b886101400135614316565b613e1f613d52565b5f805160206158ee8339815191526001600160a01b038216613e5f57604051637330680360e01b81526001600160a01b03831660048201526024016104ed565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061590e8339815191525f6001600160401b038084169085161115613eb357613eac8385615424565b9050613ec0565b613ebd8484615424565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f22575060018401548151613f1e916001600160401b0316906150cd565b8210155b15613f48576001600160401b038316606082015281815260408101516020820152613f67565b8281606001818151613f5a9190615404565b6001600160401b03169052505b6060810151613f779060646154f7565b602082015160018601546001600160401b039290921691613fa29190600160401b900460ff16615102565b1015613fd257606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104ed565b856001600160401b031681604001818151613fed91906150cd565b9052506040810180516001600160401b038716919061400d90839061586b565b9052506001840154604082015160649161403291600160401b90910460ff1690615102565b1015614059578060400151604051635943317f60e01b81526004016104ed91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f8051602061594e8339815191526020526040812060020180545f8051602061590e83398151915291906008906140ec90600160401b90046001600160401b03166158b7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61412b6001600160a01b038416836144fb565b905080515f1415801561414f57508080602001905181019061414d91906158d2565b155b156104f657604051635274afe760e01b81526001600160a01b03841660048201526024016104ed565b5f61206a833384614508565b6141916020820182614a22565b63ffffffff161580156141b157506141ac6020820182614e6a565b151590505b156141f8576141c36020820182614a22565b6141d06020830183614e6a565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104ed565b6142056020820182614e6a565b90506142146020830183614a22565b63ffffffff16111561422d576141c36020820182614a22565b60015b61423d6020830183614e6a565b9050811015611424576142536020830183614e6a565b61425e60018461586b565b81811061426d5761426d614eaf565b90506020020160208101906142829190614e4f565b6001600160a01b03166142986020840184614e6a565b838181106142a8576142a8614eaf565b90506020020160208101906142bd9190614e4f565b6001600160a01b031610156142e557604051630dbc8d5f60e31b815260040160405180910390fd5b600101614230565b6142f5613d52565b6142fd61466b565b610e8a81614673565b61430e613d52565b613d9b61475b565b61431e613d52565b5f61432761244f565b905061ffff8616158061433f575061271061ffff8716115b1561436357604051635f12e6c360e11b815261ffff871660048201526024016104ed565b878911156143875760405163222d164360e21b8152600481018a90526024016104ed565b60ff8516158061439a5750600a60ff8616115b156143bd5760405163170db35960e31b815260ff861660048201526024016104ed565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614424576040516202a06d60e11b81526001600160401b03881660048201526024016104ed565b835f036144445760405163a733007160e01b815260040160405180910390fd5b8161446557604051632f6bd1db60e01b8152600481018390526024016104ed565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061206a83835f614763565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561454e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145729190614e38565b90506145896001600160a01b0386168530866147f2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156145cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145f19190614e38565b90508181116146575760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104ed565b614661828261586b565b9695505050505050565b613d9b613d52565b61467b613d52565b80355f8051602061590e83398151915290815560146146a06060840160408501615897565b60ff1611806146bf57506146ba6060830160408401615897565b60ff16155b156146f3576146d46060830160408401615897565b604051634a59bbff60e11b815260ff90911660048201526024016104ed565b6147036060830160408401615897565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556147346040830160208401614ac7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612a93613d52565b6060814710156147885760405163cd78605960e01b81523060048201526024016104ed565b5f80856001600160a01b031684866040516147a39190614fa9565b5f6040518083038185875af1925050503d805f81146147dd576040519150601f19603f3d011682016040523d82523d5f602084013e6147e2565b606091505b509150915061466186838361482b565b6040516001600160a01b03848116602483015283811660448301526064820183905261077c9186918216906323b872dd9060840161372b565b6060826148405761483b82614887565b61206a565b815115801561485757506001600160a01b0384163b155b1561488057604051639996b31560e01b81526001600160a01b03851660048201526024016104ed565b508061206a565b8051156148975780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546148bc90614cb4565b5f825580601f106148cb575050565b601f0160209004905f5260205f2090810190610e8a9190614924565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614938575f8155600101614925565b5090565b8015158114610e8a575f80fd5b803563ffffffff8116811461495c575f80fd5b919050565b5f805f60608486031215614973575f80fd5b8335925060208401356149858161493c565b915061499360408501614949565b90509250925092565b5f602082840312156149ac575f80fd5b5035919050565b5f80604083850312156149c4575f80fd5b82356001600160401b038111156149d9575f80fd5b8301608081860312156149ea575f80fd5b91506149f860208401614949565b90509250929050565b5f8060408385031215614a12575f80fd5b823591506149f860208401614949565b5f60208284031215614a32575f80fd5b61206a82614949565b803561ffff8116811461495c575f80fd5b6001600160401b0381168114610e8a575f80fd5b5f805f8060808587031215614a73575f80fd5b84356001600160401b03811115614a88575f80fd5b850160a08188031215614a99575f80fd5b9350614aa760208601614a3b565b92506040850135614ab781614a4c565b9396929550929360600135925050565b5f60208284031215614ad7575f80fd5b813561206a81614a4c565b5f8060408385031215614af3575f80fd5b50508035926020909101359150565b6001600160a01b0381168114610e8a575f80fd5b5f80828403610180811215614b29575f80fd5b61016080821215614b38575f80fd5b8493508301359050614b4981614b02565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110614b7857614b78614b54565b9052565b5f5b83811015614b96578181015183820152602001614b7e565b50505f910152565b5f8151808452614bb5816020860160208601614b7c565b601f01601f19169290920160200192915050565b60208152614bdb602082018351614b68565b5f602083015160e06040840152614bf6610100840182614b9e565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614c5a575f80fd5b82356001600160401b0380821115614c70575f80fd5b818501915085601f830112614c83575f80fd5b813581811115614c91575f80fd5b866020828501011115614ca2575f80fd5b60209290920196919550909350505050565b600181811c90821680614cc857607f821691505b602082108103614ce657634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dd48284614b68565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d3057614d30614cfa565b60405290565b604080519081016001600160401b0381118282101715614d3057614d30614cfa565b604051601f8201601f191681016001600160401b0381118282101715614d8057614d80614cfa565b604052919050565b5f6001600160401b03821115614da057614da0614cfa565b50601f01601f191660200190565b5f82601f830112614dbd575f80fd5b8151614dd0614dcb82614d88565b614d58565b818152846020838601011115614de4575f80fd5b610eba826020830160208701614b7c565b5f60208284031215614e05575f80fd5b81516001600160401b03811115614e1a575f80fd5b610eba84828501614dae565b602081525f61206a6020830184614b9e565b5f60208284031215614e48575f80fd5b5051919050565b5f60208284031215614e5f575f80fd5b813561206a81614b02565b5f808335601e19843603018112614e7f575f80fd5b8301803591506001600160401b03821115614e98575f80fd5b6020019150600581901b3603821315613206575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614ed7575f80fd5b9190910192915050565b5f82601f830112614ef0575f80fd5b8135614efe614dcb82614d88565b818152846020838601011115614f12575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f3e575f80fd5b614f46614d0e565b82356001600160401b0380821115614f5c575f80fd5b614f6836838701614ee1565b83526020850135915080821115614f7d575f80fd5b50614f8a36828601614ee1565b6020830152506040830135614f9e81614a4c565b604082015292915050565b5f8251614ed7818460208701614b7c565b601f8211156104f657805f5260205f20601f840160051c81016020851015614fdf5750805b601f840160051c820191505b81811015611a36575f8155600101614feb565b81516001600160401b0381111561501757615017614cfa565b61502b816150258454614cb4565b84614fba565b602080601f83116001811461505e575f84156150475750858301515b5f19600386901b1c1916600185901b178555610fe6565b5f85815260208120601f198616915b8281101561508c5788860151825594840194600190910190840161506d565b50858210156150a957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dd457610dd46150b9565b5f63ffffffff8083168181036150f8576150f86150b9565b6001019392505050565b8082028115828204841417610dd457610dd46150b9565b5f808335601e1984360301811261512e575f80fd5b83016020810192503590506001600160401b0381111561514c575f80fd5b803603821315613206575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561523757848303601f19018952813536889003605e190181126151be575f80fd5b870160606151cc8280615119565b8287526151dc838801828461515a565b925050506151ec86830183615119565b868303888801526151fe83828461515a565b92505050604080830135925061521383614a4c565b6001600160401b039290921694909101939093529783019790830190600101615199565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561526881614b02565b6001600160a01b031660608381019190915283013536849003601e1901811261528f575f80fd5b83016020810190356001600160401b038111156152aa575f80fd5b8060051b36038213156152bb575f80fd5b60808085015261339b60a085018284615182565b5f826152e957634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061530257615302614b54565b91905290565b5f805f6060848603121561531a575f80fd5b83519250602084015161532c81614a4c565b604085015190925061533d81614a4c565b809150509250925092565b5f8060408385031215615359575f80fd5b825191506020830151614b498161493c565b5f60208083525f845461537d81614cb4565b806020870152604060018084165f811461539e57600181146153ba576153e7565b60ff19851660408a0152604084151560051b8a010195506153e7565b895f5260205f205f5b858110156153de5781548b82018601529083019088016153c3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612180576121806150b9565b6001600160401b03828116828216039080821115612180576121806150b9565b5f8060408385031215615455575f80fd5b82516001600160401b038082111561546b575f80fd5b908401906060828703121561547e575f80fd5b615486614d0e565b82518152602083015161549881614b02565b60208201526040830151828111156154ae575f80fd5b6154ba88828601614dae565b6040830152508094505050506020830151614b498161493c565b5f80604083850312156154e5575f80fd5b825191506020830151614b4981614a4c565b6001600160401b0381811683821602808216919082811461551a5761551a6150b9565b505092915050565b5f8235603e19833603018112614ed7575f80fd5b5f808335601e1984360301811261554b575f80fd5b8301803591506001600160401b03821115615564575f80fd5b602001915036819003821315613206575f80fd5b602081525f610eba60208301848661515a565b5f6040823603121561559b575f80fd5b6155a3614d36565b6155ac83614949565b81526020808401356001600160401b03808211156155c8575f80fd5b9085019036601f8301126155da575f80fd5b8135818111156155ec576155ec614cfa565b8060051b91506155fd848301614d58565b8181529183018401918481019036841115615616575f80fd5b938501935b83851015615640578435925061563083614b02565b828252938501939085019061561b565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156156ad5784516001600160a01b03168252938301936001929092019190830190615684565b509695505050505050565b60208152815160208201525f602083015160e060408401526156de610100840182614b9e565b90506040840151601f19808584030160608601526156fc8383614b9e565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261572c8383615652565b925060a08601519150808584030160c08601525061574a8282615652565b91505060c084015161576760e08501826001600160401b03169052565b509392505050565b5f8060408385031215615780575f80fd5b8251915060208301516001600160401b0381111561579c575f80fd5b6157a885828601614dae565b9150509250929050565b6001600160401b038311156157c9576157c9614cfa565b6157dd836157d78354614cb4565b83614fba565b5f601f84116001811461580e575f85156157f75750838201355b5f19600387901b1c1916600186901b178355611a36565b5f83815260208120601f198716915b8281101561583d578685013582556020948501946001909201910161581d565b5086821015615859575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610dd457610dd46150b9565b5f6020828403121561588e575f80fd5b61206a82614a3b565b5f602082840312156158a7575f80fd5b813560ff8116811461206a575f80fd5b5f6001600160401b038083168181036150f8576150f86150b9565b5f602082840312156158e2575f80fd5b815161206a8161493c56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220af736a9f69bea2ce7c32c72fcd16390d5f99bbffe9053346eab8d105a2c11ada64736f6c63430008190033",
}
// ERC20TokenStakingManagerABI is the input ABI used to generate the binding from.
diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
index 93e74f815..d293827db 100644
--- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
+++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
@@ -104,7 +104,7 @@ type ValidatorRegistrationInput struct {
// NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract.
var NativeTokenStakingManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b5060405161580238038061580283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6156b58061014d5f395ff3fe6080604052600436106101f1575f3560e01c806376f7862111610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f146105a0578063c974d1b6146105b3578063d5f20ff6146105c7578063df93d8de146105f3578063fd7ac5e714610609575f80fd5b8063b771b3bc14610528578063ba3a4b9714610542578063bc5fbfec14610561578063bee0a03f14610581575f80fd5b8063a3a65e48116100d8578063a3a65e48146104c3578063a9778a7a14610345578063af2f5feb146104e2578063afb98096146104f5575f80fd5b806376f786211461045257806380dd672f146104715780638280a25a1461049057806393e24598146104a4575f80fd5b8063329c3e121161018957806360305d621161015957806360305d62146103ab57806360ad7784146103d457806362065856146103f357806366435abf14610420578063732214f81461043f575f80fd5b8063329c3e121461031357806335455ded146103455780633a1cfff61461036d578063467ef06f1461038c575f80fd5b80631ec44724116101c45780631ec447241461027f57806320d91b7a1461029e57806325e1c776146102bd5780632e2194d8146102dc575f80fd5b80630118acc4146101f55780630322ed98146102165780630ba512d114610235578063151d30d114610254575b5f80fd5b348015610200575f80fd5b5061021461020f3660046146f9565b610628565b005b348015610221575f80fd5b50610214610230366004614734565b61065d565b348015610240575f80fd5b5061021461024f36600461474b565b6108e4565b34801561025f575f80fd5b50610268600a81565b60405160ff90911681526020015b60405180910390f35b34801561028a575f80fd5b506102146102993660046146f9565b6109c1565b3480156102a9575f80fd5b506102146102b8366004614762565b6109cc565b3480156102c8575f80fd5b506102146102d73660046147b0565b610f51565b3480156102e7575f80fd5b506102fb6102f6366004614734565b610fc5565b6040516001600160401b039091168152602001610276565b34801561031e575f80fd5b5061032d6001600160991b0181565b6040516001600160a01b039091168152602001610276565b348015610350575f80fd5b5061035a61271081565b60405161ffff9091168152602001610276565b348015610378575f80fd5b506102146103873660046146f9565b611019565b348015610397575f80fd5b506102146103a63660046147d1565b611024565b3480156103b6575f80fd5b506103bf601481565b60405163ffffffff9091168152602001610276565b3480156103df575f80fd5b506102146103ee3660046147b0565b6110cc565b3480156103fe575f80fd5b5061041261040d3660046147fe565b611399565b604051908152602001610276565b34801561042b575f80fd5b506102fb61043a366004614734565b6113b9565b34801561044a575f80fd5b506104125f81565b34801561045d575f80fd5b5061021461046c3660046146f9565b6113cd565b34801561047c575f80fd5b5061021461048b3660046147b0565b6113f8565b34801561049b575f80fd5b50610268603081565b3480156104af575f80fd5b506102146104be366004614734565b611632565b3480156104ce575f80fd5b506102146104dd3660046147d1565b6116e7565b6104126104f036600461482a565b6118dc565b348015610500575f80fd5b506104127f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610533575f80fd5b5061032d6005600160991b0181565b34801561054d575f80fd5b5061021461055c366004614734565b611910565b34801561056c575f80fd5b506104125f8051602061562083398151915281565b34801561058c575f80fd5b5061021461059b366004614734565b611b70565b6104126105ae366004614734565b611cad565b3480156105be575f80fd5b50610268601481565b3480156105d2575f80fd5b506105e66105e1366004614734565b611cde565b6040516102769190614900565b3480156105fe575f80fd5b506102fb6202a30081565b348015610614575f80fd5b50610412610623366004614980565b611e2d565b610633838383611e88565b61065857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206156608339815191526020526040808220815160e0810190925280545f8051602061562083398151915293929190829060ff1660058111156106aa576106aa61488b565b60058111156106bb576106bb61488b565b81526020016001820180546106cf906149eb565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb906149eb565b80156107465780601f1061071d57610100808354040283529160200191610746565b820191905f5260205f20905b81548152906001019060200180831161072957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156107b1576107b161488b565b146107e4575f8381526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561085b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108829190810190614b2e565b6040518263ffffffff1660e01b815260040161089e9190614b5f565b6020604051808303815f875af11580156108ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108de9190614b71565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061092d575080546001600160401b03808416911610155b1561094b5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610975836121ce565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6108de838383611e88565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f805160206156208339815191529060ff1615610a1e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a859190614b71565b836020013514610aae576040516372b0a7e760e11b81526020840135600482015260240161064f565b30610abf6060850160408601614b9c565b6001600160a01b031614610b0257610add6060840160408501614b9c565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161064f565b5f610b106060850185614bb7565b905090505f805b828163ffffffff161015610d77575f610b336060880188614bb7565b8363ffffffff16818110610b4957610b49614bfc565b9050602002810190610b5b9190614c10565b610b6490614c7b565b80516040519192505f916008880191610b7c91614cf6565b90815260200160405180910390205414610bac57805160405163a41f772f60e01b815261064f9190600401614b5f565b5f6002885f013584604051602001610bdb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610bf591614cf6565b602060405180830381855afa158015610c10573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c339190614b71565b90508086600801835f0151604051610c4b9190614cf6565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610c8b9082614d4b565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610d0a9085614e1a565b8251604051919550610d1b91614cf6565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610d7090614e2d565b9050610b17565b50600483018190556001830154606490610d9b90600160401b900460ff1683614e4f565b1015610dbd57604051635943317f60e01b81526004810182905260240161064f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610de1876121df565b604001516040518263ffffffff1660e01b8152600401610e019190614b5f565b602060405180830381865af4158015610e1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e409190614b71565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610e7a9190614f91565b5f60405180830381865af4158015610e94573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ebb9190810190614b2e565b90505f600282604051610ece9190614cf6565b602060405180830381855afa158015610ee9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f0c9190614b71565b9050828114610f385760405163baaea89d60e01b8152600481018290526024810184905260440161064f565b5050506009909201805460ff1916600117905550505050565b610f5a826122f5565b610f7a576040516330efa98b60e01b81526004810183905260240161064f565b5f610f8483611cde565b5190506002816005811115610f9b57610f9b61488b565b14610fbb578060405163170cc93360e21b815260040161064f9190614a1d565b6108de838361231e565b5f80610fcf6125bd565b60030154610fdd908461501c565b9050801580610ff257506001600160401b0381115b156110135760405163222d164360e21b81526004810184905260240161064f565b92915050565b6108de8383836125e1565b61102c6127ca565b5f6110356125bd565b90505f8061104284612801565b9150915061104f826122f5565b61105b575050506110b3565b5f8281526006840160205260409020546001600160a01b03166004825160058111156110895761108961488b565b03611098576110988184612bb4565b6110ae816110a98460400151611399565b612bde565b505050505b6110c960015f8051602061564083398151915255565b50565b5f6110d56125bd565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561110e5761110e61488b565b600381111561111f5761111f61488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61119582611cde565b90506001835160038111156111ac576111ac61488b565b146111cd578251604051633b0d540d60e21b815261064f919060040161503b565b6004815160058111156111e2576111e261488b565b036111f8576111f086612c04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61121d896121df565b604001516040518263ffffffff1660e01b815260040161123d9190614b5f565b606060405180830381865af4158015611258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127c9190615055565b50915091508184146112a957846040015160405163089938b360e11b815260040161064f91815260200190565b806001600160401b031683606001516001600160401b031610806112e25750806001600160401b03168560a001516001600160401b0316115b1561130b57604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6113a26125bd565b60030154611013906001600160401b038416614e4f565b5f6113c382611cde565b6080015192915050565b6113d88383836125e1565b61065857604051635bff683f60e11b81526004810184905260240161064f565b6114006127ca565b5f6114096125bd565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114425761144261488b565b60038111156114535761145361488b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114cc576114cc61488b565b146114ed578051604051633b0d540d60e21b815261064f919060040161503b565b60046114fc8260400151611cde565b51600581111561150e5761150e61488b565b1461160d575f61151d846121df565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161155c9190614b5f565b606060405180830381865af4158015611577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159b9190615055565b5091509150818460400151146115c75760405163089938b360e11b81526004810183905260240161064f565b806001600160401b03168460c001516001600160401b0316111561160957604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5050505b61161684612c04565b505061162e60015f8051602061564083398151915255565b5050565b5f61163b6125bd565b90505f61164783611cde565b519050600481600581111561165e5761165e61488b565b1461167e578060405163170cc93360e21b815260040161064f9190614a1d565b5f8381526006830160205260409020546001600160a01b031633146116c457335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161064f565b5f838152600683016020526040902054610658906001600160a01b031684612bb4565b5f805160206156208339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61171a866121df565b604001516040518263ffffffff1660e01b815260040161173a9190614b5f565b6040805180830381865af4158015611754573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611778919061508a565b915091508061179e57604051632d07135360e01b8152811515600482015260240161064f565b5f828152600684016020526040902080546117b8906149eb565b90505f036117dc5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078501602052604090205460ff1660058111156118025761180261488b565b14611835575f8281526007840160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b5f828152600684016020526040812061184d9161464d565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6118e56127ca565b6118f184848434612dd2565b905061190960015f8051602061564083398151915255565b9392505050565b5f6119196125bd565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119525761195261488b565b60038111156119635761196361488b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119dc576119dc61488b565b141580156119fd57506003815160038111156119fa576119fa61488b565b14155b15611a1e578051604051633b0d540d60e21b815261064f919060040161503b565b5f611a2c8260400151611cde565b905080606001516001600160401b03165f03611a5e576040516339b894f960e21b81526004810185905260240161064f565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611acc93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611ae6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b0d9190810190614b2e565b6040518263ffffffff1660e01b8152600401611b299190614b5f565b6020604051808303815f875af1158015611b45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b699190614b71565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f805160206156208339815191529190611bb7906149eb565b90505f03611bdb5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078301602052604090205460ff166005811115611c0157611c0161488b565b14611c34575f8281526007820160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611c6d91906004016150b8565b6020604051808303815f875af1158015611c89573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106589190614b71565b5f611cb66127ca565b611cc1823334612f2c565b9050611cd960015f8051602061564083398151915255565b919050565b611ce6614684565b5f8281525f80516020615660833981519152602052604090819020815160e0810190925280545f80516020615620833981519152929190829060ff166005811115611d3357611d3361488b565b6005811115611d4457611d4461488b565b8152602001600182018054611d58906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d84906149eb565b8015611dcf5780601f10611da657610100808354040283529160200191611dcf565b820191905f5260205f20905b815481529060010190602001808311611db257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615620833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611e709086908690615142565b90815260200160405180910390205491505092915050565b5f80611e926125bd565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611ecb57611ecb61488b565b6003811115611edc57611edc61488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611f5282611cde565b9050600283516003811115611f6957611f6961488b565b14611f8a578251604051633b0d540d60e21b815261064f919060040161503b565b60208301516001600160a01b03163314612026575f8281526006850160205260409020546001600160a01b03163314611fc3573361169f565b5f82815260068501602052604090205460a0820151611ff291600160b01b90046001600160401b031690615151565b6001600160401b03164210156120265760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b60028151600581111561203b5761203b61488b565b03612169576002840154608084015161205d916001600160401b031690615151565b6001600160401b03164210156120915760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b86156120a3576120a1828761231e565b505b5f8881526007850160205260409020805460ff19166003179055606083015160808201516120dc9184916120d79190615171565b61316c565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561211d84613343565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506119099350505050565b60048151600581111561217e5761217e61488b565b036121b25761218c83613343565b5f8981526008860160205260409020556121a588612c04565b6001945050505050611909565b805160405163170cc93360e21b815261064f9190600401614a1d565b6121d66134da565b6110c981613525565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612243573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261226a9190810190615191565b915091508061228c57604051636b2f19e960e01b815260040160405180910390fd5b8151156122b2578151604051636ba589a560e01b8152600481019190915260240161064f565b60208201516001600160a01b0316156122ee576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5092915050565b5f806122ff6125bd565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612369573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123909190810190615191565b91509150806123b257604051636b2f19e960e01b815260040160405180910390fd5b5f6123bb6125bd565b60058101548451919250146123e9578251604051636ba589a560e01b8152600481019190915260240161064f565b60208301516001600160a01b031615612425576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b60208301516001600160a01b031615612461576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161249e9190614b5f565b6040805180830381865af41580156124b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124dc9190615221565b915091508188146125035760405163089938b360e11b81526004810189905260240161064f565b5f8881526006840160205260409020600101546001600160401b039081169082161115612594575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26125b2565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806125eb6125bd565b90505f6125f78661359f565b9050612602866122f5565b61261157600192505050611909565b5f8681526006830160205260409020546001600160a01b03163314612636573361169f565b5f86815260068301602052604090205460a082015161266591600160b01b90046001600160401b031690615151565b6001600160401b03168160c001516001600160401b031610156126ac5760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161064f565b5f85156126c4576126bd878661231e565b90506126e2565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061270790611399565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612770573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127949190614b71565b905080846009015f8a81526020019081526020015f205f8282546127b89190614e1a565b90915550501515979650505050505050565b5f805160206156408339815191528054600119016127fb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61280a614684565b5f805160206156208339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61283d886121df565b604001516040518263ffffffff1660e01b815260040161285d9190614b5f565b6040805180830381865af4158015612877573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289b919061508a565b9150915080156128c257604051632d07135360e01b8152811515600482015260240161064f565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156128f3576128f361488b565b60058111156129045761290461488b565b8152602001600182018054612918906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054612944906149eb565b801561298f5780601f106129665761010080835404028352916020019161298f565b820191905f5260205f20905b81548152906001019060200180831161297257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156129fa576129fa61488b565b14158015612a1b5750600181516005811115612a1857612a1861488b565b14155b15612a3c57805160405163170cc93360e21b815261064f9190600401614a1d565b600381516005811115612a5157612a5161488b565b03612a5f5760048152612a64565b600581525b836008018160200151604051612a7a9190614cf6565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612abe57612abe61488b565b021790555060208201516001820190612ad79082614d4b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b7d57612b7d61488b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612bbd6125bd565b5f838152600982016020526040812080549190559091506108de8482613883565b61162e6001600160a01b038316826138e1565b60015f8051602061564083398151915255565b5f612c0d6125bd565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c4657612c4661488b565b6003811115612c5757612c5761488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d039190615151565b6001600160401b0316421015612d375760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d73838886613974565b91509150612d8c85602001516110a98760600151611399565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612ddc6125bd565b600281015490915061ffff600160401b90910481169086161080612e05575061271061ffff8616115b15612e2957604051635f12e6c360e11b815261ffff8616600482015260240161064f565b60028101546001600160401b039081169085161015612e65576040516202a06d60e11b81526001600160401b038516600482015260240161064f565b8054831080612e775750806001015483115b15612e985760405163222d164360e21b81526004810184905260240161064f565b825f612ea382610fc5565b90505f612eb08983613a21565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f80612f366125bd565b90505f612f4284610fc5565b90505f612f4e87611cde565b9050612f59876122f5565b612f79576040516330efa98b60e01b81526004810188905260240161064f565b600281516005811115612f8e57612f8e61488b565b14612faf57805160405163170cc93360e21b815261064f9190600401614a1d565b5f828260800151612fc09190615151565b905083600201600a9054906101000a90046001600160401b03168260400151612fe99190615244565b6001600160401b0316816001600160401b0316111561302657604051636d51fe0560e11b81526001600160401b038216600482015260240161064f565b5f806130328a8461316c565b915091505f8a8360405160200161306092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f80516020615660833981519152602052604081206002015481905f8051602061562083398151915290600160801b90046001600160401b03166131b48582613f46565b5f6131be87614169565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613267573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261328e9190810190614b2e565b6040518263ffffffff1660e01b81526004016132aa9190614b5f565b6020604051808303815f875af11580156132c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ea9190614b71565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061334d6125bd565b90505f61335d8460400151611cde565b90505f6003825160058111156133755761337561488b565b148061339357506004825160058111156133915761339161488b565b145b156133a3575060c08101516133e0565b6002825160058111156133b8576133b861488b565b036133c45750426133e0565b815160405163170cc93360e21b815261064f9190600401614a1d565b84608001516001600160401b0316816001600160401b03161161340757505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061342c90611399565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156134ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d19190614b71565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352357604051631afcd79f60e31b815260040160405180910390fd5b565b61352d6134da565b613536816141de565b61353e6141f7565b6110c96060820135608083013561355b60c0850160a086016147fe565b61356b60e0860160c0870161526f565b61357c610100870160e08801615288565b61010087013561359461014089016101208a01614b9c565b886101400135614207565b6135a7614684565b5f8281525f805160206156608339815191526020526040808220815160e0810190925280545f8051602061562083398151915293929190829060ff1660058111156135f4576135f461488b565b60058111156136055761360561488b565b8152602001600182018054613619906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054613645906149eb565b80156136905780601f1061366757610100808354040283529160200191613690565b820191905f5260205f20905b81548152906001019060200180831161367357829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156136fe576136fe61488b565b14613731575f8481526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156137755761377561488b565b02179055506020820151600182019061378e9082614d4b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61382c858261316c565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b1580156138cf575f80fd5b505af11580156111f0573d5f803e3d5ffd5b804710156139045760405163cd78605960e01b815230600482015260240161064f565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461394d576040519150601f19603f3d011682016040523d82523d5f602084013e613952565b606091505b505090508061065857604051630a12f52160e11b815260040160405180910390fd5b5f805f61397f6125bd565b5f86815260088201602052604081208054908290559192509081908015613a13575f878152600685016020526040902054612710906139c990600160a01b900461ffff1683614e4f565b6139d3919061501c565b915081846009015f8981526020019081526020015f205f8282546139f79190614e1a565b90915550613a07905082826152a8565b9250613a138984613883565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613a6557604051637fab81e560e01b815260040160405180910390fd5b5f8051602061562083398151915242613a8460608601604087016147fe565b6001600160401b0316111580613abe5750613aa26202a30042614e1a565b613ab260608601604087016147fe565b6001600160401b031610155b15613af857613ad360608501604086016147fe565b604051635879da1360e11b81526001600160401b03909116600482015260240161064f565b613b0d613b0860608601866152bb565b6143ec565b613b1d613b0860808601866152bb565b6030613b2c60208601866152cf565b905014613b5e57613b4060208501856152cf565b6040516326475b2f60e11b815261064f925060040190815260200190565b613b6884806152cf565b90505f03613b9557613b7a84806152cf565b604051633e08a12560e11b815260040161064f929190615311565b5f60088201613ba486806152cf565b604051613bb2929190615142565b90815260200160405180910390205414613beb57613bd084806152cf565b60405163a41f772f60e01b815260040161064f929190615311565b613bf5835f613f46565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613c328a806152cf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613c7a908b018b6152cf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613cc360608b0160408c016147fe565b6001600160401b03168152602001613cde60608b018b6152bb565b613ce790615324565b8152602001613cf960808b018b6152bb565b613d0290615324565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613d309190615451565b5f60405180830381865af4158015613d4a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d719190810190615508565b5f82815260068601602052604090209193509150613d8f8282614d4b565b508160088401613d9f88806152cf565b604051613dad929190615142565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613de9908590600401614b5f565b6020604051808303815f875af1158015613e05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e299190614b71565b5f8481526007860160205260409020805460ff191660011790559050613e4f87806152cf565b5f858152600787016020526040902060010191613e6d91908361554b565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ecc88806152cf565b604051613eda929190615142565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613f1891906147fe565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805160206156208339815191525f6001600160401b038084169085161115613f7a57613f738385615171565b9050613f87565b613f848484615171565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613fe9575060018401548151613fe5916001600160401b031690614e1a565b8210155b1561400f576001600160401b03831660608201528181526040810151602082015261402e565b82816060018181516140219190615151565b6001600160401b03169052505b606081015161403e906064615244565b602082015160018601546001600160401b0392909216916140699190600160401b900460ff16614e4f565b101561409957606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161064f565b856001600160401b0316816040018181516140b49190614e1a565b9052506040810180516001600160401b03871691906140d49083906152a8565b905250600184015460408201516064916140f991600160401b90910460ff1690614e4f565b1015614120578060400151604051635943317f60e01b815260040161064f91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206156608339815191526020526040812060020180545f8051602061562083398151915291906008906141b390600160401b90046001600160401b0316615604565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6141e66134da565b6141ee614555565b6110c98161455d565b6141ff6134da565b613523614645565b61420f6134da565b5f6142186125bd565b905061ffff86161580614230575061271061ffff8716115b1561425457604051635f12e6c360e11b815261ffff8716600482015260240161064f565b878911156142785760405163222d164360e21b8152600481018a905260240161064f565b60ff8516158061428b5750600a60ff8616115b156142ae5760405163170db35960e31b815260ff8616600482015260240161064f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614315576040516202a06d60e11b81526001600160401b038816600482015260240161064f565b835f036143355760405163a733007160e01b815260040160405180910390fd5b8161435657604051632f6bd1db60e01b81526004810183905260240161064f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6143f960208201826147d1565b63ffffffff1615801561441957506144146020820182614bb7565b151590505b156144605761442b60208201826147d1565b6144386020830183614bb7565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161064f565b61446d6020820182614bb7565b905061447c60208301836147d1565b63ffffffff1611156144955761442b60208201826147d1565b60015b6144a56020830183614bb7565b905081101561162e576144bb6020830183614bb7565b6144c66001846152a8565b8181106144d5576144d5614bfc565b90506020020160208101906144ea9190614b9c565b6001600160a01b03166145006020840184614bb7565b8381811061451057614510614bfc565b90506020020160208101906145259190614b9c565b6001600160a01b0316101561454d57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614498565b6135236134da565b6145656134da565b80355f80516020615620833981519152908155601461458a6060840160408501615288565b60ff1611806145a957506145a46060830160408401615288565b60ff16155b156145dd576145be6060830160408401615288565b604051634a59bbff60e11b815260ff909116600482015260240161064f565b6145ed6060830160408401615288565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561461e60408301602084016147fe565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612bf16134da565b508054614659906149eb565b5f825580601f10614668575050565b601f0160209004905f5260205f20908101906110c991906146c1565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156146d5575f81556001016146c2565b5090565b80151581146110c9575f80fd5b803563ffffffff81168114611cd9575f80fd5b5f805f6060848603121561470b575f80fd5b83359250602084013561471d816146d9565b915061472b604085016146e6565b90509250925092565b5f60208284031215614744575f80fd5b5035919050565b5f610160828403121561475c575f80fd5b50919050565b5f8060408385031215614773575f80fd5b82356001600160401b03811115614788575f80fd5b830160808186031215614799575f80fd5b91506147a7602084016146e6565b90509250929050565b5f80604083850312156147c1575f80fd5b823591506147a7602084016146e6565b5f602082840312156147e1575f80fd5b611909826146e6565b6001600160401b03811681146110c9575f80fd5b5f6020828403121561480e575f80fd5b8135611909816147ea565b803561ffff81168114611cd9575f80fd5b5f805f6060848603121561483c575f80fd5b83356001600160401b03811115614851575f80fd5b840160a08187031215614862575f80fd5b925061487060208501614819565b91506040840135614880816147ea565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106148af576148af61488b565b9052565b5f5b838110156148cd5781810151838201526020016148b5565b50505f910152565b5f81518084526148ec8160208601602086016148b3565b601f01601f19169290920160200192915050565b6020815261491260208201835161489f565b5f602083015160e0604084015261492d6101008401826148d5565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614991575f80fd5b82356001600160401b03808211156149a7575f80fd5b818501915085601f8301126149ba575f80fd5b8135818111156149c8575f80fd5b8660208285010111156149d9575f80fd5b60209290920196919550909350505050565b600181811c908216806149ff57607f821691505b60208210810361475c57634e487b7160e01b5f52602260045260245ffd5b60208101611013828461489f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614a6157614a61614a2b565b60405290565b604080519081016001600160401b0381118282101715614a6157614a61614a2b565b604051601f8201601f191681016001600160401b0381118282101715614ab157614ab1614a2b565b604052919050565b5f6001600160401b03821115614ad157614ad1614a2b565b50601f01601f191660200190565b5f82601f830112614aee575f80fd5b8151614b01614afc82614ab9565b614a89565b818152846020838601011115614b15575f80fd5b614b268260208301602087016148b3565b949350505050565b5f60208284031215614b3e575f80fd5b81516001600160401b03811115614b53575f80fd5b614b2684828501614adf565b602081525f61190960208301846148d5565b5f60208284031215614b81575f80fd5b5051919050565b6001600160a01b03811681146110c9575f80fd5b5f60208284031215614bac575f80fd5b813561190981614b88565b5f808335601e19843603018112614bcc575f80fd5b8301803591506001600160401b03821115614be5575f80fd5b6020019150600581901b360382131561333c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c24575f80fd5b9190910192915050565b5f82601f830112614c3d575f80fd5b8135614c4b614afc82614ab9565b818152846020838601011115614c5f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614c8b575f80fd5b614c93614a3f565b82356001600160401b0380821115614ca9575f80fd5b614cb536838701614c2e565b83526020850135915080821115614cca575f80fd5b50614cd736828601614c2e565b6020830152506040830135614ceb816147ea565b604082015292915050565b5f8251614c248184602087016148b3565b601f82111561065857805f5260205f20601f840160051c81016020851015614d2c5750805b601f840160051c820191505b81811015611b69575f8155600101614d38565b81516001600160401b03811115614d6457614d64614a2b565b614d7881614d7284546149eb565b84614d07565b602080601f831160018114614dab575f8415614d945750858301515b5f19600386901b1c1916600185901b1785556111f0565b5f85815260208120601f198616915b82811015614dd957888601518255948401946001909101908401614dba565b5085821015614df657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561101357611013614e06565b5f63ffffffff808316818103614e4557614e45614e06565b6001019392505050565b808202811582820484141761101357611013614e06565b5f808335601e19843603018112614e7b575f80fd5b83016020810192503590506001600160401b03811115614e99575f80fd5b80360382131561333c575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614f8457848303601f19018952813536889003605e19018112614f0b575f80fd5b87016060614f198280614e66565b828752614f298388018284614ea7565b92505050614f3986830183614e66565b86830388880152614f4b838284614ea7565b925050506040808301359250614f60836147ea565b6001600160401b039290921694909101939093529783019790830190600101614ee6565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614fb581614b88565b6001600160a01b031660608381019190915283013536849003601e19018112614fdc575f80fd5b83016020810190356001600160401b03811115614ff7575f80fd5b8060051b3603821315615008575f80fd5b6080808501526134d160a085018284614ecf565b5f8261503657634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061504f5761504f61488b565b91905290565b5f805f60608486031215615067575f80fd5b835192506020840151615079816147ea565b6040850151909250614880816147ea565b5f806040838503121561509b575f80fd5b8251915060208301516150ad816146d9565b809150509250929050565b5f60208083525f84546150ca816149eb565b806020870152604060018084165f81146150eb576001811461510757615134565b60ff19851660408a0152604084151560051b8a01019550615134565b895f5260205f205f5b8581101561512b5781548b8201860152908301908801615110565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156122ee576122ee614e06565b6001600160401b038281168282160390808211156122ee576122ee614e06565b5f80604083850312156151a2575f80fd5b82516001600160401b03808211156151b8575f80fd5b90840190606082870312156151cb575f80fd5b6151d3614a3f565b8251815260208301516151e581614b88565b60208201526040830151828111156151fb575f80fd5b61520788828601614adf565b60408301525080945050505060208301516150ad816146d9565b5f8060408385031215615232575f80fd5b8251915060208301516150ad816147ea565b6001600160401b0381811683821602808216919082811461526757615267614e06565b505092915050565b5f6020828403121561527f575f80fd5b61190982614819565b5f60208284031215615298575f80fd5b813560ff81168114611909575f80fd5b8181038181111561101357611013614e06565b5f8235603e19833603018112614c24575f80fd5b5f808335601e198436030181126152e4575f80fd5b8301803591506001600160401b038211156152fd575f80fd5b60200191503681900382131561333c575f80fd5b602081525f614b26602083018486614ea7565b5f60408236031215615334575f80fd5b61533c614a67565b615345836146e6565b81526020808401356001600160401b0380821115615361575f80fd5b9085019036601f830112615373575f80fd5b81358181111561538557615385614a2b565b8060051b9150615396848301614a89565b81815291830184019184810190368411156153af575f80fd5b938501935b838510156153d957843592506153c983614b88565b82825293850193908501906153b4565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156154465784516001600160a01b0316825293830193600192909201919083019061541d565b509695505050505050565b60208152815160208201525f602083015160e060408401526154776101008401826148d5565b90506040840151601f198085840301606086015261549583836148d5565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526154c583836153eb565b925060a08601519150808584030160c0860152506154e382826153eb565b91505060c084015161550060e08501826001600160401b03169052565b509392505050565b5f8060408385031215615519575f80fd5b8251915060208301516001600160401b03811115615535575f80fd5b61554185828601614adf565b9150509250929050565b6001600160401b0383111561556257615562614a2b565b6155768361557083546149eb565b83614d07565b5f601f8411600181146155a7575f85156155905750838201355b5f19600387901b1c1916600186901b178355611b69565b5f83815260208120601f198716915b828110156155d657868501358255602094850194600190920191016155b6565b50868210156155f2575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b03808316818103614e4557614e45614e0656fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220203fc429beee03f13d6affc49c9554a62aba96e01388ac3e87f98000de3c8c6564736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b5060405161580238038061580283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6156b58061014d5f395ff3fe6080604052600436106101f1575f3560e01c806376f7862111610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f146105a0578063c974d1b6146105b3578063d5f20ff6146105c7578063df93d8de146105f3578063fd7ac5e714610609575f80fd5b8063b771b3bc14610528578063ba3a4b9714610542578063bc5fbfec14610561578063bee0a03f14610581575f80fd5b8063a3a65e48116100d8578063a3a65e48146104c3578063a9778a7a14610345578063af2f5feb146104e2578063afb98096146104f5575f80fd5b806376f786211461045257806380dd672f146104715780638280a25a1461049057806393e24598146104a4575f80fd5b8063329c3e121161018957806360305d621161015957806360305d62146103ab57806360ad7784146103d457806362065856146103f357806366435abf14610420578063732214f81461043f575f80fd5b8063329c3e121461031357806335455ded146103455780633a1cfff61461036d578063467ef06f1461038c575f80fd5b80631ec44724116101c45780631ec447241461027f57806320d91b7a1461029e57806325e1c776146102bd5780632e2194d8146102dc575f80fd5b80630118acc4146101f55780630322ed98146102165780630ba512d114610235578063151d30d114610254575b5f80fd5b348015610200575f80fd5b5061021461020f3660046146f9565b610628565b005b348015610221575f80fd5b50610214610230366004614734565b61065d565b348015610240575f80fd5b5061021461024f36600461474b565b6108e4565b34801561025f575f80fd5b50610268600a81565b60405160ff90911681526020015b60405180910390f35b34801561028a575f80fd5b506102146102993660046146f9565b6109c1565b3480156102a9575f80fd5b506102146102b8366004614762565b6109cc565b3480156102c8575f80fd5b506102146102d73660046147b0565b610f51565b3480156102e7575f80fd5b506102fb6102f6366004614734565b610fc5565b6040516001600160401b039091168152602001610276565b34801561031e575f80fd5b5061032d6001600160991b0181565b6040516001600160a01b039091168152602001610276565b348015610350575f80fd5b5061035a61271081565b60405161ffff9091168152602001610276565b348015610378575f80fd5b506102146103873660046146f9565b611019565b348015610397575f80fd5b506102146103a63660046147d1565b611024565b3480156103b6575f80fd5b506103bf601481565b60405163ffffffff9091168152602001610276565b3480156103df575f80fd5b506102146103ee3660046147b0565b6110cc565b3480156103fe575f80fd5b5061041261040d3660046147fe565b611399565b604051908152602001610276565b34801561042b575f80fd5b506102fb61043a366004614734565b6113b9565b34801561044a575f80fd5b506104125f81565b34801561045d575f80fd5b5061021461046c3660046146f9565b6113cd565b34801561047c575f80fd5b5061021461048b3660046147b0565b6113f8565b34801561049b575f80fd5b50610268603081565b3480156104af575f80fd5b506102146104be366004614734565b611632565b3480156104ce575f80fd5b506102146104dd3660046147d1565b6116e7565b6104126104f036600461482a565b6118dc565b348015610500575f80fd5b506104127f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610533575f80fd5b5061032d6005600160991b0181565b34801561054d575f80fd5b5061021461055c366004614734565b611910565b34801561056c575f80fd5b506104125f8051602061562083398151915281565b34801561058c575f80fd5b5061021461059b366004614734565b611b70565b6104126105ae366004614734565b611cad565b3480156105be575f80fd5b50610268601481565b3480156105d2575f80fd5b506105e66105e1366004614734565b611cde565b6040516102769190614900565b3480156105fe575f80fd5b506102fb6202a30081565b348015610614575f80fd5b50610412610623366004614980565b611e2d565b610633838383611e88565b61065857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206156608339815191526020526040808220815160e0810190925280545f8051602061562083398151915293929190829060ff1660058111156106aa576106aa61488b565b60058111156106bb576106bb61488b565b81526020016001820180546106cf906149eb565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb906149eb565b80156107465780601f1061071d57610100808354040283529160200191610746565b820191905f5260205f20905b81548152906001019060200180831161072957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156107b1576107b161488b565b146107e4575f8381526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561085b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108829190810190614b2e565b6040518263ffffffff1660e01b815260040161089e9190614b5f565b6020604051808303815f875af11580156108ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108de9190614b71565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061092d575080546001600160401b03808416911610155b1561094b5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610975836121ce565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6108de838383611e88565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f805160206156208339815191529060ff1615610a1e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a859190614b71565b836020013514610aae576040516372b0a7e760e11b81526020840135600482015260240161064f565b30610abf6060850160408601614b9c565b6001600160a01b031614610b0257610add6060840160408501614b9c565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161064f565b5f610b106060850185614bb7565b905090505f805b828163ffffffff161015610d77575f610b336060880188614bb7565b8363ffffffff16818110610b4957610b49614bfc565b9050602002810190610b5b9190614c10565b610b6490614c7b565b80516040519192505f916008880191610b7c91614cf6565b90815260200160405180910390205414610bac57805160405163a41f772f60e01b815261064f9190600401614b5f565b5f6002885f013584604051602001610bdb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610bf591614cf6565b602060405180830381855afa158015610c10573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c339190614b71565b90508086600801835f0151604051610c4b9190614cf6565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610c8b9082614d4b565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610d0a9085614e1a565b8251604051919550610d1b91614cf6565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610d7090614e2d565b9050610b17565b50600483018190556001830154606490610d9b90600160401b900460ff1683614e4f565b1015610dbd57604051635943317f60e01b81526004810182905260240161064f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610de1876121df565b604001516040518263ffffffff1660e01b8152600401610e019190614b5f565b602060405180830381865af4158015610e1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e409190614b71565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610e7a9190614f91565b5f60405180830381865af4158015610e94573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ebb9190810190614b2e565b90505f600282604051610ece9190614cf6565b602060405180830381855afa158015610ee9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f0c9190614b71565b9050828114610f385760405163baaea89d60e01b8152600481018290526024810184905260440161064f565b5050506009909201805460ff1916600117905550505050565b610f5a826122f5565b610f7a576040516330efa98b60e01b81526004810183905260240161064f565b5f610f8483611cde565b5190506002816005811115610f9b57610f9b61488b565b14610fbb578060405163170cc93360e21b815260040161064f9190614a1d565b6108de838361231e565b5f80610fcf6125bd565b60030154610fdd908461501c565b9050801580610ff257506001600160401b0381115b156110135760405163222d164360e21b81526004810184905260240161064f565b92915050565b6108de8383836125e1565b61102c6127ca565b5f6110356125bd565b90505f8061104284612801565b9150915061104f826122f5565b61105b575050506110b3565b5f8281526006840160205260409020546001600160a01b03166004825160058111156110895761108961488b565b03611098576110988184612bb4565b6110ae816110a98460400151611399565b612bde565b505050505b6110c960015f8051602061564083398151915255565b50565b5f6110d56125bd565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561110e5761110e61488b565b600381111561111f5761111f61488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61119582611cde565b90506001835160038111156111ac576111ac61488b565b146111cd578251604051633b0d540d60e21b815261064f919060040161503b565b6004815160058111156111e2576111e261488b565b036111f8576111f086612c04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61121d896121df565b604001516040518263ffffffff1660e01b815260040161123d9190614b5f565b606060405180830381865af4158015611258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127c9190615055565b50915091508184146112a957846040015160405163089938b360e11b815260040161064f91815260200190565b806001600160401b031683606001516001600160401b031610806112e25750806001600160401b03168560a001516001600160401b0316115b1561130b57604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6113a26125bd565b60030154611013906001600160401b038416614e4f565b5f6113c382611cde565b6080015192915050565b6113d88383836125e1565b61065857604051635bff683f60e11b81526004810184905260240161064f565b6114006127ca565b5f6114096125bd565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114425761144261488b565b60038111156114535761145361488b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114cc576114cc61488b565b146114ed578051604051633b0d540d60e21b815261064f919060040161503b565b60046114fc8260400151611cde565b51600581111561150e5761150e61488b565b1461160d575f61151d846121df565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161155c9190614b5f565b606060405180830381865af4158015611577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159b9190615055565b5091509150818460400151146115c75760405163089938b360e11b81526004810183905260240161064f565b806001600160401b03168460c001516001600160401b0316111561160957604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5050505b61161684612c04565b505061162e60015f8051602061564083398151915255565b5050565b5f61163b6125bd565b90505f61164783611cde565b519050600481600581111561165e5761165e61488b565b1461167e578060405163170cc93360e21b815260040161064f9190614a1d565b5f8381526006830160205260409020546001600160a01b031633146116c457335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161064f565b5f838152600683016020526040902054610658906001600160a01b031684612bb4565b5f805160206156208339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61171a866121df565b604001516040518263ffffffff1660e01b815260040161173a9190614b5f565b6040805180830381865af4158015611754573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611778919061508a565b915091508061179e57604051632d07135360e01b8152811515600482015260240161064f565b5f828152600684016020526040902080546117b8906149eb565b90505f036117dc5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078501602052604090205460ff1660058111156118025761180261488b565b14611835575f8281526007840160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b5f828152600684016020526040812061184d9161464d565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6118e56127ca565b6118f184848434612dd2565b905061190960015f8051602061564083398151915255565b9392505050565b5f6119196125bd565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119525761195261488b565b60038111156119635761196361488b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119dc576119dc61488b565b141580156119fd57506003815160038111156119fa576119fa61488b565b14155b15611a1e578051604051633b0d540d60e21b815261064f919060040161503b565b5f611a2c8260400151611cde565b905080606001516001600160401b03165f03611a5e576040516339b894f960e21b81526004810185905260240161064f565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611acc93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611ae6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b0d9190810190614b2e565b6040518263ffffffff1660e01b8152600401611b299190614b5f565b6020604051808303815f875af1158015611b45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b699190614b71565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f805160206156208339815191529190611bb7906149eb565b90505f03611bdb5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078301602052604090205460ff166005811115611c0157611c0161488b565b14611c34575f8281526007820160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611c6d91906004016150b8565b6020604051808303815f875af1158015611c89573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106589190614b71565b5f611cb66127ca565b611cc1823334612f2c565b9050611cd960015f8051602061564083398151915255565b919050565b611ce6614684565b5f8281525f80516020615660833981519152602052604090819020815160e0810190925280545f80516020615620833981519152929190829060ff166005811115611d3357611d3361488b565b6005811115611d4457611d4461488b565b8152602001600182018054611d58906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d84906149eb565b8015611dcf5780601f10611da657610100808354040283529160200191611dcf565b820191905f5260205f20905b815481529060010190602001808311611db257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615620833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611e709086908690615142565b90815260200160405180910390205491505092915050565b5f80611e926125bd565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611ecb57611ecb61488b565b6003811115611edc57611edc61488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611f5282611cde565b9050600283516003811115611f6957611f6961488b565b14611f8a578251604051633b0d540d60e21b815261064f919060040161503b565b60208301516001600160a01b03163314612026575f8281526006850160205260409020546001600160a01b03163314611fc3573361169f565b5f82815260068501602052604090205460a0820151611ff291600160b01b90046001600160401b031690615151565b6001600160401b03164210156120265760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b60028151600581111561203b5761203b61488b565b03612169576002840154608084015161205d916001600160401b031690615151565b6001600160401b03164210156120915760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b86156120a3576120a1828761231e565b505b5f8881526007850160205260409020805460ff19166003179055606083015160808201516120dc9184916120d79190615171565b61316c565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561211d84613343565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506119099350505050565b60048151600581111561217e5761217e61488b565b036121b25761218c83613343565b5f8981526008860160205260409020556121a588612c04565b6001945050505050611909565b805160405163170cc93360e21b815261064f9190600401614a1d565b6121d66134da565b6110c981613525565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612243573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261226a9190810190615191565b915091508061228c57604051636b2f19e960e01b815260040160405180910390fd5b8151156122b2578151604051636ba589a560e01b8152600481019190915260240161064f565b60208201516001600160a01b0316156122ee576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5092915050565b5f806122ff6125bd565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612369573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123909190810190615191565b91509150806123b257604051636b2f19e960e01b815260040160405180910390fd5b5f6123bb6125bd565b60058101548451919250146123e9578251604051636ba589a560e01b8152600481019190915260240161064f565b60208301516001600160a01b031615612425576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b60208301516001600160a01b031615612461576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161249e9190614b5f565b6040805180830381865af41580156124b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124dc9190615221565b915091508188146125035760405163089938b360e11b81526004810189905260240161064f565b5f8881526006840160205260409020600101546001600160401b039081169082161115612594575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26125b2565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806125eb6125bd565b90505f6125f78661359f565b9050612602866122f5565b61261157600192505050611909565b5f8681526006830160205260409020546001600160a01b03163314612636573361169f565b5f86815260068301602052604090205460a082015161266591600160b01b90046001600160401b031690615151565b6001600160401b03168160c001516001600160401b031610156126ac5760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161064f565b5f85156126c4576126bd878661231e565b90506126e2565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061270790611399565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612770573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127949190614b71565b905080846009015f8a81526020019081526020015f205f8282546127b89190614e1a565b90915550501515979650505050505050565b5f805160206156408339815191528054600119016127fb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61280a614684565b5f805160206156208339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61283d886121df565b604001516040518263ffffffff1660e01b815260040161285d9190614b5f565b6040805180830381865af4158015612877573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289b919061508a565b9150915080156128c257604051632d07135360e01b8152811515600482015260240161064f565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156128f3576128f361488b565b60058111156129045761290461488b565b8152602001600182018054612918906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054612944906149eb565b801561298f5780601f106129665761010080835404028352916020019161298f565b820191905f5260205f20905b81548152906001019060200180831161297257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156129fa576129fa61488b565b14158015612a1b5750600181516005811115612a1857612a1861488b565b14155b15612a3c57805160405163170cc93360e21b815261064f9190600401614a1d565b600381516005811115612a5157612a5161488b565b03612a5f5760048152612a64565b600581525b836008018160200151604051612a7a9190614cf6565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612abe57612abe61488b565b021790555060208201516001820190612ad79082614d4b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b7d57612b7d61488b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612bbd6125bd565b5f838152600982016020526040812080549190559091506108de8482613883565b61162e6001600160a01b038316826138e1565b60015f8051602061564083398151915255565b5f612c0d6125bd565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c4657612c4661488b565b6003811115612c5757612c5761488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d039190615151565b6001600160401b0316421015612d375760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d73838886613974565b91509150612d8c85602001516110a98760600151611399565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612ddc6125bd565b600281015490915061ffff600160401b90910481169086161080612e05575061271061ffff8616115b15612e2957604051635f12e6c360e11b815261ffff8616600482015260240161064f565b60028101546001600160401b039081169085161015612e65576040516202a06d60e11b81526001600160401b038516600482015260240161064f565b8054831080612e775750806001015483115b15612e985760405163222d164360e21b81526004810184905260240161064f565b825f612ea382610fc5565b90505f612eb08983613a21565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f80612f366125bd565b90505f612f4284610fc5565b90505f612f4e87611cde565b9050612f59876122f5565b612f79576040516330efa98b60e01b81526004810188905260240161064f565b600281516005811115612f8e57612f8e61488b565b14612faf57805160405163170cc93360e21b815261064f9190600401614a1d565b5f828260800151612fc09190615151565b905083600201600a9054906101000a90046001600160401b03168260400151612fe99190615244565b6001600160401b0316816001600160401b0316111561302657604051636d51fe0560e11b81526001600160401b038216600482015260240161064f565b5f806130328a8461316c565b915091505f8a8360405160200161306092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f80516020615660833981519152602052604081206002015481905f8051602061562083398151915290600160801b90046001600160401b03166131b48582613f46565b5f6131be87614169565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613267573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261328e9190810190614b2e565b6040518263ffffffff1660e01b81526004016132aa9190614b5f565b6020604051808303815f875af11580156132c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ea9190614b71565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061334d6125bd565b90505f61335d8460400151611cde565b90505f6003825160058111156133755761337561488b565b148061339357506004825160058111156133915761339161488b565b145b156133a3575060c08101516133e0565b6002825160058111156133b8576133b861488b565b036133c45750426133e0565b815160405163170cc93360e21b815261064f9190600401614a1d565b84608001516001600160401b0316816001600160401b03161161340757505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061342c90611399565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156134ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d19190614b71565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352357604051631afcd79f60e31b815260040160405180910390fd5b565b61352d6134da565b613536816141de565b61353e6141f7565b6110c96060820135608083013561355b60c0850160a086016147fe565b61356b60e0860160c0870161526f565b61357c610100870160e08801615288565b61010087013561359461014089016101208a01614b9c565b886101400135614207565b6135a7614684565b5f8281525f805160206156608339815191526020526040808220815160e0810190925280545f8051602061562083398151915293929190829060ff1660058111156135f4576135f461488b565b60058111156136055761360561488b565b8152602001600182018054613619906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054613645906149eb565b80156136905780601f1061366757610100808354040283529160200191613690565b820191905f5260205f20905b81548152906001019060200180831161367357829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156136fe576136fe61488b565b14613731575f8481526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156137755761377561488b565b02179055506020820151600182019061378e9082614d4b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61382c858261316c565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b1580156138cf575f80fd5b505af11580156111f0573d5f803e3d5ffd5b804710156139045760405163cd78605960e01b815230600482015260240161064f565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461394d576040519150601f19603f3d011682016040523d82523d5f602084013e613952565b606091505b505090508061065857604051630a12f52160e11b815260040160405180910390fd5b5f805f61397f6125bd565b5f86815260088201602052604081208054908290559192509081908015613a13575f878152600685016020526040902054612710906139c990600160a01b900461ffff1683614e4f565b6139d3919061501c565b915081846009015f8981526020019081526020015f205f8282546139f79190614e1a565b90915550613a07905082826152a8565b9250613a138984613883565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613a6557604051637fab81e560e01b815260040160405180910390fd5b5f8051602061562083398151915242613a8460608601604087016147fe565b6001600160401b0316111580613abe5750613aa26202a30042614e1a565b613ab260608601604087016147fe565b6001600160401b031610155b15613af857613ad360608501604086016147fe565b604051635879da1360e11b81526001600160401b03909116600482015260240161064f565b613b0d613b0860608601866152bb565b6143ec565b613b1d613b0860808601866152bb565b6030613b2c60208601866152cf565b905014613b5e57613b4060208501856152cf565b6040516326475b2f60e11b815261064f925060040190815260200190565b613b6884806152cf565b90505f03613b9557613b7a84806152cf565b604051633e08a12560e11b815260040161064f929190615311565b5f60088201613ba486806152cf565b604051613bb2929190615142565b90815260200160405180910390205414613beb57613bd084806152cf565b60405163a41f772f60e01b815260040161064f929190615311565b613bf5835f613f46565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613c328a806152cf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613c7a908b018b6152cf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613cc360608b0160408c016147fe565b6001600160401b03168152602001613cde60608b018b6152bb565b613ce790615324565b8152602001613cf960808b018b6152bb565b613d0290615324565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613d309190615451565b5f60405180830381865af4158015613d4a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d719190810190615508565b5f82815260068601602052604090209193509150613d8f8282614d4b565b508160088401613d9f88806152cf565b604051613dad929190615142565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613de9908590600401614b5f565b6020604051808303815f875af1158015613e05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e299190614b71565b5f8481526007860160205260409020805460ff191660011790559050613e4f87806152cf565b5f858152600787016020526040902060010191613e6d91908361554b565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ecc88806152cf565b604051613eda929190615142565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613f1891906147fe565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805160206156208339815191525f6001600160401b038084169085161115613f7a57613f738385615171565b9050613f87565b613f848484615171565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613fe9575060018401548151613fe5916001600160401b031690614e1a565b8210155b1561400f576001600160401b03831660608201528181526040810151602082015261402e565b82816060018181516140219190615151565b6001600160401b03169052505b606081015161403e906064615244565b602082015160018601546001600160401b0392909216916140699190600160401b900460ff16614e4f565b101561409957606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161064f565b856001600160401b0316816040018181516140b49190614e1a565b9052506040810180516001600160401b03871691906140d49083906152a8565b905250600184015460408201516064916140f991600160401b90910460ff1690614e4f565b1015614120578060400151604051635943317f60e01b815260040161064f91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206156608339815191526020526040812060020180545f8051602061562083398151915291906008906141b390600160401b90046001600160401b0316615604565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6141e66134da565b6141ee614555565b6110c98161455d565b6141ff6134da565b613523614645565b61420f6134da565b5f6142186125bd565b905061ffff86161580614230575061271061ffff8716115b1561425457604051635f12e6c360e11b815261ffff8716600482015260240161064f565b878911156142785760405163222d164360e21b8152600481018a905260240161064f565b60ff8516158061428b5750600a60ff8616115b156142ae5760405163170db35960e31b815260ff8616600482015260240161064f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614315576040516202a06d60e11b81526001600160401b038816600482015260240161064f565b835f036143355760405163a733007160e01b815260040160405180910390fd5b8161435657604051632f6bd1db60e01b81526004810183905260240161064f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6143f960208201826147d1565b63ffffffff1615801561441957506144146020820182614bb7565b151590505b156144605761442b60208201826147d1565b6144386020830183614bb7565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161064f565b61446d6020820182614bb7565b905061447c60208301836147d1565b63ffffffff1611156144955761442b60208201826147d1565b60015b6144a56020830183614bb7565b905081101561162e576144bb6020830183614bb7565b6144c66001846152a8565b8181106144d5576144d5614bfc565b90506020020160208101906144ea9190614b9c565b6001600160a01b03166145006020840184614bb7565b8381811061451057614510614bfc565b90506020020160208101906145259190614b9c565b6001600160a01b0316101561454d57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614498565b6135236134da565b6145656134da565b80355f80516020615620833981519152908155601461458a6060840160408501615288565b60ff1611806145a957506145a46060830160408401615288565b60ff16155b156145dd576145be6060830160408401615288565b604051634a59bbff60e11b815260ff909116600482015260240161064f565b6145ed6060830160408401615288565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561461e60408301602084016147fe565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612bf16134da565b508054614659906149eb565b5f825580601f10614668575050565b601f0160209004905f5260205f20908101906110c991906146c1565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156146d5575f81556001016146c2565b5090565b80151581146110c9575f80fd5b803563ffffffff81168114611cd9575f80fd5b5f805f6060848603121561470b575f80fd5b83359250602084013561471d816146d9565b915061472b604085016146e6565b90509250925092565b5f60208284031215614744575f80fd5b5035919050565b5f610160828403121561475c575f80fd5b50919050565b5f8060408385031215614773575f80fd5b82356001600160401b03811115614788575f80fd5b830160808186031215614799575f80fd5b91506147a7602084016146e6565b90509250929050565b5f80604083850312156147c1575f80fd5b823591506147a7602084016146e6565b5f602082840312156147e1575f80fd5b611909826146e6565b6001600160401b03811681146110c9575f80fd5b5f6020828403121561480e575f80fd5b8135611909816147ea565b803561ffff81168114611cd9575f80fd5b5f805f6060848603121561483c575f80fd5b83356001600160401b03811115614851575f80fd5b840160a08187031215614862575f80fd5b925061487060208501614819565b91506040840135614880816147ea565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106148af576148af61488b565b9052565b5f5b838110156148cd5781810151838201526020016148b5565b50505f910152565b5f81518084526148ec8160208601602086016148b3565b601f01601f19169290920160200192915050565b6020815261491260208201835161489f565b5f602083015160e0604084015261492d6101008401826148d5565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614991575f80fd5b82356001600160401b03808211156149a7575f80fd5b818501915085601f8301126149ba575f80fd5b8135818111156149c8575f80fd5b8660208285010111156149d9575f80fd5b60209290920196919550909350505050565b600181811c908216806149ff57607f821691505b60208210810361475c57634e487b7160e01b5f52602260045260245ffd5b60208101611013828461489f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614a6157614a61614a2b565b60405290565b604080519081016001600160401b0381118282101715614a6157614a61614a2b565b604051601f8201601f191681016001600160401b0381118282101715614ab157614ab1614a2b565b604052919050565b5f6001600160401b03821115614ad157614ad1614a2b565b50601f01601f191660200190565b5f82601f830112614aee575f80fd5b8151614b01614afc82614ab9565b614a89565b818152846020838601011115614b15575f80fd5b614b268260208301602087016148b3565b949350505050565b5f60208284031215614b3e575f80fd5b81516001600160401b03811115614b53575f80fd5b614b2684828501614adf565b602081525f61190960208301846148d5565b5f60208284031215614b81575f80fd5b5051919050565b6001600160a01b03811681146110c9575f80fd5b5f60208284031215614bac575f80fd5b813561190981614b88565b5f808335601e19843603018112614bcc575f80fd5b8301803591506001600160401b03821115614be5575f80fd5b6020019150600581901b360382131561333c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c24575f80fd5b9190910192915050565b5f82601f830112614c3d575f80fd5b8135614c4b614afc82614ab9565b818152846020838601011115614c5f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614c8b575f80fd5b614c93614a3f565b82356001600160401b0380821115614ca9575f80fd5b614cb536838701614c2e565b83526020850135915080821115614cca575f80fd5b50614cd736828601614c2e565b6020830152506040830135614ceb816147ea565b604082015292915050565b5f8251614c248184602087016148b3565b601f82111561065857805f5260205f20601f840160051c81016020851015614d2c5750805b601f840160051c820191505b81811015611b69575f8155600101614d38565b81516001600160401b03811115614d6457614d64614a2b565b614d7881614d7284546149eb565b84614d07565b602080601f831160018114614dab575f8415614d945750858301515b5f19600386901b1c1916600185901b1785556111f0565b5f85815260208120601f198616915b82811015614dd957888601518255948401946001909101908401614dba565b5085821015614df657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561101357611013614e06565b5f63ffffffff808316818103614e4557614e45614e06565b6001019392505050565b808202811582820484141761101357611013614e06565b5f808335601e19843603018112614e7b575f80fd5b83016020810192503590506001600160401b03811115614e99575f80fd5b80360382131561333c575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614f8457848303601f19018952813536889003605e19018112614f0b575f80fd5b87016060614f198280614e66565b828752614f298388018284614ea7565b92505050614f3986830183614e66565b86830388880152614f4b838284614ea7565b925050506040808301359250614f60836147ea565b6001600160401b039290921694909101939093529783019790830190600101614ee6565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614fb581614b88565b6001600160a01b031660608381019190915283013536849003601e19018112614fdc575f80fd5b83016020810190356001600160401b03811115614ff7575f80fd5b8060051b3603821315615008575f80fd5b6080808501526134d160a085018284614ecf565b5f8261503657634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061504f5761504f61488b565b91905290565b5f805f60608486031215615067575f80fd5b835192506020840151615079816147ea565b6040850151909250614880816147ea565b5f806040838503121561509b575f80fd5b8251915060208301516150ad816146d9565b809150509250929050565b5f60208083525f84546150ca816149eb565b806020870152604060018084165f81146150eb576001811461510757615134565b60ff19851660408a0152604084151560051b8a01019550615134565b895f5260205f205f5b8581101561512b5781548b8201860152908301908801615110565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156122ee576122ee614e06565b6001600160401b038281168282160390808211156122ee576122ee614e06565b5f80604083850312156151a2575f80fd5b82516001600160401b03808211156151b8575f80fd5b90840190606082870312156151cb575f80fd5b6151d3614a3f565b8251815260208301516151e581614b88565b60208201526040830151828111156151fb575f80fd5b61520788828601614adf565b60408301525080945050505060208301516150ad816146d9565b5f8060408385031215615232575f80fd5b8251915060208301516150ad816147ea565b6001600160401b0381811683821602808216919082811461526757615267614e06565b505092915050565b5f6020828403121561527f575f80fd5b61190982614819565b5f60208284031215615298575f80fd5b813560ff81168114611909575f80fd5b8181038181111561101357611013614e06565b5f8235603e19833603018112614c24575f80fd5b5f808335601e198436030181126152e4575f80fd5b8301803591506001600160401b038211156152fd575f80fd5b60200191503681900382131561333c575f80fd5b602081525f614b26602083018486614ea7565b5f60408236031215615334575f80fd5b61533c614a67565b615345836146e6565b81526020808401356001600160401b0380821115615361575f80fd5b9085019036601f830112615373575f80fd5b81358181111561538557615385614a2b565b8060051b9150615396848301614a89565b81815291830184019184810190368411156153af575f80fd5b938501935b838510156153d957843592506153c983614b88565b82825293850193908501906153b4565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156154465784516001600160a01b0316825293830193600192909201919083019061541d565b509695505050505050565b60208152815160208201525f602083015160e060408401526154776101008401826148d5565b90506040840151601f198085840301606086015261549583836148d5565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526154c583836153eb565b925060a08601519150808584030160c0860152506154e382826153eb565b91505060c084015161550060e08501826001600160401b03169052565b509392505050565b5f8060408385031215615519575f80fd5b8251915060208301516001600160401b03811115615535575f80fd5b61554185828601614adf565b9150509250929050565b6001600160401b0383111561556257615562614a2b565b6155768361557083546149eb565b83614d07565b5f601f8411600181146155a7575f85156155905750838201355b5f19600387901b1c1916600186901b178355611b69565b5f83815260208120601f198716915b828110156155d657868501358255602094850194600190920191016155b6565b50868210156155f2575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b03808316818103614e4557614e45614e0656fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220f707d60a3912baabf3c9ad31d2664667dbf0066466098d2e58cf67675dbcc7c764736f6c63430008190033",
}
// NativeTokenStakingManagerABI is the input ABI used to generate the binding from.
diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
index 73cf01620..c0f3e185a 100644
--- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
+++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
@@ -91,7 +91,7 @@ type ValidatorRegistrationInput struct {
// PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract.
var PoAValidatorManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b5060405161374f38038061374f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136028061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b61014961014436600461273a565b610312565b005b610149610159366004612769565b6105a2565b61014961016c3660046127b7565b610b27565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a136600461273a565b610b35565b6040516001600160401b03909116815260200161018a565b610149610b49565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61014961024736600461273a565b610b5c565b6101cd61025a3660046127e6565b610b71565b61014961026d3660046127b7565b610b8d565b6102216005600160991b0181565b6101cd5f8051602061358d83398151915281565b6101496102a236600461273a565b610d82565b6101e3601481565b6101496102bd36600461283f565b610ebf565b6102d56102d036600461273a565b610fcd565b60405161018a91906128fc565b6101a66202a30081565b6101496102fa36600461297c565b61111c565b6101cd61030d36600461299e565b611159565b5f8181525f805160206135ad8339815191526020526040808220815160e0810190925280545f8051602061358d83398151915293929190829060ff16600581111561035f5761035f61287b565b60058111156103705761037061287b565b815260200160018201805461038490612a09565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612a09565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156104665761046661287b565b146104a2575f8381526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610519573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105409190810190612b52565b6040518263ffffffff1660e01b815260040161055c9190612b83565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190612b95565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061358d8339815191529060ff16156105f457604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610637573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065b9190612b95565b836020013514610684576040516372b0a7e760e11b815260208401356004820152602401610499565b30610695606085016040860161297c565b6001600160a01b0316146106d8576106b3606084016040850161297c565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f6106e66060850185612bac565b905090505f805b828163ffffffff16101561094d575f6107096060880188612bac565b8363ffffffff1681811061071f5761071f612bf1565b90506020028101906107319190612c05565b61073a90612c70565b80516040519192505f91600888019161075291612ce9565b9081526020016040518091039020541461078257805160405163a41f772f60e01b81526104999190600401612b83565b5f6002885f0135846040516020016107b192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107cb91612ce9565b602060405180830381855afa1580156107e6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108099190612b95565b90508086600801835f01516040516108219190612ce9565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff1916600217815582516001909101906108619082612d45565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff191690556108e09085612e18565b82516040519195506108f191612ce9565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a350508061094690612e2b565b90506106ed565b5060048301819055600183015460649061097190600160401b900460ff1683612e4d565b101561099357604051635943317f60e01b815260048101829052602401610499565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109b7876111b4565b604001516040518263ffffffff1660e01b81526004016109d79190612b83565b602060405180830381865af41580156109f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a169190612b95565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a509190612f87565b5f60405180830381865af4158015610a6a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a919190810190612b52565b90505f600282604051610aa49190612ce9565b602060405180830381855afa158015610abf573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ae29190612b95565b9050828114610b0e5760405163baaea89d60e01b81526004810182905260248101849052604401610499565b5050506009909201805460ff1916600117905550505050565b610b30816112ca565b505050565b5f610b3f82610fcd565b6080015192915050565b610b5161167d565b610b5a5f6116d8565b565b610b6461167d565b610b6d81611748565b5050565b5f610b7a61167d565b610b848383611a2c565b90505b92915050565b5f8051602061358d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bc0866111b4565b604001516040518263ffffffff1660e01b8152600401610be09190612b83565b6040805180830381865af4158015610bfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1e919061302a565b9150915080610c4457604051632d07135360e01b81528115156004820152602401610499565b5f82815260068401602052604090208054610c5e90612a09565b90505f03610c825760405163089938b360e11b815260048101839052602401610499565b60015f83815260078501602052604090205460ff166005811115610ca857610ca861287b565b14610cdb575f8281526007840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b5f8281526006840160205260408120610cf3916126ae565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061358d8339815191529190610dc990612a09565b90505f03610ded5760405163089938b360e11b815260048101839052602401610499565b60015f83815260078301602052604090205460ff166005811115610e1357610e1361287b565b14610e46575f8281526007820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91610e7f919060040161304b565b6020604051808303815f875af1158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b309190612b95565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f035750825b90505f826001600160401b03166001148015610f1e5750303b155b905081158015610f2c575080155b15610f4a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f7457845460ff60401b1916600160401b1785555b610f7e8787611f51565b8315610fc457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610fd56126e5565b5f8281525f805160206135ad833981519152602052604090819020815160e0810190925280545f8051602061358d833981519152929190829060ff1660058111156110225761102261287b565b60058111156110335761103361287b565b815260200160018201805461104790612a09565b80601f016020809104026020016040519081016040528092919081815260200182805461107390612a09565b80156110be5780601f10611095576101008083540402835291602001916110be565b820191905f5260205f20905b8154815290600101906020018083116110a157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61112461167d565b6001600160a01b03811661114d57604051631e4fbdf760e01b81525f6004820152602401610499565b611156816116d8565b50565b6040515f905f8051602061358d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061119c90869086906130d5565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611218573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261123f91908101906130e4565b915091508061126157604051636b2f19e960e01b815260040160405180910390fd5b815115611287578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156112c3576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f6112d36126e5565b5f8051602061358d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611306886111b4565b604001516040518263ffffffff1660e01b81526004016113269190612b83565b6040805180830381865af4158015611340573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611364919061302a565b91509150801561138b57604051632d07135360e01b81528115156004820152602401610499565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156113bc576113bc61287b565b60058111156113cd576113cd61287b565b81526020016001820180546113e190612a09565b80601f016020809104026020016040519081016040528092919081815260200182805461140d90612a09565b80156114585780601f1061142f57610100808354040283529160200191611458565b820191905f5260205f20905b81548152906001019060200180831161143b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114c3576114c361287b565b141580156114e457506001815160058111156114e1576114e161287b565b14155b1561150557805160405163170cc93360e21b81526104999190600401612a41565b60038151600581111561151a5761151a61287b565b03611528576004815261152d565b600581525b8360080181602001516040516115439190612ce9565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156115875761158761287b565b0217905550602082015160018201906115a09082612d45565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156116465761164661287b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116af7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b5a5760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6117506126e5565b5f8281525f805160206135ad8339815191526020526040808220815160e0810190925280545f8051602061358d83398151915293929190829060ff16600581111561179d5761179d61287b565b60058111156117ae576117ae61287b565b81526020016001820180546117c290612a09565b80601f01602080910402602001604051908101604052809291908181526020018280546117ee90612a09565b80156118395780601f1061181057610100808354040283529160200191611839565b820191905f5260205f20905b81548152906001019060200180831161181c57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118a7576118a761287b565b146118da575f8481526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561191e5761191e61287b565b0217905550602082015160018201906119379082612d45565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6119d58582611f6b565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16611a7057604051637fab81e560e01b815260040160405180910390fd5b5f8051602061358d83398151915242611a8f6060860160408701613171565b6001600160401b0316111580611ac95750611aad6202a30042612e18565b611abd6060860160408701613171565b6001600160401b031610155b15611b0357611ade6060850160408601613171565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b611b18611b13606086018661318a565b612142565b611b28611b13608086018661318a565b6030611b37602086018661319e565b905014611b6957611b4b602085018561319e565b6040516326475b2f60e11b8152610499925060040190815260200190565b611b73848061319e565b90505f03611ba057611b85848061319e565b604051633e08a12560e11b81526004016104999291906131e0565b5f60088201611baf868061319e565b604051611bbd9291906130d5565b90815260200160405180910390205414611bf657611bdb848061319e565b60405163a41f772f60e01b81526004016104999291906131e0565b611c00835f6122ab565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611c3d8a8061319e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611c85908b018b61319e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611cce60608b0160408c01613171565b6001600160401b03168152602001611ce960608b018b61318a565b611cf2906131f3565b8152602001611d0460808b018b61318a565b611d0d906131f3565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611d3b9190613320565b5f60405180830381865af4158015611d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d7c91908101906133d7565b5f82815260068601602052604090209193509150611d9a8282612d45565b508160088401611daa888061319e565b604051611db89291906130d5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611df4908590600401612b83565b6020604051808303815f875af1158015611e10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e349190612b95565b5f8481526007860160205260409020805460ff191660011790559050611e5a878061319e565b5f858152600787016020526040902060010191611e7891908361341a565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611ed7888061319e565b604051611ee59291906130d5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190611f239190613171565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611f596124ce565b611f6282612517565b610b6d81612530565b5f8281525f805160206135ad833981519152602052604081206002015481905f8051602061358d83398151915290600160801b90046001600160401b0316611fb385826122ab565b5f611fbd87612541565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612066573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261208d9190810190612b52565b6040518263ffffffff1660e01b81526004016120a99190612b83565b6020604051808303815f875af11580156120c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e99190612b95565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b61214f60208201826127b7565b63ffffffff1615801561216f575061216a6020820182612bac565b151590505b156121b65761218160208201826127b7565b61218e6020830183612bac565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b6121c36020820182612bac565b90506121d260208301836127b7565b63ffffffff1611156121eb5761218160208201826127b7565b60015b6121fb6020830183612bac565b9050811015610b6d576122116020830183612bac565b61221c6001846134d3565b81811061222b5761222b612bf1565b9050602002016020810190612240919061297c565b6001600160a01b03166122566020840184612bac565b8381811061226657612266612bf1565b905060200201602081019061227b919061297c565b6001600160a01b031610156122a357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016121ee565b5f8051602061358d8339815191525f6001600160401b0380841690851611156122df576122d883856134e6565b90506122ec565b6122e984846134e6565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061234e57506001840154815161234a916001600160401b031690612e18565b8210155b15612374576001600160401b038316606082015281815260408101516020820152612393565b82816060018181516123869190613506565b6001600160401b03169052505b60608101516123a3906064613526565b602082015160018601546001600160401b0392909216916123ce9190600160401b900460ff16612e4d565b10156123fe57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b856001600160401b0316816040018181516124199190612e18565b9052506040810180516001600160401b03871691906124399083906134d3565b9052506001840154604082015160649161245e91600160401b90910460ff1690612e4d565b1015612485578060400151604051635943317f60e01b815260040161049991815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b5a57604051631afcd79f60e31b815260040160405180910390fd5b61251f6124ce565b6125276125b6565b611156816125be565b6125386124ce565b611156816126a6565b5f8181525f805160206135ad8339815191526020526040812060020180545f8051602061358d833981519152919060089061258b90600160401b90046001600160401b0316613551565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b5a6124ce565b6125c66124ce565b80355f8051602061358d83398151915290815560146125eb606084016040850161356c565b60ff16118061260a5750612605606083016040840161356c565b60ff16155b1561263e5761261f606083016040840161356c565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b61264e606083016040840161356c565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561267f6040830160208401613171565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b6111246124ce565b5080546126ba90612a09565b5f825580601f106126c9575050565b601f0160209004905f5260205f20908101906111569190612722565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612736575f8155600101612723565b5090565b5f6020828403121561274a575f80fd5b5035919050565b803563ffffffff81168114612764575f80fd5b919050565b5f806040838503121561277a575f80fd5b82356001600160401b0381111561278f575f80fd5b8301608081860312156127a0575f80fd5b91506127ae60208401612751565b90509250929050565b5f602082840312156127c7575f80fd5b610b8482612751565b80356001600160401b0381168114612764575f80fd5b5f80604083850312156127f7575f80fd5b82356001600160401b0381111561280c575f80fd5b830160a0818603121561281d575f80fd5b91506127ae602084016127d0565b6001600160a01b0381168114611156575f80fd5b5f808284036080811215612851575f80fd5b606081121561285e575f80fd5b5082915060608301356128708161282b565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b600681106128ab57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156128c95781810151838201526020016128b1565b50505f910152565b5f81518084526128e88160208601602086016128af565b601f01601f19169290920160200192915050565b6020815261290e60208201835161288f565b5f602083015160e060408401526129296101008401826128d1565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f6020828403121561298c575f80fd5b81356129978161282b565b9392505050565b5f80602083850312156129af575f80fd5b82356001600160401b03808211156129c5575f80fd5b818501915085601f8301126129d8575f80fd5b8135818111156129e6575f80fd5b8660208285010111156129f7575f80fd5b60209290920196919550909350505050565b600181811c90821680612a1d57607f821691505b602082108103612a3b57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610b87828461288f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612a8557612a85612a4f565b60405290565b604080519081016001600160401b0381118282101715612a8557612a85612a4f565b604051601f8201601f191681016001600160401b0381118282101715612ad557612ad5612a4f565b604052919050565b5f6001600160401b03821115612af557612af5612a4f565b50601f01601f191660200190565b5f82601f830112612b12575f80fd5b8151612b25612b2082612add565b612aad565b818152846020838601011115612b39575f80fd5b612b4a8260208301602087016128af565b949350505050565b5f60208284031215612b62575f80fd5b81516001600160401b03811115612b77575f80fd5b612b4a84828501612b03565b602081525f610b8460208301846128d1565b5f60208284031215612ba5575f80fd5b5051919050565b5f808335601e19843603018112612bc1575f80fd5b8301803591506001600160401b03821115612bda575f80fd5b6020019150600581901b360382131561213b575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612c19575f80fd5b9190910192915050565b5f82601f830112612c32575f80fd5b8135612c40612b2082612add565b818152846020838601011115612c54575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612c80575f80fd5b612c88612a63565b82356001600160401b0380821115612c9e575f80fd5b612caa36838701612c23565b83526020850135915080821115612cbf575f80fd5b50612ccc36828601612c23565b602083015250612cde604084016127d0565b604082015292915050565b5f8251612c198184602087016128af565b601f821115610b3057805f5260205f20601f840160051c81016020851015612d1f5750805b601f840160051c820191505b81811015612d3e575f8155600101612d2b565b5050505050565b81516001600160401b03811115612d5e57612d5e612a4f565b612d7281612d6c8454612a09565b84612cfa565b602080601f831160018114612da5575f8415612d8e5750858301515b5f19600386901b1c1916600185901b178555612dfc565b5f85815260208120601f198616915b82811015612dd357888601518255948401946001909101908401612db4565b5085821015612df057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b8757610b87612e04565b5f63ffffffff808316818103612e4357612e43612e04565b6001019392505050565b8082028115828204841417610b8757610b87612e04565b5f808335601e19843603018112612e79575f80fd5b83016020810192503590506001600160401b03811115612e97575f80fd5b80360382131561213b575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015612f7a57848303601f19018952813536889003605e19018112612f09575f80fd5b87016060612f178280612e64565b828752612f278388018284612ea5565b92505050612f3786830183612e64565b86830388880152612f49838284612ea5565b9250505060406001600160401b03612f628285016127d0565b16950194909452509783019790830190600101612ee4565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135612fab8161282b565b6001600160a01b031660608381019190915283013536849003601e19018112612fd2575f80fd5b83016020810190356001600160401b03811115612fed575f80fd5b8060051b3603821315612ffe575f80fd5b60808085015261301260a085018284612ecd565b95945050505050565b80518015158114612764575f80fd5b5f806040838503121561303b575f80fd5b825191506127ae6020840161301b565b5f60208083525f845461305d81612a09565b806020870152604060018084165f811461307e576001811461309a576130c7565b60ff19851660408a0152604084151560051b8a010195506130c7565b895f5260205f205f5b858110156130be5781548b82018601529083019088016130a3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156130f5575f80fd5b82516001600160401b038082111561310b575f80fd5b908401906060828703121561311e575f80fd5b613126612a63565b8251815260208301516131388161282b565b602082015260408301518281111561314e575f80fd5b61315a88828601612b03565b60408301525093506127ae9150506020840161301b565b5f60208284031215613181575f80fd5b610b84826127d0565b5f8235603e19833603018112612c19575f80fd5b5f808335601e198436030181126131b3575f80fd5b8301803591506001600160401b038211156131cc575f80fd5b60200191503681900382131561213b575f80fd5b602081525f612b4a602083018486612ea5565b5f60408236031215613203575f80fd5b61320b612a8b565b61321483612751565b81526020808401356001600160401b0380821115613230575f80fd5b9085019036601f830112613242575f80fd5b81358181111561325457613254612a4f565b8060051b9150613265848301612aad565b818152918301840191848101903684111561327e575f80fd5b938501935b838510156132a857843592506132988361282b565b8282529385019390850190613283565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156133155784516001600160a01b031682529383019360019290920191908301906132ec565b509695505050505050565b60208152815160208201525f602083015160e060408401526133466101008401826128d1565b90506040840151601f198085840301606086015261336483836128d1565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261339483836132ba565b925060a08601519150808584030160c0860152506133b282826132ba565b91505060c08401516133cf60e08501826001600160401b03169052565b509392505050565b5f80604083850312156133e8575f80fd5b8251915060208301516001600160401b03811115613404575f80fd5b61341085828601612b03565b9150509250929050565b6001600160401b0383111561343157613431612a4f565b6134458361343f8354612a09565b83612cfa565b5f601f841160018114613476575f851561345f5750838201355b5f19600387901b1c1916600186901b178355612d3e565b5f83815260208120601f198716915b828110156134a55786850135825560209485019460019092019101613485565b50868210156134c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610b8757610b87612e04565b6001600160401b038281168282160390808211156112c3576112c3612e04565b6001600160401b038181168382160190808211156112c3576112c3612e04565b6001600160401b0381811683821602808216919082811461354957613549612e04565b505092915050565b5f6001600160401b03808316818103612e4357612e43612e04565b5f6020828403121561357c575f80fd5b813560ff81168114612997575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220b1d497921e0caa4ded312feb921bee8dcbef4121d7ecc126d68b96f54029544264736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b5060405161374f38038061374f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136028061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b61014961014436600461273a565b610312565b005b610149610159366004612769565b6105a2565b61014961016c3660046127b7565b610b27565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a136600461273a565b610b35565b6040516001600160401b03909116815260200161018a565b610149610b49565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61014961024736600461273a565b610b5c565b6101cd61025a3660046127e6565b610b71565b61014961026d3660046127b7565b610b8d565b6102216005600160991b0181565b6101cd5f8051602061358d83398151915281565b6101496102a236600461273a565b610d82565b6101e3601481565b6101496102bd36600461283f565b610ebf565b6102d56102d036600461273a565b610fcd565b60405161018a91906128fc565b6101a66202a30081565b6101496102fa36600461297c565b61111c565b6101cd61030d36600461299e565b611159565b5f8181525f805160206135ad8339815191526020526040808220815160e0810190925280545f8051602061358d83398151915293929190829060ff16600581111561035f5761035f61287b565b60058111156103705761037061287b565b815260200160018201805461038490612a09565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612a09565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156104665761046661287b565b146104a2575f8381526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610519573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105409190810190612b52565b6040518263ffffffff1660e01b815260040161055c9190612b83565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190612b95565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061358d8339815191529060ff16156105f457604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610637573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065b9190612b95565b836020013514610684576040516372b0a7e760e11b815260208401356004820152602401610499565b30610695606085016040860161297c565b6001600160a01b0316146106d8576106b3606084016040850161297c565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f6106e66060850185612bac565b905090505f805b828163ffffffff16101561094d575f6107096060880188612bac565b8363ffffffff1681811061071f5761071f612bf1565b90506020028101906107319190612c05565b61073a90612c70565b80516040519192505f91600888019161075291612ce9565b9081526020016040518091039020541461078257805160405163a41f772f60e01b81526104999190600401612b83565b5f6002885f0135846040516020016107b192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107cb91612ce9565b602060405180830381855afa1580156107e6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108099190612b95565b90508086600801835f01516040516108219190612ce9565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff1916600217815582516001909101906108619082612d45565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff191690556108e09085612e18565b82516040519195506108f191612ce9565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a350508061094690612e2b565b90506106ed565b5060048301819055600183015460649061097190600160401b900460ff1683612e4d565b101561099357604051635943317f60e01b815260048101829052602401610499565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109b7876111b4565b604001516040518263ffffffff1660e01b81526004016109d79190612b83565b602060405180830381865af41580156109f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a169190612b95565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a509190612f87565b5f60405180830381865af4158015610a6a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a919190810190612b52565b90505f600282604051610aa49190612ce9565b602060405180830381855afa158015610abf573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ae29190612b95565b9050828114610b0e5760405163baaea89d60e01b81526004810182905260248101849052604401610499565b5050506009909201805460ff1916600117905550505050565b610b30816112ca565b505050565b5f610b3f82610fcd565b6080015192915050565b610b5161167d565b610b5a5f6116d8565b565b610b6461167d565b610b6d81611748565b5050565b5f610b7a61167d565b610b848383611a2c565b90505b92915050565b5f8051602061358d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bc0866111b4565b604001516040518263ffffffff1660e01b8152600401610be09190612b83565b6040805180830381865af4158015610bfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1e919061302a565b9150915080610c4457604051632d07135360e01b81528115156004820152602401610499565b5f82815260068401602052604090208054610c5e90612a09565b90505f03610c825760405163089938b360e11b815260048101839052602401610499565b60015f83815260078501602052604090205460ff166005811115610ca857610ca861287b565b14610cdb575f8281526007840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b5f8281526006840160205260408120610cf3916126ae565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061358d8339815191529190610dc990612a09565b90505f03610ded5760405163089938b360e11b815260048101839052602401610499565b60015f83815260078301602052604090205460ff166005811115610e1357610e1361287b565b14610e46575f8281526007820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91610e7f919060040161304b565b6020604051808303815f875af1158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b309190612b95565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f035750825b90505f826001600160401b03166001148015610f1e5750303b155b905081158015610f2c575080155b15610f4a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f7457845460ff60401b1916600160401b1785555b610f7e8787611f51565b8315610fc457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610fd56126e5565b5f8281525f805160206135ad833981519152602052604090819020815160e0810190925280545f8051602061358d833981519152929190829060ff1660058111156110225761102261287b565b60058111156110335761103361287b565b815260200160018201805461104790612a09565b80601f016020809104026020016040519081016040528092919081815260200182805461107390612a09565b80156110be5780601f10611095576101008083540402835291602001916110be565b820191905f5260205f20905b8154815290600101906020018083116110a157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61112461167d565b6001600160a01b03811661114d57604051631e4fbdf760e01b81525f6004820152602401610499565b611156816116d8565b50565b6040515f905f8051602061358d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061119c90869086906130d5565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611218573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261123f91908101906130e4565b915091508061126157604051636b2f19e960e01b815260040160405180910390fd5b815115611287578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156112c3576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f6112d36126e5565b5f8051602061358d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611306886111b4565b604001516040518263ffffffff1660e01b81526004016113269190612b83565b6040805180830381865af4158015611340573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611364919061302a565b91509150801561138b57604051632d07135360e01b81528115156004820152602401610499565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156113bc576113bc61287b565b60058111156113cd576113cd61287b565b81526020016001820180546113e190612a09565b80601f016020809104026020016040519081016040528092919081815260200182805461140d90612a09565b80156114585780601f1061142f57610100808354040283529160200191611458565b820191905f5260205f20905b81548152906001019060200180831161143b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114c3576114c361287b565b141580156114e457506001815160058111156114e1576114e161287b565b14155b1561150557805160405163170cc93360e21b81526104999190600401612a41565b60038151600581111561151a5761151a61287b565b03611528576004815261152d565b600581525b8360080181602001516040516115439190612ce9565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156115875761158761287b565b0217905550602082015160018201906115a09082612d45565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156116465761164661287b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116af7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b5a5760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6117506126e5565b5f8281525f805160206135ad8339815191526020526040808220815160e0810190925280545f8051602061358d83398151915293929190829060ff16600581111561179d5761179d61287b565b60058111156117ae576117ae61287b565b81526020016001820180546117c290612a09565b80601f01602080910402602001604051908101604052809291908181526020018280546117ee90612a09565b80156118395780601f1061181057610100808354040283529160200191611839565b820191905f5260205f20905b81548152906001019060200180831161181c57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118a7576118a761287b565b146118da575f8481526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612a41565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561191e5761191e61287b565b0217905550602082015160018201906119379082612d45565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6119d58582611f6b565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16611a7057604051637fab81e560e01b815260040160405180910390fd5b5f8051602061358d83398151915242611a8f6060860160408701613171565b6001600160401b0316111580611ac95750611aad6202a30042612e18565b611abd6060860160408701613171565b6001600160401b031610155b15611b0357611ade6060850160408601613171565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b611b18611b13606086018661318a565b612142565b611b28611b13608086018661318a565b6030611b37602086018661319e565b905014611b6957611b4b602085018561319e565b6040516326475b2f60e11b8152610499925060040190815260200190565b611b73848061319e565b90505f03611ba057611b85848061319e565b604051633e08a12560e11b81526004016104999291906131e0565b5f60088201611baf868061319e565b604051611bbd9291906130d5565b90815260200160405180910390205414611bf657611bdb848061319e565b60405163a41f772f60e01b81526004016104999291906131e0565b611c00835f6122ab565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611c3d8a8061319e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611c85908b018b61319e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611cce60608b0160408c01613171565b6001600160401b03168152602001611ce960608b018b61318a565b611cf2906131f3565b8152602001611d0460808b018b61318a565b611d0d906131f3565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611d3b9190613320565b5f60405180830381865af4158015611d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d7c91908101906133d7565b5f82815260068601602052604090209193509150611d9a8282612d45565b508160088401611daa888061319e565b604051611db89291906130d5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611df4908590600401612b83565b6020604051808303815f875af1158015611e10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e349190612b95565b5f8481526007860160205260409020805460ff191660011790559050611e5a878061319e565b5f858152600787016020526040902060010191611e7891908361341a565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611ed7888061319e565b604051611ee59291906130d5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190611f239190613171565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611f596124ce565b611f6282612517565b610b6d81612530565b5f8281525f805160206135ad833981519152602052604081206002015481905f8051602061358d83398151915290600160801b90046001600160401b0316611fb385826122ab565b5f611fbd87612541565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612066573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261208d9190810190612b52565b6040518263ffffffff1660e01b81526004016120a99190612b83565b6020604051808303815f875af11580156120c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e99190612b95565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b61214f60208201826127b7565b63ffffffff1615801561216f575061216a6020820182612bac565b151590505b156121b65761218160208201826127b7565b61218e6020830183612bac565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b6121c36020820182612bac565b90506121d260208301836127b7565b63ffffffff1611156121eb5761218160208201826127b7565b60015b6121fb6020830183612bac565b9050811015610b6d576122116020830183612bac565b61221c6001846134d3565b81811061222b5761222b612bf1565b9050602002016020810190612240919061297c565b6001600160a01b03166122566020840184612bac565b8381811061226657612266612bf1565b905060200201602081019061227b919061297c565b6001600160a01b031610156122a357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016121ee565b5f8051602061358d8339815191525f6001600160401b0380841690851611156122df576122d883856134e6565b90506122ec565b6122e984846134e6565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061234e57506001840154815161234a916001600160401b031690612e18565b8210155b15612374576001600160401b038316606082015281815260408101516020820152612393565b82816060018181516123869190613506565b6001600160401b03169052505b60608101516123a3906064613526565b602082015160018601546001600160401b0392909216916123ce9190600160401b900460ff16612e4d565b10156123fe57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b856001600160401b0316816040018181516124199190612e18565b9052506040810180516001600160401b03871691906124399083906134d3565b9052506001840154604082015160649161245e91600160401b90910460ff1690612e4d565b1015612485578060400151604051635943317f60e01b815260040161049991815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b5a57604051631afcd79f60e31b815260040160405180910390fd5b61251f6124ce565b6125276125b6565b611156816125be565b6125386124ce565b611156816126a6565b5f8181525f805160206135ad8339815191526020526040812060020180545f8051602061358d833981519152919060089061258b90600160401b90046001600160401b0316613551565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b5a6124ce565b6125c66124ce565b80355f8051602061358d83398151915290815560146125eb606084016040850161356c565b60ff16118061260a5750612605606083016040840161356c565b60ff16155b1561263e5761261f606083016040840161356c565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b61264e606083016040840161356c565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561267f6040830160208401613171565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b6111246124ce565b5080546126ba90612a09565b5f825580601f106126c9575050565b601f0160209004905f5260205f20908101906111569190612722565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612736575f8155600101612723565b5090565b5f6020828403121561274a575f80fd5b5035919050565b803563ffffffff81168114612764575f80fd5b919050565b5f806040838503121561277a575f80fd5b82356001600160401b0381111561278f575f80fd5b8301608081860312156127a0575f80fd5b91506127ae60208401612751565b90509250929050565b5f602082840312156127c7575f80fd5b610b8482612751565b80356001600160401b0381168114612764575f80fd5b5f80604083850312156127f7575f80fd5b82356001600160401b0381111561280c575f80fd5b830160a0818603121561281d575f80fd5b91506127ae602084016127d0565b6001600160a01b0381168114611156575f80fd5b5f808284036080811215612851575f80fd5b606081121561285e575f80fd5b5082915060608301356128708161282b565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b600681106128ab57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156128c95781810151838201526020016128b1565b50505f910152565b5f81518084526128e88160208601602086016128af565b601f01601f19169290920160200192915050565b6020815261290e60208201835161288f565b5f602083015160e060408401526129296101008401826128d1565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f6020828403121561298c575f80fd5b81356129978161282b565b9392505050565b5f80602083850312156129af575f80fd5b82356001600160401b03808211156129c5575f80fd5b818501915085601f8301126129d8575f80fd5b8135818111156129e6575f80fd5b8660208285010111156129f7575f80fd5b60209290920196919550909350505050565b600181811c90821680612a1d57607f821691505b602082108103612a3b57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610b87828461288f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612a8557612a85612a4f565b60405290565b604080519081016001600160401b0381118282101715612a8557612a85612a4f565b604051601f8201601f191681016001600160401b0381118282101715612ad557612ad5612a4f565b604052919050565b5f6001600160401b03821115612af557612af5612a4f565b50601f01601f191660200190565b5f82601f830112612b12575f80fd5b8151612b25612b2082612add565b612aad565b818152846020838601011115612b39575f80fd5b612b4a8260208301602087016128af565b949350505050565b5f60208284031215612b62575f80fd5b81516001600160401b03811115612b77575f80fd5b612b4a84828501612b03565b602081525f610b8460208301846128d1565b5f60208284031215612ba5575f80fd5b5051919050565b5f808335601e19843603018112612bc1575f80fd5b8301803591506001600160401b03821115612bda575f80fd5b6020019150600581901b360382131561213b575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612c19575f80fd5b9190910192915050565b5f82601f830112612c32575f80fd5b8135612c40612b2082612add565b818152846020838601011115612c54575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612c80575f80fd5b612c88612a63565b82356001600160401b0380821115612c9e575f80fd5b612caa36838701612c23565b83526020850135915080821115612cbf575f80fd5b50612ccc36828601612c23565b602083015250612cde604084016127d0565b604082015292915050565b5f8251612c198184602087016128af565b601f821115610b3057805f5260205f20601f840160051c81016020851015612d1f5750805b601f840160051c820191505b81811015612d3e575f8155600101612d2b565b5050505050565b81516001600160401b03811115612d5e57612d5e612a4f565b612d7281612d6c8454612a09565b84612cfa565b602080601f831160018114612da5575f8415612d8e5750858301515b5f19600386901b1c1916600185901b178555612dfc565b5f85815260208120601f198616915b82811015612dd357888601518255948401946001909101908401612db4565b5085821015612df057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b8757610b87612e04565b5f63ffffffff808316818103612e4357612e43612e04565b6001019392505050565b8082028115828204841417610b8757610b87612e04565b5f808335601e19843603018112612e79575f80fd5b83016020810192503590506001600160401b03811115612e97575f80fd5b80360382131561213b575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015612f7a57848303601f19018952813536889003605e19018112612f09575f80fd5b87016060612f178280612e64565b828752612f278388018284612ea5565b92505050612f3786830183612e64565b86830388880152612f49838284612ea5565b9250505060406001600160401b03612f628285016127d0565b16950194909452509783019790830190600101612ee4565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135612fab8161282b565b6001600160a01b031660608381019190915283013536849003601e19018112612fd2575f80fd5b83016020810190356001600160401b03811115612fed575f80fd5b8060051b3603821315612ffe575f80fd5b60808085015261301260a085018284612ecd565b95945050505050565b80518015158114612764575f80fd5b5f806040838503121561303b575f80fd5b825191506127ae6020840161301b565b5f60208083525f845461305d81612a09565b806020870152604060018084165f811461307e576001811461309a576130c7565b60ff19851660408a0152604084151560051b8a010195506130c7565b895f5260205f205f5b858110156130be5781548b82018601529083019088016130a3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156130f5575f80fd5b82516001600160401b038082111561310b575f80fd5b908401906060828703121561311e575f80fd5b613126612a63565b8251815260208301516131388161282b565b602082015260408301518281111561314e575f80fd5b61315a88828601612b03565b60408301525093506127ae9150506020840161301b565b5f60208284031215613181575f80fd5b610b84826127d0565b5f8235603e19833603018112612c19575f80fd5b5f808335601e198436030181126131b3575f80fd5b8301803591506001600160401b038211156131cc575f80fd5b60200191503681900382131561213b575f80fd5b602081525f612b4a602083018486612ea5565b5f60408236031215613203575f80fd5b61320b612a8b565b61321483612751565b81526020808401356001600160401b0380821115613230575f80fd5b9085019036601f830112613242575f80fd5b81358181111561325457613254612a4f565b8060051b9150613265848301612aad565b818152918301840191848101903684111561327e575f80fd5b938501935b838510156132a857843592506132988361282b565b8282529385019390850190613283565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156133155784516001600160a01b031682529383019360019290920191908301906132ec565b509695505050505050565b60208152815160208201525f602083015160e060408401526133466101008401826128d1565b90506040840151601f198085840301606086015261336483836128d1565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261339483836132ba565b925060a08601519150808584030160c0860152506133b282826132ba565b91505060c08401516133cf60e08501826001600160401b03169052565b509392505050565b5f80604083850312156133e8575f80fd5b8251915060208301516001600160401b03811115613404575f80fd5b61341085828601612b03565b9150509250929050565b6001600160401b0383111561343157613431612a4f565b6134458361343f8354612a09565b83612cfa565b5f601f841160018114613476575f851561345f5750838201355b5f19600387901b1c1916600186901b178355612d3e565b5f83815260208120601f198716915b828110156134a55786850135825560209485019460019092019101613485565b50868210156134c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610b8757610b87612e04565b6001600160401b038281168282160390808211156112c3576112c3612e04565b6001600160401b038181168382160190808211156112c3576112c3612e04565b6001600160401b0381811683821602808216919082811461354957613549612e04565b505092915050565b5f6001600160401b03808316818103612e4357612e43612e04565b5f6020828403121561357c575f80fd5b813560ff81168114612997575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212209d9403351ec5ca49cca66f0c1b9df49f3f94eb72e1b7c71b94795fbe73670e3364736f6c63430008190033",
}
// PoAValidatorManagerABI is the input ABI used to generate the binding from.
diff --git a/contracts/ictt/README.md b/contracts/ictt/README.md
index 915123d3f..5925dbc82 100644
--- a/contracts/ictt/README.md
+++ b/contracts/ictt/README.md
@@ -52,7 +52,7 @@ A concrete implementation of `TokenHome` and `INativeTokenTransferrer` that hand
## `TokenRemote`
-An abstract implementation of `ITokenTransferrer` for a token transfer contract on a "remote" chain that receives transferred assets from a specific `TokenHome` instance. Each `TokenRemote` instance has a single `TokenHome` instance that it receives token transfers from to mint tokens. It also handles sending messages (and correspondingly burning tokens) to route tokens back to other chains (either its `TokenHome`, or other `TokenRemote` instances). Once deployed, a `TokenRemote` instance must be registered with its specified `TokenHome` contract. This is done by calling `registerWithHome` on the remote contract, which will send a ICM message to the home contract with the information to register.
+An abstract implementation of `ITokenTransferrer` for a token transfer contract on a "remote" chain that receives transferred assets from a specific `TokenHome` instance. Each `TokenRemote` instance has a single `TokenHome` instance that it receives token transfers from to mint tokens. It also handles sending messages (and correspondingly burning tokens) to route tokens back to other chains (either its `TokenHome`, or other `TokenRemote` instances). Once deployed, a `TokenRemote` instance must be registered with its specified `TokenHome` contract. This is done by calling `registerWithHome` on the remote contract, which will send an ICM message to the home contract with the information to register.
All messages sent by `TokenRemote` instances are sent to the specified `TokenHome` contract, whether they are to redeem the collateral from the `TokenHome` instance or route the tokens to another `TokenRemote` instance. Routing tokens from one `TokenRemote` instance to another is referred to as a "multi-hop", where the tokens are first sent back to their `TokenHome` contract to update its accounting, and then automatically routed on to their intended destination `TokenRemote` instance.
@@ -74,7 +74,7 @@ To account for the need to bootstrap the chain using a transferred asset as its
1. Create a new blockchain with 100 native tokens allocated in its genesis block, and set the pre-derived `NativeTokenRemote` contract address (based on the deployer nonce) to have the permission to mint native tokens using the native minter precompile. Note that the deployer account will need to be funded in order to deploy the `NativeTokenRemote` contract, and an account used to relay messages into this chain must also be funded to relay the first messages.
2. Deploy the `NativeTokenRemote` contract to the pre-derived address set in the blockchain configuration of step 1. The `initialReserveImbalance` should be 100, matching the number of tokens allocated in the genesis block that were not initially backed by collateral in the `TokenHome` instance.
-3. Call the `registerWithHome` function on the `NativeTokenRemote` instance to send a ICM message registering this remote with its `TokenHome`. This message should be relayed and delivered to the `TokenHome` instance.
+3. Call the `registerWithHome` function on the `NativeTokenRemote` instance to send an ICM message registering this remote with its `TokenHome`. This message should be relayed and delivered to the `TokenHome` instance.
4. Once registered on the `TokenHome` contract, add 100 tokens as collateral for the new `NativeTokenRemote` instance by calling the `addCollateral` function on the `TokenHome` contract. A `CollateralAdded` event will be emitted by the `TokenHome` contract with a `remaining` amount of 0 once the `NativeTokenRemote` is fully collateralized.
5. Now that the `NativeTokenRemote` contract is fully collateralized, tokens can be moved normally in both directions across the token transfer contracts by calling their `send` functions.
diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol
index b07673887..689c0f99b 100644
--- a/contracts/validator-manager/ValidatorManager.sol
+++ b/contracts/validator-manager/ValidatorManager.sol
@@ -168,7 +168,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
}
// Validation ID of the initial validators is the sha256 hash of the
- // convert L1 to L1 tx ID and the index of the initial validator.
+ // convert subnet to L1 tx ID and the index of the initial validator.
bytes32 validationID = sha256(abi.encodePacked(conversionData.l1ID, i));
// Save the initial validator as an active validator.
diff --git a/tests/flows/teleporter/basic_send_receive.go b/tests/flows/teleporter/basic_send_receive.go
index 625ce33b3..664de47bb 100644
--- a/tests/flows/teleporter/basic_send_receive.go
+++ b/tests/flows/teleporter/basic_send_receive.go
@@ -19,7 +19,7 @@ func BasicSendReceive(network *localnetwork.LocalNetwork, teleporter utils.Telep
teleporterContractAddress := teleporter.TeleporterMessengerAddress(l1AInfo)
fundedAddress, fundedKey := network.GetFundedAccountInfo()
- // Send a transaction to L1 A to issue a ICM Message from the Teleporter contract to L1 B
+ // Send a transaction to L1 A to issue an ICM Message from the Teleporter contract to L1 B
ctx := context.Background()
// Clear the receipt queue from L1 B -> L1 A to have a clean slate for the test flow.
@@ -79,7 +79,7 @@ func BasicSendReceive(network *localnetwork.LocalNetwork, teleporter utils.Telep
Expect(err).Should(BeNil())
Expect(delivered).Should(BeTrue())
- // Send a transaction to L1 B to issue a ICM Message from the Teleporter contract to L1 A
+ // Send a transaction to L1 B to issue an ICM Message from the Teleporter contract to L1 A
sendCrossChainMessageInput.DestinationBlockchainID = l1AInfo.BlockchainID
sendCrossChainMessageInput.FeeInfo.Amount = big.NewInt(0)
receipt, teleporterMessageID = utils.SendCrossChainMessageAndWaitForAcceptance(
diff --git a/tests/flows/teleporter/relay_message_twice.go b/tests/flows/teleporter/relay_message_twice.go
index 8d6dca965..ed87ff21c 100644
--- a/tests/flows/teleporter/relay_message_twice.go
+++ b/tests/flows/teleporter/relay_message_twice.go
@@ -20,7 +20,7 @@ func RelayMessageTwice(network *localnetwork.LocalNetwork, teleporter utils.Tele
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Send a transaction to L1 A to issue a ICM Message from the Teleporter contract to L1 B
+ // Send a transaction to L1 A to issue an ICM Message from the Teleporter contract to L1 B
//
ctx := context.Background()
diff --git a/tests/flows/teleporter/resubmit_altered_message.go b/tests/flows/teleporter/resubmit_altered_message.go
index 1eb1a3cb2..a19ac47d0 100644
--- a/tests/flows/teleporter/resubmit_altered_message.go
+++ b/tests/flows/teleporter/resubmit_altered_message.go
@@ -18,7 +18,7 @@ func ResubmitAlteredMessage(network *localnetwork.LocalNetwork, teleporter utils
l1BInfo, _ := network.GetTwoL1s()
fundedAddress, fundedKey := network.GetFundedAccountInfo()
- // Send a transaction to L1 A to issue a ICM Message from the Teleporter contract to L1 B
+ // Send a transaction to L1 A to issue an ICM Message from the Teleporter contract to L1 B
ctx := context.Background()
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
diff --git a/tests/flows/teleporter/unallowed_relayer.go b/tests/flows/teleporter/unallowed_relayer.go
index 5b2ea2d44..27643d11a 100644
--- a/tests/flows/teleporter/unallowed_relayer.go
+++ b/tests/flows/teleporter/unallowed_relayer.go
@@ -19,7 +19,7 @@ func UnallowedRelayer(network *localnetwork.LocalNetwork, teleporter utils.Telep
fundedAddress, fundedKey := network.GetFundedAccountInfo()
//
- // Send a transaction to L1 A to issue a ICM Message from the Teleporter contract to L1 B
+ // Send a transaction to L1 A to issue an ICM Message from the Teleporter contract to L1 B
// The Teleporter message includes an allowed relayer list that does NOT include the relayer
//
ctx := context.Background()
From df2dfdc7bee65f8be3bdd78e0763f8f5a943c3ba Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 27 Nov 2024 16:20:26 -0500
Subject: [PATCH 10/15] Fix tests
---
.../validator-manager/tests/PoAValidatorManagerTests.t.sol | 2 +-
.../validator-manager/tests/PoSValidatorManagerTests.t.sol | 6 +++---
.../validator-manager/tests/ValidatorMessagesTests.t.sol | 6 +++---
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
index 0469fa359..f422a1398 100644
--- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
@@ -37,7 +37,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest {
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector));
app.initialize(
ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ subnetID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
index 933566045..2d9cc07b3 100644
--- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
@@ -1613,7 +1613,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
}
function testEndValidationPoAValidator() public {
- bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(1)));
+ bytes32 validationID = sha256(abi.encodePacked(DEFAULT_L1_ID, uint32(1)));
vm.warp(DEFAULT_COMPLETION_TIMESTAMP);
bytes memory setValidatorWeightPayload =
@@ -1639,7 +1639,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
}
function testDelegationToPoAValidator() public {
- bytes32 defaultInitialValidationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(1)));
+ bytes32 defaultInitialValidationID = sha256(abi.encodePacked(DEFAULT_L1_ID, uint32(1)));
_beforeSend(_weightToValue(DEFAULT_DELEGATOR_WEIGHT), DEFAULT_DELEGATOR_ADDRESS);
@@ -2453,7 +2453,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
function _defaultPoSSettings() internal pure returns (PoSValidatorManagerSettings memory) {
return PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_SUBNET_ID,
+ subnetID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
diff --git a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
index 5bfc7d82b..fb9086fde 100644
--- a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
+++ b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
@@ -78,7 +78,7 @@ contract ValidatorMessagesTest is Test {
);
ValidatorMessages.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
- subnetID: DEFAULT_SUBNET_ID,
+ subnetID: DEFAULT_L1_ID,
nodeID: DEFAULT_NODE_ID,
registrationExpiry: DEFAULT_EXPIRY,
blsPublicKey: invalidBLSKey,
@@ -288,7 +288,7 @@ contract ValidatorMessagesTest is Test {
});
bytes memory packed = ValidatorMessages.packConversionData(
ConversionData({
- subnetID: DEFAULT_SUBNET_ID,
+ subnetID: DEFAULT_L1_ID,
validatorManagerBlockchainID: DEFAULT_SUBNET_CONVERSION_ID,
validatorManagerAddress: DEFAULT_OWNER,
initialValidators: initialValidators
@@ -341,7 +341,7 @@ contract ValidatorMessagesTest is Test {
function _getPackedRegisterL1ValidatorMessage() internal returns (bytes memory) {
(, bytes memory packed) = ValidatorMessages.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
- subnetID: DEFAULT_SUBNET_ID,
+ subnetID: DEFAULT_L1_ID,
nodeID: DEFAULT_NODE_ID,
registrationExpiry: DEFAULT_EXPIRY,
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY,
From 3ef05077a6a28b9a9d985c839c489e7f97598179 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 27 Nov 2024 16:26:38 -0500
Subject: [PATCH 11/15] Fix tests
---
contracts/validator-manager/PoSValidatorManager.sol | 2 +-
.../validator-manager/interfaces/IPoSValidatorManager.sol | 2 +-
.../validator-manager/interfaces/IValidatorManager.sol | 2 +-
.../validator-manager/tests/PoAValidatorManagerTests.t.sol | 2 +-
.../validator-manager/tests/PoSValidatorManagerTests.t.sol | 2 +-
.../validator-manager/tests/ValidatorMessagesTests.t.sol | 6 +++---
6 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol
index c4a3752d9..def1c8903 100644
--- a/contracts/validator-manager/PoSValidatorManager.sol
+++ b/contracts/validator-manager/PoSValidatorManager.sol
@@ -57,7 +57,7 @@ abstract contract PoSValidatorManager is
uint256 _weightToValueFactor;
/// @notice The reward calculator for this validator manager.
IRewardCalculator _rewardCalculator;
- /// @notice The ID of the blockchain that submits uptime proofs. This must be a blockchain validated by the subnetID that this contract manages.
+ /// @notice The ID of the blockchain that submits uptime proofs. This must be a blockchain validated by the l1ID that this contract manages.
bytes32 _uptimeBlockchainID;
/// @notice Maps the validation ID to its requirements.
mapping(bytes32 validationID => PoSValidatorInfo) _posValidatorInfo;
diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol
index 841f7d362..3b5798887 100644
--- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol
+++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol
@@ -30,7 +30,7 @@ enum DelegatorStatus {
* @notice weightToValueFactor is the factor used to convert validator weight to value
* @notice rewardCalculator is the reward calculator used to calculate rewards for this validator manager
* @notice uptimeBlockchainID is the ID of the blockchain that submits uptime proofs.
- * This must be a blockchain validated by the subnetID that this contract manages.
+ * This must be a blockchain validated by the l1ID that this contract manages.
*/
struct PoSValidatorManagerSettings {
ValidatorManagerSettings baseSettings;
diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol
index 5e0304ea3..ebfc3eba7 100644
--- a/contracts/validator-manager/interfaces/IValidatorManager.sol
+++ b/contracts/validator-manager/interfaces/IValidatorManager.sol
@@ -51,7 +51,7 @@ struct ValidatorChurnPeriod {
/**
* @notice Validator Manager settings, used to initialize the Validator Manager
- * @notice The subnetID is the ID of the subnet that the Validator Manager is managing
+ * @notice The l1ID is the ID of the subnet that the Validator Manager is managing
* @notice The churnPeriodSeconds is the duration of the churn period in seconds
* @notice The maximumChurnPercentage is the maximum percentage of the total weight that can be added or removed in a single churn period
*/
diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
index f422a1398..0602df452 100644
--- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol
@@ -37,7 +37,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest {
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector));
app.initialize(
ValidatorManagerSettings({
- subnetID: DEFAULT_L1_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
index 2d9cc07b3..3bd61b966 100644
--- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
@@ -2453,7 +2453,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
function _defaultPoSSettings() internal pure returns (PoSValidatorManagerSettings memory) {
return PoSValidatorManagerSettings({
baseSettings: ValidatorManagerSettings({
- subnetID: DEFAULT_L1_ID,
+ l1ID: DEFAULT_L1_ID,
churnPeriodSeconds: DEFAULT_CHURN_PERIOD,
maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE
}),
diff --git a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
index fb9086fde..5e68f3837 100644
--- a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
+++ b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
@@ -78,7 +78,7 @@ contract ValidatorMessagesTest is Test {
);
ValidatorMessages.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
- subnetID: DEFAULT_L1_ID,
+ l1ID: DEFAULT_L1_ID,
nodeID: DEFAULT_NODE_ID,
registrationExpiry: DEFAULT_EXPIRY,
blsPublicKey: invalidBLSKey,
@@ -288,7 +288,7 @@ contract ValidatorMessagesTest is Test {
});
bytes memory packed = ValidatorMessages.packConversionData(
ConversionData({
- subnetID: DEFAULT_L1_ID,
+ l1ID: DEFAULT_L1_ID,
validatorManagerBlockchainID: DEFAULT_SUBNET_CONVERSION_ID,
validatorManagerAddress: DEFAULT_OWNER,
initialValidators: initialValidators
@@ -341,7 +341,7 @@ contract ValidatorMessagesTest is Test {
function _getPackedRegisterL1ValidatorMessage() internal returns (bytes memory) {
(, bytes memory packed) = ValidatorMessages.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
- subnetID: DEFAULT_L1_ID,
+ l1ID: DEFAULT_L1_ID,
nodeID: DEFAULT_NODE_ID,
registrationExpiry: DEFAULT_EXPIRY,
blsPublicKey: DEFAULT_BLS_PUBLIC_KEY,
From 557facd51d799d3c9f467024ce7825b03e6343ff Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Wed, 27 Nov 2024 17:11:46 -0500
Subject: [PATCH 12/15] Bindings
---
.../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 4 ++--
.../NativeTokenStakingManager/NativeTokenStakingManager.go | 4 ++--
.../PoAValidatorManager/PoAValidatorManager.go | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
index 550655dfc..a1d4dbd35 100644
--- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
+++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
@@ -104,7 +104,7 @@ type ValidatorRegistrationInput struct {
// ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract.
var ERC20TokenStakingManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b50604051615f7d380380615f7d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e308061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c80637d8d2f7711610140578063afb98096116100bf578063c974d1b611610084578063c974d1b614610532578063d5f20ff61461053a578063df93d8de1461055a578063e4a63c4014610564578063fb8b11dd14610578578063fd7ac5e71461058b575f80fd5b8063afb98096146104c3578063b771b3bc146104ea578063ba3a4b97146104f8578063bc5fbfec1461050b578063bee0a03f1461051f575f80fd5b80639ae06447116101055780639ae06447146104775780639e1bc4ef1461048a5780639e478eea1461049d578063a3a65e48146104b0578063a9778a7a146102f9575f80fd5b80637d8d2f771461042357806380dd672f146104365780638280a25a146104495780638ef34c981461045157806393e2459814610464575f80fd5b8063467ef06f116101cc578063620658561161019157806362065856146103b257806366435abf146103c5578063732214f8146103d857806376f78621146103df578063785e9e86146103f2575f80fd5b8063467ef06f1461033b5780634bee00401461034e5780635dd6a6cb1461036f57806360305d621461038257806360ad77841461039f575f80fd5b806325e1c7761161021257806325e1c776146102bb5780632e2194d8146102ce57806335455ded146102f957806337b9be8f146103155780633a1cfff614610328575f80fd5b80630118acc41461024e5780630322ed9814610263578063151d30d1146102765780631ec447241461029557806320d91b7a146102a8575b5f80fd5b61026161025c366004614d74565b61059e565b005b610261610271366004614daf565b6105af565b61027e600a81565b60405160ff90911681526020015b60405180910390f35b6102616102a3366004614d74565b61083f565b6102616102b6366004614dc6565b61084b565b6102616102c9366004614e14565b610e01565b6102e16102dc366004614daf565b610e75565b6040516001600160401b03909116815260200161028c565b61030261271081565b60405161ffff909116815260200161028c565b610261610323366004614e49565b610ec9565b610261610336366004614d74565b610edc565b610261610349366004614e97565b610ee8565b61036161035c366004614ed5565b610fba565b60405190815260200161028c565b61026161037d366004614e49565b610fef565b61038a601481565b60405163ffffffff909116815260200161028c565b6102616103ad366004614e14565b610ffb565b6103616103c0366004614f3c565b6112c3565b6102e16103d3366004614daf565b6112e3565b6103615f81565b6102616103ed366004614d74565b6112f7565b5f80516020615d7b833981519152546001600160a01b03165b6040516001600160a01b03909116815260200161028c565b610261610431366004614e49565b611303565b610261610444366004614e14565b61130f565b61027e603081565b61026161045f366004614f57565b611549565b610261610472366004614daf565b6115fa565b610261610485366004614e49565b61168e565b610361610498366004614f85565b61169a565b6102616104ab366004614fa5565b6116c6565b6102616104be366004614e97565b6117a5565b6103617f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040b6005600160991b0181565b610261610506366004614daf565b61199b565b6103615f80516020615d9b83398151915281565b61026161052d366004614daf565b611bf4565b61027e601481565b61054d610548366004614daf565b611d30565b60405161028c919061504d565b6102e16202a30081565b6103615f80516020615d7b83398151915281565b610261610586366004614f57565b611e7f565b6103616105993660046150cd565b611f16565b6105aa8383835f611f71565b505050565b5f8181525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff1660058111156105fc576105fc614fd8565b600581111561060d5761060d614fd8565b815260200160018201805461062190615138565b80601f016020809104026020016040519081016040528092919081815260200182805461064d90615138565b80156106985780601f1061066f57610100808354040283529160200191610698565b820191905f5260205f20905b81548152906001019060200180831161067b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561070357610703614fd8565b1461073f575f8381526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156107b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107dd9190810190615279565b6040518263ffffffff1660e01b81526004016107f991906152aa565b6020604051808303815f875af1158015610815573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083991906152bc565b50505050565b6108398383835f611f9d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615d9b8339815191529060ff161561089d57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090491906152bc565b83602001351461092d576040516372b0a7e760e11b815260208401356004820152602401610736565b3061093e60608501604086016152d3565b6001600160a01b0316146109815761095c60608401604085016152d3565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610736565b5f61098f60608501856152ee565b905090505f805b828163ffffffff161015610bf7575f6109b260608801886152ee565b8363ffffffff168181106109c8576109c8615333565b90506020028101906109da9190615347565b6109e3906153b2565b80516040519192505f9160068801916109fb9161542d565b90815260200160405180910390205414610a2b57805160405163a41f772f60e01b815261073691906004016152aa565b5f6002885f013584604051602001610a5a92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a749161542d565b602060405180830381855afa158015610a8f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ab291906152bc565b90508086600601835f0151604051610aca919061542d565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b0a9082615482565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b8a9085615551565b8251604051919550610b9b9161542d565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bf090615571565b9050610996565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c3a910460ff1683615593565b6001600160401b03161015610c6d57604051633e1a785160e01b81526001600160401b0382166004820152602401610736565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c91876122ca565b604001516040518263ffffffff1660e01b8152600401610cb191906152aa565b602060405180830381865af4158015610ccc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf091906152bc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d2a91906156e9565b5f60405180830381865af4158015610d44573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d6b9190810190615279565b90505f600282604051610d7e919061542d565b602060405180830381855afa158015610d99573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dbc91906152bc565b9050828114610de85760405163baaea89d60e01b81526004810182905260248101849052604401610736565b5050506007909201805460ff1916600117905550505050565b610e0a826123e0565b610e2a576040516330efa98b60e01b815260048101839052602401610736565b5f610e3483611d30565b5190506002816005811115610e4b57610e4b614fd8565b14610e6b578060405163170cc93360e21b81526004016107369190615170565b6108398383612409565b5f80610e7f6126a8565b60030154610e8d908461577d565b9050801580610ea257506001600160401b0381115b15610ec35760405163222d164360e21b815260048101849052602401610736565b92915050565b610ed584848484611f9d565b5050505050565b6108398383835f6126cc565b610ef0612909565b5f610ef96126a8565b90505f80610f0684612940565b91509150610f13826123e0565b610f1f57505050610fa1565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680610f615750805b600483516005811115610f7657610f76614fd8565b03610f8557610f858185612cf8565b610f9b82610f9685604001516112c3565b612d22565b50505050505b610fb760015f80516020615ddb83398151915255565b50565b5f610fc3612909565b610fcf85858585612d58565b9050610fe760015f80516020615ddb83398151915255565b949350505050565b61083984848484612ed8565b5f6110046126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561103d5761103d614fd8565b600381111561104e5761104e614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110c482611d30565b90506001835160038111156110db576110db614fd8565b146110fc578251604051633b0d540d60e21b8152610736919060040161579c565b60048151600581111561111157611111614fd8565b036111275761111f86612f04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61114c896122ca565b604001516040518263ffffffff1660e01b815260040161116c91906152aa565b606060405180830381865af4158015611187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab91906157b6565b50915091508184146111d857846040015160405163089938b360e11b815260040161073691815260200190565b806001600160401b031683606001516001600160401b031610806112115750806001600160401b03168560a001516001600160401b0316115b1561123a57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112cc6126a8565b60030154610ec3906001600160401b0384166157f6565b5f6112ed82611d30565b6080015192915050565b6105aa8383835f612ed8565b610ed5848484846126cc565b611317612909565b5f6113206126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561135957611359614fd8565b600381111561136a5761136a614fd8565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113e3576113e3614fd8565b14611404578051604051633b0d540d60e21b8152610736919060040161579c565b60046114138260400151611d30565b51600581111561142557611425614fd8565b14611524575f611434846122ca565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161147391906152aa565b606060405180830381865af415801561148e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b291906157b6565b5091509150818460400151146114de5760405163089938b360e11b815260048101839052602401610736565b806001600160401b03168460c001516001600160401b0316111561152057604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5050505b61152d84612f04565b505061154560015f80516020615ddb83398151915255565b5050565b5f6115526126a8565b90506001600160a01b0382166115865760405163caa903f960e01b81526001600160a01b0383166004820152602401610736565b5f8381526006820160205260409020546001600160a01b031633146115cc57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610736565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116036126a8565b90505f61160f83611d30565b519050600481600581111561162657611626614fd8565b14611646578060405163170cc93360e21b81526004016107369190615170565b5f8381526006830160205260409020546001600160a01b0316331461166b57336115a7565b5f8381526006830160205260409020546105aa906001600160a01b031684612cf8565b61083984848484611f71565b5f6116a3612909565b6116ae8333846130fe565b9050610ec360015f80516020615ddb83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061170f575080546001600160401b03808416911610155b1561172d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556117588484613343565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117d8866122ca565b604001516040518263ffffffff1660e01b81526004016117f891906152aa565b6040805180830381865af4158015611812573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611836919061580d565b915091508061185c57604051632d07135360e01b81528115156004820152602401610736565b5f8281526004840160205260409020805461187690615138565b90505f0361189a5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580860160205260409091205460ff16908111156118c1576118c1614fd8565b146118f4575f8281526005840160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f828152600484016020526040812061190c91614cc3565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119a46126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119dd576119dd614fd8565b60038111156119ee576119ee614fd8565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a6757611a67614fd8565b14158015611a885750600381516003811115611a8557611a85614fd8565b14155b15611aa9578051604051633b0d540d60e21b8152610736919060040161579c565b5f611ab78260400151611d30565b905080606001516001600160401b03165f03611ae9576040516339b894f960e21b815260048101859052602401610736565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b5793906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b71573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b989190810190615279565b6040518263ffffffff1660e01b8152600401611bb491906152aa565b6020604051808303815f875af1158015611bd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed591906152bc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615d9b8339815191529190611c3b90615138565b90505f03611c5f5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580840160205260409091205460ff1690811115611c8657611c86614fd8565b14611cb9575f8281526005820160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611cf09201615830565b6020604051808303815f875af1158015611d0c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105aa91906152bc565b611d38614cfa565b5f8281525f80516020615dbb833981519152602052604090819020815160e0810190925280545f80516020615d9b833981519152929190829060ff166005811115611d8557611d85614fd8565b6005811115611d9657611d96614fd8565b8152602001600182018054611daa90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd690615138565b8015611e215780601f10611df857610100808354040283529160200191611e21565b820191905f5260205f20905b815481529060010190602001808311611e0457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611eb15760405163caa903f960e01b81526001600160a01b0382166004820152602401610736565b5f611eba6126a8565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611ee857336115a7565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615d9b833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f5990869086906158ba565b90815260200160405180910390205491505092915050565b611f7d84848484611f9d565b61083957604051631036cf9160e11b815260048101859052602401610736565b5f80611fa76126a8565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fe057611fe0614fd8565b6003811115611ff157611ff1614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61206782611d30565b905060028351600381111561207e5761207e614fd8565b1461209f578251604051633b0d540d60e21b8152610736919060040161579c565b60208301516001600160a01b0316331461213b575f8281526006850160205260409020546001600160a01b031633146120d857336115a7565b5f82815260068501602052604090205460a082015161210791600160b01b90046001600160401b031690615551565b6001600160401b031642101561213b5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b60028151600581111561215057612150614fd8565b036122725760028401546080840151612172916001600160401b031690615551565b6001600160401b03164210156121a65760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b87156121b8576121b68288612409565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121f19184916121ec91906158c9565b61335d565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561223484888c613534565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fe79350505050565b60048151600581111561228757612287614fd8565b036122ae5761229783878b613534565b506122a189612f04565b6001945050505050610fe7565b805160405163170cc93360e21b81526107369190600401615170565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561232e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261235591908101906158e9565b915091508061237757604051636b2f19e960e01b815260040160405180910390fd5b81511561239d578151604051636ba589a560e01b81526004810191909152602401610736565b60208201516001600160a01b0316156123d9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5092915050565b5f806123ea6126a8565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261247b91908101906158e9565b915091508061249d57604051636b2f19e960e01b815260040160405180910390fd5b5f6124a66126a8565b60058101548451919250146124d4578251604051636ba589a560e01b81526004810191909152602401610736565b60208301516001600160a01b031615612510576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b60208301516001600160a01b03161561254c576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161258991906152aa565b6040805180830381865af41580156125a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c79190615979565b915091508188146125ee5760405163089938b360e11b815260048101899052602401610736565b5f8881526006840160205260409020600101546001600160401b03908116908216111561267f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261269d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126d66126a8565b90505f6126e287613722565b90506126ed876123e0565b6126fc57600192505050610fe7565b5f8781526006830160205260409020546001600160a01b0316331461272157336115a7565b5f87815260068301602052604090205460a082015161275091600160b01b90046001600160401b031690615551565b6001600160401b03168160c001516001600160401b031610156127975760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610736565b5f86156127af576127a88887612409565b90506127cd565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127f2906112c3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561285b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287f91906152bc565b90506001600160a01b0386166128ab575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906128ca90849061599c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615ddb83398151915280546001190161293a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612949614cfa565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61297c886122ca565b604001516040518263ffffffff1660e01b815260040161299c91906152aa565b6040805180830381865af41580156129b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129da919061580d565b915091508015612a0157604051632d07135360e01b81528115156004820152602401610736565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a3857612a38614fd8565b6005811115612a4957612a49614fd8565b8152602001600182018054612a5d90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8990615138565b8015612ad45780601f10612aab57610100808354040283529160200191612ad4565b820191905f5260205f20905b815481529060010190602001808311612ab757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b3f57612b3f614fd8565b14158015612b605750600181516005811115612b5d57612b5d614fd8565b14155b15612b8157805160405163170cc93360e21b81526107369190600401615170565b600381516005811115612b9657612b96614fd8565b03612ba45760048152612ba9565b600581525b836006018160200151604051612bbf919061542d565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612c0257612c02614fd8565b021790555060208201516001820190612c1b9082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc157612cc1614fd8565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d016126a8565b5f838152600a82016020526040812080549190559091506108398482613a07565b5f80516020615d7b83398151915254611545906001600160a01b03168383613a7d565b60015f80516020615ddb83398151915255565b5f80612d626126a8565b600281015490915061ffff600160401b90910481169086161080612d8b575061271061ffff8616115b15612daf57604051635f12e6c360e11b815261ffff86166004820152602401610736565b60028101546001600160401b039081169085161015612deb576040516202a06d60e11b81526001600160401b0385166004820152602401610736565b8054831080612dfd5750806001015483115b15612e1e5760405163222d164360e21b815260048101849052602401610736565b5f612e2884613adc565b90505f612e3482610e75565b90505f612e418983613aff565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612ee4848484846126cc565b61083957604051635bff683f60e11b815260048101859052602401610736565b5f612f0d6126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f4657612f46614fd8565b6003811115612f5757612f57614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ff47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130039190615551565b6001600160401b03164210156130375760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680613092575060208201515b5f8061309f838886614071565b915091506130b88560200151610f9687606001516112c3565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131086126a8565b90505f6131176102dc85613adc565b90505f61312387611d30565b905061312e876123e0565b61314e576040516330efa98b60e01b815260048101889052602401610736565b60028151600581111561316357613163614fd8565b1461318457805160405163170cc93360e21b81526107369190600401615170565b5f8282608001516131959190615551565b905083600201600a9054906101000a90046001600160401b031682604001516131be9190615593565b6001600160401b0316816001600160401b031611156131fb57604051636d51fe0560e11b81526001600160401b0382166004820152602401610736565b5f806132078a8461335d565b915091505f8a8360405160200161323592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61334b61411e565b61335482614169565b611545816141e3565b5f8281525f80516020615dbb833981519152602052604081206002015481905f80516020615d9b83398151915290600160801b90046001600160401b03166133a5858261424b565b5f6133af876144b5565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613458573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347f9190810190615279565b6040518263ffffffff1660e01b815260040161349b91906152aa565b6020604051808303815f875af11580156134b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134db91906152bc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353e6126a8565b90505f61354e8660400151611d30565b90505f60038251600581111561356657613566614fd8565b1480613584575060048251600581111561358257613582614fd8565b145b15613594575060c08101516135d1565b6002825160058111156135a9576135a9614fd8565b036135b55750426135d1565b815160405163170cc93360e21b81526107369190600401615170565b86608001516001600160401b0316816001600160401b0316116135f9575f935050505061333c565b600483015460608801515f916001600160a01b031690634f22429f9061361e906112c3565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c391906152bc565b90506001600160a01b0387166136db57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b61372a614cfa565b5f8281525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff16600581111561377757613777614fd8565b600581111561378857613788614fd8565b815260200160018201805461379c90615138565b80601f01602080910402602001604051908101604052809291908181526020018280546137c890615138565b80156138135780601f106137ea57610100808354040283529160200191613813565b820191905f5260205f20905b8154815290600101906020018083116137f657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561388157613881614fd8565b146138b4575f8481526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156138f9576138f9614fd8565b0217905550602082015160018201906139129082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139b0858261335d565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d7b83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a62575f80fd5b505af1158015613a74573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526105aa91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061452a565b5f610ec3825f80516020615d7b833981519152546001600160a01b03169061458b565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b4357604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d9b83398151915242613b626060860160408701614f3c565b6001600160401b0316111580613b9c5750613b806202a3004261599c565b613b906060860160408701614f3c565b6001600160401b031610155b15613bd657613bb16060850160408601614f3c565b604051635879da1360e11b81526001600160401b039091166004820152602401610736565b60038101546001600160401b0390613bf990600160401b9004821685831661599c565b1115613c2357604051633e1a785160e01b81526001600160401b0384166004820152602401610736565b613c38613c3360608601866159af565b614597565b613c48613c3360808601866159af565b6030613c5760208601866159c3565b905014613c8957613c6b60208501856159c3565b6040516326475b2f60e11b8152610736925060040190815260200190565b613c9384806159c3565b90505f03613cc057613ca584806159c3565b604051633e08a12560e11b8152600401610736929190615a05565b5f60068201613ccf86806159c3565b604051613cdd9291906158ba565b90815260200160405180910390205414613d1657613cfb84806159c3565b60405163a41f772f60e01b8152600401610736929190615a05565b613d20835f61424b565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d5d8a806159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613da5908b018b6159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dee60608b0160408c01614f3c565b6001600160401b03168152602001613e0960608b018b6159af565b613e1290615a18565b8152602001613e2460808b018b6159af565b613e2d90615a18565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e5b9190615b45565b5f60405180830381865af4158015613e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e9c9190810190615bfc565b5f82815260048601602052604090209193509150613eba8282615482565b508160068401613eca88806159c3565b604051613ed89291906158ba565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613f149085906004016152aa565b6020604051808303815f875af1158015613f30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f5491906152bc565b5f8481526005860160205260409020805460ff191660011790559050613f7a87806159c3565b5f858152600587016020526040902060010191613f98919083615c3f565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ff788806159c3565b6040516140059291906158ba565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906140439190614f3c565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61407c6126a8565b5f86815260088201602052604081208054908290559192509081908015614110575f878152600685016020526040902054612710906140c690600160a01b900461ffff16836157f6565b6140d0919061577d565b91508184600a015f8981526020019081526020015f205f8282546140f4919061599c565b9091555061410490508282615cf8565b92506141108984613a07565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661416757604051631afcd79f60e31b815260040160405180910390fd5b565b61417161411e565b61417a81614700565b614182614719565b610fb76060820135608083013561419f60c0850160a08601614f3c565b6141af60e0860160c08701615d0b565b6141c0610100870160e08801615d24565b6101008701356141d861014089016101208a016152d3565b886101400135614729565b6141eb61411e565b5f80516020615d7b8339815191526001600160a01b03821661422b57604051637330680360e01b81526001600160a01b0383166004820152602401610736565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d9b8339815191525f6001600160401b03808416908516111561427f5761427883856158c9565b905061428c565b61428984846158c9565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142f95750600184015481516142f5916001600160401b03169061599c565b8210155b15614321576001600160401b0380841660608301528282526040820151166020820152614340565b82816060018181516143339190615551565b6001600160401b03169052505b6060810151614350906064615593565b602082015160018601546001600160401b03929092169161437b9190600160401b900460ff16615593565b6001600160401b031610156143b457606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610736565b85816040018181516143c69190615551565b6001600160401b03169052506040810180518691906143e69083906158c9565b6001600160401b03169052506001840154604082015160649161441491600160401b90910460ff1690615593565b6001600160401b0316101561444d576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610736565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615dbb8339815191526020526040812060020180545f80516020615d9b83398151915291906008906144ff90600160401b90046001600160401b0316615d44565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61453e6001600160a01b0384168361490e565b905080515f141580156145625750808060200190518101906145609190615d5f565b155b156105aa57604051635274afe760e01b81526001600160a01b0384166004820152602401610736565b5f61333c83338461491b565b6145a46020820182614e97565b63ffffffff161580156145c457506145bf60208201826152ee565b151590505b1561460b576145d66020820182614e97565b6145e360208301836152ee565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610736565b61461860208201826152ee565b90506146276020830183614e97565b63ffffffff161115614640576145d66020820182614e97565b60015b61465060208301836152ee565b90508110156115455761466660208301836152ee565b614671600184615cf8565b81811061468057614680615333565b905060200201602081019061469591906152d3565b6001600160a01b03166146ab60208401846152ee565b838181106146bb576146bb615333565b90506020020160208101906146d091906152d3565b6001600160a01b031610156146f857604051630dbc8d5f60e31b815260040160405180910390fd5b600101614643565b61470861411e565b614710614a7e565b610fb781614a86565b61472161411e565b614167614b6e565b61473161411e565b5f61473a6126a8565b905061ffff86161580614752575061271061ffff8716115b1561477657604051635f12e6c360e11b815261ffff87166004820152602401610736565b8789111561479a5760405163222d164360e21b8152600481018a9052602401610736565b60ff851615806147ad5750600a60ff8616115b156147d05760405163170db35960e31b815260ff86166004820152602401610736565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614837576040516202a06d60e11b81526001600160401b0388166004820152602401610736565b835f036148575760405163a733007160e01b815260040160405180910390fd5b8161487857604051632f6bd1db60e01b815260048101839052602401610736565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333c83835f614b76565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614961573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061498591906152bc565b905061499c6001600160a01b038616853086614c05565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a0491906152bc565b9050818111614a6a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610736565b614a748282615cf8565b9695505050505050565b61416761411e565b614a8e61411e565b80355f80516020615d9b8339815191529081556014614ab36060840160408501615d24565b60ff161180614ad25750614acd6060830160408401615d24565b60ff16155b15614b0657614ae76060830160408401615d24565b604051634a59bbff60e11b815260ff9091166004820152602401610736565b614b166060830160408401615d24565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b476040830160208401614f3c565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d4561411e565b606081471015614b9b5760405163cd78605960e01b8152306004820152602401610736565b5f80856001600160a01b03168486604051614bb6919061542d565b5f6040518083038185875af1925050503d805f8114614bf0576040519150601f19603f3d011682016040523d82523d5f602084013e614bf5565b606091505b5091509150614a74868383614c3e565b6040516001600160a01b0384811660248301528381166044830152606482018390526108399186918216906323b872dd90608401613aaa565b606082614c5357614c4e82614c9a565b61333c565b8151158015614c6a57506001600160a01b0384163b155b15614c9357604051639996b31560e01b81526001600160a01b0385166004820152602401610736565b508061333c565b805115614caa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614ccf90615138565b5f825580601f10614cde575050565b601f0160209004905f5260205f2090810190610fb79190614d37565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d4b575f8155600101614d38565b5090565b8015158114610fb7575f80fd5b803563ffffffff81168114614d6f575f80fd5b919050565b5f805f60608486031215614d86575f80fd5b833592506020840135614d9881614d4f565b9150614da660408501614d5c565b90509250925092565b5f60208284031215614dbf575f80fd5b5035919050565b5f8060408385031215614dd7575f80fd5b82356001600160401b03811115614dec575f80fd5b830160808186031215614dfd575f80fd5b9150614e0b60208401614d5c565b90509250929050565b5f8060408385031215614e25575f80fd5b82359150614e0b60208401614d5c565b6001600160a01b0381168114610fb7575f80fd5b5f805f8060808587031215614e5c575f80fd5b843593506020850135614e6e81614d4f565b9250614e7c60408601614d5c565b91506060850135614e8c81614e35565b939692955090935050565b5f60208284031215614ea7575f80fd5b61333c82614d5c565b803561ffff81168114614d6f575f80fd5b6001600160401b0381168114610fb7575f80fd5b5f805f8060808587031215614ee8575f80fd5b84356001600160401b03811115614efd575f80fd5b850160a08188031215614f0e575f80fd5b9350614f1c60208601614eb0565b92506040850135614f2c81614ec1565b9396929550929360600135925050565b5f60208284031215614f4c575f80fd5b813561333c81614ec1565b5f8060408385031215614f68575f80fd5b823591506020830135614f7a81614e35565b809150509250929050565b5f8060408385031215614f96575f80fd5b50508035926020909101359150565b5f80828403610180811215614fb8575f80fd5b61016080821215614fc7575f80fd5b8493508301359050614f7a81614e35565b634e487b7160e01b5f52602160045260245ffd5b60068110614ffc57614ffc614fd8565b9052565b5f5b8381101561501a578181015183820152602001615002565b50505f910152565b5f8151808452615039816020860160208601615000565b601f01601f19169290920160200192915050565b6020815261505f602082018351614fec565b5f602083015160e0604084015261507a610100840182615022565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150de575f80fd5b82356001600160401b03808211156150f4575f80fd5b818501915085601f830112615107575f80fd5b813581811115615115575f80fd5b866020828501011115615126575f80fd5b60209290920196919550909350505050565b600181811c9082168061514c57607f821691505b60208210810361516a57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ec38284614fec565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151b4576151b461517e565b60405290565b604080519081016001600160401b03811182821017156151b4576151b461517e565b604051601f8201601f191681016001600160401b03811182821017156152045761520461517e565b604052919050565b5f6001600160401b038211156152245761522461517e565b50601f01601f191660200190565b5f82601f830112615241575f80fd5b815161525461524f8261520c565b6151dc565b818152846020838601011115615268575f80fd5b610fe7826020830160208701615000565b5f60208284031215615289575f80fd5b81516001600160401b0381111561529e575f80fd5b610fe784828501615232565b602081525f61333c6020830184615022565b5f602082840312156152cc575f80fd5b5051919050565b5f602082840312156152e3575f80fd5b813561333c81614e35565b5f808335601e19843603018112615303575f80fd5b8301803591506001600160401b0382111561531c575f80fd5b6020019150600581901b360382131561352d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261535b575f80fd5b9190910192915050565b5f82601f830112615374575f80fd5b813561538261524f8261520c565b818152846020838601011115615396575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153c2575f80fd5b6153ca615192565b82356001600160401b03808211156153e0575f80fd5b6153ec36838701615365565b83526020850135915080821115615401575f80fd5b5061540e36828601615365565b602083015250604083013561542281614ec1565b604082015292915050565b5f825161535b818460208701615000565b601f8211156105aa57805f5260205f20601f840160051c810160208510156154635750805b601f840160051c820191505b81811015610ed5575f815560010161546f565b81516001600160401b0381111561549b5761549b61517e565b6154af816154a98454615138565b8461543e565b602080601f8311600181146154e2575f84156154cb5750858301515b5f19600386901b1c1916600185901b17855561111f565b5f85815260208120601f198616915b82811015615510578886015182559484019460019091019084016154f1565b508582101561552d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156123d9576123d961553d565b5f63ffffffff8083168181036155895761558961553d565b6001019392505050565b6001600160401b038181168382160280821691908281146155b6576155b661553d565b505092915050565b5f808335601e198436030181126155d3575f80fd5b83016020810192503590506001600160401b038111156155f1575f80fd5b80360382131561352d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156dc57848303601f19018952813536889003605e19018112615663575f80fd5b8701606061567182806155be565b82875261568183880182846155ff565b92505050615691868301836155be565b868303888801526156a38382846155ff565b9250505060408083013592506156b883614ec1565b6001600160401b03929092169490910193909352978301979083019060010161563e565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561570d81614e35565b6001600160a01b031660608381019190915283013536849003601e19018112615734575f80fd5b83016020810190356001600160401b0381111561574f575f80fd5b8060051b3603821315615760575f80fd5b60808085015261577460a085018284615627565b95945050505050565b5f8261579757634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157b0576157b0614fd8565b91905290565b5f805f606084860312156157c8575f80fd5b8351925060208401516157da81614ec1565b60408501519092506157eb81614ec1565b809150509250925092565b8082028115828204841417610ec357610ec361553d565b5f806040838503121561581e575f80fd5b825191506020830151614f7a81614d4f565b5f60208083525f845461584281615138565b806020870152604060018084165f8114615863576001811461587f576158ac565b60ff19851660408a0152604084151560051b8a010195506158ac565b895f5260205f205f5b858110156158a35781548b8201860152908301908801615888565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156123d9576123d961553d565b5f80604083850312156158fa575f80fd5b82516001600160401b0380821115615910575f80fd5b9084019060608287031215615923575f80fd5b61592b615192565b82518152602083015161593d81614e35565b6020820152604083015182811115615953575f80fd5b61595f88828601615232565b6040830152508094505050506020830151614f7a81614d4f565b5f806040838503121561598a575f80fd5b825191506020830151614f7a81614ec1565b80820180821115610ec357610ec361553d565b5f8235603e1983360301811261535b575f80fd5b5f808335601e198436030181126159d8575f80fd5b8301803591506001600160401b038211156159f1575f80fd5b60200191503681900382131561352d575f80fd5b602081525f610fe76020830184866155ff565b5f60408236031215615a28575f80fd5b615a306151ba565b615a3983614d5c565b81526020808401356001600160401b0380821115615a55575f80fd5b9085019036601f830112615a67575f80fd5b813581811115615a7957615a7961517e565b8060051b9150615a8a8483016151dc565b8181529183018401918481019036841115615aa3575f80fd5b938501935b83851015615acd5784359250615abd83614e35565b8282529385019390850190615aa8565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b3a5784516001600160a01b03168252938301936001929092019190830190615b11565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b6b610100840182615022565b90506040840151601f1980858403016060860152615b898383615022565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bb98383615adf565b925060a08601519150808584030160c086015250615bd78282615adf565b91505060c0840151615bf460e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c0d575f80fd5b8251915060208301516001600160401b03811115615c29575f80fd5b615c3585828601615232565b9150509250929050565b6001600160401b03831115615c5657615c5661517e565b615c6a83615c648354615138565b8361543e565b5f601f841160018114615c9b575f8515615c845750838201355b5f19600387901b1c1916600186901b178355610ed5565b5f83815260208120601f198716915b82811015615cca5786850135825560209485019460019092019101615caa565b5086821015615ce6575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610ec357610ec361553d565b5f60208284031215615d1b575f80fd5b61333c82614eb0565b5f60208284031215615d34575f80fd5b813560ff8116811461333c575f80fd5b5f6001600160401b038083168181036155895761558961553d565b5f60208284031215615d6f575f80fd5b815161333c81614d4f56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220fafb3704210356d6f068b2621a4b7c5a5b40dcbb1963f3cd2fd2aedd85d49b9064736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b50604051615f7d380380615f7d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e308061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c80637d8d2f7711610140578063afb98096116100bf578063c974d1b611610084578063c974d1b614610532578063d5f20ff61461053a578063df93d8de1461055a578063e4a63c4014610564578063fb8b11dd14610578578063fd7ac5e71461058b575f80fd5b8063afb98096146104c3578063b771b3bc146104ea578063ba3a4b97146104f8578063bc5fbfec1461050b578063bee0a03f1461051f575f80fd5b80639ae06447116101055780639ae06447146104775780639e1bc4ef1461048a5780639e478eea1461049d578063a3a65e48146104b0578063a9778a7a146102f9575f80fd5b80637d8d2f771461042357806380dd672f146104365780638280a25a146104495780638ef34c981461045157806393e2459814610464575f80fd5b8063467ef06f116101cc578063620658561161019157806362065856146103b257806366435abf146103c5578063732214f8146103d857806376f78621146103df578063785e9e86146103f2575f80fd5b8063467ef06f1461033b5780634bee00401461034e5780635dd6a6cb1461036f57806360305d621461038257806360ad77841461039f575f80fd5b806325e1c7761161021257806325e1c776146102bb5780632e2194d8146102ce57806335455ded146102f957806337b9be8f146103155780633a1cfff614610328575f80fd5b80630118acc41461024e5780630322ed9814610263578063151d30d1146102765780631ec447241461029557806320d91b7a146102a8575b5f80fd5b61026161025c366004614d74565b61059e565b005b610261610271366004614daf565b6105af565b61027e600a81565b60405160ff90911681526020015b60405180910390f35b6102616102a3366004614d74565b61083f565b6102616102b6366004614dc6565b61084b565b6102616102c9366004614e14565b610e01565b6102e16102dc366004614daf565b610e75565b6040516001600160401b03909116815260200161028c565b61030261271081565b60405161ffff909116815260200161028c565b610261610323366004614e49565b610ec9565b610261610336366004614d74565b610edc565b610261610349366004614e97565b610ee8565b61036161035c366004614ed5565b610fba565b60405190815260200161028c565b61026161037d366004614e49565b610fef565b61038a601481565b60405163ffffffff909116815260200161028c565b6102616103ad366004614e14565b610ffb565b6103616103c0366004614f3c565b6112c3565b6102e16103d3366004614daf565b6112e3565b6103615f81565b6102616103ed366004614d74565b6112f7565b5f80516020615d7b833981519152546001600160a01b03165b6040516001600160a01b03909116815260200161028c565b610261610431366004614e49565b611303565b610261610444366004614e14565b61130f565b61027e603081565b61026161045f366004614f57565b611549565b610261610472366004614daf565b6115fa565b610261610485366004614e49565b61168e565b610361610498366004614f85565b61169a565b6102616104ab366004614fa5565b6116c6565b6102616104be366004614e97565b6117a5565b6103617f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040b6005600160991b0181565b610261610506366004614daf565b61199b565b6103615f80516020615d9b83398151915281565b61026161052d366004614daf565b611bf4565b61027e601481565b61054d610548366004614daf565b611d30565b60405161028c919061504d565b6102e16202a30081565b6103615f80516020615d7b83398151915281565b610261610586366004614f57565b611e7f565b6103616105993660046150cd565b611f16565b6105aa8383835f611f71565b505050565b5f8181525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff1660058111156105fc576105fc614fd8565b600581111561060d5761060d614fd8565b815260200160018201805461062190615138565b80601f016020809104026020016040519081016040528092919081815260200182805461064d90615138565b80156106985780601f1061066f57610100808354040283529160200191610698565b820191905f5260205f20905b81548152906001019060200180831161067b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561070357610703614fd8565b1461073f575f8381526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156107b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107dd9190810190615279565b6040518263ffffffff1660e01b81526004016107f991906152aa565b6020604051808303815f875af1158015610815573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083991906152bc565b50505050565b6108398383835f611f9d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615d9b8339815191529060ff161561089d57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090491906152bc565b83602001351461092d576040516372b0a7e760e11b815260208401356004820152602401610736565b3061093e60608501604086016152d3565b6001600160a01b0316146109815761095c60608401604085016152d3565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610736565b5f61098f60608501856152ee565b905090505f805b828163ffffffff161015610bf7575f6109b260608801886152ee565b8363ffffffff168181106109c8576109c8615333565b90506020028101906109da9190615347565b6109e3906153b2565b80516040519192505f9160068801916109fb9161542d565b90815260200160405180910390205414610a2b57805160405163a41f772f60e01b815261073691906004016152aa565b5f6002885f013584604051602001610a5a92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a749161542d565b602060405180830381855afa158015610a8f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ab291906152bc565b90508086600601835f0151604051610aca919061542d565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b0a9082615482565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b8a9085615551565b8251604051919550610b9b9161542d565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bf090615571565b9050610996565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c3a910460ff1683615593565b6001600160401b03161015610c6d57604051633e1a785160e01b81526001600160401b0382166004820152602401610736565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c91876122ca565b604001516040518263ffffffff1660e01b8152600401610cb191906152aa565b602060405180830381865af4158015610ccc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf091906152bc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d2a91906156e9565b5f60405180830381865af4158015610d44573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d6b9190810190615279565b90505f600282604051610d7e919061542d565b602060405180830381855afa158015610d99573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dbc91906152bc565b9050828114610de85760405163baaea89d60e01b81526004810182905260248101849052604401610736565b5050506007909201805460ff1916600117905550505050565b610e0a826123e0565b610e2a576040516330efa98b60e01b815260048101839052602401610736565b5f610e3483611d30565b5190506002816005811115610e4b57610e4b614fd8565b14610e6b578060405163170cc93360e21b81526004016107369190615170565b6108398383612409565b5f80610e7f6126a8565b60030154610e8d908461577d565b9050801580610ea257506001600160401b0381115b15610ec35760405163222d164360e21b815260048101849052602401610736565b92915050565b610ed584848484611f9d565b5050505050565b6108398383835f6126cc565b610ef0612909565b5f610ef96126a8565b90505f80610f0684612940565b91509150610f13826123e0565b610f1f57505050610fa1565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680610f615750805b600483516005811115610f7657610f76614fd8565b03610f8557610f858185612cf8565b610f9b82610f9685604001516112c3565b612d22565b50505050505b610fb760015f80516020615ddb83398151915255565b50565b5f610fc3612909565b610fcf85858585612d58565b9050610fe760015f80516020615ddb83398151915255565b949350505050565b61083984848484612ed8565b5f6110046126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561103d5761103d614fd8565b600381111561104e5761104e614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110c482611d30565b90506001835160038111156110db576110db614fd8565b146110fc578251604051633b0d540d60e21b8152610736919060040161579c565b60048151600581111561111157611111614fd8565b036111275761111f86612f04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61114c896122ca565b604001516040518263ffffffff1660e01b815260040161116c91906152aa565b606060405180830381865af4158015611187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab91906157b6565b50915091508184146111d857846040015160405163089938b360e11b815260040161073691815260200190565b806001600160401b031683606001516001600160401b031610806112115750806001600160401b03168560a001516001600160401b0316115b1561123a57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112cc6126a8565b60030154610ec3906001600160401b0384166157f6565b5f6112ed82611d30565b6080015192915050565b6105aa8383835f612ed8565b610ed5848484846126cc565b611317612909565b5f6113206126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561135957611359614fd8565b600381111561136a5761136a614fd8565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113e3576113e3614fd8565b14611404578051604051633b0d540d60e21b8152610736919060040161579c565b60046114138260400151611d30565b51600581111561142557611425614fd8565b14611524575f611434846122ca565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161147391906152aa565b606060405180830381865af415801561148e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b291906157b6565b5091509150818460400151146114de5760405163089938b360e11b815260048101839052602401610736565b806001600160401b03168460c001516001600160401b0316111561152057604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5050505b61152d84612f04565b505061154560015f80516020615ddb83398151915255565b5050565b5f6115526126a8565b90506001600160a01b0382166115865760405163caa903f960e01b81526001600160a01b0383166004820152602401610736565b5f8381526006820160205260409020546001600160a01b031633146115cc57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610736565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116036126a8565b90505f61160f83611d30565b519050600481600581111561162657611626614fd8565b14611646578060405163170cc93360e21b81526004016107369190615170565b5f8381526006830160205260409020546001600160a01b0316331461166b57336115a7565b5f8381526006830160205260409020546105aa906001600160a01b031684612cf8565b61083984848484611f71565b5f6116a3612909565b6116ae8333846130fe565b9050610ec360015f80516020615ddb83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061170f575080546001600160401b03808416911610155b1561172d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556117588484613343565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117d8866122ca565b604001516040518263ffffffff1660e01b81526004016117f891906152aa565b6040805180830381865af4158015611812573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611836919061580d565b915091508061185c57604051632d07135360e01b81528115156004820152602401610736565b5f8281526004840160205260409020805461187690615138565b90505f0361189a5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580860160205260409091205460ff16908111156118c1576118c1614fd8565b146118f4575f8281526005840160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f828152600484016020526040812061190c91614cc3565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119a46126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119dd576119dd614fd8565b60038111156119ee576119ee614fd8565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a6757611a67614fd8565b14158015611a885750600381516003811115611a8557611a85614fd8565b14155b15611aa9578051604051633b0d540d60e21b8152610736919060040161579c565b5f611ab78260400151611d30565b905080606001516001600160401b03165f03611ae9576040516339b894f960e21b815260048101859052602401610736565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b5793906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b71573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b989190810190615279565b6040518263ffffffff1660e01b8152600401611bb491906152aa565b6020604051808303815f875af1158015611bd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed591906152bc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615d9b8339815191529190611c3b90615138565b90505f03611c5f5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580840160205260409091205460ff1690811115611c8657611c86614fd8565b14611cb9575f8281526005820160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611cf09201615830565b6020604051808303815f875af1158015611d0c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105aa91906152bc565b611d38614cfa565b5f8281525f80516020615dbb833981519152602052604090819020815160e0810190925280545f80516020615d9b833981519152929190829060ff166005811115611d8557611d85614fd8565b6005811115611d9657611d96614fd8565b8152602001600182018054611daa90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd690615138565b8015611e215780601f10611df857610100808354040283529160200191611e21565b820191905f5260205f20905b815481529060010190602001808311611e0457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611eb15760405163caa903f960e01b81526001600160a01b0382166004820152602401610736565b5f611eba6126a8565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611ee857336115a7565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615d9b833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f5990869086906158ba565b90815260200160405180910390205491505092915050565b611f7d84848484611f9d565b61083957604051631036cf9160e11b815260048101859052602401610736565b5f80611fa76126a8565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fe057611fe0614fd8565b6003811115611ff157611ff1614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61206782611d30565b905060028351600381111561207e5761207e614fd8565b1461209f578251604051633b0d540d60e21b8152610736919060040161579c565b60208301516001600160a01b0316331461213b575f8281526006850160205260409020546001600160a01b031633146120d857336115a7565b5f82815260068501602052604090205460a082015161210791600160b01b90046001600160401b031690615551565b6001600160401b031642101561213b5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b60028151600581111561215057612150614fd8565b036122725760028401546080840151612172916001600160401b031690615551565b6001600160401b03164210156121a65760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b87156121b8576121b68288612409565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121f19184916121ec91906158c9565b61335d565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561223484888c613534565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fe79350505050565b60048151600581111561228757612287614fd8565b036122ae5761229783878b613534565b506122a189612f04565b6001945050505050610fe7565b805160405163170cc93360e21b81526107369190600401615170565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561232e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261235591908101906158e9565b915091508061237757604051636b2f19e960e01b815260040160405180910390fd5b81511561239d578151604051636ba589a560e01b81526004810191909152602401610736565b60208201516001600160a01b0316156123d9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5092915050565b5f806123ea6126a8565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261247b91908101906158e9565b915091508061249d57604051636b2f19e960e01b815260040160405180910390fd5b5f6124a66126a8565b60058101548451919250146124d4578251604051636ba589a560e01b81526004810191909152602401610736565b60208301516001600160a01b031615612510576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b60208301516001600160a01b03161561254c576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161258991906152aa565b6040805180830381865af41580156125a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c79190615979565b915091508188146125ee5760405163089938b360e11b815260048101899052602401610736565b5f8881526006840160205260409020600101546001600160401b03908116908216111561267f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261269d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126d66126a8565b90505f6126e287613722565b90506126ed876123e0565b6126fc57600192505050610fe7565b5f8781526006830160205260409020546001600160a01b0316331461272157336115a7565b5f87815260068301602052604090205460a082015161275091600160b01b90046001600160401b031690615551565b6001600160401b03168160c001516001600160401b031610156127975760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610736565b5f86156127af576127a88887612409565b90506127cd565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127f2906112c3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561285b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287f91906152bc565b90506001600160a01b0386166128ab575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906128ca90849061599c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615ddb83398151915280546001190161293a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612949614cfa565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61297c886122ca565b604001516040518263ffffffff1660e01b815260040161299c91906152aa565b6040805180830381865af41580156129b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129da919061580d565b915091508015612a0157604051632d07135360e01b81528115156004820152602401610736565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a3857612a38614fd8565b6005811115612a4957612a49614fd8565b8152602001600182018054612a5d90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8990615138565b8015612ad45780601f10612aab57610100808354040283529160200191612ad4565b820191905f5260205f20905b815481529060010190602001808311612ab757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b3f57612b3f614fd8565b14158015612b605750600181516005811115612b5d57612b5d614fd8565b14155b15612b8157805160405163170cc93360e21b81526107369190600401615170565b600381516005811115612b9657612b96614fd8565b03612ba45760048152612ba9565b600581525b836006018160200151604051612bbf919061542d565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612c0257612c02614fd8565b021790555060208201516001820190612c1b9082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc157612cc1614fd8565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d016126a8565b5f838152600a82016020526040812080549190559091506108398482613a07565b5f80516020615d7b83398151915254611545906001600160a01b03168383613a7d565b60015f80516020615ddb83398151915255565b5f80612d626126a8565b600281015490915061ffff600160401b90910481169086161080612d8b575061271061ffff8616115b15612daf57604051635f12e6c360e11b815261ffff86166004820152602401610736565b60028101546001600160401b039081169085161015612deb576040516202a06d60e11b81526001600160401b0385166004820152602401610736565b8054831080612dfd5750806001015483115b15612e1e5760405163222d164360e21b815260048101849052602401610736565b5f612e2884613adc565b90505f612e3482610e75565b90505f612e418983613aff565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612ee4848484846126cc565b61083957604051635bff683f60e11b815260048101859052602401610736565b5f612f0d6126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f4657612f46614fd8565b6003811115612f5757612f57614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ff47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130039190615551565b6001600160401b03164210156130375760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680613092575060208201515b5f8061309f838886614071565b915091506130b88560200151610f9687606001516112c3565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131086126a8565b90505f6131176102dc85613adc565b90505f61312387611d30565b905061312e876123e0565b61314e576040516330efa98b60e01b815260048101889052602401610736565b60028151600581111561316357613163614fd8565b1461318457805160405163170cc93360e21b81526107369190600401615170565b5f8282608001516131959190615551565b905083600201600a9054906101000a90046001600160401b031682604001516131be9190615593565b6001600160401b0316816001600160401b031611156131fb57604051636d51fe0560e11b81526001600160401b0382166004820152602401610736565b5f806132078a8461335d565b915091505f8a8360405160200161323592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61334b61411e565b61335482614169565b611545816141e3565b5f8281525f80516020615dbb833981519152602052604081206002015481905f80516020615d9b83398151915290600160801b90046001600160401b03166133a5858261424b565b5f6133af876144b5565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613458573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347f9190810190615279565b6040518263ffffffff1660e01b815260040161349b91906152aa565b6020604051808303815f875af11580156134b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134db91906152bc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353e6126a8565b90505f61354e8660400151611d30565b90505f60038251600581111561356657613566614fd8565b1480613584575060048251600581111561358257613582614fd8565b145b15613594575060c08101516135d1565b6002825160058111156135a9576135a9614fd8565b036135b55750426135d1565b815160405163170cc93360e21b81526107369190600401615170565b86608001516001600160401b0316816001600160401b0316116135f9575f935050505061333c565b600483015460608801515f916001600160a01b031690634f22429f9061361e906112c3565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c391906152bc565b90506001600160a01b0387166136db57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b61372a614cfa565b5f8281525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff16600581111561377757613777614fd8565b600581111561378857613788614fd8565b815260200160018201805461379c90615138565b80601f01602080910402602001604051908101604052809291908181526020018280546137c890615138565b80156138135780601f106137ea57610100808354040283529160200191613813565b820191905f5260205f20905b8154815290600101906020018083116137f657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561388157613881614fd8565b146138b4575f8481526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156138f9576138f9614fd8565b0217905550602082015160018201906139129082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139b0858261335d565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d7b83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a62575f80fd5b505af1158015613a74573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526105aa91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061452a565b5f610ec3825f80516020615d7b833981519152546001600160a01b03169061458b565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b4357604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d9b83398151915242613b626060860160408701614f3c565b6001600160401b0316111580613b9c5750613b806202a3004261599c565b613b906060860160408701614f3c565b6001600160401b031610155b15613bd657613bb16060850160408601614f3c565b604051635879da1360e11b81526001600160401b039091166004820152602401610736565b60038101546001600160401b0390613bf990600160401b9004821685831661599c565b1115613c2357604051633e1a785160e01b81526001600160401b0384166004820152602401610736565b613c38613c3360608601866159af565b614597565b613c48613c3360808601866159af565b6030613c5760208601866159c3565b905014613c8957613c6b60208501856159c3565b6040516326475b2f60e11b8152610736925060040190815260200190565b613c9384806159c3565b90505f03613cc057613ca584806159c3565b604051633e08a12560e11b8152600401610736929190615a05565b5f60068201613ccf86806159c3565b604051613cdd9291906158ba565b90815260200160405180910390205414613d1657613cfb84806159c3565b60405163a41f772f60e01b8152600401610736929190615a05565b613d20835f61424b565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d5d8a806159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613da5908b018b6159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dee60608b0160408c01614f3c565b6001600160401b03168152602001613e0960608b018b6159af565b613e1290615a18565b8152602001613e2460808b018b6159af565b613e2d90615a18565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e5b9190615b45565b5f60405180830381865af4158015613e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e9c9190810190615bfc565b5f82815260048601602052604090209193509150613eba8282615482565b508160068401613eca88806159c3565b604051613ed89291906158ba565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613f149085906004016152aa565b6020604051808303815f875af1158015613f30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f5491906152bc565b5f8481526005860160205260409020805460ff191660011790559050613f7a87806159c3565b5f858152600587016020526040902060010191613f98919083615c3f565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ff788806159c3565b6040516140059291906158ba565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906140439190614f3c565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61407c6126a8565b5f86815260088201602052604081208054908290559192509081908015614110575f878152600685016020526040902054612710906140c690600160a01b900461ffff16836157f6565b6140d0919061577d565b91508184600a015f8981526020019081526020015f205f8282546140f4919061599c565b9091555061410490508282615cf8565b92506141108984613a07565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661416757604051631afcd79f60e31b815260040160405180910390fd5b565b61417161411e565b61417a81614700565b614182614719565b610fb76060820135608083013561419f60c0850160a08601614f3c565b6141af60e0860160c08701615d0b565b6141c0610100870160e08801615d24565b6101008701356141d861014089016101208a016152d3565b886101400135614729565b6141eb61411e565b5f80516020615d7b8339815191526001600160a01b03821661422b57604051637330680360e01b81526001600160a01b0383166004820152602401610736565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d9b8339815191525f6001600160401b03808416908516111561427f5761427883856158c9565b905061428c565b61428984846158c9565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142f95750600184015481516142f5916001600160401b03169061599c565b8210155b15614321576001600160401b0380841660608301528282526040820151166020820152614340565b82816060018181516143339190615551565b6001600160401b03169052505b6060810151614350906064615593565b602082015160018601546001600160401b03929092169161437b9190600160401b900460ff16615593565b6001600160401b031610156143b457606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610736565b85816040018181516143c69190615551565b6001600160401b03169052506040810180518691906143e69083906158c9565b6001600160401b03169052506001840154604082015160649161441491600160401b90910460ff1690615593565b6001600160401b0316101561444d576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610736565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615dbb8339815191526020526040812060020180545f80516020615d9b83398151915291906008906144ff90600160401b90046001600160401b0316615d44565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61453e6001600160a01b0384168361490e565b905080515f141580156145625750808060200190518101906145609190615d5f565b155b156105aa57604051635274afe760e01b81526001600160a01b0384166004820152602401610736565b5f61333c83338461491b565b6145a46020820182614e97565b63ffffffff161580156145c457506145bf60208201826152ee565b151590505b1561460b576145d66020820182614e97565b6145e360208301836152ee565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610736565b61461860208201826152ee565b90506146276020830183614e97565b63ffffffff161115614640576145d66020820182614e97565b60015b61465060208301836152ee565b90508110156115455761466660208301836152ee565b614671600184615cf8565b81811061468057614680615333565b905060200201602081019061469591906152d3565b6001600160a01b03166146ab60208401846152ee565b838181106146bb576146bb615333565b90506020020160208101906146d091906152d3565b6001600160a01b031610156146f857604051630dbc8d5f60e31b815260040160405180910390fd5b600101614643565b61470861411e565b614710614a7e565b610fb781614a86565b61472161411e565b614167614b6e565b61473161411e565b5f61473a6126a8565b905061ffff86161580614752575061271061ffff8716115b1561477657604051635f12e6c360e11b815261ffff87166004820152602401610736565b8789111561479a5760405163222d164360e21b8152600481018a9052602401610736565b60ff851615806147ad5750600a60ff8616115b156147d05760405163170db35960e31b815260ff86166004820152602401610736565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614837576040516202a06d60e11b81526001600160401b0388166004820152602401610736565b835f036148575760405163a733007160e01b815260040160405180910390fd5b8161487857604051632f6bd1db60e01b815260048101839052602401610736565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333c83835f614b76565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614961573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061498591906152bc565b905061499c6001600160a01b038616853086614c05565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a0491906152bc565b9050818111614a6a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610736565b614a748282615cf8565b9695505050505050565b61416761411e565b614a8e61411e565b80355f80516020615d9b8339815191529081556014614ab36060840160408501615d24565b60ff161180614ad25750614acd6060830160408401615d24565b60ff16155b15614b0657614ae76060830160408401615d24565b604051634a59bbff60e11b815260ff9091166004820152602401610736565b614b166060830160408401615d24565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b476040830160208401614f3c565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d4561411e565b606081471015614b9b5760405163cd78605960e01b8152306004820152602401610736565b5f80856001600160a01b03168486604051614bb6919061542d565b5f6040518083038185875af1925050503d805f8114614bf0576040519150601f19603f3d011682016040523d82523d5f602084013e614bf5565b606091505b5091509150614a74868383614c3e565b6040516001600160a01b0384811660248301528381166044830152606482018390526108399186918216906323b872dd90608401613aaa565b606082614c5357614c4e82614c9a565b61333c565b8151158015614c6a57506001600160a01b0384163b155b15614c9357604051639996b31560e01b81526001600160a01b0385166004820152602401610736565b508061333c565b805115614caa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614ccf90615138565b5f825580601f10614cde575050565b601f0160209004905f5260205f2090810190610fb79190614d37565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d4b575f8155600101614d38565b5090565b8015158114610fb7575f80fd5b803563ffffffff81168114614d6f575f80fd5b919050565b5f805f60608486031215614d86575f80fd5b833592506020840135614d9881614d4f565b9150614da660408501614d5c565b90509250925092565b5f60208284031215614dbf575f80fd5b5035919050565b5f8060408385031215614dd7575f80fd5b82356001600160401b03811115614dec575f80fd5b830160808186031215614dfd575f80fd5b9150614e0b60208401614d5c565b90509250929050565b5f8060408385031215614e25575f80fd5b82359150614e0b60208401614d5c565b6001600160a01b0381168114610fb7575f80fd5b5f805f8060808587031215614e5c575f80fd5b843593506020850135614e6e81614d4f565b9250614e7c60408601614d5c565b91506060850135614e8c81614e35565b939692955090935050565b5f60208284031215614ea7575f80fd5b61333c82614d5c565b803561ffff81168114614d6f575f80fd5b6001600160401b0381168114610fb7575f80fd5b5f805f8060808587031215614ee8575f80fd5b84356001600160401b03811115614efd575f80fd5b850160a08188031215614f0e575f80fd5b9350614f1c60208601614eb0565b92506040850135614f2c81614ec1565b9396929550929360600135925050565b5f60208284031215614f4c575f80fd5b813561333c81614ec1565b5f8060408385031215614f68575f80fd5b823591506020830135614f7a81614e35565b809150509250929050565b5f8060408385031215614f96575f80fd5b50508035926020909101359150565b5f80828403610180811215614fb8575f80fd5b61016080821215614fc7575f80fd5b8493508301359050614f7a81614e35565b634e487b7160e01b5f52602160045260245ffd5b60068110614ffc57614ffc614fd8565b9052565b5f5b8381101561501a578181015183820152602001615002565b50505f910152565b5f8151808452615039816020860160208601615000565b601f01601f19169290920160200192915050565b6020815261505f602082018351614fec565b5f602083015160e0604084015261507a610100840182615022565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150de575f80fd5b82356001600160401b03808211156150f4575f80fd5b818501915085601f830112615107575f80fd5b813581811115615115575f80fd5b866020828501011115615126575f80fd5b60209290920196919550909350505050565b600181811c9082168061514c57607f821691505b60208210810361516a57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ec38284614fec565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151b4576151b461517e565b60405290565b604080519081016001600160401b03811182821017156151b4576151b461517e565b604051601f8201601f191681016001600160401b03811182821017156152045761520461517e565b604052919050565b5f6001600160401b038211156152245761522461517e565b50601f01601f191660200190565b5f82601f830112615241575f80fd5b815161525461524f8261520c565b6151dc565b818152846020838601011115615268575f80fd5b610fe7826020830160208701615000565b5f60208284031215615289575f80fd5b81516001600160401b0381111561529e575f80fd5b610fe784828501615232565b602081525f61333c6020830184615022565b5f602082840312156152cc575f80fd5b5051919050565b5f602082840312156152e3575f80fd5b813561333c81614e35565b5f808335601e19843603018112615303575f80fd5b8301803591506001600160401b0382111561531c575f80fd5b6020019150600581901b360382131561352d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261535b575f80fd5b9190910192915050565b5f82601f830112615374575f80fd5b813561538261524f8261520c565b818152846020838601011115615396575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153c2575f80fd5b6153ca615192565b82356001600160401b03808211156153e0575f80fd5b6153ec36838701615365565b83526020850135915080821115615401575f80fd5b5061540e36828601615365565b602083015250604083013561542281614ec1565b604082015292915050565b5f825161535b818460208701615000565b601f8211156105aa57805f5260205f20601f840160051c810160208510156154635750805b601f840160051c820191505b81811015610ed5575f815560010161546f565b81516001600160401b0381111561549b5761549b61517e565b6154af816154a98454615138565b8461543e565b602080601f8311600181146154e2575f84156154cb5750858301515b5f19600386901b1c1916600185901b17855561111f565b5f85815260208120601f198616915b82811015615510578886015182559484019460019091019084016154f1565b508582101561552d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156123d9576123d961553d565b5f63ffffffff8083168181036155895761558961553d565b6001019392505050565b6001600160401b038181168382160280821691908281146155b6576155b661553d565b505092915050565b5f808335601e198436030181126155d3575f80fd5b83016020810192503590506001600160401b038111156155f1575f80fd5b80360382131561352d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156dc57848303601f19018952813536889003605e19018112615663575f80fd5b8701606061567182806155be565b82875261568183880182846155ff565b92505050615691868301836155be565b868303888801526156a38382846155ff565b9250505060408083013592506156b883614ec1565b6001600160401b03929092169490910193909352978301979083019060010161563e565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561570d81614e35565b6001600160a01b031660608381019190915283013536849003601e19018112615734575f80fd5b83016020810190356001600160401b0381111561574f575f80fd5b8060051b3603821315615760575f80fd5b60808085015261577460a085018284615627565b95945050505050565b5f8261579757634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157b0576157b0614fd8565b91905290565b5f805f606084860312156157c8575f80fd5b8351925060208401516157da81614ec1565b60408501519092506157eb81614ec1565b809150509250925092565b8082028115828204841417610ec357610ec361553d565b5f806040838503121561581e575f80fd5b825191506020830151614f7a81614d4f565b5f60208083525f845461584281615138565b806020870152604060018084165f8114615863576001811461587f576158ac565b60ff19851660408a0152604084151560051b8a010195506158ac565b895f5260205f205f5b858110156158a35781548b8201860152908301908801615888565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156123d9576123d961553d565b5f80604083850312156158fa575f80fd5b82516001600160401b0380821115615910575f80fd5b9084019060608287031215615923575f80fd5b61592b615192565b82518152602083015161593d81614e35565b6020820152604083015182811115615953575f80fd5b61595f88828601615232565b6040830152508094505050506020830151614f7a81614d4f565b5f806040838503121561598a575f80fd5b825191506020830151614f7a81614ec1565b80820180821115610ec357610ec361553d565b5f8235603e1983360301811261535b575f80fd5b5f808335601e198436030181126159d8575f80fd5b8301803591506001600160401b038211156159f1575f80fd5b60200191503681900382131561352d575f80fd5b602081525f610fe76020830184866155ff565b5f60408236031215615a28575f80fd5b615a306151ba565b615a3983614d5c565b81526020808401356001600160401b0380821115615a55575f80fd5b9085019036601f830112615a67575f80fd5b813581811115615a7957615a7961517e565b8060051b9150615a8a8483016151dc565b8181529183018401918481019036841115615aa3575f80fd5b938501935b83851015615acd5784359250615abd83614e35565b8282529385019390850190615aa8565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b3a5784516001600160a01b03168252938301936001929092019190830190615b11565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b6b610100840182615022565b90506040840151601f1980858403016060860152615b898383615022565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bb98383615adf565b925060a08601519150808584030160c086015250615bd78282615adf565b91505060c0840151615bf460e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c0d575f80fd5b8251915060208301516001600160401b03811115615c29575f80fd5b615c3585828601615232565b9150509250929050565b6001600160401b03831115615c5657615c5661517e565b615c6a83615c648354615138565b8361543e565b5f601f841160018114615c9b575f8515615c845750838201355b5f19600387901b1c1916600186901b178355610ed5565b5f83815260208120601f198716915b82811015615cca5786850135825560209485019460019092019101615caa565b5086821015615ce6575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610ec357610ec361553d565b5f60208284031215615d1b575f80fd5b61333c82614eb0565b5f60208284031215615d34575f80fd5b813560ff8116811461333c575f80fd5b5f6001600160401b038083168181036155895761558961553d565b5f60208284031215615d6f575f80fd5b815161333c81614d4f56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122045954a3743f9584a3a2a9b1768f7e8a73a0cba93344e5b8900598063c7b8bcec64736f6c63430008190033",
}
// ERC20TokenStakingManagerABI is the input ABI used to generate the binding from.
@@ -3155,7 +3155,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidato
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220c86fc0fb87c524ec5b0c98159450f3ea9dc01af042aec5aff977246d615450e664736f6c63430008190033",
+ Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212204be60cc6edf9cbf66de0cf61ac7b9875c2e34000fdb727695f40b759d3220af564736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
index 89a61293e..43a655dec 100644
--- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
+++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
@@ -104,7 +104,7 @@ type ValidatorRegistrationInput struct {
// NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract.
var NativeTokenStakingManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b50604051615cb8380380615cb883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b6b8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b3d565b610724565b005b348015610263575f80fd5b50610256610272366004614b78565b610735565b348015610282575f80fd5b50610256610291366004614b8f565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b3d565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614ba6565b610aae565b34801561030a575f80fd5b50610256610319366004614bf4565b611064565b348015610329575f80fd5b5061033d610338366004614b78565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c29565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b3d565b61113f565b3480156103f8575f80fd5b50610256610407366004614c77565b61114b565b348015610417575f80fd5b50610256610426366004614c29565b61121d565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bf4565b611229565b34801561047e575f80fd5b5061049261048d366004614ca4565b6114f1565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b78565b611511565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b3d565b611525565b3480156104fc575f80fd5b5061025661050b366004614c29565b611531565b34801561051b575f80fd5b5061025661052a366004614bf4565b61153d565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614cbf565b611777565b34801561056d575f80fd5b5061025661057c366004614b78565b611828565b34801561058c575f80fd5b5061025661059b366004614c29565b6118bc565b3480156105ab575f80fd5b506102566105ba366004614c77565b6118c8565b6104926105cd366004614cfe565b611abe565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b78565b611af2565b348015610649575f80fd5b506104925f80516020615ad683398151915281565b348015610669575f80fd5b50610256610678366004614b78565b611d4b565b61049261068b366004614b78565b611e87565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b78565b611eb8565b6040516102b89190614dd4565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614cbf565b612007565b348015610710575f80fd5b5061049261071f366004614e54565b61209e565b6107308383835f6120f9565b505050565b5f8181525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff16600581111561078257610782614d5f565b600581111561079357610793614d5f565b81526020016001820180546107a790614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614ebf565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d5f565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614ffa565b6040518263ffffffff1660e01b815260040161097f919061502b565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf919061503d565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612125565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f612136565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615ad68339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b67919061503d565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615054565b6001600160a01b031614610be457610bbf6060840160408501615054565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561506f565b905090505f805b828163ffffffff161015610e5a575f610c15606088018861506f565b8363ffffffff16818110610c2b57610c2b6150b4565b9050602002810190610c3d91906150c8565b610c4690615133565b80516040519192505f916006880191610c5e916151ae565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc919060040161502b565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd7916151ae565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d15919061503d565b90508086600601835f0151604051610d2d91906151ae565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d9082615203565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded90856152d2565b8251604051919550610dfe916151ae565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e53906152f2565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff1683615314565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef48761246b565b604001516040518263ffffffff1660e01b8152600401610f14919061502b565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f53919061503d565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d919061546a565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190614ffa565b90505f600282604051610fe191906151ae565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f919061503d565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d82612581565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611eb8565b51905060028160058111156110ae576110ae614d5f565b146110ce578060405163170cc93360e21b81526004016108bc9190614ef1565b6109bf83836125aa565b5f806110e2612849565b600301546110f090846154fe565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b61113884848484612136565b5050505050565b6109bf8383835f61286d565b611153612aaa565b5f61115c612849565b90505f8061116984612ae1565b9150915061117682612581565b61118257505050611204565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806111c45750805b6004835160058111156111d9576111d9614d5f565b036111e8576111e88185612e99565b6111fe826111f985604001516114f1565b612ec3565b50505050505b61121a60015f80516020615b1683398151915255565b50565b6109bf84848484612ee9565b5f611232612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126b5761126b614d5f565b600381111561127c5761127c614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112f282611eb8565b905060018351600381111561130957611309614d5f565b1461132a578251604051633b0d540d60e21b81526108bc919060040161551d565b60048151600581111561133f5761133f614d5f565b036113555761134d86612f15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61137a8961246b565b604001516040518263ffffffff1660e01b815260040161139a919061502b565b606060405180830381865af41580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d99190615537565b509150915081841461140657846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b0316108061143f5750806001600160401b03168560a001516001600160401b0316115b1561146857604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114fa612849565b60030154611126906001600160401b03841661556c565b5f61151b82611eb8565b6080015192915050565b6107308383835f612ee9565b6111388484848461286d565b611545612aaa565b5f61154e612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561158757611587614d5f565b600381111561159857611598614d5f565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561161157611611614d5f565b14611632578051604051633b0d540d60e21b81526108bc919060040161551d565b60046116418260400151611eb8565b51600581111561165357611653614d5f565b14611752575f6116628461246b565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116a1919061502b565b606060405180830381865af41580156116bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e09190615537565b50915091508184604001511461170c5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561174e57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61175b84612f15565b505061177360015f80516020615b1683398151915255565b5050565b5f611780612849565b90506001600160a01b0382166117b45760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117fa57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f611831612849565b90505f61183d83611eb8565b519050600481600581111561185457611854614d5f565b14611874578060405163170cc93360e21b81526004016108bc9190614ef1565b5f8381526006830160205260409020546001600160a01b0316331461189957336117d5565b5f838152600683016020526040902054610730906001600160a01b031684612e99565b6109bf848484846120f9565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118fb8661246b565b604001516040518263ffffffff1660e01b815260040161191b919061502b565b6040805180830381865af4158015611935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119599190615583565b915091508061197f57604051632d07135360e01b815281151560048201526024016108bc565b5f8281526004840160205260409020805461199990614ebf565b90505f036119bd5760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff16908111156119e4576119e4614d5f565b14611a17575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004840160205260408120611a2f91614a91565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611ac7612aaa565b611ad38484843461310f565b9050611aeb60015f80516020615b1683398151915255565b9392505050565b5f611afb612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b3457611b34614d5f565b6003811115611b4557611b45614d5f565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bbe57611bbe614d5f565b14158015611bdf5750600381516003811115611bdc57611bdc614d5f565b14155b15611c00578051604051633b0d540d60e21b81526108bc919060040161551d565b5f611c0e8260400151611eb8565b905080606001516001600160401b03165f03611c40576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cae93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cef9190810190614ffa565b6040518263ffffffff1660e01b8152600401611d0b919061502b565b6020604051808303815f875af1158015611d27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611138919061503d565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615ad68339815191529190611d9290614ebf565b90505f03611db65760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611ddd57611ddd614d5f565b14611e10575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e4792016155a6565b6020604051808303815f875af1158015611e63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610730919061503d565b5f611e90612aaa565b611e9b823334613284565b9050611eb360015f80516020615b1683398151915255565b919050565b611ec0614ac8565b5f8281525f80516020615af6833981519152602052604090819020815160e0810190925280545f80516020615ad6833981519152929190829060ff166005811115611f0d57611f0d614d5f565b6005811115611f1e57611f1e614d5f565b8152602001600182018054611f3290614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5e90614ebf565b8015611fa95780601f10611f8057610100808354040283529160200191611fa9565b820191905f5260205f20905b815481529060010190602001808311611f8c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120395760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f612042612849565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461207057336117d5565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615ad6833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906120e19086908690615630565b90815260200160405180910390205491505092915050565b61210584848484612136565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61212d6134c4565b61121a8161350f565b5f80612140612849565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561217957612179614d5f565b600381111561218a5761218a614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61220082611eb8565b905060028351600381111561221757612217614d5f565b14612238578251604051633b0d540d60e21b81526108bc919060040161551d565b60208301516001600160a01b031633146122d4575f8281526006850160205260409020546001600160a01b0316331461227157336117d5565b5f82815260068501602052604090205460a08201516122a091600160b01b90046001600160401b0316906152d2565b6001600160401b03164210156122d45760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b6002815160058111156122e9576122e9614d5f565b0361240b576002840154608084015161230b916001600160401b0316906152d2565b6001600160401b031642101561233f5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123515761234f82886125aa565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161238a918491612385919061563f565b613589565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123cd84888c613760565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124639350505050565b60048151600581111561242057612420614d5f565b036124475761243083878b613760565b5061243a89612f15565b6001945050505050612463565b805160405163170cc93360e21b81526108bc9190600401614ef1565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156124cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124f6919081019061565f565b915091508061251857604051636b2f19e960e01b815260040160405180910390fd5b81511561253e578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561257a576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061258b612849565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125f5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261261c919081019061565f565b915091508061263e57604051636b2f19e960e01b815260040160405180910390fd5b5f612647612849565b6005810154845191925014612675578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126b1576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156126ed576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161272a919061502b565b6040805180830381865af4158015612744573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276891906156ef565b9150915081881461278f5760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612820575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261283e565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612877612849565b90505f6128838761394e565b905061288e87612581565b61289d57600192505050612463565b5f8781526006830160205260409020546001600160a01b031633146128c257336117d5565b5f87815260068301602052604090205460a08201516128f191600160b01b90046001600160401b0316906152d2565b6001600160401b03168160c001516001600160401b031610156129385760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129505761294988876125aa565b905061296e565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612993906114f1565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156129fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a20919061503d565b90506001600160a01b038616612a4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a6b908490615712565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615b16833981519152805460011901612adb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612aea614ac8565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b1d8861246b565b604001516040518263ffffffff1660e01b8152600401612b3d919061502b565b6040805180830381865af4158015612b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7b9190615583565b915091508015612ba257604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612bd957612bd9614d5f565b6005811115612bea57612bea614d5f565b8152602001600182018054612bfe90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2a90614ebf565b8015612c755780601f10612c4c57610100808354040283529160200191612c75565b820191905f5260205f20905b815481529060010190602001808311612c5857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612ce057612ce0614d5f565b14158015612d015750600181516005811115612cfe57612cfe614d5f565b14155b15612d2257805160405163170cc93360e21b81526108bc9190600401614ef1565b600381516005811115612d3757612d37614d5f565b03612d455760048152612d4a565b600581525b836006018160200151604051612d6091906151ae565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612da357612da3614d5f565b021790555060208201516001820190612dbc9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e6257612e62614d5f565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ea2612849565b5f838152600a82016020526040812080549190559091506109bf8482613c33565b6117736001600160a01b03831682613c91565b60015f80516020615b1683398151915255565b612ef58484848461286d565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f1e612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f5757612f57614d5f565b6003811115612f6857612f68614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130057fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161301491906152d2565b6001600160401b03164210156130485760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b0316806130a3575060208201515b5f806130b0838886613d24565b915091506130c985602001516111f987606001516114f1565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613119612849565b600281015490915061ffff600160401b90910481169086161080613142575061271061ffff8616115b1561316657604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131a2576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131b45750806001015483115b156131d55760405163222d164360e21b8152600481018490526024016108bc565b825f6131e0826110d8565b90505f6131ed8983613dd1565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061328e612849565b90505f61329a846110d8565b90505f6132a687611eb8565b90506132b187612581565b6132d1576040516330efa98b60e01b8152600481018890526024016108bc565b6002815160058111156132e6576132e6614d5f565b1461330757805160405163170cc93360e21b81526108bc9190600401614ef1565b5f82826080015161331891906152d2565b905083600201600a9054906101000a90046001600160401b031682604001516133419190615314565b6001600160401b0316816001600160401b0316111561337e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f8061338a8a84613589565b915091505f8a836040516020016133b892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661350d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135176134c4565b61352081614343565b61352861435c565b61121a6060820135608083013561354560c0850160a08601614ca4565b61355560e0860160c08701615725565b613566610100870160e0880161573e565b61010087013561357e61014089016101208a01615054565b88610140013561436c565b5f8281525f80516020615af6833981519152602052604081206002015481905f80516020615ad683398151915290600160801b90046001600160401b03166135d18582614551565b5f6135db876147bb565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613684573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136ab9190810190614ffa565b6040518263ffffffff1660e01b81526004016136c7919061502b565b6020604051808303815f875af11580156136e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613707919061503d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061376a612849565b90505f61377a8660400151611eb8565b90505f60038251600581111561379257613792614d5f565b14806137b057506004825160058111156137ae576137ae614d5f565b145b156137c0575060c08101516137fd565b6002825160058111156137d5576137d5614d5f565b036137e15750426137fd565b815160405163170cc93360e21b81526108bc9190600401614ef1565b86608001516001600160401b0316816001600160401b031611613825575f9350505050611aeb565b600483015460608801515f916001600160a01b031690634f22429f9061384a906114f1565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138ef919061503d565b90506001600160a01b03871661390757876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613956614ac8565b5f8281525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff1660058111156139a3576139a3614d5f565b60058111156139b4576139b4614d5f565b81526020016001820180546139c890614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546139f490614ebf565b8015613a3f5780601f10613a1657610100808354040283529160200191613a3f565b820191905f5260205f20905b815481529060010190602001808311613a2257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613aad57613aad614d5f565b14613ae0575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b2557613b25614d5f565b021790555060208201516001820190613b3e9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bdc8582613589565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c7f575f80fd5b505af115801561134d573d5f803e3d5ffd5b80471015613cb45760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cfd576040519150601f19603f3d011682016040523d82523d5f602084013e613d02565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d2f612849565b5f86815260088201602052604081208054908290559192509081908015613dc3575f87815260068501602052604090205461271090613d7990600160a01b900461ffff168361556c565b613d8391906154fe565b91508184600a015f8981526020019081526020015f205f828254613da79190615712565b90915550613db79050828261575e565b9250613dc38984613c33565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613e1557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615ad683398151915242613e346060860160408701614ca4565b6001600160401b0316111580613e6e5750613e526202a30042615712565b613e626060860160408701614ca4565b6001600160401b031610155b15613ea857613e836060850160408601614ca4565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613ecb90600160401b90048216858316615712565b1115613ef557604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613f0a613f056060860186615771565b614830565b613f1a613f056080860186615771565b6030613f296020860186615785565b905014613f5b57613f3d6020850185615785565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f658480615785565b90505f03613f9257613f778480615785565b604051633e08a12560e11b81526004016108bc9291906157c7565b5f60068201613fa18680615785565b604051613faf929190615630565b90815260200160405180910390205414613fe857613fcd8480615785565b60405163a41f772f60e01b81526004016108bc9291906157c7565b613ff2835f614551565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce51906020810161402f8a80615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614077908b018b615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c060608b0160408c01614ca4565b6001600160401b031681526020016140db60608b018b615771565b6140e4906157da565b81526020016140f660808b018b615771565b6140ff906157da565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161412d9190615907565b5f60405180830381865af4158015614147573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261416e91908101906159be565b5f8281526004860160205260409020919350915061418c8282615203565b50816006840161419c8880615785565b6040516141aa929190615630565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141e690859060040161502b565b6020604051808303815f875af1158015614202573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614226919061503d565b5f8481526005860160205260409020805460ff19166001179055905061424c8780615785565b5f85815260058701602052604090206001019161426a919083615a01565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142c98880615785565b6040516142d7929190615630565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906143159190614ca4565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61434b6134c4565b614353614999565b61121a816149a1565b6143646134c4565b61350d614a89565b6143746134c4565b5f61437d612849565b905061ffff86161580614395575061271061ffff8716115b156143b957604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143dd5760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f05750600a60ff8616115b156144135760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561447a576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f0361449a5760405163a733007160e01b815260040160405180910390fd5b816144bb57604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615ad68339815191525f6001600160401b0380841690851611156145855761457e838561563f565b9050614592565b61458f848461563f565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145ff5750600184015481516145fb916001600160401b031690615712565b8210155b15614627576001600160401b0380841660608301528282526040820151166020820152614646565b828160600181815161463991906152d2565b6001600160401b03169052505b6060810151614656906064615314565b602082015160018601546001600160401b0392909216916146819190600160401b900460ff16615314565b6001600160401b031610156146ba57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516146cc91906152d2565b6001600160401b03169052506040810180518691906146ec90839061563f565b6001600160401b03169052506001840154604082015160649161471a91600160401b90910460ff1690615314565b6001600160401b03161015614753576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615af68339815191526020526040812060020180545f80516020615ad6833981519152919060089061480590600160401b90046001600160401b0316615aba565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61483d6020820182614c77565b63ffffffff1615801561485d5750614858602082018261506f565b151590505b156148a45761486f6020820182614c77565b61487c602083018361506f565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148b1602082018261506f565b90506148c06020830183614c77565b63ffffffff1611156148d95761486f6020820182614c77565b60015b6148e9602083018361506f565b9050811015611773576148ff602083018361506f565b61490a60018461575e565b818110614919576149196150b4565b905060200201602081019061492e9190615054565b6001600160a01b0316614944602084018461506f565b83818110614954576149546150b4565b90506020020160208101906149699190615054565b6001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b6001016148dc565b61350d6134c4565b6149a96134c4565b80355f80516020615ad683398151915290815560146149ce606084016040850161573e565b60ff1611806149ed57506149e8606083016040840161573e565b60ff16155b15614a2157614a02606083016040840161573e565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a31606083016040840161573e565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a626040830160208401614ca4565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ed66134c4565b508054614a9d90614ebf565b5f825580601f10614aac575050565b601f0160209004905f5260205f209081019061121a9190614b05565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b19575f8155600101614b06565b5090565b801515811461121a575f80fd5b803563ffffffff81168114611eb3575f80fd5b5f805f60608486031215614b4f575f80fd5b833592506020840135614b6181614b1d565b9150614b6f60408501614b2a565b90509250925092565b5f60208284031215614b88575f80fd5b5035919050565b5f6101608284031215614ba0575f80fd5b50919050565b5f8060408385031215614bb7575f80fd5b82356001600160401b03811115614bcc575f80fd5b830160808186031215614bdd575f80fd5b9150614beb60208401614b2a565b90509250929050565b5f8060408385031215614c05575f80fd5b82359150614beb60208401614b2a565b6001600160a01b038116811461121a575f80fd5b5f805f8060808587031215614c3c575f80fd5b843593506020850135614c4e81614b1d565b9250614c5c60408601614b2a565b91506060850135614c6c81614c15565b939692955090935050565b5f60208284031215614c87575f80fd5b611aeb82614b2a565b6001600160401b038116811461121a575f80fd5b5f60208284031215614cb4575f80fd5b8135611aeb81614c90565b5f8060408385031215614cd0575f80fd5b823591506020830135614ce281614c15565b809150509250929050565b803561ffff81168114611eb3575f80fd5b5f805f60608486031215614d10575f80fd5b83356001600160401b03811115614d25575f80fd5b840160a08187031215614d36575f80fd5b9250614d4460208501614ced565b91506040840135614d5481614c90565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8357614d83614d5f565b9052565b5f5b83811015614da1578181015183820152602001614d89565b50505f910152565b5f8151808452614dc0816020860160208601614d87565b601f01601f19169290920160200192915050565b60208152614de6602082018351614d73565b5f602083015160e06040840152614e01610100840182614da9565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e65575f80fd5b82356001600160401b0380821115614e7b575f80fd5b818501915085601f830112614e8e575f80fd5b813581811115614e9c575f80fd5b866020828501011115614ead575f80fd5b60209290920196919550909350505050565b600181811c90821680614ed357607f821691505b602082108103614ba057634e487b7160e01b5f52602260045260245ffd5b602081016111268284614d73565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f3557614f35614eff565b60405290565b604080519081016001600160401b0381118282101715614f3557614f35614eff565b604051601f8201601f191681016001600160401b0381118282101715614f8557614f85614eff565b604052919050565b5f6001600160401b03821115614fa557614fa5614eff565b50601f01601f191660200190565b5f82601f830112614fc2575f80fd5b8151614fd5614fd082614f8d565b614f5d565b818152846020838601011115614fe9575f80fd5b612463826020830160208701614d87565b5f6020828403121561500a575f80fd5b81516001600160401b0381111561501f575f80fd5b61246384828501614fb3565b602081525f611aeb6020830184614da9565b5f6020828403121561504d575f80fd5b5051919050565b5f60208284031215615064575f80fd5b8135611aeb81614c15565b5f808335601e19843603018112615084575f80fd5b8301803591506001600160401b0382111561509d575f80fd5b6020019150600581901b3603821315613759575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126150dc575f80fd5b9190910192915050565b5f82601f8301126150f5575f80fd5b8135615103614fd082614f8d565b818152846020838601011115615117575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615143575f80fd5b61514b614f13565b82356001600160401b0380821115615161575f80fd5b61516d368387016150e6565b83526020850135915080821115615182575f80fd5b5061518f368286016150e6565b60208301525060408301356151a381614c90565b604082015292915050565b5f82516150dc818460208701614d87565b601f82111561073057805f5260205f20601f840160051c810160208510156151e45750805b601f840160051c820191505b81811015611138575f81556001016151f0565b81516001600160401b0381111561521c5761521c614eff565b6152308161522a8454614ebf565b846151bf565b602080601f831160018114615263575f841561524c5750858301515b5f19600386901b1c1916600185901b17855561134d565b5f85815260208120601f198616915b8281101561529157888601518255948401946001909101908401615272565b50858210156152ae57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561257a5761257a6152be565b5f63ffffffff80831681810361530a5761530a6152be565b6001019392505050565b6001600160401b03818116838216028082169190828114615337576153376152be565b505092915050565b5f808335601e19843603018112615354575f80fd5b83016020810192503590506001600160401b03811115615372575f80fd5b803603821315613759575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561545d57848303601f19018952813536889003605e190181126153e4575f80fd5b870160606153f2828061533f565b8287526154028388018284615380565b925050506154128683018361533f565b86830388880152615424838284615380565b92505050604080830135925061543983614c90565b6001600160401b0392909216949091019390935297830197908301906001016153bf565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561548e81614c15565b6001600160a01b031660608381019190915283013536849003601e190181126154b5575f80fd5b83016020810190356001600160401b038111156154d0575f80fd5b8060051b36038213156154e1575f80fd5b6080808501526154f560a0850182846153a8565b95945050505050565b5f8261551857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061553157615531614d5f565b91905290565b5f805f60608486031215615549575f80fd5b83519250602084015161555b81614c90565b6040850151909250614d5481614c90565b8082028115828204841417611126576111266152be565b5f8060408385031215615594575f80fd5b825191506020830151614ce281614b1d565b5f60208083525f84546155b881614ebf565b806020870152604060018084165f81146155d957600181146155f557615622565b60ff19851660408a0152604084151560051b8a01019550615622565b895f5260205f205f5b858110156156195781548b82018601529083019088016155fe565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561257a5761257a6152be565b5f8060408385031215615670575f80fd5b82516001600160401b0380821115615686575f80fd5b9084019060608287031215615699575f80fd5b6156a1614f13565b8251815260208301516156b381614c15565b60208201526040830151828111156156c9575f80fd5b6156d588828601614fb3565b6040830152508094505050506020830151614ce281614b1d565b5f8060408385031215615700575f80fd5b825191506020830151614ce281614c90565b80820180821115611126576111266152be565b5f60208284031215615735575f80fd5b611aeb82614ced565b5f6020828403121561574e575f80fd5b813560ff81168114611aeb575f80fd5b81810381811115611126576111266152be565b5f8235603e198336030181126150dc575f80fd5b5f808335601e1984360301811261579a575f80fd5b8301803591506001600160401b038211156157b3575f80fd5b602001915036819003821315613759575f80fd5b602081525f612463602083018486615380565b5f604082360312156157ea575f80fd5b6157f2614f3b565b6157fb83614b2a565b81526020808401356001600160401b0380821115615817575f80fd5b9085019036601f830112615829575f80fd5b81358181111561583b5761583b614eff565b8060051b915061584c848301614f5d565b8181529183018401918481019036841115615865575f80fd5b938501935b8385101561588f578435925061587f83614c15565b828252938501939085019061586a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158fc5784516001600160a01b031682529383019360019290920191908301906158d3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261592d610100840182614da9565b90506040840151601f198085840301606086015261594b8383614da9565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261597b83836158a1565b925060a08601519150808584030160c08601525061599982826158a1565b91505060c08401516159b660e08501826001600160401b03169052565b509392505050565b5f80604083850312156159cf575f80fd5b8251915060208301516001600160401b038111156159eb575f80fd5b6159f785828601614fb3565b9150509250929050565b6001600160401b03831115615a1857615a18614eff565b615a2c83615a268354614ebf565b836151bf565b5f601f841160018114615a5d575f8515615a465750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615a8c5786850135825560209485019460019092019101615a6c565b5086821015615aa8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361530a5761530a6152be56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212207abc1fd5ec71e5e5002fead0dcf876c17db7759874221198252a60249c9743a164736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b50604051615cb8380380615cb883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b6b8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b3d565b610724565b005b348015610263575f80fd5b50610256610272366004614b78565b610735565b348015610282575f80fd5b50610256610291366004614b8f565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b3d565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614ba6565b610aae565b34801561030a575f80fd5b50610256610319366004614bf4565b611064565b348015610329575f80fd5b5061033d610338366004614b78565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c29565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b3d565b61113f565b3480156103f8575f80fd5b50610256610407366004614c77565b61114b565b348015610417575f80fd5b50610256610426366004614c29565b61121d565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bf4565b611229565b34801561047e575f80fd5b5061049261048d366004614ca4565b6114f1565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b78565b611511565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b3d565b611525565b3480156104fc575f80fd5b5061025661050b366004614c29565b611531565b34801561051b575f80fd5b5061025661052a366004614bf4565b61153d565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614cbf565b611777565b34801561056d575f80fd5b5061025661057c366004614b78565b611828565b34801561058c575f80fd5b5061025661059b366004614c29565b6118bc565b3480156105ab575f80fd5b506102566105ba366004614c77565b6118c8565b6104926105cd366004614cfe565b611abe565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b78565b611af2565b348015610649575f80fd5b506104925f80516020615ad683398151915281565b348015610669575f80fd5b50610256610678366004614b78565b611d4b565b61049261068b366004614b78565b611e87565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b78565b611eb8565b6040516102b89190614dd4565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614cbf565b612007565b348015610710575f80fd5b5061049261071f366004614e54565b61209e565b6107308383835f6120f9565b505050565b5f8181525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff16600581111561078257610782614d5f565b600581111561079357610793614d5f565b81526020016001820180546107a790614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614ebf565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d5f565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614ffa565b6040518263ffffffff1660e01b815260040161097f919061502b565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf919061503d565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612125565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f612136565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615ad68339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b67919061503d565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615054565b6001600160a01b031614610be457610bbf6060840160408501615054565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561506f565b905090505f805b828163ffffffff161015610e5a575f610c15606088018861506f565b8363ffffffff16818110610c2b57610c2b6150b4565b9050602002810190610c3d91906150c8565b610c4690615133565b80516040519192505f916006880191610c5e916151ae565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc919060040161502b565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd7916151ae565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d15919061503d565b90508086600601835f0151604051610d2d91906151ae565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d9082615203565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded90856152d2565b8251604051919550610dfe916151ae565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e53906152f2565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff1683615314565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef48761246b565b604001516040518263ffffffff1660e01b8152600401610f14919061502b565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f53919061503d565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d919061546a565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190614ffa565b90505f600282604051610fe191906151ae565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f919061503d565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d82612581565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611eb8565b51905060028160058111156110ae576110ae614d5f565b146110ce578060405163170cc93360e21b81526004016108bc9190614ef1565b6109bf83836125aa565b5f806110e2612849565b600301546110f090846154fe565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b61113884848484612136565b5050505050565b6109bf8383835f61286d565b611153612aaa565b5f61115c612849565b90505f8061116984612ae1565b9150915061117682612581565b61118257505050611204565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806111c45750805b6004835160058111156111d9576111d9614d5f565b036111e8576111e88185612e99565b6111fe826111f985604001516114f1565b612ec3565b50505050505b61121a60015f80516020615b1683398151915255565b50565b6109bf84848484612ee9565b5f611232612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126b5761126b614d5f565b600381111561127c5761127c614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112f282611eb8565b905060018351600381111561130957611309614d5f565b1461132a578251604051633b0d540d60e21b81526108bc919060040161551d565b60048151600581111561133f5761133f614d5f565b036113555761134d86612f15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61137a8961246b565b604001516040518263ffffffff1660e01b815260040161139a919061502b565b606060405180830381865af41580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d99190615537565b509150915081841461140657846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b0316108061143f5750806001600160401b03168560a001516001600160401b0316115b1561146857604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114fa612849565b60030154611126906001600160401b03841661556c565b5f61151b82611eb8565b6080015192915050565b6107308383835f612ee9565b6111388484848461286d565b611545612aaa565b5f61154e612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561158757611587614d5f565b600381111561159857611598614d5f565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561161157611611614d5f565b14611632578051604051633b0d540d60e21b81526108bc919060040161551d565b60046116418260400151611eb8565b51600581111561165357611653614d5f565b14611752575f6116628461246b565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116a1919061502b565b606060405180830381865af41580156116bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e09190615537565b50915091508184604001511461170c5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561174e57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61175b84612f15565b505061177360015f80516020615b1683398151915255565b5050565b5f611780612849565b90506001600160a01b0382166117b45760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117fa57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f611831612849565b90505f61183d83611eb8565b519050600481600581111561185457611854614d5f565b14611874578060405163170cc93360e21b81526004016108bc9190614ef1565b5f8381526006830160205260409020546001600160a01b0316331461189957336117d5565b5f838152600683016020526040902054610730906001600160a01b031684612e99565b6109bf848484846120f9565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118fb8661246b565b604001516040518263ffffffff1660e01b815260040161191b919061502b565b6040805180830381865af4158015611935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119599190615583565b915091508061197f57604051632d07135360e01b815281151560048201526024016108bc565b5f8281526004840160205260409020805461199990614ebf565b90505f036119bd5760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff16908111156119e4576119e4614d5f565b14611a17575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004840160205260408120611a2f91614a91565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611ac7612aaa565b611ad38484843461310f565b9050611aeb60015f80516020615b1683398151915255565b9392505050565b5f611afb612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b3457611b34614d5f565b6003811115611b4557611b45614d5f565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bbe57611bbe614d5f565b14158015611bdf5750600381516003811115611bdc57611bdc614d5f565b14155b15611c00578051604051633b0d540d60e21b81526108bc919060040161551d565b5f611c0e8260400151611eb8565b905080606001516001600160401b03165f03611c40576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cae93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cef9190810190614ffa565b6040518263ffffffff1660e01b8152600401611d0b919061502b565b6020604051808303815f875af1158015611d27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611138919061503d565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615ad68339815191529190611d9290614ebf565b90505f03611db65760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611ddd57611ddd614d5f565b14611e10575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e4792016155a6565b6020604051808303815f875af1158015611e63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610730919061503d565b5f611e90612aaa565b611e9b823334613284565b9050611eb360015f80516020615b1683398151915255565b919050565b611ec0614ac8565b5f8281525f80516020615af6833981519152602052604090819020815160e0810190925280545f80516020615ad6833981519152929190829060ff166005811115611f0d57611f0d614d5f565b6005811115611f1e57611f1e614d5f565b8152602001600182018054611f3290614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5e90614ebf565b8015611fa95780601f10611f8057610100808354040283529160200191611fa9565b820191905f5260205f20905b815481529060010190602001808311611f8c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120395760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f612042612849565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461207057336117d5565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615ad6833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906120e19086908690615630565b90815260200160405180910390205491505092915050565b61210584848484612136565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61212d6134c4565b61121a8161350f565b5f80612140612849565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561217957612179614d5f565b600381111561218a5761218a614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61220082611eb8565b905060028351600381111561221757612217614d5f565b14612238578251604051633b0d540d60e21b81526108bc919060040161551d565b60208301516001600160a01b031633146122d4575f8281526006850160205260409020546001600160a01b0316331461227157336117d5565b5f82815260068501602052604090205460a08201516122a091600160b01b90046001600160401b0316906152d2565b6001600160401b03164210156122d45760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b6002815160058111156122e9576122e9614d5f565b0361240b576002840154608084015161230b916001600160401b0316906152d2565b6001600160401b031642101561233f5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123515761234f82886125aa565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161238a918491612385919061563f565b613589565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123cd84888c613760565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124639350505050565b60048151600581111561242057612420614d5f565b036124475761243083878b613760565b5061243a89612f15565b6001945050505050612463565b805160405163170cc93360e21b81526108bc9190600401614ef1565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156124cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124f6919081019061565f565b915091508061251857604051636b2f19e960e01b815260040160405180910390fd5b81511561253e578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561257a576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061258b612849565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125f5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261261c919081019061565f565b915091508061263e57604051636b2f19e960e01b815260040160405180910390fd5b5f612647612849565b6005810154845191925014612675578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126b1576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156126ed576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161272a919061502b565b6040805180830381865af4158015612744573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276891906156ef565b9150915081881461278f5760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612820575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261283e565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612877612849565b90505f6128838761394e565b905061288e87612581565b61289d57600192505050612463565b5f8781526006830160205260409020546001600160a01b031633146128c257336117d5565b5f87815260068301602052604090205460a08201516128f191600160b01b90046001600160401b0316906152d2565b6001600160401b03168160c001516001600160401b031610156129385760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129505761294988876125aa565b905061296e565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612993906114f1565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156129fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a20919061503d565b90506001600160a01b038616612a4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a6b908490615712565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615b16833981519152805460011901612adb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612aea614ac8565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b1d8861246b565b604001516040518263ffffffff1660e01b8152600401612b3d919061502b565b6040805180830381865af4158015612b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7b9190615583565b915091508015612ba257604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612bd957612bd9614d5f565b6005811115612bea57612bea614d5f565b8152602001600182018054612bfe90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2a90614ebf565b8015612c755780601f10612c4c57610100808354040283529160200191612c75565b820191905f5260205f20905b815481529060010190602001808311612c5857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612ce057612ce0614d5f565b14158015612d015750600181516005811115612cfe57612cfe614d5f565b14155b15612d2257805160405163170cc93360e21b81526108bc9190600401614ef1565b600381516005811115612d3757612d37614d5f565b03612d455760048152612d4a565b600581525b836006018160200151604051612d6091906151ae565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612da357612da3614d5f565b021790555060208201516001820190612dbc9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e6257612e62614d5f565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ea2612849565b5f838152600a82016020526040812080549190559091506109bf8482613c33565b6117736001600160a01b03831682613c91565b60015f80516020615b1683398151915255565b612ef58484848461286d565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f1e612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f5757612f57614d5f565b6003811115612f6857612f68614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130057fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161301491906152d2565b6001600160401b03164210156130485760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b0316806130a3575060208201515b5f806130b0838886613d24565b915091506130c985602001516111f987606001516114f1565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613119612849565b600281015490915061ffff600160401b90910481169086161080613142575061271061ffff8616115b1561316657604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131a2576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131b45750806001015483115b156131d55760405163222d164360e21b8152600481018490526024016108bc565b825f6131e0826110d8565b90505f6131ed8983613dd1565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061328e612849565b90505f61329a846110d8565b90505f6132a687611eb8565b90506132b187612581565b6132d1576040516330efa98b60e01b8152600481018890526024016108bc565b6002815160058111156132e6576132e6614d5f565b1461330757805160405163170cc93360e21b81526108bc9190600401614ef1565b5f82826080015161331891906152d2565b905083600201600a9054906101000a90046001600160401b031682604001516133419190615314565b6001600160401b0316816001600160401b0316111561337e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f8061338a8a84613589565b915091505f8a836040516020016133b892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661350d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135176134c4565b61352081614343565b61352861435c565b61121a6060820135608083013561354560c0850160a08601614ca4565b61355560e0860160c08701615725565b613566610100870160e0880161573e565b61010087013561357e61014089016101208a01615054565b88610140013561436c565b5f8281525f80516020615af6833981519152602052604081206002015481905f80516020615ad683398151915290600160801b90046001600160401b03166135d18582614551565b5f6135db876147bb565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613684573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136ab9190810190614ffa565b6040518263ffffffff1660e01b81526004016136c7919061502b565b6020604051808303815f875af11580156136e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613707919061503d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061376a612849565b90505f61377a8660400151611eb8565b90505f60038251600581111561379257613792614d5f565b14806137b057506004825160058111156137ae576137ae614d5f565b145b156137c0575060c08101516137fd565b6002825160058111156137d5576137d5614d5f565b036137e15750426137fd565b815160405163170cc93360e21b81526108bc9190600401614ef1565b86608001516001600160401b0316816001600160401b031611613825575f9350505050611aeb565b600483015460608801515f916001600160a01b031690634f22429f9061384a906114f1565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138ef919061503d565b90506001600160a01b03871661390757876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613956614ac8565b5f8281525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff1660058111156139a3576139a3614d5f565b60058111156139b4576139b4614d5f565b81526020016001820180546139c890614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546139f490614ebf565b8015613a3f5780601f10613a1657610100808354040283529160200191613a3f565b820191905f5260205f20905b815481529060010190602001808311613a2257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613aad57613aad614d5f565b14613ae0575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b2557613b25614d5f565b021790555060208201516001820190613b3e9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bdc8582613589565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c7f575f80fd5b505af115801561134d573d5f803e3d5ffd5b80471015613cb45760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cfd576040519150601f19603f3d011682016040523d82523d5f602084013e613d02565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d2f612849565b5f86815260088201602052604081208054908290559192509081908015613dc3575f87815260068501602052604090205461271090613d7990600160a01b900461ffff168361556c565b613d8391906154fe565b91508184600a015f8981526020019081526020015f205f828254613da79190615712565b90915550613db79050828261575e565b9250613dc38984613c33565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613e1557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615ad683398151915242613e346060860160408701614ca4565b6001600160401b0316111580613e6e5750613e526202a30042615712565b613e626060860160408701614ca4565b6001600160401b031610155b15613ea857613e836060850160408601614ca4565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613ecb90600160401b90048216858316615712565b1115613ef557604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613f0a613f056060860186615771565b614830565b613f1a613f056080860186615771565b6030613f296020860186615785565b905014613f5b57613f3d6020850185615785565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f658480615785565b90505f03613f9257613f778480615785565b604051633e08a12560e11b81526004016108bc9291906157c7565b5f60068201613fa18680615785565b604051613faf929190615630565b90815260200160405180910390205414613fe857613fcd8480615785565b60405163a41f772f60e01b81526004016108bc9291906157c7565b613ff2835f614551565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce51906020810161402f8a80615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614077908b018b615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c060608b0160408c01614ca4565b6001600160401b031681526020016140db60608b018b615771565b6140e4906157da565b81526020016140f660808b018b615771565b6140ff906157da565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161412d9190615907565b5f60405180830381865af4158015614147573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261416e91908101906159be565b5f8281526004860160205260409020919350915061418c8282615203565b50816006840161419c8880615785565b6040516141aa929190615630565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141e690859060040161502b565b6020604051808303815f875af1158015614202573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614226919061503d565b5f8481526005860160205260409020805460ff19166001179055905061424c8780615785565b5f85815260058701602052604090206001019161426a919083615a01565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142c98880615785565b6040516142d7929190615630565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906143159190614ca4565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61434b6134c4565b614353614999565b61121a816149a1565b6143646134c4565b61350d614a89565b6143746134c4565b5f61437d612849565b905061ffff86161580614395575061271061ffff8716115b156143b957604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143dd5760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f05750600a60ff8616115b156144135760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561447a576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f0361449a5760405163a733007160e01b815260040160405180910390fd5b816144bb57604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615ad68339815191525f6001600160401b0380841690851611156145855761457e838561563f565b9050614592565b61458f848461563f565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145ff5750600184015481516145fb916001600160401b031690615712565b8210155b15614627576001600160401b0380841660608301528282526040820151166020820152614646565b828160600181815161463991906152d2565b6001600160401b03169052505b6060810151614656906064615314565b602082015160018601546001600160401b0392909216916146819190600160401b900460ff16615314565b6001600160401b031610156146ba57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516146cc91906152d2565b6001600160401b03169052506040810180518691906146ec90839061563f565b6001600160401b03169052506001840154604082015160649161471a91600160401b90910460ff1690615314565b6001600160401b03161015614753576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615af68339815191526020526040812060020180545f80516020615ad6833981519152919060089061480590600160401b90046001600160401b0316615aba565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61483d6020820182614c77565b63ffffffff1615801561485d5750614858602082018261506f565b151590505b156148a45761486f6020820182614c77565b61487c602083018361506f565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148b1602082018261506f565b90506148c06020830183614c77565b63ffffffff1611156148d95761486f6020820182614c77565b60015b6148e9602083018361506f565b9050811015611773576148ff602083018361506f565b61490a60018461575e565b818110614919576149196150b4565b905060200201602081019061492e9190615054565b6001600160a01b0316614944602084018461506f565b83818110614954576149546150b4565b90506020020160208101906149699190615054565b6001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b6001016148dc565b61350d6134c4565b6149a96134c4565b80355f80516020615ad683398151915290815560146149ce606084016040850161573e565b60ff1611806149ed57506149e8606083016040840161573e565b60ff16155b15614a2157614a02606083016040840161573e565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a31606083016040840161573e565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a626040830160208401614ca4565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ed66134c4565b508054614a9d90614ebf565b5f825580601f10614aac575050565b601f0160209004905f5260205f209081019061121a9190614b05565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b19575f8155600101614b06565b5090565b801515811461121a575f80fd5b803563ffffffff81168114611eb3575f80fd5b5f805f60608486031215614b4f575f80fd5b833592506020840135614b6181614b1d565b9150614b6f60408501614b2a565b90509250925092565b5f60208284031215614b88575f80fd5b5035919050565b5f6101608284031215614ba0575f80fd5b50919050565b5f8060408385031215614bb7575f80fd5b82356001600160401b03811115614bcc575f80fd5b830160808186031215614bdd575f80fd5b9150614beb60208401614b2a565b90509250929050565b5f8060408385031215614c05575f80fd5b82359150614beb60208401614b2a565b6001600160a01b038116811461121a575f80fd5b5f805f8060808587031215614c3c575f80fd5b843593506020850135614c4e81614b1d565b9250614c5c60408601614b2a565b91506060850135614c6c81614c15565b939692955090935050565b5f60208284031215614c87575f80fd5b611aeb82614b2a565b6001600160401b038116811461121a575f80fd5b5f60208284031215614cb4575f80fd5b8135611aeb81614c90565b5f8060408385031215614cd0575f80fd5b823591506020830135614ce281614c15565b809150509250929050565b803561ffff81168114611eb3575f80fd5b5f805f60608486031215614d10575f80fd5b83356001600160401b03811115614d25575f80fd5b840160a08187031215614d36575f80fd5b9250614d4460208501614ced565b91506040840135614d5481614c90565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8357614d83614d5f565b9052565b5f5b83811015614da1578181015183820152602001614d89565b50505f910152565b5f8151808452614dc0816020860160208601614d87565b601f01601f19169290920160200192915050565b60208152614de6602082018351614d73565b5f602083015160e06040840152614e01610100840182614da9565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e65575f80fd5b82356001600160401b0380821115614e7b575f80fd5b818501915085601f830112614e8e575f80fd5b813581811115614e9c575f80fd5b866020828501011115614ead575f80fd5b60209290920196919550909350505050565b600181811c90821680614ed357607f821691505b602082108103614ba057634e487b7160e01b5f52602260045260245ffd5b602081016111268284614d73565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f3557614f35614eff565b60405290565b604080519081016001600160401b0381118282101715614f3557614f35614eff565b604051601f8201601f191681016001600160401b0381118282101715614f8557614f85614eff565b604052919050565b5f6001600160401b03821115614fa557614fa5614eff565b50601f01601f191660200190565b5f82601f830112614fc2575f80fd5b8151614fd5614fd082614f8d565b614f5d565b818152846020838601011115614fe9575f80fd5b612463826020830160208701614d87565b5f6020828403121561500a575f80fd5b81516001600160401b0381111561501f575f80fd5b61246384828501614fb3565b602081525f611aeb6020830184614da9565b5f6020828403121561504d575f80fd5b5051919050565b5f60208284031215615064575f80fd5b8135611aeb81614c15565b5f808335601e19843603018112615084575f80fd5b8301803591506001600160401b0382111561509d575f80fd5b6020019150600581901b3603821315613759575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126150dc575f80fd5b9190910192915050565b5f82601f8301126150f5575f80fd5b8135615103614fd082614f8d565b818152846020838601011115615117575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615143575f80fd5b61514b614f13565b82356001600160401b0380821115615161575f80fd5b61516d368387016150e6565b83526020850135915080821115615182575f80fd5b5061518f368286016150e6565b60208301525060408301356151a381614c90565b604082015292915050565b5f82516150dc818460208701614d87565b601f82111561073057805f5260205f20601f840160051c810160208510156151e45750805b601f840160051c820191505b81811015611138575f81556001016151f0565b81516001600160401b0381111561521c5761521c614eff565b6152308161522a8454614ebf565b846151bf565b602080601f831160018114615263575f841561524c5750858301515b5f19600386901b1c1916600185901b17855561134d565b5f85815260208120601f198616915b8281101561529157888601518255948401946001909101908401615272565b50858210156152ae57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561257a5761257a6152be565b5f63ffffffff80831681810361530a5761530a6152be565b6001019392505050565b6001600160401b03818116838216028082169190828114615337576153376152be565b505092915050565b5f808335601e19843603018112615354575f80fd5b83016020810192503590506001600160401b03811115615372575f80fd5b803603821315613759575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561545d57848303601f19018952813536889003605e190181126153e4575f80fd5b870160606153f2828061533f565b8287526154028388018284615380565b925050506154128683018361533f565b86830388880152615424838284615380565b92505050604080830135925061543983614c90565b6001600160401b0392909216949091019390935297830197908301906001016153bf565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561548e81614c15565b6001600160a01b031660608381019190915283013536849003601e190181126154b5575f80fd5b83016020810190356001600160401b038111156154d0575f80fd5b8060051b36038213156154e1575f80fd5b6080808501526154f560a0850182846153a8565b95945050505050565b5f8261551857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061553157615531614d5f565b91905290565b5f805f60608486031215615549575f80fd5b83519250602084015161555b81614c90565b6040850151909250614d5481614c90565b8082028115828204841417611126576111266152be565b5f8060408385031215615594575f80fd5b825191506020830151614ce281614b1d565b5f60208083525f84546155b881614ebf565b806020870152604060018084165f81146155d957600181146155f557615622565b60ff19851660408a0152604084151560051b8a01019550615622565b895f5260205f205f5b858110156156195781548b82018601529083019088016155fe565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561257a5761257a6152be565b5f8060408385031215615670575f80fd5b82516001600160401b0380821115615686575f80fd5b9084019060608287031215615699575f80fd5b6156a1614f13565b8251815260208301516156b381614c15565b60208201526040830151828111156156c9575f80fd5b6156d588828601614fb3565b6040830152508094505050506020830151614ce281614b1d565b5f8060408385031215615700575f80fd5b825191506020830151614ce281614c90565b80820180821115611126576111266152be565b5f60208284031215615735575f80fd5b611aeb82614ced565b5f6020828403121561574e575f80fd5b813560ff81168114611aeb575f80fd5b81810381811115611126576111266152be565b5f8235603e198336030181126150dc575f80fd5b5f808335601e1984360301811261579a575f80fd5b8301803591506001600160401b038211156157b3575f80fd5b602001915036819003821315613759575f80fd5b602081525f612463602083018486615380565b5f604082360312156157ea575f80fd5b6157f2614f3b565b6157fb83614b2a565b81526020808401356001600160401b0380821115615817575f80fd5b9085019036601f830112615829575f80fd5b81358181111561583b5761583b614eff565b8060051b915061584c848301614f5d565b8181529183018401918481019036841115615865575f80fd5b938501935b8385101561588f578435925061587f83614c15565b828252938501939085019061586a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158fc5784516001600160a01b031682529383019360019290920191908301906158d3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261592d610100840182614da9565b90506040840151601f198085840301606086015261594b8383614da9565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261597b83836158a1565b925060a08601519150808584030160c08601525061599982826158a1565b91505060c08401516159b660e08501826001600160401b03169052565b509392505050565b5f80604083850312156159cf575f80fd5b8251915060208301516001600160401b038111156159eb575f80fd5b6159f785828601614fb3565b9150509250929050565b6001600160401b03831115615a1857615a18614eff565b615a2c83615a268354614ebf565b836151bf565b5f601f841160018114615a5d575f8515615a465750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615a8c5786850135825560209485019460019092019101615a6c565b5086821015615aa8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361530a5761530a6152be56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212204546a476846b62358380f26791343e01c97c71842d2d2a93f5c5dc1ddd9bb14b64736f6c63430008190033",
}
// NativeTokenStakingManagerABI is the input ABI used to generate the binding from.
@@ -3124,7 +3124,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValida
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220c86fc0fb87c524ec5b0c98159450f3ea9dc01af042aec5aff977246d615450e664736f6c63430008190033",
+ Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212204be60cc6edf9cbf66de0cf61ac7b9875c2e34000fdb727695f40b759d3220af564736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
index f1c4a7cf3..e63a04225 100644
--- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
+++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
@@ -91,7 +91,7 @@ type ValidatorRegistrationInput struct {
// PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract.
var PoAValidatorManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b5060405161380838038061380883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136bb8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b61014961014436600461280a565b610312565b005b610149610159366004612839565b6105a2565b61014961016c366004612887565b610b5d565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a136600461280a565b610b6b565b6040516001600160401b03909116815260200161018a565b610149610b7f565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61014961024736600461280a565b610b92565b6101cd61025a3660046128b6565b610ba7565b61014961026d366004612887565b610bc3565b6102216005600160991b0181565b6101cd5f8051602061364683398151915281565b6101496102a236600461280a565b610db9565b6101e3601481565b6101496102bd36600461290f565b610ef5565b6102d56102d036600461280a565b611003565b60405161018a91906129cc565b6101a66202a30081565b6101496102fa366004612a4c565b611152565b6101cd61030d366004612a6e565b61118f565b5f8181525f805160206136668339815191526020526040808220815160e0810190925280545f8051602061364683398151915293929190829060ff16600581111561035f5761035f61294b565b60058111156103705761037061294b565b815260200160018201805461038490612ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612ad9565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156104665761046661294b565b146104a2575f8381526005830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610519573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105409190810190612c22565b6040518263ffffffff1660e01b815260040161055c9190612c53565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190612c65565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206136468339815191529060ff16156105f457604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610637573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065b9190612c65565b836020013514610684576040516372b0a7e760e11b815260208401356004820152602401610499565b306106956060850160408601612a4c565b6001600160a01b0316146106d8576106b36060840160408501612a4c565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f6106e66060850185612c7c565b905090505f805b828163ffffffff16101561094e575f6107096060880188612c7c565b8363ffffffff1681811061071f5761071f612cc1565b90506020028101906107319190612cd5565b61073a90612d40565b80516040519192505f91600688019161075291612db9565b9081526020016040518091039020541461078257805160405163a41f772f60e01b81526104999190600401612c53565b5f6002885f0135846040516020016107b192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107cb91612db9565b602060405180830381855afa1580156107e6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108099190612c65565b90508086600601835f01516040516108219190612db9565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108619082612e15565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff191690556108e19085612ee8565b82516040519195506108f291612db9565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a350508061094790612f08565b90506106ed565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610996910460ff1683612f2a565b6001600160401b031610156109c957604051633e1a785160e01b81526001600160401b0382166004820152602401610499565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109ed876111ea565b604001516040518263ffffffff1660e01b8152600401610a0d9190612c53565b602060405180830381865af4158015610a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4c9190612c65565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a869190613078565b5f60405180830381865af4158015610aa0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ac79190810190612c22565b90505f600282604051610ada9190612db9565b602060405180830381855afa158015610af5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b189190612c65565b9050828114610b445760405163baaea89d60e01b81526004810182905260248101849052604401610499565b5050506007909201805460ff1916600117905550505050565b610b6681611300565b505050565b5f610b7582611003565b6080015192915050565b610b876116b8565b610b905f611713565b565b610b9a6116b8565b610ba381611783565b5050565b5f610bb06116b8565b610bba8383611a68565b90505b92915050565b5f805160206136468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bf6866111ea565b604001516040518263ffffffff1660e01b8152600401610c169190612c53565b6040805180830381865af4158015610c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c54919061311b565b9150915080610c7a57604051632d07135360e01b81528115156004820152602401610499565b5f82815260048401602052604090208054610c9490612ad9565b90505f03610cb85760405163089938b360e11b815260048101839052602401610499565b60015f838152600580860160205260409091205460ff1690811115610cdf57610cdf61294b565b14610d12575f8281526005840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b5f8281526004840160205260408120610d2a9161277e565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206136468339815191529190610e0090612ad9565b90505f03610e245760405163089938b360e11b815260048101839052602401610499565b60015f838152600580840160205260409091205460ff1690811115610e4b57610e4b61294b565b14610e7e575f8281526005820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610eb5920161313c565b6020604051808303815f875af1158015610ed1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b669190612c65565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f395750825b90505f826001600160401b03166001148015610f545750303b155b905081158015610f62575080155b15610f805760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610faa57845460ff60401b1916600160401b1785555b610fb48787611fda565b8315610ffa57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61100b6127b5565b5f8281525f80516020613666833981519152602052604090819020815160e0810190925280545f80516020613646833981519152929190829060ff1660058111156110585761105861294b565b60058111156110695761106961294b565b815260200160018201805461107d90612ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546110a990612ad9565b80156110f45780601f106110cb576101008083540402835291602001916110f4565b820191905f5260205f20905b8154815290600101906020018083116110d757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61115a6116b8565b6001600160a01b03811661118357604051631e4fbdf760e01b81525f6004820152602401610499565b61118c81611713565b50565b6040515f905f80516020613646833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906111d290869086906131c6565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561124e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261127591908101906131d5565b915091508061129757604051636b2f19e960e01b815260040160405180910390fd5b8151156112bd578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156112f9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f6113096127b5565b5f805160206136468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61133c886111ea565b604001516040518263ffffffff1660e01b815260040161135c9190612c53565b6040805180830381865af4158015611376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139a919061311b565b9150915080156113c157604051632d07135360e01b81528115156004820152602401610499565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff909116908111156113f8576113f861294b565b60058111156114095761140961294b565b815260200160018201805461141d90612ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461144990612ad9565b80156114945780601f1061146b57610100808354040283529160200191611494565b820191905f5260205f20905b81548152906001019060200180831161147757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114ff576114ff61294b565b14158015611520575060018151600581111561151d5761151d61294b565b14155b1561154157805160405163170cc93360e21b81526104999190600401612b11565b6003815160058111156115565761155661294b565b036115645760048152611569565b600581525b83600601816020015160405161157f9190612db9565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156115c2576115c261294b565b0217905550602082015160018201906115db9082612e15565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156116815761168161294b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b905760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61178b6127b5565b5f8281525f805160206136668339815191526020526040808220815160e0810190925280545f8051602061364683398151915293929190829060ff1660058111156117d8576117d861294b565b60058111156117e9576117e961294b565b81526020016001820180546117fd90612ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461182990612ad9565b80156118745780601f1061184b57610100808354040283529160200191611874565b820191905f5260205f20905b81548152906001019060200180831161185757829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118e2576118e261294b565b14611915575f8481526005830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff191690600190849081111561195a5761195a61294b565b0217905550602082015160018201906119739082612e15565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f611a118582611ff4565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611aac57604051637fab81e560e01b815260040160405180910390fd5b5f8051602061364683398151915242611acb6060860160408701613262565b6001600160401b0316111580611b055750611ae96202a3004261327b565b611af96060860160408701613262565b6001600160401b031610155b15611b3f57611b1a6060850160408601613262565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b60038101546001600160401b0390611b6290600160401b9004821685831661327b565b1115611b8c57604051633e1a785160e01b81526001600160401b0384166004820152602401610499565b611ba1611b9c606086018661328e565b6121cb565b611bb1611b9c608086018661328e565b6030611bc060208601866132a2565b905014611bf257611bd460208501856132a2565b6040516326475b2f60e11b8152610499925060040190815260200190565b611bfc84806132a2565b90505f03611c2957611c0e84806132a2565b604051633e08a12560e11b81526004016104999291906132e4565b5f60068201611c3886806132a2565b604051611c469291906131c6565b90815260200160405180910390205414611c7f57611c6484806132a2565b60405163a41f772f60e01b81526004016104999291906132e4565b611c89835f612334565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611cc68a806132a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611d0e908b018b6132a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611d5760608b0160408c01613262565b6001600160401b03168152602001611d7260608b018b61328e565b611d7b906132f7565b8152602001611d8d60808b018b61328e565b611d96906132f7565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611dc49190613424565b5f60405180830381865af4158015611dde573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e0591908101906134db565b5f82815260048601602052604090209193509150611e238282612e15565b508160068401611e3388806132a2565b604051611e419291906131c6565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611e7d908590600401612c53565b6020604051808303815f875af1158015611e99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebd9190612c65565b5f8481526005860160205260409020805460ff191660011790559050611ee387806132a2565b5f858152600587016020526040902060010191611f0191908361351e565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611f6088806132a2565b604051611f6e9291906131c6565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b6040016020810190611fac9190613262565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611fe261259e565b611feb826125e7565b610ba381612600565b5f8281525f80516020613666833981519152602052604081206002015481905f8051602061364683398151915290600160801b90046001600160401b031661203c8582612334565b5f61204687612611565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156120ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121169190810190612c22565b6040518263ffffffff1660e01b81526004016121329190612c53565b6020604051808303815f875af115801561214e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121729190612c65565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b6121d86020820182612887565b63ffffffff161580156121f857506121f36020820182612c7c565b151590505b1561223f5761220a6020820182612887565b6122176020830183612c7c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b61224c6020820182612c7c565b905061225b6020830183612887565b63ffffffff1611156122745761220a6020820182612887565b60015b6122846020830183612c7c565b9050811015610ba35761229a6020830183612c7c565b6122a56001846135d7565b8181106122b4576122b4612cc1565b90506020020160208101906122c99190612a4c565b6001600160a01b03166122df6020840184612c7c565b838181106122ef576122ef612cc1565b90506020020160208101906123049190612a4c565b6001600160a01b0316101561232c57604051630dbc8d5f60e31b815260040160405180910390fd5b600101612277565b5f805160206136468339815191525f6001600160401b0380841690851611156123685761236183856135ea565b9050612375565b61237284846135ea565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806123e25750600184015481516123de916001600160401b03169061327b565b8210155b1561240a576001600160401b0380841660608301528282526040820151166020820152612429565b828160600181815161241c9190612ee8565b6001600160401b03169052505b6060810151612439906064612f2a565b602082015160018601546001600160401b0392909216916124649190600160401b900460ff16612f2a565b6001600160401b0316101561249d57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b85816040018181516124af9190612ee8565b6001600160401b03169052506040810180518691906124cf9083906135ea565b6001600160401b0316905250600184015460408201516064916124fd91600160401b90910460ff1690612f2a565b6001600160401b03161015612536576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610499565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b9057604051631afcd79f60e31b815260040160405180910390fd5b6125ef61259e565b6125f7612686565b61118c8161268e565b61260861259e565b61118c81612776565b5f8181525f805160206136668339815191526020526040812060020180545f80516020613646833981519152919060089061265b90600160401b90046001600160401b031661360a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b9061259e565b61269661259e565b80355f8051602061364683398151915290815560146126bb6060840160408501613625565b60ff1611806126da57506126d56060830160408401613625565b60ff16155b1561270e576126ef6060830160408401613625565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b61271e6060830160408401613625565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561274f6040830160208401613262565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61115a61259e565b50805461278a90612ad9565b5f825580601f10612799575050565b601f0160209004905f5260205f209081019061118c91906127f2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612806575f81556001016127f3565b5090565b5f6020828403121561281a575f80fd5b5035919050565b803563ffffffff81168114612834575f80fd5b919050565b5f806040838503121561284a575f80fd5b82356001600160401b0381111561285f575f80fd5b830160808186031215612870575f80fd5b915061287e60208401612821565b90509250929050565b5f60208284031215612897575f80fd5b610bba82612821565b80356001600160401b0381168114612834575f80fd5b5f80604083850312156128c7575f80fd5b82356001600160401b038111156128dc575f80fd5b830160a081860312156128ed575f80fd5b915061287e602084016128a0565b6001600160a01b038116811461118c575f80fd5b5f808284036080811215612921575f80fd5b606081121561292e575f80fd5b508291506060830135612940816128fb565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6006811061297b57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612999578181015183820152602001612981565b50505f910152565b5f81518084526129b881602086016020860161297f565b601f01601f19169290920160200192915050565b602081526129de60208201835161295f565b5f602083015160e060408401526129f96101008401826129a1565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f60208284031215612a5c575f80fd5b8135612a67816128fb565b9392505050565b5f8060208385031215612a7f575f80fd5b82356001600160401b0380821115612a95575f80fd5b818501915085601f830112612aa8575f80fd5b813581811115612ab6575f80fd5b866020828501011115612ac7575f80fd5b60209290920196919550909350505050565b600181811c90821680612aed57607f821691505b602082108103612b0b57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610bbd828461295f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612b5557612b55612b1f565b60405290565b604080519081016001600160401b0381118282101715612b5557612b55612b1f565b604051601f8201601f191681016001600160401b0381118282101715612ba557612ba5612b1f565b604052919050565b5f6001600160401b03821115612bc557612bc5612b1f565b50601f01601f191660200190565b5f82601f830112612be2575f80fd5b8151612bf5612bf082612bad565b612b7d565b818152846020838601011115612c09575f80fd5b612c1a82602083016020870161297f565b949350505050565b5f60208284031215612c32575f80fd5b81516001600160401b03811115612c47575f80fd5b612c1a84828501612bd3565b602081525f610bba60208301846129a1565b5f60208284031215612c75575f80fd5b5051919050565b5f808335601e19843603018112612c91575f80fd5b8301803591506001600160401b03821115612caa575f80fd5b6020019150600581901b36038213156121c4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612ce9575f80fd5b9190910192915050565b5f82601f830112612d02575f80fd5b8135612d10612bf082612bad565b818152846020838601011115612d24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612d50575f80fd5b612d58612b33565b82356001600160401b0380821115612d6e575f80fd5b612d7a36838701612cf3565b83526020850135915080821115612d8f575f80fd5b50612d9c36828601612cf3565b602083015250612dae604084016128a0565b604082015292915050565b5f8251612ce981846020870161297f565b601f821115610b6657805f5260205f20601f840160051c81016020851015612def5750805b601f840160051c820191505b81811015612e0e575f8155600101612dfb565b5050505050565b81516001600160401b03811115612e2e57612e2e612b1f565b612e4281612e3c8454612ad9565b84612dca565b602080601f831160018114612e75575f8415612e5e5750858301515b5f19600386901b1c1916600185901b178555612ecc565b5f85815260208120601f198616915b82811015612ea357888601518255948401946001909101908401612e84565b5085821015612ec057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156112f9576112f9612ed4565b5f63ffffffff808316818103612f2057612f20612ed4565b6001019392505050565b6001600160401b03818116838216028082169190828114612f4d57612f4d612ed4565b505092915050565b5f808335601e19843603018112612f6a575f80fd5b83016020810192503590506001600160401b03811115612f88575f80fd5b8036038213156121c4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561306b57848303601f19018952813536889003605e19018112612ffa575f80fd5b870160606130088280612f55565b8287526130188388018284612f96565b9250505061302886830183612f55565b8683038888015261303a838284612f96565b9250505060406001600160401b036130538285016128a0565b16950194909452509783019790830190600101612fd5565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561309c816128fb565b6001600160a01b031660608381019190915283013536849003601e190181126130c3575f80fd5b83016020810190356001600160401b038111156130de575f80fd5b8060051b36038213156130ef575f80fd5b60808085015261310360a085018284612fbe565b95945050505050565b80518015158114612834575f80fd5b5f806040838503121561312c575f80fd5b8251915061287e6020840161310c565b5f60208083525f845461314e81612ad9565b806020870152604060018084165f811461316f576001811461318b576131b8565b60ff19851660408a0152604084151560051b8a010195506131b8565b895f5260205f205f5b858110156131af5781548b8201860152908301908801613194565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156131e6575f80fd5b82516001600160401b03808211156131fc575f80fd5b908401906060828703121561320f575f80fd5b613217612b33565b825181526020830151613229816128fb565b602082015260408301518281111561323f575f80fd5b61324b88828601612bd3565b604083015250935061287e9150506020840161310c565b5f60208284031215613272575f80fd5b610bba826128a0565b80820180821115610bbd57610bbd612ed4565b5f8235603e19833603018112612ce9575f80fd5b5f808335601e198436030181126132b7575f80fd5b8301803591506001600160401b038211156132d0575f80fd5b6020019150368190038213156121c4575f80fd5b602081525f612c1a602083018486612f96565b5f60408236031215613307575f80fd5b61330f612b5b565b61331883612821565b81526020808401356001600160401b0380821115613334575f80fd5b9085019036601f830112613346575f80fd5b81358181111561335857613358612b1f565b8060051b9150613369848301612b7d565b8181529183018401918481019036841115613382575f80fd5b938501935b838510156133ac578435925061339c836128fb565b8282529385019390850190613387565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156134195784516001600160a01b031682529383019360019290920191908301906133f0565b509695505050505050565b60208152815160208201525f602083015160e0604084015261344a6101008401826129a1565b90506040840151601f198085840301606086015261346883836129a1565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261349883836133be565b925060a08601519150808584030160c0860152506134b682826133be565b91505060c08401516134d360e08501826001600160401b03169052565b509392505050565b5f80604083850312156134ec575f80fd5b8251915060208301516001600160401b03811115613508575f80fd5b61351485828601612bd3565b9150509250929050565b6001600160401b0383111561353557613535612b1f565b613549836135438354612ad9565b83612dca565b5f601f84116001811461357a575f85156135635750838201355b5f19600387901b1c1916600186901b178355612e0e565b5f83815260208120601f198716915b828110156135a95786850135825560209485019460019092019101613589565b50868210156135c5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610bbd57610bbd612ed4565b6001600160401b038281168282160390808211156112f9576112f9612ed4565b5f6001600160401b03808316818103612f2057612f20612ed4565b5f60208284031215613635575f80fd5b813560ff81168114612a67575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220af151af307feeeac5e40b113646536c32b85a1ad5c13d65fef1d00a670bfb92864736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b5060405161380838038061380883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136bb8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b61014961014436600461280a565b610312565b005b610149610159366004612839565b6105a2565b61014961016c366004612887565b610b5d565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a136600461280a565b610b6b565b6040516001600160401b03909116815260200161018a565b610149610b7f565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61014961024736600461280a565b610b92565b6101cd61025a3660046128b6565b610ba7565b61014961026d366004612887565b610bc3565b6102216005600160991b0181565b6101cd5f8051602061364683398151915281565b6101496102a236600461280a565b610db9565b6101e3601481565b6101496102bd36600461290f565b610ef5565b6102d56102d036600461280a565b611003565b60405161018a91906129cc565b6101a66202a30081565b6101496102fa366004612a4c565b611152565b6101cd61030d366004612a6e565b61118f565b5f8181525f805160206136668339815191526020526040808220815160e0810190925280545f8051602061364683398151915293929190829060ff16600581111561035f5761035f61294b565b60058111156103705761037061294b565b815260200160018201805461038490612ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612ad9565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156104665761046661294b565b146104a2575f8381526005830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610519573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105409190810190612c22565b6040518263ffffffff1660e01b815260040161055c9190612c53565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190612c65565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206136468339815191529060ff16156105f457604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610637573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065b9190612c65565b836020013514610684576040516372b0a7e760e11b815260208401356004820152602401610499565b306106956060850160408601612a4c565b6001600160a01b0316146106d8576106b36060840160408501612a4c565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f6106e66060850185612c7c565b905090505f805b828163ffffffff16101561094e575f6107096060880188612c7c565b8363ffffffff1681811061071f5761071f612cc1565b90506020028101906107319190612cd5565b61073a90612d40565b80516040519192505f91600688019161075291612db9565b9081526020016040518091039020541461078257805160405163a41f772f60e01b81526104999190600401612c53565b5f6002885f0135846040516020016107b192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107cb91612db9565b602060405180830381855afa1580156107e6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108099190612c65565b90508086600601835f01516040516108219190612db9565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108619082612e15565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff191690556108e19085612ee8565b82516040519195506108f291612db9565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a350508061094790612f08565b90506106ed565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610996910460ff1683612f2a565b6001600160401b031610156109c957604051633e1a785160e01b81526001600160401b0382166004820152602401610499565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109ed876111ea565b604001516040518263ffffffff1660e01b8152600401610a0d9190612c53565b602060405180830381865af4158015610a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4c9190612c65565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a869190613078565b5f60405180830381865af4158015610aa0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ac79190810190612c22565b90505f600282604051610ada9190612db9565b602060405180830381855afa158015610af5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b189190612c65565b9050828114610b445760405163baaea89d60e01b81526004810182905260248101849052604401610499565b5050506007909201805460ff1916600117905550505050565b610b6681611300565b505050565b5f610b7582611003565b6080015192915050565b610b876116b8565b610b905f611713565b565b610b9a6116b8565b610ba381611783565b5050565b5f610bb06116b8565b610bba8383611a68565b90505b92915050565b5f805160206136468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bf6866111ea565b604001516040518263ffffffff1660e01b8152600401610c169190612c53565b6040805180830381865af4158015610c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c54919061311b565b9150915080610c7a57604051632d07135360e01b81528115156004820152602401610499565b5f82815260048401602052604090208054610c9490612ad9565b90505f03610cb85760405163089938b360e11b815260048101839052602401610499565b60015f838152600580860160205260409091205460ff1690811115610cdf57610cdf61294b565b14610d12575f8281526005840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b5f8281526004840160205260408120610d2a9161277e565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206136468339815191529190610e0090612ad9565b90505f03610e245760405163089938b360e11b815260048101839052602401610499565b60015f838152600580840160205260409091205460ff1690811115610e4b57610e4b61294b565b14610e7e575f8281526005820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610eb5920161313c565b6020604051808303815f875af1158015610ed1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b669190612c65565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f395750825b90505f826001600160401b03166001148015610f545750303b155b905081158015610f62575080155b15610f805760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610faa57845460ff60401b1916600160401b1785555b610fb48787611fda565b8315610ffa57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61100b6127b5565b5f8281525f80516020613666833981519152602052604090819020815160e0810190925280545f80516020613646833981519152929190829060ff1660058111156110585761105861294b565b60058111156110695761106961294b565b815260200160018201805461107d90612ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546110a990612ad9565b80156110f45780601f106110cb576101008083540402835291602001916110f4565b820191905f5260205f20905b8154815290600101906020018083116110d757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61115a6116b8565b6001600160a01b03811661118357604051631e4fbdf760e01b81525f6004820152602401610499565b61118c81611713565b50565b6040515f905f80516020613646833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906111d290869086906131c6565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561124e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261127591908101906131d5565b915091508061129757604051636b2f19e960e01b815260040160405180910390fd5b8151156112bd578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156112f9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f6113096127b5565b5f805160206136468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61133c886111ea565b604001516040518263ffffffff1660e01b815260040161135c9190612c53565b6040805180830381865af4158015611376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139a919061311b565b9150915080156113c157604051632d07135360e01b81528115156004820152602401610499565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff909116908111156113f8576113f861294b565b60058111156114095761140961294b565b815260200160018201805461141d90612ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461144990612ad9565b80156114945780601f1061146b57610100808354040283529160200191611494565b820191905f5260205f20905b81548152906001019060200180831161147757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114ff576114ff61294b565b14158015611520575060018151600581111561151d5761151d61294b565b14155b1561154157805160405163170cc93360e21b81526104999190600401612b11565b6003815160058111156115565761155661294b565b036115645760048152611569565b600581525b83600601816020015160405161157f9190612db9565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156115c2576115c261294b565b0217905550602082015160018201906115db9082612e15565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156116815761168161294b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b905760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61178b6127b5565b5f8281525f805160206136668339815191526020526040808220815160e0810190925280545f8051602061364683398151915293929190829060ff1660058111156117d8576117d861294b565b60058111156117e9576117e961294b565b81526020016001820180546117fd90612ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461182990612ad9565b80156118745780601f1061184b57610100808354040283529160200191611874565b820191905f5260205f20905b81548152906001019060200180831161185757829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118e2576118e261294b565b14611915575f8481526005830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff191690600190849081111561195a5761195a61294b565b0217905550602082015160018201906119739082612e15565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f611a118582611ff4565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611aac57604051637fab81e560e01b815260040160405180910390fd5b5f8051602061364683398151915242611acb6060860160408701613262565b6001600160401b0316111580611b055750611ae96202a3004261327b565b611af96060860160408701613262565b6001600160401b031610155b15611b3f57611b1a6060850160408601613262565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b60038101546001600160401b0390611b6290600160401b9004821685831661327b565b1115611b8c57604051633e1a785160e01b81526001600160401b0384166004820152602401610499565b611ba1611b9c606086018661328e565b6121cb565b611bb1611b9c608086018661328e565b6030611bc060208601866132a2565b905014611bf257611bd460208501856132a2565b6040516326475b2f60e11b8152610499925060040190815260200190565b611bfc84806132a2565b90505f03611c2957611c0e84806132a2565b604051633e08a12560e11b81526004016104999291906132e4565b5f60068201611c3886806132a2565b604051611c469291906131c6565b90815260200160405180910390205414611c7f57611c6484806132a2565b60405163a41f772f60e01b81526004016104999291906132e4565b611c89835f612334565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611cc68a806132a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611d0e908b018b6132a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611d5760608b0160408c01613262565b6001600160401b03168152602001611d7260608b018b61328e565b611d7b906132f7565b8152602001611d8d60808b018b61328e565b611d96906132f7565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611dc49190613424565b5f60405180830381865af4158015611dde573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e0591908101906134db565b5f82815260048601602052604090209193509150611e238282612e15565b508160068401611e3388806132a2565b604051611e419291906131c6565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611e7d908590600401612c53565b6020604051808303815f875af1158015611e99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebd9190612c65565b5f8481526005860160205260409020805460ff191660011790559050611ee387806132a2565b5f858152600587016020526040902060010191611f0191908361351e565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611f6088806132a2565b604051611f6e9291906131c6565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b6040016020810190611fac9190613262565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611fe261259e565b611feb826125e7565b610ba381612600565b5f8281525f80516020613666833981519152602052604081206002015481905f8051602061364683398151915290600160801b90046001600160401b031661203c8582612334565b5f61204687612611565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156120ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121169190810190612c22565b6040518263ffffffff1660e01b81526004016121329190612c53565b6020604051808303815f875af115801561214e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121729190612c65565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b6121d86020820182612887565b63ffffffff161580156121f857506121f36020820182612c7c565b151590505b1561223f5761220a6020820182612887565b6122176020830183612c7c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b61224c6020820182612c7c565b905061225b6020830183612887565b63ffffffff1611156122745761220a6020820182612887565b60015b6122846020830183612c7c565b9050811015610ba35761229a6020830183612c7c565b6122a56001846135d7565b8181106122b4576122b4612cc1565b90506020020160208101906122c99190612a4c565b6001600160a01b03166122df6020840184612c7c565b838181106122ef576122ef612cc1565b90506020020160208101906123049190612a4c565b6001600160a01b0316101561232c57604051630dbc8d5f60e31b815260040160405180910390fd5b600101612277565b5f805160206136468339815191525f6001600160401b0380841690851611156123685761236183856135ea565b9050612375565b61237284846135ea565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806123e25750600184015481516123de916001600160401b03169061327b565b8210155b1561240a576001600160401b0380841660608301528282526040820151166020820152612429565b828160600181815161241c9190612ee8565b6001600160401b03169052505b6060810151612439906064612f2a565b602082015160018601546001600160401b0392909216916124649190600160401b900460ff16612f2a565b6001600160401b0316101561249d57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b85816040018181516124af9190612ee8565b6001600160401b03169052506040810180518691906124cf9083906135ea565b6001600160401b0316905250600184015460408201516064916124fd91600160401b90910460ff1690612f2a565b6001600160401b03161015612536576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610499565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b9057604051631afcd79f60e31b815260040160405180910390fd5b6125ef61259e565b6125f7612686565b61118c8161268e565b61260861259e565b61118c81612776565b5f8181525f805160206136668339815191526020526040812060020180545f80516020613646833981519152919060089061265b90600160401b90046001600160401b031661360a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b9061259e565b61269661259e565b80355f8051602061364683398151915290815560146126bb6060840160408501613625565b60ff1611806126da57506126d56060830160408401613625565b60ff16155b1561270e576126ef6060830160408401613625565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b61271e6060830160408401613625565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561274f6040830160208401613262565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61115a61259e565b50805461278a90612ad9565b5f825580601f10612799575050565b601f0160209004905f5260205f209081019061118c91906127f2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612806575f81556001016127f3565b5090565b5f6020828403121561281a575f80fd5b5035919050565b803563ffffffff81168114612834575f80fd5b919050565b5f806040838503121561284a575f80fd5b82356001600160401b0381111561285f575f80fd5b830160808186031215612870575f80fd5b915061287e60208401612821565b90509250929050565b5f60208284031215612897575f80fd5b610bba82612821565b80356001600160401b0381168114612834575f80fd5b5f80604083850312156128c7575f80fd5b82356001600160401b038111156128dc575f80fd5b830160a081860312156128ed575f80fd5b915061287e602084016128a0565b6001600160a01b038116811461118c575f80fd5b5f808284036080811215612921575f80fd5b606081121561292e575f80fd5b508291506060830135612940816128fb565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6006811061297b57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612999578181015183820152602001612981565b50505f910152565b5f81518084526129b881602086016020860161297f565b601f01601f19169290920160200192915050565b602081526129de60208201835161295f565b5f602083015160e060408401526129f96101008401826129a1565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f60208284031215612a5c575f80fd5b8135612a67816128fb565b9392505050565b5f8060208385031215612a7f575f80fd5b82356001600160401b0380821115612a95575f80fd5b818501915085601f830112612aa8575f80fd5b813581811115612ab6575f80fd5b866020828501011115612ac7575f80fd5b60209290920196919550909350505050565b600181811c90821680612aed57607f821691505b602082108103612b0b57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610bbd828461295f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612b5557612b55612b1f565b60405290565b604080519081016001600160401b0381118282101715612b5557612b55612b1f565b604051601f8201601f191681016001600160401b0381118282101715612ba557612ba5612b1f565b604052919050565b5f6001600160401b03821115612bc557612bc5612b1f565b50601f01601f191660200190565b5f82601f830112612be2575f80fd5b8151612bf5612bf082612bad565b612b7d565b818152846020838601011115612c09575f80fd5b612c1a82602083016020870161297f565b949350505050565b5f60208284031215612c32575f80fd5b81516001600160401b03811115612c47575f80fd5b612c1a84828501612bd3565b602081525f610bba60208301846129a1565b5f60208284031215612c75575f80fd5b5051919050565b5f808335601e19843603018112612c91575f80fd5b8301803591506001600160401b03821115612caa575f80fd5b6020019150600581901b36038213156121c4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612ce9575f80fd5b9190910192915050565b5f82601f830112612d02575f80fd5b8135612d10612bf082612bad565b818152846020838601011115612d24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612d50575f80fd5b612d58612b33565b82356001600160401b0380821115612d6e575f80fd5b612d7a36838701612cf3565b83526020850135915080821115612d8f575f80fd5b50612d9c36828601612cf3565b602083015250612dae604084016128a0565b604082015292915050565b5f8251612ce981846020870161297f565b601f821115610b6657805f5260205f20601f840160051c81016020851015612def5750805b601f840160051c820191505b81811015612e0e575f8155600101612dfb565b5050505050565b81516001600160401b03811115612e2e57612e2e612b1f565b612e4281612e3c8454612ad9565b84612dca565b602080601f831160018114612e75575f8415612e5e5750858301515b5f19600386901b1c1916600185901b178555612ecc565b5f85815260208120601f198616915b82811015612ea357888601518255948401946001909101908401612e84565b5085821015612ec057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156112f9576112f9612ed4565b5f63ffffffff808316818103612f2057612f20612ed4565b6001019392505050565b6001600160401b03818116838216028082169190828114612f4d57612f4d612ed4565b505092915050565b5f808335601e19843603018112612f6a575f80fd5b83016020810192503590506001600160401b03811115612f88575f80fd5b8036038213156121c4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561306b57848303601f19018952813536889003605e19018112612ffa575f80fd5b870160606130088280612f55565b8287526130188388018284612f96565b9250505061302886830183612f55565b8683038888015261303a838284612f96565b9250505060406001600160401b036130538285016128a0565b16950194909452509783019790830190600101612fd5565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561309c816128fb565b6001600160a01b031660608381019190915283013536849003601e190181126130c3575f80fd5b83016020810190356001600160401b038111156130de575f80fd5b8060051b36038213156130ef575f80fd5b60808085015261310360a085018284612fbe565b95945050505050565b80518015158114612834575f80fd5b5f806040838503121561312c575f80fd5b8251915061287e6020840161310c565b5f60208083525f845461314e81612ad9565b806020870152604060018084165f811461316f576001811461318b576131b8565b60ff19851660408a0152604084151560051b8a010195506131b8565b895f5260205f205f5b858110156131af5781548b8201860152908301908801613194565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156131e6575f80fd5b82516001600160401b03808211156131fc575f80fd5b908401906060828703121561320f575f80fd5b613217612b33565b825181526020830151613229816128fb565b602082015260408301518281111561323f575f80fd5b61324b88828601612bd3565b604083015250935061287e9150506020840161310c565b5f60208284031215613272575f80fd5b610bba826128a0565b80820180821115610bbd57610bbd612ed4565b5f8235603e19833603018112612ce9575f80fd5b5f808335601e198436030181126132b7575f80fd5b8301803591506001600160401b038211156132d0575f80fd5b6020019150368190038213156121c4575f80fd5b602081525f612c1a602083018486612f96565b5f60408236031215613307575f80fd5b61330f612b5b565b61331883612821565b81526020808401356001600160401b0380821115613334575f80fd5b9085019036601f830112613346575f80fd5b81358181111561335857613358612b1f565b8060051b9150613369848301612b7d565b8181529183018401918481019036841115613382575f80fd5b938501935b838510156133ac578435925061339c836128fb565b8282529385019390850190613387565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156134195784516001600160a01b031682529383019360019290920191908301906133f0565b509695505050505050565b60208152815160208201525f602083015160e0604084015261344a6101008401826129a1565b90506040840151601f198085840301606086015261346883836129a1565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261349883836133be565b925060a08601519150808584030160c0860152506134b682826133be565b91505060c08401516134d360e08501826001600160401b03169052565b509392505050565b5f80604083850312156134ec575f80fd5b8251915060208301516001600160401b03811115613508575f80fd5b61351485828601612bd3565b9150509250929050565b6001600160401b0383111561353557613535612b1f565b613549836135438354612ad9565b83612dca565b5f601f84116001811461357a575f85156135635750838201355b5f19600387901b1c1916600186901b178355612e0e565b5f83815260208120601f198716915b828110156135a95786850135825560209485019460019092019101613589565b50868210156135c5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610bbd57610bbd612ed4565b6001600160401b038281168282160390808211156112f9576112f9612ed4565b5f6001600160401b03808316818103612f2057612f20612ed4565b5f60208284031215613635575f80fd5b813560ff81168114612a67575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220f165cf2c5e4c6cb16a4bc18a3f6898f7f7d19f36b47cdc62240b6f55f3c4da3e64736f6c63430008190033",
}
// PoAValidatorManagerABI is the input ABI used to generate the binding from.
@@ -2032,7 +2032,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorWeightUpd
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220c86fc0fb87c524ec5b0c98159450f3ea9dc01af042aec5aff977246d615450e664736f6c63430008190033",
+ Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212204be60cc6edf9cbf66de0cf61ac7b9875c2e34000fdb727695f40b759d3220af564736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
From 7a812adf7a8723791993829f074addb561846294 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Thu, 28 Nov 2024 10:52:34 -0500
Subject: [PATCH 13/15] Bindings
---
contracts/validator-manager/README.md | 2 +-
.../tests/ValidatorMessagesTests.t.sol | 38 +++++++++----------
.../validator-manager/erc20_token_staking.go | 12 +++---
.../validator-manager/native_token_staking.go | 12 +++---
tests/utils/validator_manager.go | 2 +-
5 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md
index 91b7658fc..165deb01b 100644
--- a/contracts/validator-manager/README.md
+++ b/contracts/validator-manager/README.md
@@ -132,7 +132,7 @@ Disabled L1 validators can re-activate at any time by increasing their balance w
### (PoS only) Remove a Delegator
-Delegators removal may be initiated by calling `initializeEndDelegation`, as long as churn restrictions are not violated. Similar to `initializeEndValidation`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `SubnetValidatorWeightUpdateMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeEndDelegation`.
+Delegators removal may be initiated by calling `initializeEndDelegation`, as long as churn restrictions are not violated. Similar to `initializeEndValidation`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeEndDelegation`.
Either the delegator owner or the validator owner may initiate removing a delegator. This is to prevent the validator from being unable to remove itself due to churn limitations if it is has too high a proportion of the Subnet's total weight due to delegator additions. The validator owner may only remove Delegators after the minimum stake duration has elapsed.
diff --git a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
index 5e68f3837..828949450 100644
--- a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
+++ b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol
@@ -33,7 +33,7 @@ contract ValidatorMessagesTest is Test {
DEFAULT_P_CHAIN_OWNER = PChainOwner({threshold: 1, addresses: addresses});
}
- function testSubnetConversionMessageInvalidInputLength() public {
+ function testSubnetToL1ConversionMessageInvalidInputLength() public {
bytes memory packed =
ValidatorMessages.packSubnetToL1ConversionMessage(DEFAULT_SUBNET_CONVERSION_ID);
// Invalid length
@@ -47,7 +47,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackSubnetToL1ConversionMessage(invalidPacked);
}
- function testSubnetConversionMessageInvalidCodecID() public {
+ function testSubnetToL1ConversionMessageInvalidCodecID() public {
bytes memory packed =
ValidatorMessages.packSubnetToL1ConversionMessage(DEFAULT_SUBNET_CONVERSION_ID);
@@ -60,7 +60,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackSubnetToL1ConversionMessage(invalidPacked2);
}
- function testSubnetConversionMessageInvalidTypeID() public {
+ function testSubnetToL1ConversionMessageInvalidTypeID() public {
bytes memory packed =
ValidatorMessages.packSubnetToL1ConversionMessage(DEFAULT_SUBNET_CONVERSION_ID);
// Invalid message type
@@ -70,7 +70,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackSubnetToL1ConversionMessage(invalidPacked3);
}
- function testRegisterSubnetValidatorMessageInvalidBLSKey() public {
+ function testRegisterL1ValidatorMessageInvalidBLSKey() public {
vm.expectRevert(ValidatorMessages.InvalidBLSPublicKey.selector);
// 47 bytes
bytes memory invalidBLSKey = bytes(
@@ -89,7 +89,7 @@ contract ValidatorMessagesTest is Test {
);
}
- function testRegisterSubnetValidatorMessageInvalidInputLength() public {
+ function testRegisterL1ValidatorMessageInvalidInputLength() public {
bytes memory packed = _getPackedRegisterL1ValidatorMessage();
// Invalid length
bytes memory invalidPacked = new bytes(packed.length - 1);
@@ -104,7 +104,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackRegisterL1ValidatorMessage(invalidPacked);
}
- function testRegisterSubnetValidatorMessageInvalidCodecID() public {
+ function testRegisterL1ValidatorMessageInvalidCodecID() public {
bytes memory packed = _getPackedRegisterL1ValidatorMessage();
// Invalid codec ID
@@ -116,7 +116,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackRegisterL1ValidatorMessage(invalidPacked2);
}
- function testRegisterSubnetValidatorMessageInvalidTypeID() public {
+ function testRegisterL1ValidatorMessageInvalidTypeID() public {
bytes memory packed = _getPackedRegisterL1ValidatorMessage();
// Invalid message type
@@ -126,7 +126,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackRegisterL1ValidatorMessage(invalidPacked3);
}
- function testSubnetValidatorRegistrationMessageInvalidInputLength() public {
+ function testL1ValidatorRegistrationMessageInvalidInputLength() public {
bytes memory packed =
ValidatorMessages.packL1ValidatorRegistrationMessage(DEFAULT_VALIDATION_ID, true);
@@ -141,7 +141,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackL1ValidatorRegistrationMessage(invalidPacked);
}
- function testSubnetValidatorRegistrationMessageInvalidCodecID() public {
+ function testL1ValidatorRegistrationMessageInvalidCodecID() public {
bytes memory packed =
ValidatorMessages.packL1ValidatorRegistrationMessage(DEFAULT_VALIDATION_ID, true);
@@ -154,7 +154,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackL1ValidatorRegistrationMessage(invalidPacked2);
}
- function testSubnetValidatorRegistrationMessageInvalidTypeID() public {
+ function testL1ValidatorRegistrationMessageInvalidTypeID() public {
bytes memory packed =
ValidatorMessages.packL1ValidatorRegistrationMessage(DEFAULT_VALIDATION_ID, true);
@@ -204,7 +204,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackValidationUptimeMessage(invalidPacked3);
}
- function testSetSubnetValidatorWeightMessageInvalidInputLength() public {
+ function testSetL1ValidatorWeightMessageInvalidInputLength() public {
bytes memory packed = ValidatorMessages.packL1ValidatorWeightMessage(
DEFAULT_VALIDATION_ID, 100, DEFAULT_WEIGHT
);
@@ -220,7 +220,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackL1ValidatorWeightMessage(invalidPacked);
}
- function testSetSubnetValidatorWeightMessageInvalidCodecID() public {
+ function testSetL1ValidatorWeightMessageInvalidCodecID() public {
bytes memory packed = ValidatorMessages.packL1ValidatorWeightMessage(
DEFAULT_VALIDATION_ID, 100, DEFAULT_WEIGHT
);
@@ -234,7 +234,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackL1ValidatorWeightMessage(invalidPacked2);
}
- function testSetSubnetValidatorWeightMessageInvalidTypeID() public {
+ function testSetL1ValidatorWeightMessageInvalidTypeID() public {
bytes memory packed = ValidatorMessages.packL1ValidatorWeightMessage(
DEFAULT_VALIDATION_ID, 100, DEFAULT_WEIGHT
);
@@ -246,7 +246,7 @@ contract ValidatorMessagesTest is Test {
ValidatorMessages.unpackL1ValidatorWeightMessage(invalidPacked3);
}
- function testRegisterSubnetValidatorMessage() public view {
+ function testRegisterL1ValidatorMessage() public view {
(bytes32 validationID, bytes memory packed) = ValidatorMessages
.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
@@ -272,7 +272,7 @@ contract ValidatorMessagesTest is Test {
assertEq(recoveredID, validationID);
}
- function testSubnetConversionMessage() public pure {
+ function testSubnetToL1ConversionMessage() public pure {
bytes memory packed =
ValidatorMessages.packSubnetToL1ConversionMessage(DEFAULT_SUBNET_CONVERSION_ID);
bytes32 conversionID = ValidatorMessages.unpackSubnetToL1ConversionMessage(packed);
@@ -298,7 +298,7 @@ contract ValidatorMessagesTest is Test {
assertEq(packed.length, 186);
}
- function testSubnetValidatorRegistrationMessage() public pure {
+ function testL1ValidatorRegistrationMessage() public pure {
bytes memory packed =
ValidatorMessages.packL1ValidatorRegistrationMessage(DEFAULT_VALIDATION_ID, true);
(bytes32 validationID, bool valid) =
@@ -307,7 +307,7 @@ contract ValidatorMessagesTest is Test {
assert(valid);
}
- function testSetSubnetValidatorWeightMessage() public pure {
+ function testSetL1ValidatorWeightMessage() public pure {
bytes memory packed = ValidatorMessages.packL1ValidatorWeightMessage(
DEFAULT_VALIDATION_ID, 100, DEFAULT_WEIGHT
);
@@ -318,7 +318,7 @@ contract ValidatorMessagesTest is Test {
assertEq(weight, DEFAULT_WEIGHT);
}
- function testSubnetValidatorWeightUpdateMessage() public pure {
+ function testL1ValidatorWeightMessage() public pure {
bytes memory packed = ValidatorMessages.packL1ValidatorWeightMessage(
DEFAULT_VALIDATION_ID, 100, DEFAULT_WEIGHT
);
@@ -338,7 +338,7 @@ contract ValidatorMessagesTest is Test {
assertEq(uptime, 100);
}
- function _getPackedRegisterL1ValidatorMessage() internal returns (bytes memory) {
+ function _getPackedRegisterL1ValidatorMessage() internal view returns (bytes memory) {
(, bytes memory packed) = ValidatorMessages.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
l1ID: DEFAULT_L1_ID,
diff --git a/tests/flows/validator-manager/erc20_token_staking.go b/tests/flows/validator-manager/erc20_token_staking.go
index 94e65a91d..941d65536 100644
--- a/tests/flows/validator-manager/erc20_token_staking.go
+++ b/tests/flows/validator-manager/erc20_token_staking.go
@@ -148,7 +148,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
aggregator := network.GetSignatureAggregator()
defer aggregator.Shutdown()
- // Gather subnet-evm Warp signatures for the SubnetValidatorWeightUpdateMessage & relay to the P-Chain
+ // Gather subnet-evm Warp signatures for the L1ValidatorWeightMessage & relay to the P-Chain
signedWarpMessage := utils.ConstructSignedWarpMessage(
context.Background(),
receipt,
@@ -163,8 +163,8 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
utils.PChainProposerVMWorkaround(network.GetPChainWallet())
utils.AdvanceProposerVM(ctx, l1AInfo, fundedKey, 5)
- // Construct an L1ValidatorWeightUpdateMessage Warp message from the P-Chain
- registrationSignedMessage := utils.ConstructL1ValidatorWeightUpdateMessage(
+ // Construct an L1ValidatorWeightMessage Warp message from the P-Chain
+ registrationSignedMessage := utils.ConstructL1ValidatorWeightMessage(
validationID,
nonce,
newValidatorWeight,
@@ -217,7 +217,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
aggregator := network.GetSignatureAggregator()
defer aggregator.Shutdown()
- // Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
+ // Gather subnet-evm Warp signatures for the SetL1ValidatorWeightMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
signedWarpMessage := utils.ConstructSignedWarpMessage(
context.Background(),
@@ -234,8 +234,8 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) {
utils.PChainProposerVMWorkaround(network.GetPChainWallet())
utils.AdvanceProposerVM(ctx, l1AInfo, fundedKey, 5)
- // Construct an L1ValidatorWeightUpdateMessage Warp message from the P-Chain
- signedMessage := utils.ConstructL1ValidatorWeightUpdateMessage(
+ // Construct an L1ValidatorWeightMessage Warp message from the P-Chain
+ signedMessage := utils.ConstructL1ValidatorWeightMessage(
validationID,
nonce,
nodes[0].Weight,
diff --git a/tests/flows/validator-manager/native_token_staking.go b/tests/flows/validator-manager/native_token_staking.go
index 4f8928ce5..99bc1fd8f 100644
--- a/tests/flows/validator-manager/native_token_staking.go
+++ b/tests/flows/validator-manager/native_token_staking.go
@@ -142,7 +142,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
aggregator := network.GetSignatureAggregator()
defer aggregator.Shutdown()
- // Gather subnet-evm Warp signatures for the SubnetValidatorWeightUpdateMessage & relay to the P-Chain
+ // Gather subnet-evm Warp signatures for the L1ValidatorWeightMessage & relay to the P-Chain
signedWarpMessage := utils.ConstructSignedWarpMessage(
context.Background(),
receipt,
@@ -157,8 +157,8 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
utils.PChainProposerVMWorkaround(network.GetPChainWallet())
utils.AdvanceProposerVM(ctx, l1AInfo, fundedKey, 5)
- // Construct a L1ValidatorWeightUpdateMessage Warp message from the P-Chain
- registrationSignedMessage := utils.ConstructL1ValidatorWeightUpdateMessage(
+ // Construct a L1ValidatorWeightMessage Warp message from the P-Chain
+ registrationSignedMessage := utils.ConstructL1ValidatorWeightMessage(
validationID,
nonce,
newValidatorWeight,
@@ -210,7 +210,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
aggregator := network.GetSignatureAggregator()
defer aggregator.Shutdown()
- // Gather subnet-evm Warp signatures for the SetSubnetValidatorWeightMessage & relay to the P-Chain
+ // Gather subnet-evm Warp signatures for the SetL1ValidatorWeightMessage & relay to the P-Chain
// (Sending to the P-Chain will be skipped for now)
signedWarpMessage := utils.ConstructSignedWarpMessage(
context.Background(),
@@ -227,8 +227,8 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) {
utils.PChainProposerVMWorkaround(network.GetPChainWallet())
utils.AdvanceProposerVM(ctx, l1AInfo, fundedKey, 5)
- // Construct a SubnetValidatorWeightUpdateMessage Warp message from the P-Chain
- signedMessage := utils.ConstructL1ValidatorWeightUpdateMessage(
+ // Construct a L1ValidatorWeightMessage Warp message from the P-Chain
+ signedMessage := utils.ConstructL1ValidatorWeightMessage(
validationID,
nonce,
nodes[0].Weight,
diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go
index d93042cf4..8618e0292 100644
--- a/tests/utils/validator_manager.go
+++ b/tests/utils/validator_manager.go
@@ -1452,7 +1452,7 @@ func ConstructL1ValidatorRegistrationMessage(
return registrationSignedMessage
}
-func ConstructL1ValidatorWeightUpdateMessage(
+func ConstructL1ValidatorWeightMessage(
validationID ids.ID,
nonce uint64,
weight uint64,
From 9ed8d9d8c21388f2356261bbe9fcaa4fcccc6544 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Thu, 28 Nov 2024 12:59:07 -0500
Subject: [PATCH 14/15] Fix tests
---
tests/utils/validator_manager.go | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go
index 8618e0292..395b76a10 100644
--- a/tests/utils/validator_manager.go
+++ b/tests/utils/validator_manager.go
@@ -568,9 +568,10 @@ func InitializeAndCompleteNativeValidatorRegistration(
// Construct a L1ValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator registration")
- registrationSignedMessage := ConstructL1ValidatorRegistrationMessageForInitialValidator(
+ registrationSignedMessage := ConstructL1ValidatorRegistrationMessage(
validationID,
- 0,
+ expiry,
+ node,
true,
l1Info,
pChainInfo,
@@ -645,9 +646,10 @@ func InitializeAndCompleteERC20ValidatorRegistration(
// Construct a L1ValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator registration")
- registrationSignedMessage := ConstructL1ValidatorRegistrationMessageForInitialValidator(
+ registrationSignedMessage := ConstructL1ValidatorRegistrationMessage(
validationID,
- 0,
+ expiry,
+ node,
true,
l1Info,
pChainInfo,
@@ -712,9 +714,10 @@ func InitializeAndCompletePoAValidatorRegistration(
// Construct a L1ValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator registration")
- registrationSignedMessage := ConstructL1ValidatorRegistrationMessageForInitialValidator(
+ registrationSignedMessage := ConstructL1ValidatorRegistrationMessage(
validationID,
- 0,
+ expiry,
+ node,
true,
l1Info,
pChainInfo,
@@ -1184,9 +1187,10 @@ func InitializeAndCompleteEndPoSValidation(
// Construct a L1ValidatorRegistrationMessage Warp message from the P-Chain
log.Println("Completing validator removal")
- registrationSignedMessage := ConstructL1ValidatorRegistrationMessageForInitialValidator(
+ registrationSignedMessage := ConstructL1ValidatorRegistrationMessage(
validationID,
- 0,
+ expiry,
+ node,
false,
l1Info,
pChainInfo,
@@ -1328,9 +1332,10 @@ func InitializeAndCompleteEndPoAValidation(
ValidateL1ValidatorWeightMessage(signedWarpMessage, validationID, 0, nonce)
// Construct a L1ValidatorRegistrationMessage Warp message from the P-Chain
- registrationSignedMessage := ConstructL1ValidatorRegistrationMessageForInitialValidator(
+ registrationSignedMessage := ConstructL1ValidatorRegistrationMessage(
validationID,
0,
+ Node{},
false,
l1Info,
pChainInfo,
From 3661a5795d87cbc5f2c5193e5f3721c47095a858 Mon Sep 17 00:00:00 2001
From: Geoff Stuart
Date: Thu, 28 Nov 2024 13:43:49 -0500
Subject: [PATCH 15/15] Cleanup
---
.../ERC20TokenStakingManager.go | 4 ++--
.../NativeTokenStakingManager.go | 4 ++--
.../PoAValidatorManager.go | 4 ++--
.../tests/ReceiveCrossChainMessageTests.t.sol | 2 +-
.../validator-manager/ValidatorManager.sol | 6 +++---
.../validator-manager/ValidatorMessages.sol | 2 +-
.../interfaces/IValidatorManager.sol | 2 +-
.../tests/PoSValidatorManagerTests.t.sol | 12 +++++------
.../tests/ValidatorManagerTests.t.sol | 20 +++++++++----------
tests/flows/teleporter/add_fee_amount.go | 2 +-
tests/flows/teleporter/insufficient_gas.go | 6 ++++--
.../teleporter/registry/pause_teleporter.go | 4 ++--
.../registry/teleporter_registry.go | 2 +-
.../teleporter/send_specific_receipts.go | 12 +++++------
tests/interfaces/subnet_test_info.go | 2 +-
.../teleporter/teleporter_suite_test.go | 3 ++-
tests/utils/teleporter.go | 6 +++---
17 files changed, 48 insertions(+), 45 deletions(-)
diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
index a1d4dbd35..9477d8047 100644
--- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
+++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go
@@ -104,7 +104,7 @@ type ValidatorRegistrationInput struct {
// ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract.
var ERC20TokenStakingManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b50604051615f7d380380615f7d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e308061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c80637d8d2f7711610140578063afb98096116100bf578063c974d1b611610084578063c974d1b614610532578063d5f20ff61461053a578063df93d8de1461055a578063e4a63c4014610564578063fb8b11dd14610578578063fd7ac5e71461058b575f80fd5b8063afb98096146104c3578063b771b3bc146104ea578063ba3a4b97146104f8578063bc5fbfec1461050b578063bee0a03f1461051f575f80fd5b80639ae06447116101055780639ae06447146104775780639e1bc4ef1461048a5780639e478eea1461049d578063a3a65e48146104b0578063a9778a7a146102f9575f80fd5b80637d8d2f771461042357806380dd672f146104365780638280a25a146104495780638ef34c981461045157806393e2459814610464575f80fd5b8063467ef06f116101cc578063620658561161019157806362065856146103b257806366435abf146103c5578063732214f8146103d857806376f78621146103df578063785e9e86146103f2575f80fd5b8063467ef06f1461033b5780634bee00401461034e5780635dd6a6cb1461036f57806360305d621461038257806360ad77841461039f575f80fd5b806325e1c7761161021257806325e1c776146102bb5780632e2194d8146102ce57806335455ded146102f957806337b9be8f146103155780633a1cfff614610328575f80fd5b80630118acc41461024e5780630322ed9814610263578063151d30d1146102765780631ec447241461029557806320d91b7a146102a8575b5f80fd5b61026161025c366004614d74565b61059e565b005b610261610271366004614daf565b6105af565b61027e600a81565b60405160ff90911681526020015b60405180910390f35b6102616102a3366004614d74565b61083f565b6102616102b6366004614dc6565b61084b565b6102616102c9366004614e14565b610e01565b6102e16102dc366004614daf565b610e75565b6040516001600160401b03909116815260200161028c565b61030261271081565b60405161ffff909116815260200161028c565b610261610323366004614e49565b610ec9565b610261610336366004614d74565b610edc565b610261610349366004614e97565b610ee8565b61036161035c366004614ed5565b610fba565b60405190815260200161028c565b61026161037d366004614e49565b610fef565b61038a601481565b60405163ffffffff909116815260200161028c565b6102616103ad366004614e14565b610ffb565b6103616103c0366004614f3c565b6112c3565b6102e16103d3366004614daf565b6112e3565b6103615f81565b6102616103ed366004614d74565b6112f7565b5f80516020615d7b833981519152546001600160a01b03165b6040516001600160a01b03909116815260200161028c565b610261610431366004614e49565b611303565b610261610444366004614e14565b61130f565b61027e603081565b61026161045f366004614f57565b611549565b610261610472366004614daf565b6115fa565b610261610485366004614e49565b61168e565b610361610498366004614f85565b61169a565b6102616104ab366004614fa5565b6116c6565b6102616104be366004614e97565b6117a5565b6103617f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040b6005600160991b0181565b610261610506366004614daf565b61199b565b6103615f80516020615d9b83398151915281565b61026161052d366004614daf565b611bf4565b61027e601481565b61054d610548366004614daf565b611d30565b60405161028c919061504d565b6102e16202a30081565b6103615f80516020615d7b83398151915281565b610261610586366004614f57565b611e7f565b6103616105993660046150cd565b611f16565b6105aa8383835f611f71565b505050565b5f8181525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff1660058111156105fc576105fc614fd8565b600581111561060d5761060d614fd8565b815260200160018201805461062190615138565b80601f016020809104026020016040519081016040528092919081815260200182805461064d90615138565b80156106985780601f1061066f57610100808354040283529160200191610698565b820191905f5260205f20905b81548152906001019060200180831161067b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561070357610703614fd8565b1461073f575f8381526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156107b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107dd9190810190615279565b6040518263ffffffff1660e01b81526004016107f991906152aa565b6020604051808303815f875af1158015610815573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083991906152bc565b50505050565b6108398383835f611f9d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615d9b8339815191529060ff161561089d57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090491906152bc565b83602001351461092d576040516372b0a7e760e11b815260208401356004820152602401610736565b3061093e60608501604086016152d3565b6001600160a01b0316146109815761095c60608401604085016152d3565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610736565b5f61098f60608501856152ee565b905090505f805b828163ffffffff161015610bf7575f6109b260608801886152ee565b8363ffffffff168181106109c8576109c8615333565b90506020028101906109da9190615347565b6109e3906153b2565b80516040519192505f9160068801916109fb9161542d565b90815260200160405180910390205414610a2b57805160405163a41f772f60e01b815261073691906004016152aa565b5f6002885f013584604051602001610a5a92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a749161542d565b602060405180830381855afa158015610a8f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ab291906152bc565b90508086600601835f0151604051610aca919061542d565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b0a9082615482565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b8a9085615551565b8251604051919550610b9b9161542d565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bf090615571565b9050610996565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c3a910460ff1683615593565b6001600160401b03161015610c6d57604051633e1a785160e01b81526001600160401b0382166004820152602401610736565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c91876122ca565b604001516040518263ffffffff1660e01b8152600401610cb191906152aa565b602060405180830381865af4158015610ccc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf091906152bc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d2a91906156e9565b5f60405180830381865af4158015610d44573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d6b9190810190615279565b90505f600282604051610d7e919061542d565b602060405180830381855afa158015610d99573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dbc91906152bc565b9050828114610de85760405163baaea89d60e01b81526004810182905260248101849052604401610736565b5050506007909201805460ff1916600117905550505050565b610e0a826123e0565b610e2a576040516330efa98b60e01b815260048101839052602401610736565b5f610e3483611d30565b5190506002816005811115610e4b57610e4b614fd8565b14610e6b578060405163170cc93360e21b81526004016107369190615170565b6108398383612409565b5f80610e7f6126a8565b60030154610e8d908461577d565b9050801580610ea257506001600160401b0381115b15610ec35760405163222d164360e21b815260048101849052602401610736565b92915050565b610ed584848484611f9d565b5050505050565b6108398383835f6126cc565b610ef0612909565b5f610ef96126a8565b90505f80610f0684612940565b91509150610f13826123e0565b610f1f57505050610fa1565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680610f615750805b600483516005811115610f7657610f76614fd8565b03610f8557610f858185612cf8565b610f9b82610f9685604001516112c3565b612d22565b50505050505b610fb760015f80516020615ddb83398151915255565b50565b5f610fc3612909565b610fcf85858585612d58565b9050610fe760015f80516020615ddb83398151915255565b949350505050565b61083984848484612ed8565b5f6110046126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561103d5761103d614fd8565b600381111561104e5761104e614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110c482611d30565b90506001835160038111156110db576110db614fd8565b146110fc578251604051633b0d540d60e21b8152610736919060040161579c565b60048151600581111561111157611111614fd8565b036111275761111f86612f04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61114c896122ca565b604001516040518263ffffffff1660e01b815260040161116c91906152aa565b606060405180830381865af4158015611187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab91906157b6565b50915091508184146111d857846040015160405163089938b360e11b815260040161073691815260200190565b806001600160401b031683606001516001600160401b031610806112115750806001600160401b03168560a001516001600160401b0316115b1561123a57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112cc6126a8565b60030154610ec3906001600160401b0384166157f6565b5f6112ed82611d30565b6080015192915050565b6105aa8383835f612ed8565b610ed5848484846126cc565b611317612909565b5f6113206126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561135957611359614fd8565b600381111561136a5761136a614fd8565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113e3576113e3614fd8565b14611404578051604051633b0d540d60e21b8152610736919060040161579c565b60046114138260400151611d30565b51600581111561142557611425614fd8565b14611524575f611434846122ca565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161147391906152aa565b606060405180830381865af415801561148e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b291906157b6565b5091509150818460400151146114de5760405163089938b360e11b815260048101839052602401610736565b806001600160401b03168460c001516001600160401b0316111561152057604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5050505b61152d84612f04565b505061154560015f80516020615ddb83398151915255565b5050565b5f6115526126a8565b90506001600160a01b0382166115865760405163caa903f960e01b81526001600160a01b0383166004820152602401610736565b5f8381526006820160205260409020546001600160a01b031633146115cc57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610736565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116036126a8565b90505f61160f83611d30565b519050600481600581111561162657611626614fd8565b14611646578060405163170cc93360e21b81526004016107369190615170565b5f8381526006830160205260409020546001600160a01b0316331461166b57336115a7565b5f8381526006830160205260409020546105aa906001600160a01b031684612cf8565b61083984848484611f71565b5f6116a3612909565b6116ae8333846130fe565b9050610ec360015f80516020615ddb83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061170f575080546001600160401b03808416911610155b1561172d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556117588484613343565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117d8866122ca565b604001516040518263ffffffff1660e01b81526004016117f891906152aa565b6040805180830381865af4158015611812573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611836919061580d565b915091508061185c57604051632d07135360e01b81528115156004820152602401610736565b5f8281526004840160205260409020805461187690615138565b90505f0361189a5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580860160205260409091205460ff16908111156118c1576118c1614fd8565b146118f4575f8281526005840160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f828152600484016020526040812061190c91614cc3565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119a46126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119dd576119dd614fd8565b60038111156119ee576119ee614fd8565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a6757611a67614fd8565b14158015611a885750600381516003811115611a8557611a85614fd8565b14155b15611aa9578051604051633b0d540d60e21b8152610736919060040161579c565b5f611ab78260400151611d30565b905080606001516001600160401b03165f03611ae9576040516339b894f960e21b815260048101859052602401610736565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b5793906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b71573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b989190810190615279565b6040518263ffffffff1660e01b8152600401611bb491906152aa565b6020604051808303815f875af1158015611bd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed591906152bc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615d9b8339815191529190611c3b90615138565b90505f03611c5f5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580840160205260409091205460ff1690811115611c8657611c86614fd8565b14611cb9575f8281526005820160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611cf09201615830565b6020604051808303815f875af1158015611d0c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105aa91906152bc565b611d38614cfa565b5f8281525f80516020615dbb833981519152602052604090819020815160e0810190925280545f80516020615d9b833981519152929190829060ff166005811115611d8557611d85614fd8565b6005811115611d9657611d96614fd8565b8152602001600182018054611daa90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd690615138565b8015611e215780601f10611df857610100808354040283529160200191611e21565b820191905f5260205f20905b815481529060010190602001808311611e0457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611eb15760405163caa903f960e01b81526001600160a01b0382166004820152602401610736565b5f611eba6126a8565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611ee857336115a7565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615d9b833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f5990869086906158ba565b90815260200160405180910390205491505092915050565b611f7d84848484611f9d565b61083957604051631036cf9160e11b815260048101859052602401610736565b5f80611fa76126a8565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fe057611fe0614fd8565b6003811115611ff157611ff1614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61206782611d30565b905060028351600381111561207e5761207e614fd8565b1461209f578251604051633b0d540d60e21b8152610736919060040161579c565b60208301516001600160a01b0316331461213b575f8281526006850160205260409020546001600160a01b031633146120d857336115a7565b5f82815260068501602052604090205460a082015161210791600160b01b90046001600160401b031690615551565b6001600160401b031642101561213b5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b60028151600581111561215057612150614fd8565b036122725760028401546080840151612172916001600160401b031690615551565b6001600160401b03164210156121a65760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b87156121b8576121b68288612409565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121f19184916121ec91906158c9565b61335d565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561223484888c613534565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fe79350505050565b60048151600581111561228757612287614fd8565b036122ae5761229783878b613534565b506122a189612f04565b6001945050505050610fe7565b805160405163170cc93360e21b81526107369190600401615170565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561232e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261235591908101906158e9565b915091508061237757604051636b2f19e960e01b815260040160405180910390fd5b81511561239d578151604051636ba589a560e01b81526004810191909152602401610736565b60208201516001600160a01b0316156123d9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5092915050565b5f806123ea6126a8565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261247b91908101906158e9565b915091508061249d57604051636b2f19e960e01b815260040160405180910390fd5b5f6124a66126a8565b60058101548451919250146124d4578251604051636ba589a560e01b81526004810191909152602401610736565b60208301516001600160a01b031615612510576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b60208301516001600160a01b03161561254c576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161258991906152aa565b6040805180830381865af41580156125a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c79190615979565b915091508188146125ee5760405163089938b360e11b815260048101899052602401610736565b5f8881526006840160205260409020600101546001600160401b03908116908216111561267f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261269d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126d66126a8565b90505f6126e287613722565b90506126ed876123e0565b6126fc57600192505050610fe7565b5f8781526006830160205260409020546001600160a01b0316331461272157336115a7565b5f87815260068301602052604090205460a082015161275091600160b01b90046001600160401b031690615551565b6001600160401b03168160c001516001600160401b031610156127975760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610736565b5f86156127af576127a88887612409565b90506127cd565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127f2906112c3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561285b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287f91906152bc565b90506001600160a01b0386166128ab575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906128ca90849061599c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615ddb83398151915280546001190161293a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612949614cfa565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61297c886122ca565b604001516040518263ffffffff1660e01b815260040161299c91906152aa565b6040805180830381865af41580156129b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129da919061580d565b915091508015612a0157604051632d07135360e01b81528115156004820152602401610736565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a3857612a38614fd8565b6005811115612a4957612a49614fd8565b8152602001600182018054612a5d90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8990615138565b8015612ad45780601f10612aab57610100808354040283529160200191612ad4565b820191905f5260205f20905b815481529060010190602001808311612ab757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b3f57612b3f614fd8565b14158015612b605750600181516005811115612b5d57612b5d614fd8565b14155b15612b8157805160405163170cc93360e21b81526107369190600401615170565b600381516005811115612b9657612b96614fd8565b03612ba45760048152612ba9565b600581525b836006018160200151604051612bbf919061542d565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612c0257612c02614fd8565b021790555060208201516001820190612c1b9082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc157612cc1614fd8565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d016126a8565b5f838152600a82016020526040812080549190559091506108398482613a07565b5f80516020615d7b83398151915254611545906001600160a01b03168383613a7d565b60015f80516020615ddb83398151915255565b5f80612d626126a8565b600281015490915061ffff600160401b90910481169086161080612d8b575061271061ffff8616115b15612daf57604051635f12e6c360e11b815261ffff86166004820152602401610736565b60028101546001600160401b039081169085161015612deb576040516202a06d60e11b81526001600160401b0385166004820152602401610736565b8054831080612dfd5750806001015483115b15612e1e5760405163222d164360e21b815260048101849052602401610736565b5f612e2884613adc565b90505f612e3482610e75565b90505f612e418983613aff565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612ee4848484846126cc565b61083957604051635bff683f60e11b815260048101859052602401610736565b5f612f0d6126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f4657612f46614fd8565b6003811115612f5757612f57614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ff47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130039190615551565b6001600160401b03164210156130375760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680613092575060208201515b5f8061309f838886614071565b915091506130b88560200151610f9687606001516112c3565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131086126a8565b90505f6131176102dc85613adc565b90505f61312387611d30565b905061312e876123e0565b61314e576040516330efa98b60e01b815260048101889052602401610736565b60028151600581111561316357613163614fd8565b1461318457805160405163170cc93360e21b81526107369190600401615170565b5f8282608001516131959190615551565b905083600201600a9054906101000a90046001600160401b031682604001516131be9190615593565b6001600160401b0316816001600160401b031611156131fb57604051636d51fe0560e11b81526001600160401b0382166004820152602401610736565b5f806132078a8461335d565b915091505f8a8360405160200161323592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61334b61411e565b61335482614169565b611545816141e3565b5f8281525f80516020615dbb833981519152602052604081206002015481905f80516020615d9b83398151915290600160801b90046001600160401b03166133a5858261424b565b5f6133af876144b5565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613458573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347f9190810190615279565b6040518263ffffffff1660e01b815260040161349b91906152aa565b6020604051808303815f875af11580156134b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134db91906152bc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353e6126a8565b90505f61354e8660400151611d30565b90505f60038251600581111561356657613566614fd8565b1480613584575060048251600581111561358257613582614fd8565b145b15613594575060c08101516135d1565b6002825160058111156135a9576135a9614fd8565b036135b55750426135d1565b815160405163170cc93360e21b81526107369190600401615170565b86608001516001600160401b0316816001600160401b0316116135f9575f935050505061333c565b600483015460608801515f916001600160a01b031690634f22429f9061361e906112c3565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c391906152bc565b90506001600160a01b0387166136db57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b61372a614cfa565b5f8281525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff16600581111561377757613777614fd8565b600581111561378857613788614fd8565b815260200160018201805461379c90615138565b80601f01602080910402602001604051908101604052809291908181526020018280546137c890615138565b80156138135780601f106137ea57610100808354040283529160200191613813565b820191905f5260205f20905b8154815290600101906020018083116137f657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561388157613881614fd8565b146138b4575f8481526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156138f9576138f9614fd8565b0217905550602082015160018201906139129082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139b0858261335d565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d7b83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a62575f80fd5b505af1158015613a74573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526105aa91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061452a565b5f610ec3825f80516020615d7b833981519152546001600160a01b03169061458b565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b4357604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d9b83398151915242613b626060860160408701614f3c565b6001600160401b0316111580613b9c5750613b806202a3004261599c565b613b906060860160408701614f3c565b6001600160401b031610155b15613bd657613bb16060850160408601614f3c565b604051635879da1360e11b81526001600160401b039091166004820152602401610736565b60038101546001600160401b0390613bf990600160401b9004821685831661599c565b1115613c2357604051633e1a785160e01b81526001600160401b0384166004820152602401610736565b613c38613c3360608601866159af565b614597565b613c48613c3360808601866159af565b6030613c5760208601866159c3565b905014613c8957613c6b60208501856159c3565b6040516326475b2f60e11b8152610736925060040190815260200190565b613c9384806159c3565b90505f03613cc057613ca584806159c3565b604051633e08a12560e11b8152600401610736929190615a05565b5f60068201613ccf86806159c3565b604051613cdd9291906158ba565b90815260200160405180910390205414613d1657613cfb84806159c3565b60405163a41f772f60e01b8152600401610736929190615a05565b613d20835f61424b565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d5d8a806159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613da5908b018b6159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dee60608b0160408c01614f3c565b6001600160401b03168152602001613e0960608b018b6159af565b613e1290615a18565b8152602001613e2460808b018b6159af565b613e2d90615a18565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e5b9190615b45565b5f60405180830381865af4158015613e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e9c9190810190615bfc565b5f82815260048601602052604090209193509150613eba8282615482565b508160068401613eca88806159c3565b604051613ed89291906158ba565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613f149085906004016152aa565b6020604051808303815f875af1158015613f30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f5491906152bc565b5f8481526005860160205260409020805460ff191660011790559050613f7a87806159c3565b5f858152600587016020526040902060010191613f98919083615c3f565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ff788806159c3565b6040516140059291906158ba565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906140439190614f3c565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61407c6126a8565b5f86815260088201602052604081208054908290559192509081908015614110575f878152600685016020526040902054612710906140c690600160a01b900461ffff16836157f6565b6140d0919061577d565b91508184600a015f8981526020019081526020015f205f8282546140f4919061599c565b9091555061410490508282615cf8565b92506141108984613a07565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661416757604051631afcd79f60e31b815260040160405180910390fd5b565b61417161411e565b61417a81614700565b614182614719565b610fb76060820135608083013561419f60c0850160a08601614f3c565b6141af60e0860160c08701615d0b565b6141c0610100870160e08801615d24565b6101008701356141d861014089016101208a016152d3565b886101400135614729565b6141eb61411e565b5f80516020615d7b8339815191526001600160a01b03821661422b57604051637330680360e01b81526001600160a01b0383166004820152602401610736565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d9b8339815191525f6001600160401b03808416908516111561427f5761427883856158c9565b905061428c565b61428984846158c9565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142f95750600184015481516142f5916001600160401b03169061599c565b8210155b15614321576001600160401b0380841660608301528282526040820151166020820152614340565b82816060018181516143339190615551565b6001600160401b03169052505b6060810151614350906064615593565b602082015160018601546001600160401b03929092169161437b9190600160401b900460ff16615593565b6001600160401b031610156143b457606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610736565b85816040018181516143c69190615551565b6001600160401b03169052506040810180518691906143e69083906158c9565b6001600160401b03169052506001840154604082015160649161441491600160401b90910460ff1690615593565b6001600160401b0316101561444d576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610736565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615dbb8339815191526020526040812060020180545f80516020615d9b83398151915291906008906144ff90600160401b90046001600160401b0316615d44565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61453e6001600160a01b0384168361490e565b905080515f141580156145625750808060200190518101906145609190615d5f565b155b156105aa57604051635274afe760e01b81526001600160a01b0384166004820152602401610736565b5f61333c83338461491b565b6145a46020820182614e97565b63ffffffff161580156145c457506145bf60208201826152ee565b151590505b1561460b576145d66020820182614e97565b6145e360208301836152ee565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610736565b61461860208201826152ee565b90506146276020830183614e97565b63ffffffff161115614640576145d66020820182614e97565b60015b61465060208301836152ee565b90508110156115455761466660208301836152ee565b614671600184615cf8565b81811061468057614680615333565b905060200201602081019061469591906152d3565b6001600160a01b03166146ab60208401846152ee565b838181106146bb576146bb615333565b90506020020160208101906146d091906152d3565b6001600160a01b031610156146f857604051630dbc8d5f60e31b815260040160405180910390fd5b600101614643565b61470861411e565b614710614a7e565b610fb781614a86565b61472161411e565b614167614b6e565b61473161411e565b5f61473a6126a8565b905061ffff86161580614752575061271061ffff8716115b1561477657604051635f12e6c360e11b815261ffff87166004820152602401610736565b8789111561479a5760405163222d164360e21b8152600481018a9052602401610736565b60ff851615806147ad5750600a60ff8616115b156147d05760405163170db35960e31b815260ff86166004820152602401610736565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614837576040516202a06d60e11b81526001600160401b0388166004820152602401610736565b835f036148575760405163a733007160e01b815260040160405180910390fd5b8161487857604051632f6bd1db60e01b815260048101839052602401610736565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333c83835f614b76565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614961573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061498591906152bc565b905061499c6001600160a01b038616853086614c05565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a0491906152bc565b9050818111614a6a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610736565b614a748282615cf8565b9695505050505050565b61416761411e565b614a8e61411e565b80355f80516020615d9b8339815191529081556014614ab36060840160408501615d24565b60ff161180614ad25750614acd6060830160408401615d24565b60ff16155b15614b0657614ae76060830160408401615d24565b604051634a59bbff60e11b815260ff9091166004820152602401610736565b614b166060830160408401615d24565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b476040830160208401614f3c565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d4561411e565b606081471015614b9b5760405163cd78605960e01b8152306004820152602401610736565b5f80856001600160a01b03168486604051614bb6919061542d565b5f6040518083038185875af1925050503d805f8114614bf0576040519150601f19603f3d011682016040523d82523d5f602084013e614bf5565b606091505b5091509150614a74868383614c3e565b6040516001600160a01b0384811660248301528381166044830152606482018390526108399186918216906323b872dd90608401613aaa565b606082614c5357614c4e82614c9a565b61333c565b8151158015614c6a57506001600160a01b0384163b155b15614c9357604051639996b31560e01b81526001600160a01b0385166004820152602401610736565b508061333c565b805115614caa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614ccf90615138565b5f825580601f10614cde575050565b601f0160209004905f5260205f2090810190610fb79190614d37565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d4b575f8155600101614d38565b5090565b8015158114610fb7575f80fd5b803563ffffffff81168114614d6f575f80fd5b919050565b5f805f60608486031215614d86575f80fd5b833592506020840135614d9881614d4f565b9150614da660408501614d5c565b90509250925092565b5f60208284031215614dbf575f80fd5b5035919050565b5f8060408385031215614dd7575f80fd5b82356001600160401b03811115614dec575f80fd5b830160808186031215614dfd575f80fd5b9150614e0b60208401614d5c565b90509250929050565b5f8060408385031215614e25575f80fd5b82359150614e0b60208401614d5c565b6001600160a01b0381168114610fb7575f80fd5b5f805f8060808587031215614e5c575f80fd5b843593506020850135614e6e81614d4f565b9250614e7c60408601614d5c565b91506060850135614e8c81614e35565b939692955090935050565b5f60208284031215614ea7575f80fd5b61333c82614d5c565b803561ffff81168114614d6f575f80fd5b6001600160401b0381168114610fb7575f80fd5b5f805f8060808587031215614ee8575f80fd5b84356001600160401b03811115614efd575f80fd5b850160a08188031215614f0e575f80fd5b9350614f1c60208601614eb0565b92506040850135614f2c81614ec1565b9396929550929360600135925050565b5f60208284031215614f4c575f80fd5b813561333c81614ec1565b5f8060408385031215614f68575f80fd5b823591506020830135614f7a81614e35565b809150509250929050565b5f8060408385031215614f96575f80fd5b50508035926020909101359150565b5f80828403610180811215614fb8575f80fd5b61016080821215614fc7575f80fd5b8493508301359050614f7a81614e35565b634e487b7160e01b5f52602160045260245ffd5b60068110614ffc57614ffc614fd8565b9052565b5f5b8381101561501a578181015183820152602001615002565b50505f910152565b5f8151808452615039816020860160208601615000565b601f01601f19169290920160200192915050565b6020815261505f602082018351614fec565b5f602083015160e0604084015261507a610100840182615022565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150de575f80fd5b82356001600160401b03808211156150f4575f80fd5b818501915085601f830112615107575f80fd5b813581811115615115575f80fd5b866020828501011115615126575f80fd5b60209290920196919550909350505050565b600181811c9082168061514c57607f821691505b60208210810361516a57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ec38284614fec565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151b4576151b461517e565b60405290565b604080519081016001600160401b03811182821017156151b4576151b461517e565b604051601f8201601f191681016001600160401b03811182821017156152045761520461517e565b604052919050565b5f6001600160401b038211156152245761522461517e565b50601f01601f191660200190565b5f82601f830112615241575f80fd5b815161525461524f8261520c565b6151dc565b818152846020838601011115615268575f80fd5b610fe7826020830160208701615000565b5f60208284031215615289575f80fd5b81516001600160401b0381111561529e575f80fd5b610fe784828501615232565b602081525f61333c6020830184615022565b5f602082840312156152cc575f80fd5b5051919050565b5f602082840312156152e3575f80fd5b813561333c81614e35565b5f808335601e19843603018112615303575f80fd5b8301803591506001600160401b0382111561531c575f80fd5b6020019150600581901b360382131561352d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261535b575f80fd5b9190910192915050565b5f82601f830112615374575f80fd5b813561538261524f8261520c565b818152846020838601011115615396575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153c2575f80fd5b6153ca615192565b82356001600160401b03808211156153e0575f80fd5b6153ec36838701615365565b83526020850135915080821115615401575f80fd5b5061540e36828601615365565b602083015250604083013561542281614ec1565b604082015292915050565b5f825161535b818460208701615000565b601f8211156105aa57805f5260205f20601f840160051c810160208510156154635750805b601f840160051c820191505b81811015610ed5575f815560010161546f565b81516001600160401b0381111561549b5761549b61517e565b6154af816154a98454615138565b8461543e565b602080601f8311600181146154e2575f84156154cb5750858301515b5f19600386901b1c1916600185901b17855561111f565b5f85815260208120601f198616915b82811015615510578886015182559484019460019091019084016154f1565b508582101561552d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156123d9576123d961553d565b5f63ffffffff8083168181036155895761558961553d565b6001019392505050565b6001600160401b038181168382160280821691908281146155b6576155b661553d565b505092915050565b5f808335601e198436030181126155d3575f80fd5b83016020810192503590506001600160401b038111156155f1575f80fd5b80360382131561352d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156dc57848303601f19018952813536889003605e19018112615663575f80fd5b8701606061567182806155be565b82875261568183880182846155ff565b92505050615691868301836155be565b868303888801526156a38382846155ff565b9250505060408083013592506156b883614ec1565b6001600160401b03929092169490910193909352978301979083019060010161563e565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561570d81614e35565b6001600160a01b031660608381019190915283013536849003601e19018112615734575f80fd5b83016020810190356001600160401b0381111561574f575f80fd5b8060051b3603821315615760575f80fd5b60808085015261577460a085018284615627565b95945050505050565b5f8261579757634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157b0576157b0614fd8565b91905290565b5f805f606084860312156157c8575f80fd5b8351925060208401516157da81614ec1565b60408501519092506157eb81614ec1565b809150509250925092565b8082028115828204841417610ec357610ec361553d565b5f806040838503121561581e575f80fd5b825191506020830151614f7a81614d4f565b5f60208083525f845461584281615138565b806020870152604060018084165f8114615863576001811461587f576158ac565b60ff19851660408a0152604084151560051b8a010195506158ac565b895f5260205f205f5b858110156158a35781548b8201860152908301908801615888565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156123d9576123d961553d565b5f80604083850312156158fa575f80fd5b82516001600160401b0380821115615910575f80fd5b9084019060608287031215615923575f80fd5b61592b615192565b82518152602083015161593d81614e35565b6020820152604083015182811115615953575f80fd5b61595f88828601615232565b6040830152508094505050506020830151614f7a81614d4f565b5f806040838503121561598a575f80fd5b825191506020830151614f7a81614ec1565b80820180821115610ec357610ec361553d565b5f8235603e1983360301811261535b575f80fd5b5f808335601e198436030181126159d8575f80fd5b8301803591506001600160401b038211156159f1575f80fd5b60200191503681900382131561352d575f80fd5b602081525f610fe76020830184866155ff565b5f60408236031215615a28575f80fd5b615a306151ba565b615a3983614d5c565b81526020808401356001600160401b0380821115615a55575f80fd5b9085019036601f830112615a67575f80fd5b813581811115615a7957615a7961517e565b8060051b9150615a8a8483016151dc565b8181529183018401918481019036841115615aa3575f80fd5b938501935b83851015615acd5784359250615abd83614e35565b8282529385019390850190615aa8565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b3a5784516001600160a01b03168252938301936001929092019190830190615b11565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b6b610100840182615022565b90506040840151601f1980858403016060860152615b898383615022565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bb98383615adf565b925060a08601519150808584030160c086015250615bd78282615adf565b91505060c0840151615bf460e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c0d575f80fd5b8251915060208301516001600160401b03811115615c29575f80fd5b615c3585828601615232565b9150509250929050565b6001600160401b03831115615c5657615c5661517e565b615c6a83615c648354615138565b8361543e565b5f601f841160018114615c9b575f8515615c845750838201355b5f19600387901b1c1916600186901b178355610ed5565b5f83815260208120601f198716915b82811015615cca5786850135825560209485019460019092019101615caa565b5086821015615ce6575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610ec357610ec361553d565b5f60208284031215615d1b575f80fd5b61333c82614eb0565b5f60208284031215615d34575f80fd5b813560ff8116811461333c575f80fd5b5f6001600160401b038083168181036155895761558961553d565b5f60208284031215615d6f575f80fd5b815161333c81614d4f56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122045954a3743f9584a3a2a9b1768f7e8a73a0cba93344e5b8900598063c7b8bcec64736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b50604051615f7d380380615f7d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e308061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c80637d8d2f7711610140578063afb98096116100bf578063c974d1b611610084578063c974d1b614610532578063d5f20ff61461053a578063df93d8de1461055a578063e4a63c4014610564578063fb8b11dd14610578578063fd7ac5e71461058b575f80fd5b8063afb98096146104c3578063b771b3bc146104ea578063ba3a4b97146104f8578063bc5fbfec1461050b578063bee0a03f1461051f575f80fd5b80639ae06447116101055780639ae06447146104775780639e1bc4ef1461048a5780639e478eea1461049d578063a3a65e48146104b0578063a9778a7a146102f9575f80fd5b80637d8d2f771461042357806380dd672f146104365780638280a25a146104495780638ef34c981461045157806393e2459814610464575f80fd5b8063467ef06f116101cc578063620658561161019157806362065856146103b257806366435abf146103c5578063732214f8146103d857806376f78621146103df578063785e9e86146103f2575f80fd5b8063467ef06f1461033b5780634bee00401461034e5780635dd6a6cb1461036f57806360305d621461038257806360ad77841461039f575f80fd5b806325e1c7761161021257806325e1c776146102bb5780632e2194d8146102ce57806335455ded146102f957806337b9be8f146103155780633a1cfff614610328575f80fd5b80630118acc41461024e5780630322ed9814610263578063151d30d1146102765780631ec447241461029557806320d91b7a146102a8575b5f80fd5b61026161025c366004614d74565b61059e565b005b610261610271366004614daf565b6105af565b61027e600a81565b60405160ff90911681526020015b60405180910390f35b6102616102a3366004614d74565b61083f565b6102616102b6366004614dc6565b61084b565b6102616102c9366004614e14565b610e01565b6102e16102dc366004614daf565b610e75565b6040516001600160401b03909116815260200161028c565b61030261271081565b60405161ffff909116815260200161028c565b610261610323366004614e49565b610ec9565b610261610336366004614d74565b610edc565b610261610349366004614e97565b610ee8565b61036161035c366004614ed5565b610fba565b60405190815260200161028c565b61026161037d366004614e49565b610fef565b61038a601481565b60405163ffffffff909116815260200161028c565b6102616103ad366004614e14565b610ffb565b6103616103c0366004614f3c565b6112c3565b6102e16103d3366004614daf565b6112e3565b6103615f81565b6102616103ed366004614d74565b6112f7565b5f80516020615d7b833981519152546001600160a01b03165b6040516001600160a01b03909116815260200161028c565b610261610431366004614e49565b611303565b610261610444366004614e14565b61130f565b61027e603081565b61026161045f366004614f57565b611549565b610261610472366004614daf565b6115fa565b610261610485366004614e49565b61168e565b610361610498366004614f85565b61169a565b6102616104ab366004614fa5565b6116c6565b6102616104be366004614e97565b6117a5565b6103617f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040b6005600160991b0181565b610261610506366004614daf565b61199b565b6103615f80516020615d9b83398151915281565b61026161052d366004614daf565b611bf4565b61027e601481565b61054d610548366004614daf565b611d30565b60405161028c919061504d565b6102e16202a30081565b6103615f80516020615d7b83398151915281565b610261610586366004614f57565b611e7f565b6103616105993660046150cd565b611f16565b6105aa8383835f611f71565b505050565b5f8181525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff1660058111156105fc576105fc614fd8565b600581111561060d5761060d614fd8565b815260200160018201805461062190615138565b80601f016020809104026020016040519081016040528092919081815260200182805461064d90615138565b80156106985780601f1061066f57610100808354040283529160200191610698565b820191905f5260205f20905b81548152906001019060200180831161067b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561070357610703614fd8565b1461073f575f8381526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156107b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107dd9190810190615279565b6040518263ffffffff1660e01b81526004016107f991906152aa565b6020604051808303815f875af1158015610815573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083991906152bc565b50505050565b6108398383835f611f9d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615d9b8339815191529060ff161561089d57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090491906152bc565b83602001351461092d576040516372b0a7e760e11b815260208401356004820152602401610736565b3061093e60608501604086016152d3565b6001600160a01b0316146109815761095c60608401604085016152d3565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610736565b5f61098f60608501856152ee565b905090505f805b828163ffffffff161015610bf7575f6109b260608801886152ee565b8363ffffffff168181106109c8576109c8615333565b90506020028101906109da9190615347565b6109e3906153b2565b80516040519192505f9160068801916109fb9161542d565b90815260200160405180910390205414610a2b57805160405163a41f772f60e01b815261073691906004016152aa565b5f6002885f013584604051602001610a5a92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a749161542d565b602060405180830381855afa158015610a8f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ab291906152bc565b90508086600601835f0151604051610aca919061542d565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b0a9082615482565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b8a9085615551565b8251604051919550610b9b9161542d565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bf090615571565b9050610996565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c3a910460ff1683615593565b6001600160401b03161015610c6d57604051633e1a785160e01b81526001600160401b0382166004820152602401610736565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c91876122ca565b604001516040518263ffffffff1660e01b8152600401610cb191906152aa565b602060405180830381865af4158015610ccc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf091906152bc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d2a91906156e9565b5f60405180830381865af4158015610d44573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d6b9190810190615279565b90505f600282604051610d7e919061542d565b602060405180830381855afa158015610d99573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dbc91906152bc565b9050828114610de85760405163baaea89d60e01b81526004810182905260248101849052604401610736565b5050506007909201805460ff1916600117905550505050565b610e0a826123e0565b610e2a576040516330efa98b60e01b815260048101839052602401610736565b5f610e3483611d30565b5190506002816005811115610e4b57610e4b614fd8565b14610e6b578060405163170cc93360e21b81526004016107369190615170565b6108398383612409565b5f80610e7f6126a8565b60030154610e8d908461577d565b9050801580610ea257506001600160401b0381115b15610ec35760405163222d164360e21b815260048101849052602401610736565b92915050565b610ed584848484611f9d565b5050505050565b6108398383835f6126cc565b610ef0612909565b5f610ef96126a8565b90505f80610f0684612940565b91509150610f13826123e0565b610f1f57505050610fa1565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680610f615750805b600483516005811115610f7657610f76614fd8565b03610f8557610f858185612cf8565b610f9b82610f9685604001516112c3565b612d22565b50505050505b610fb760015f80516020615ddb83398151915255565b50565b5f610fc3612909565b610fcf85858585612d58565b9050610fe760015f80516020615ddb83398151915255565b949350505050565b61083984848484612ed8565b5f6110046126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561103d5761103d614fd8565b600381111561104e5761104e614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110c482611d30565b90506001835160038111156110db576110db614fd8565b146110fc578251604051633b0d540d60e21b8152610736919060040161579c565b60048151600581111561111157611111614fd8565b036111275761111f86612f04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61114c896122ca565b604001516040518263ffffffff1660e01b815260040161116c91906152aa565b606060405180830381865af4158015611187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab91906157b6565b50915091508184146111d857846040015160405163089938b360e11b815260040161073691815260200190565b806001600160401b031683606001516001600160401b031610806112115750806001600160401b03168560a001516001600160401b0316115b1561123a57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112cc6126a8565b60030154610ec3906001600160401b0384166157f6565b5f6112ed82611d30565b6080015192915050565b6105aa8383835f612ed8565b610ed5848484846126cc565b611317612909565b5f6113206126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561135957611359614fd8565b600381111561136a5761136a614fd8565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113e3576113e3614fd8565b14611404578051604051633b0d540d60e21b8152610736919060040161579c565b60046114138260400151611d30565b51600581111561142557611425614fd8565b14611524575f611434846122ca565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161147391906152aa565b606060405180830381865af415801561148e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b291906157b6565b5091509150818460400151146114de5760405163089938b360e11b815260048101839052602401610736565b806001600160401b03168460c001516001600160401b0316111561152057604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5050505b61152d84612f04565b505061154560015f80516020615ddb83398151915255565b5050565b5f6115526126a8565b90506001600160a01b0382166115865760405163caa903f960e01b81526001600160a01b0383166004820152602401610736565b5f8381526006820160205260409020546001600160a01b031633146115cc57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610736565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116036126a8565b90505f61160f83611d30565b519050600481600581111561162657611626614fd8565b14611646578060405163170cc93360e21b81526004016107369190615170565b5f8381526006830160205260409020546001600160a01b0316331461166b57336115a7565b5f8381526006830160205260409020546105aa906001600160a01b031684612cf8565b61083984848484611f71565b5f6116a3612909565b6116ae8333846130fe565b9050610ec360015f80516020615ddb83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061170f575080546001600160401b03808416911610155b1561172d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556117588484613343565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117d8866122ca565b604001516040518263ffffffff1660e01b81526004016117f891906152aa565b6040805180830381865af4158015611812573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611836919061580d565b915091508061185c57604051632d07135360e01b81528115156004820152602401610736565b5f8281526004840160205260409020805461187690615138565b90505f0361189a5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580860160205260409091205460ff16908111156118c1576118c1614fd8565b146118f4575f8281526005840160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f828152600484016020526040812061190c91614cc3565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119a46126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119dd576119dd614fd8565b60038111156119ee576119ee614fd8565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a6757611a67614fd8565b14158015611a885750600381516003811115611a8557611a85614fd8565b14155b15611aa9578051604051633b0d540d60e21b8152610736919060040161579c565b5f611ab78260400151611d30565b905080606001516001600160401b03165f03611ae9576040516339b894f960e21b815260048101859052602401610736565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b5793906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b71573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b989190810190615279565b6040518263ffffffff1660e01b8152600401611bb491906152aa565b6020604051808303815f875af1158015611bd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed591906152bc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615d9b8339815191529190611c3b90615138565b90505f03611c5f5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580840160205260409091205460ff1690811115611c8657611c86614fd8565b14611cb9575f8281526005820160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611cf09201615830565b6020604051808303815f875af1158015611d0c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105aa91906152bc565b611d38614cfa565b5f8281525f80516020615dbb833981519152602052604090819020815160e0810190925280545f80516020615d9b833981519152929190829060ff166005811115611d8557611d85614fd8565b6005811115611d9657611d96614fd8565b8152602001600182018054611daa90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd690615138565b8015611e215780601f10611df857610100808354040283529160200191611e21565b820191905f5260205f20905b815481529060010190602001808311611e0457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611eb15760405163caa903f960e01b81526001600160a01b0382166004820152602401610736565b5f611eba6126a8565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611ee857336115a7565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615d9b833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f5990869086906158ba565b90815260200160405180910390205491505092915050565b611f7d84848484611f9d565b61083957604051631036cf9160e11b815260048101859052602401610736565b5f80611fa76126a8565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fe057611fe0614fd8565b6003811115611ff157611ff1614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61206782611d30565b905060028351600381111561207e5761207e614fd8565b1461209f578251604051633b0d540d60e21b8152610736919060040161579c565b60208301516001600160a01b0316331461213b575f8281526006850160205260409020546001600160a01b031633146120d857336115a7565b5f82815260068501602052604090205460a082015161210791600160b01b90046001600160401b031690615551565b6001600160401b031642101561213b5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b60028151600581111561215057612150614fd8565b036122725760028401546080840151612172916001600160401b031690615551565b6001600160401b03164210156121a65760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b87156121b8576121b68288612409565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121f19184916121ec91906158c9565b61335d565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561223484888c613534565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fe79350505050565b60048151600581111561228757612287614fd8565b036122ae5761229783878b613534565b506122a189612f04565b6001945050505050610fe7565b805160405163170cc93360e21b81526107369190600401615170565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561232e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261235591908101906158e9565b915091508061237757604051636b2f19e960e01b815260040160405180910390fd5b81511561239d578151604051636ba589a560e01b81526004810191909152602401610736565b60208201516001600160a01b0316156123d9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5092915050565b5f806123ea6126a8565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261247b91908101906158e9565b915091508061249d57604051636b2f19e960e01b815260040160405180910390fd5b5f6124a66126a8565b60058101548451919250146124d4578251604051636ba589a560e01b81526004810191909152602401610736565b60208301516001600160a01b031615612510576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b60208301516001600160a01b03161561254c576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161258991906152aa565b6040805180830381865af41580156125a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c79190615979565b915091508188146125ee5760405163089938b360e11b815260048101899052602401610736565b5f8881526006840160205260409020600101546001600160401b03908116908216111561267f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261269d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126d66126a8565b90505f6126e287613722565b90506126ed876123e0565b6126fc57600192505050610fe7565b5f8781526006830160205260409020546001600160a01b0316331461272157336115a7565b5f87815260068301602052604090205460a082015161275091600160b01b90046001600160401b031690615551565b6001600160401b03168160c001516001600160401b031610156127975760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610736565b5f86156127af576127a88887612409565b90506127cd565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127f2906112c3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561285b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287f91906152bc565b90506001600160a01b0386166128ab575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906128ca90849061599c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615ddb83398151915280546001190161293a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612949614cfa565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61297c886122ca565b604001516040518263ffffffff1660e01b815260040161299c91906152aa565b6040805180830381865af41580156129b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129da919061580d565b915091508015612a0157604051632d07135360e01b81528115156004820152602401610736565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a3857612a38614fd8565b6005811115612a4957612a49614fd8565b8152602001600182018054612a5d90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8990615138565b8015612ad45780601f10612aab57610100808354040283529160200191612ad4565b820191905f5260205f20905b815481529060010190602001808311612ab757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b3f57612b3f614fd8565b14158015612b605750600181516005811115612b5d57612b5d614fd8565b14155b15612b8157805160405163170cc93360e21b81526107369190600401615170565b600381516005811115612b9657612b96614fd8565b03612ba45760048152612ba9565b600581525b836006018160200151604051612bbf919061542d565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612c0257612c02614fd8565b021790555060208201516001820190612c1b9082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc157612cc1614fd8565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d016126a8565b5f838152600a82016020526040812080549190559091506108398482613a07565b5f80516020615d7b83398151915254611545906001600160a01b03168383613a7d565b60015f80516020615ddb83398151915255565b5f80612d626126a8565b600281015490915061ffff600160401b90910481169086161080612d8b575061271061ffff8616115b15612daf57604051635f12e6c360e11b815261ffff86166004820152602401610736565b60028101546001600160401b039081169085161015612deb576040516202a06d60e11b81526001600160401b0385166004820152602401610736565b8054831080612dfd5750806001015483115b15612e1e5760405163222d164360e21b815260048101849052602401610736565b5f612e2884613adc565b90505f612e3482610e75565b90505f612e418983613aff565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612ee4848484846126cc565b61083957604051635bff683f60e11b815260048101859052602401610736565b5f612f0d6126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f4657612f46614fd8565b6003811115612f5757612f57614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ff47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130039190615551565b6001600160401b03164210156130375760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680613092575060208201515b5f8061309f838886614071565b915091506130b88560200151610f9687606001516112c3565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131086126a8565b90505f6131176102dc85613adc565b90505f61312387611d30565b905061312e876123e0565b61314e576040516330efa98b60e01b815260048101889052602401610736565b60028151600581111561316357613163614fd8565b1461318457805160405163170cc93360e21b81526107369190600401615170565b5f8282608001516131959190615551565b905083600201600a9054906101000a90046001600160401b031682604001516131be9190615593565b6001600160401b0316816001600160401b031611156131fb57604051636d51fe0560e11b81526001600160401b0382166004820152602401610736565b5f806132078a8461335d565b915091505f8a8360405160200161323592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61334b61411e565b61335482614169565b611545816141e3565b5f8281525f80516020615dbb833981519152602052604081206002015481905f80516020615d9b83398151915290600160801b90046001600160401b03166133a5858261424b565b5f6133af876144b5565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613458573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347f9190810190615279565b6040518263ffffffff1660e01b815260040161349b91906152aa565b6020604051808303815f875af11580156134b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134db91906152bc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353e6126a8565b90505f61354e8660400151611d30565b90505f60038251600581111561356657613566614fd8565b1480613584575060048251600581111561358257613582614fd8565b145b15613594575060c08101516135d1565b6002825160058111156135a9576135a9614fd8565b036135b55750426135d1565b815160405163170cc93360e21b81526107369190600401615170565b86608001516001600160401b0316816001600160401b0316116135f9575f935050505061333c565b600483015460608801515f916001600160a01b031690634f22429f9061361e906112c3565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c391906152bc565b90506001600160a01b0387166136db57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b61372a614cfa565b5f8281525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff16600581111561377757613777614fd8565b600581111561378857613788614fd8565b815260200160018201805461379c90615138565b80601f01602080910402602001604051908101604052809291908181526020018280546137c890615138565b80156138135780601f106137ea57610100808354040283529160200191613813565b820191905f5260205f20905b8154815290600101906020018083116137f657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561388157613881614fd8565b146138b4575f8481526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156138f9576138f9614fd8565b0217905550602082015160018201906139129082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139b0858261335d565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d7b83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a62575f80fd5b505af1158015613a74573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526105aa91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061452a565b5f610ec3825f80516020615d7b833981519152546001600160a01b03169061458b565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b4357604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d9b83398151915242613b626060860160408701614f3c565b6001600160401b0316111580613b9c5750613b806202a3004261599c565b613b906060860160408701614f3c565b6001600160401b031610155b15613bd657613bb16060850160408601614f3c565b604051635879da1360e11b81526001600160401b039091166004820152602401610736565b60038101546001600160401b0390613bf990600160401b9004821685831661599c565b1115613c2357604051633e1a785160e01b81526001600160401b0384166004820152602401610736565b613c38613c3360608601866159af565b614597565b613c48613c3360808601866159af565b6030613c5760208601866159c3565b905014613c8957613c6b60208501856159c3565b6040516326475b2f60e11b8152610736925060040190815260200190565b613c9384806159c3565b90505f03613cc057613ca584806159c3565b604051633e08a12560e11b8152600401610736929190615a05565b5f60068201613ccf86806159c3565b604051613cdd9291906158ba565b90815260200160405180910390205414613d1657613cfb84806159c3565b60405163a41f772f60e01b8152600401610736929190615a05565b613d20835f61424b565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d5d8a806159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613da5908b018b6159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dee60608b0160408c01614f3c565b6001600160401b03168152602001613e0960608b018b6159af565b613e1290615a18565b8152602001613e2460808b018b6159af565b613e2d90615a18565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e5b9190615b45565b5f60405180830381865af4158015613e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e9c9190810190615bfc565b5f82815260048601602052604090209193509150613eba8282615482565b508160068401613eca88806159c3565b604051613ed89291906158ba565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613f149085906004016152aa565b6020604051808303815f875af1158015613f30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f5491906152bc565b5f8481526005860160205260409020805460ff191660011790559050613f7a87806159c3565b5f858152600587016020526040902060010191613f98919083615c3f565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ff788806159c3565b6040516140059291906158ba565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906140439190614f3c565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61407c6126a8565b5f86815260088201602052604081208054908290559192509081908015614110575f878152600685016020526040902054612710906140c690600160a01b900461ffff16836157f6565b6140d0919061577d565b91508184600a015f8981526020019081526020015f205f8282546140f4919061599c565b9091555061410490508282615cf8565b92506141108984613a07565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661416757604051631afcd79f60e31b815260040160405180910390fd5b565b61417161411e565b61417a81614700565b614182614719565b610fb76060820135608083013561419f60c0850160a08601614f3c565b6141af60e0860160c08701615d0b565b6141c0610100870160e08801615d24565b6101008701356141d861014089016101208a016152d3565b886101400135614729565b6141eb61411e565b5f80516020615d7b8339815191526001600160a01b03821661422b57604051637330680360e01b81526001600160a01b0383166004820152602401610736565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d9b8339815191525f6001600160401b03808416908516111561427f5761427883856158c9565b905061428c565b61428984846158c9565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142f95750600184015481516142f5916001600160401b03169061599c565b8210155b15614321576001600160401b0380841660608301528282526040820151166020820152614340565b82816060018181516143339190615551565b6001600160401b03169052505b6060810151614350906064615593565b602082015160018601546001600160401b03929092169161437b9190600160401b900460ff16615593565b6001600160401b031610156143b457606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610736565b85816040018181516143c69190615551565b6001600160401b03169052506040810180518691906143e69083906158c9565b6001600160401b03169052506001840154604082015160649161441491600160401b90910460ff1690615593565b6001600160401b0316101561444d576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610736565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615dbb8339815191526020526040812060020180545f80516020615d9b83398151915291906008906144ff90600160401b90046001600160401b0316615d44565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61453e6001600160a01b0384168361490e565b905080515f141580156145625750808060200190518101906145609190615d5f565b155b156105aa57604051635274afe760e01b81526001600160a01b0384166004820152602401610736565b5f61333c83338461491b565b6145a46020820182614e97565b63ffffffff161580156145c457506145bf60208201826152ee565b151590505b1561460b576145d66020820182614e97565b6145e360208301836152ee565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610736565b61461860208201826152ee565b90506146276020830183614e97565b63ffffffff161115614640576145d66020820182614e97565b60015b61465060208301836152ee565b90508110156115455761466660208301836152ee565b614671600184615cf8565b81811061468057614680615333565b905060200201602081019061469591906152d3565b6001600160a01b03166146ab60208401846152ee565b838181106146bb576146bb615333565b90506020020160208101906146d091906152d3565b6001600160a01b031610156146f857604051630dbc8d5f60e31b815260040160405180910390fd5b600101614643565b61470861411e565b614710614a7e565b610fb781614a86565b61472161411e565b614167614b6e565b61473161411e565b5f61473a6126a8565b905061ffff86161580614752575061271061ffff8716115b1561477657604051635f12e6c360e11b815261ffff87166004820152602401610736565b8789111561479a5760405163222d164360e21b8152600481018a9052602401610736565b60ff851615806147ad5750600a60ff8616115b156147d05760405163170db35960e31b815260ff86166004820152602401610736565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614837576040516202a06d60e11b81526001600160401b0388166004820152602401610736565b835f036148575760405163a733007160e01b815260040160405180910390fd5b8161487857604051632f6bd1db60e01b815260048101839052602401610736565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333c83835f614b76565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614961573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061498591906152bc565b905061499c6001600160a01b038616853086614c05565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a0491906152bc565b9050818111614a6a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610736565b614a748282615cf8565b9695505050505050565b61416761411e565b614a8e61411e565b80355f80516020615d9b8339815191529081556014614ab36060840160408501615d24565b60ff161180614ad25750614acd6060830160408401615d24565b60ff16155b15614b0657614ae76060830160408401615d24565b604051634a59bbff60e11b815260ff9091166004820152602401610736565b614b166060830160408401615d24565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b476040830160208401614f3c565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d4561411e565b606081471015614b9b5760405163cd78605960e01b8152306004820152602401610736565b5f80856001600160a01b03168486604051614bb6919061542d565b5f6040518083038185875af1925050503d805f8114614bf0576040519150601f19603f3d011682016040523d82523d5f602084013e614bf5565b606091505b5091509150614a74868383614c3e565b6040516001600160a01b0384811660248301528381166044830152606482018390526108399186918216906323b872dd90608401613aaa565b606082614c5357614c4e82614c9a565b61333c565b8151158015614c6a57506001600160a01b0384163b155b15614c9357604051639996b31560e01b81526001600160a01b0385166004820152602401610736565b508061333c565b805115614caa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614ccf90615138565b5f825580601f10614cde575050565b601f0160209004905f5260205f2090810190610fb79190614d37565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d4b575f8155600101614d38565b5090565b8015158114610fb7575f80fd5b803563ffffffff81168114614d6f575f80fd5b919050565b5f805f60608486031215614d86575f80fd5b833592506020840135614d9881614d4f565b9150614da660408501614d5c565b90509250925092565b5f60208284031215614dbf575f80fd5b5035919050565b5f8060408385031215614dd7575f80fd5b82356001600160401b03811115614dec575f80fd5b830160808186031215614dfd575f80fd5b9150614e0b60208401614d5c565b90509250929050565b5f8060408385031215614e25575f80fd5b82359150614e0b60208401614d5c565b6001600160a01b0381168114610fb7575f80fd5b5f805f8060808587031215614e5c575f80fd5b843593506020850135614e6e81614d4f565b9250614e7c60408601614d5c565b91506060850135614e8c81614e35565b939692955090935050565b5f60208284031215614ea7575f80fd5b61333c82614d5c565b803561ffff81168114614d6f575f80fd5b6001600160401b0381168114610fb7575f80fd5b5f805f8060808587031215614ee8575f80fd5b84356001600160401b03811115614efd575f80fd5b850160a08188031215614f0e575f80fd5b9350614f1c60208601614eb0565b92506040850135614f2c81614ec1565b9396929550929360600135925050565b5f60208284031215614f4c575f80fd5b813561333c81614ec1565b5f8060408385031215614f68575f80fd5b823591506020830135614f7a81614e35565b809150509250929050565b5f8060408385031215614f96575f80fd5b50508035926020909101359150565b5f80828403610180811215614fb8575f80fd5b61016080821215614fc7575f80fd5b8493508301359050614f7a81614e35565b634e487b7160e01b5f52602160045260245ffd5b60068110614ffc57614ffc614fd8565b9052565b5f5b8381101561501a578181015183820152602001615002565b50505f910152565b5f8151808452615039816020860160208601615000565b601f01601f19169290920160200192915050565b6020815261505f602082018351614fec565b5f602083015160e0604084015261507a610100840182615022565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150de575f80fd5b82356001600160401b03808211156150f4575f80fd5b818501915085601f830112615107575f80fd5b813581811115615115575f80fd5b866020828501011115615126575f80fd5b60209290920196919550909350505050565b600181811c9082168061514c57607f821691505b60208210810361516a57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ec38284614fec565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151b4576151b461517e565b60405290565b604080519081016001600160401b03811182821017156151b4576151b461517e565b604051601f8201601f191681016001600160401b03811182821017156152045761520461517e565b604052919050565b5f6001600160401b038211156152245761522461517e565b50601f01601f191660200190565b5f82601f830112615241575f80fd5b815161525461524f8261520c565b6151dc565b818152846020838601011115615268575f80fd5b610fe7826020830160208701615000565b5f60208284031215615289575f80fd5b81516001600160401b0381111561529e575f80fd5b610fe784828501615232565b602081525f61333c6020830184615022565b5f602082840312156152cc575f80fd5b5051919050565b5f602082840312156152e3575f80fd5b813561333c81614e35565b5f808335601e19843603018112615303575f80fd5b8301803591506001600160401b0382111561531c575f80fd5b6020019150600581901b360382131561352d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261535b575f80fd5b9190910192915050565b5f82601f830112615374575f80fd5b813561538261524f8261520c565b818152846020838601011115615396575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153c2575f80fd5b6153ca615192565b82356001600160401b03808211156153e0575f80fd5b6153ec36838701615365565b83526020850135915080821115615401575f80fd5b5061540e36828601615365565b602083015250604083013561542281614ec1565b604082015292915050565b5f825161535b818460208701615000565b601f8211156105aa57805f5260205f20601f840160051c810160208510156154635750805b601f840160051c820191505b81811015610ed5575f815560010161546f565b81516001600160401b0381111561549b5761549b61517e565b6154af816154a98454615138565b8461543e565b602080601f8311600181146154e2575f84156154cb5750858301515b5f19600386901b1c1916600185901b17855561111f565b5f85815260208120601f198616915b82811015615510578886015182559484019460019091019084016154f1565b508582101561552d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156123d9576123d961553d565b5f63ffffffff8083168181036155895761558961553d565b6001019392505050565b6001600160401b038181168382160280821691908281146155b6576155b661553d565b505092915050565b5f808335601e198436030181126155d3575f80fd5b83016020810192503590506001600160401b038111156155f1575f80fd5b80360382131561352d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156dc57848303601f19018952813536889003605e19018112615663575f80fd5b8701606061567182806155be565b82875261568183880182846155ff565b92505050615691868301836155be565b868303888801526156a38382846155ff565b9250505060408083013592506156b883614ec1565b6001600160401b03929092169490910193909352978301979083019060010161563e565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561570d81614e35565b6001600160a01b031660608381019190915283013536849003601e19018112615734575f80fd5b83016020810190356001600160401b0381111561574f575f80fd5b8060051b3603821315615760575f80fd5b60808085015261577460a085018284615627565b95945050505050565b5f8261579757634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157b0576157b0614fd8565b91905290565b5f805f606084860312156157c8575f80fd5b8351925060208401516157da81614ec1565b60408501519092506157eb81614ec1565b809150509250925092565b8082028115828204841417610ec357610ec361553d565b5f806040838503121561581e575f80fd5b825191506020830151614f7a81614d4f565b5f60208083525f845461584281615138565b806020870152604060018084165f8114615863576001811461587f576158ac565b60ff19851660408a0152604084151560051b8a010195506158ac565b895f5260205f205f5b858110156158a35781548b8201860152908301908801615888565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156123d9576123d961553d565b5f80604083850312156158fa575f80fd5b82516001600160401b0380821115615910575f80fd5b9084019060608287031215615923575f80fd5b61592b615192565b82518152602083015161593d81614e35565b6020820152604083015182811115615953575f80fd5b61595f88828601615232565b6040830152508094505050506020830151614f7a81614d4f565b5f806040838503121561598a575f80fd5b825191506020830151614f7a81614ec1565b80820180821115610ec357610ec361553d565b5f8235603e1983360301811261535b575f80fd5b5f808335601e198436030181126159d8575f80fd5b8301803591506001600160401b038211156159f1575f80fd5b60200191503681900382131561352d575f80fd5b602081525f610fe76020830184866155ff565b5f60408236031215615a28575f80fd5b615a306151ba565b615a3983614d5c565b81526020808401356001600160401b0380821115615a55575f80fd5b9085019036601f830112615a67575f80fd5b813581811115615a7957615a7961517e565b8060051b9150615a8a8483016151dc565b8181529183018401918481019036841115615aa3575f80fd5b938501935b83851015615acd5784359250615abd83614e35565b8282529385019390850190615aa8565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b3a5784516001600160a01b03168252938301936001929092019190830190615b11565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b6b610100840182615022565b90506040840151601f1980858403016060860152615b898383615022565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bb98383615adf565b925060a08601519150808584030160c086015250615bd78282615adf565b91505060c0840151615bf460e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c0d575f80fd5b8251915060208301516001600160401b03811115615c29575f80fd5b615c3585828601615232565b9150509250929050565b6001600160401b03831115615c5657615c5661517e565b615c6a83615c648354615138565b8361543e565b5f601f841160018114615c9b575f8515615c845750838201355b5f19600387901b1c1916600186901b178355610ed5565b5f83815260208120601f198716915b82811015615cca5786850135825560209485019460019092019101615caa565b5086821015615ce6575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610ec357610ec361553d565b5f60208284031215615d1b575f80fd5b61333c82614eb0565b5f60208284031215615d34575f80fd5b813560ff8116811461333c575f80fd5b5f6001600160401b038083168181036155895761558961553d565b5f60208284031215615d6f575f80fd5b815161333c81614d4f56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212206d5828d0ad4f52ca781675fdf7edbd7b2d4a8ded1ba3cb2e6fefcb68893d66ff64736f6c63430008190033",
}
// ERC20TokenStakingManagerABI is the input ABI used to generate the binding from.
@@ -3155,7 +3155,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidato
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212204be60cc6edf9cbf66de0cf61ac7b9875c2e34000fdb727695f40b759d3220af564736f6c63430008190033",
+ Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122021bc83cb762d019261a415f663497547f82a60b24f9f9026058db0ae0972d18e64736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
index 43a655dec..54d2da1c2 100644
--- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
+++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go
@@ -104,7 +104,7 @@ type ValidatorRegistrationInput struct {
// NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract.
var NativeTokenStakingManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b50604051615cb8380380615cb883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b6b8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b3d565b610724565b005b348015610263575f80fd5b50610256610272366004614b78565b610735565b348015610282575f80fd5b50610256610291366004614b8f565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b3d565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614ba6565b610aae565b34801561030a575f80fd5b50610256610319366004614bf4565b611064565b348015610329575f80fd5b5061033d610338366004614b78565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c29565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b3d565b61113f565b3480156103f8575f80fd5b50610256610407366004614c77565b61114b565b348015610417575f80fd5b50610256610426366004614c29565b61121d565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bf4565b611229565b34801561047e575f80fd5b5061049261048d366004614ca4565b6114f1565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b78565b611511565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b3d565b611525565b3480156104fc575f80fd5b5061025661050b366004614c29565b611531565b34801561051b575f80fd5b5061025661052a366004614bf4565b61153d565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614cbf565b611777565b34801561056d575f80fd5b5061025661057c366004614b78565b611828565b34801561058c575f80fd5b5061025661059b366004614c29565b6118bc565b3480156105ab575f80fd5b506102566105ba366004614c77565b6118c8565b6104926105cd366004614cfe565b611abe565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b78565b611af2565b348015610649575f80fd5b506104925f80516020615ad683398151915281565b348015610669575f80fd5b50610256610678366004614b78565b611d4b565b61049261068b366004614b78565b611e87565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b78565b611eb8565b6040516102b89190614dd4565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614cbf565b612007565b348015610710575f80fd5b5061049261071f366004614e54565b61209e565b6107308383835f6120f9565b505050565b5f8181525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff16600581111561078257610782614d5f565b600581111561079357610793614d5f565b81526020016001820180546107a790614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614ebf565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d5f565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614ffa565b6040518263ffffffff1660e01b815260040161097f919061502b565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf919061503d565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612125565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f612136565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615ad68339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b67919061503d565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615054565b6001600160a01b031614610be457610bbf6060840160408501615054565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561506f565b905090505f805b828163ffffffff161015610e5a575f610c15606088018861506f565b8363ffffffff16818110610c2b57610c2b6150b4565b9050602002810190610c3d91906150c8565b610c4690615133565b80516040519192505f916006880191610c5e916151ae565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc919060040161502b565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd7916151ae565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d15919061503d565b90508086600601835f0151604051610d2d91906151ae565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d9082615203565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded90856152d2565b8251604051919550610dfe916151ae565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e53906152f2565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff1683615314565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef48761246b565b604001516040518263ffffffff1660e01b8152600401610f14919061502b565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f53919061503d565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d919061546a565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190614ffa565b90505f600282604051610fe191906151ae565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f919061503d565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d82612581565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611eb8565b51905060028160058111156110ae576110ae614d5f565b146110ce578060405163170cc93360e21b81526004016108bc9190614ef1565b6109bf83836125aa565b5f806110e2612849565b600301546110f090846154fe565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b61113884848484612136565b5050505050565b6109bf8383835f61286d565b611153612aaa565b5f61115c612849565b90505f8061116984612ae1565b9150915061117682612581565b61118257505050611204565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806111c45750805b6004835160058111156111d9576111d9614d5f565b036111e8576111e88185612e99565b6111fe826111f985604001516114f1565b612ec3565b50505050505b61121a60015f80516020615b1683398151915255565b50565b6109bf84848484612ee9565b5f611232612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126b5761126b614d5f565b600381111561127c5761127c614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112f282611eb8565b905060018351600381111561130957611309614d5f565b1461132a578251604051633b0d540d60e21b81526108bc919060040161551d565b60048151600581111561133f5761133f614d5f565b036113555761134d86612f15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61137a8961246b565b604001516040518263ffffffff1660e01b815260040161139a919061502b565b606060405180830381865af41580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d99190615537565b509150915081841461140657846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b0316108061143f5750806001600160401b03168560a001516001600160401b0316115b1561146857604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114fa612849565b60030154611126906001600160401b03841661556c565b5f61151b82611eb8565b6080015192915050565b6107308383835f612ee9565b6111388484848461286d565b611545612aaa565b5f61154e612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561158757611587614d5f565b600381111561159857611598614d5f565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561161157611611614d5f565b14611632578051604051633b0d540d60e21b81526108bc919060040161551d565b60046116418260400151611eb8565b51600581111561165357611653614d5f565b14611752575f6116628461246b565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116a1919061502b565b606060405180830381865af41580156116bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e09190615537565b50915091508184604001511461170c5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561174e57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61175b84612f15565b505061177360015f80516020615b1683398151915255565b5050565b5f611780612849565b90506001600160a01b0382166117b45760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117fa57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f611831612849565b90505f61183d83611eb8565b519050600481600581111561185457611854614d5f565b14611874578060405163170cc93360e21b81526004016108bc9190614ef1565b5f8381526006830160205260409020546001600160a01b0316331461189957336117d5565b5f838152600683016020526040902054610730906001600160a01b031684612e99565b6109bf848484846120f9565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118fb8661246b565b604001516040518263ffffffff1660e01b815260040161191b919061502b565b6040805180830381865af4158015611935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119599190615583565b915091508061197f57604051632d07135360e01b815281151560048201526024016108bc565b5f8281526004840160205260409020805461199990614ebf565b90505f036119bd5760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff16908111156119e4576119e4614d5f565b14611a17575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004840160205260408120611a2f91614a91565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611ac7612aaa565b611ad38484843461310f565b9050611aeb60015f80516020615b1683398151915255565b9392505050565b5f611afb612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b3457611b34614d5f565b6003811115611b4557611b45614d5f565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bbe57611bbe614d5f565b14158015611bdf5750600381516003811115611bdc57611bdc614d5f565b14155b15611c00578051604051633b0d540d60e21b81526108bc919060040161551d565b5f611c0e8260400151611eb8565b905080606001516001600160401b03165f03611c40576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cae93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cef9190810190614ffa565b6040518263ffffffff1660e01b8152600401611d0b919061502b565b6020604051808303815f875af1158015611d27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611138919061503d565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615ad68339815191529190611d9290614ebf565b90505f03611db65760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611ddd57611ddd614d5f565b14611e10575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e4792016155a6565b6020604051808303815f875af1158015611e63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610730919061503d565b5f611e90612aaa565b611e9b823334613284565b9050611eb360015f80516020615b1683398151915255565b919050565b611ec0614ac8565b5f8281525f80516020615af6833981519152602052604090819020815160e0810190925280545f80516020615ad6833981519152929190829060ff166005811115611f0d57611f0d614d5f565b6005811115611f1e57611f1e614d5f565b8152602001600182018054611f3290614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5e90614ebf565b8015611fa95780601f10611f8057610100808354040283529160200191611fa9565b820191905f5260205f20905b815481529060010190602001808311611f8c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120395760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f612042612849565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461207057336117d5565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615ad6833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906120e19086908690615630565b90815260200160405180910390205491505092915050565b61210584848484612136565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61212d6134c4565b61121a8161350f565b5f80612140612849565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561217957612179614d5f565b600381111561218a5761218a614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61220082611eb8565b905060028351600381111561221757612217614d5f565b14612238578251604051633b0d540d60e21b81526108bc919060040161551d565b60208301516001600160a01b031633146122d4575f8281526006850160205260409020546001600160a01b0316331461227157336117d5565b5f82815260068501602052604090205460a08201516122a091600160b01b90046001600160401b0316906152d2565b6001600160401b03164210156122d45760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b6002815160058111156122e9576122e9614d5f565b0361240b576002840154608084015161230b916001600160401b0316906152d2565b6001600160401b031642101561233f5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123515761234f82886125aa565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161238a918491612385919061563f565b613589565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123cd84888c613760565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124639350505050565b60048151600581111561242057612420614d5f565b036124475761243083878b613760565b5061243a89612f15565b6001945050505050612463565b805160405163170cc93360e21b81526108bc9190600401614ef1565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156124cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124f6919081019061565f565b915091508061251857604051636b2f19e960e01b815260040160405180910390fd5b81511561253e578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561257a576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061258b612849565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125f5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261261c919081019061565f565b915091508061263e57604051636b2f19e960e01b815260040160405180910390fd5b5f612647612849565b6005810154845191925014612675578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126b1576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156126ed576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161272a919061502b565b6040805180830381865af4158015612744573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276891906156ef565b9150915081881461278f5760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612820575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261283e565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612877612849565b90505f6128838761394e565b905061288e87612581565b61289d57600192505050612463565b5f8781526006830160205260409020546001600160a01b031633146128c257336117d5565b5f87815260068301602052604090205460a08201516128f191600160b01b90046001600160401b0316906152d2565b6001600160401b03168160c001516001600160401b031610156129385760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129505761294988876125aa565b905061296e565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612993906114f1565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156129fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a20919061503d565b90506001600160a01b038616612a4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a6b908490615712565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615b16833981519152805460011901612adb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612aea614ac8565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b1d8861246b565b604001516040518263ffffffff1660e01b8152600401612b3d919061502b565b6040805180830381865af4158015612b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7b9190615583565b915091508015612ba257604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612bd957612bd9614d5f565b6005811115612bea57612bea614d5f565b8152602001600182018054612bfe90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2a90614ebf565b8015612c755780601f10612c4c57610100808354040283529160200191612c75565b820191905f5260205f20905b815481529060010190602001808311612c5857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612ce057612ce0614d5f565b14158015612d015750600181516005811115612cfe57612cfe614d5f565b14155b15612d2257805160405163170cc93360e21b81526108bc9190600401614ef1565b600381516005811115612d3757612d37614d5f565b03612d455760048152612d4a565b600581525b836006018160200151604051612d6091906151ae565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612da357612da3614d5f565b021790555060208201516001820190612dbc9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e6257612e62614d5f565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ea2612849565b5f838152600a82016020526040812080549190559091506109bf8482613c33565b6117736001600160a01b03831682613c91565b60015f80516020615b1683398151915255565b612ef58484848461286d565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f1e612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f5757612f57614d5f565b6003811115612f6857612f68614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130057fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161301491906152d2565b6001600160401b03164210156130485760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b0316806130a3575060208201515b5f806130b0838886613d24565b915091506130c985602001516111f987606001516114f1565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613119612849565b600281015490915061ffff600160401b90910481169086161080613142575061271061ffff8616115b1561316657604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131a2576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131b45750806001015483115b156131d55760405163222d164360e21b8152600481018490526024016108bc565b825f6131e0826110d8565b90505f6131ed8983613dd1565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061328e612849565b90505f61329a846110d8565b90505f6132a687611eb8565b90506132b187612581565b6132d1576040516330efa98b60e01b8152600481018890526024016108bc565b6002815160058111156132e6576132e6614d5f565b1461330757805160405163170cc93360e21b81526108bc9190600401614ef1565b5f82826080015161331891906152d2565b905083600201600a9054906101000a90046001600160401b031682604001516133419190615314565b6001600160401b0316816001600160401b0316111561337e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f8061338a8a84613589565b915091505f8a836040516020016133b892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661350d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135176134c4565b61352081614343565b61352861435c565b61121a6060820135608083013561354560c0850160a08601614ca4565b61355560e0860160c08701615725565b613566610100870160e0880161573e565b61010087013561357e61014089016101208a01615054565b88610140013561436c565b5f8281525f80516020615af6833981519152602052604081206002015481905f80516020615ad683398151915290600160801b90046001600160401b03166135d18582614551565b5f6135db876147bb565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613684573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136ab9190810190614ffa565b6040518263ffffffff1660e01b81526004016136c7919061502b565b6020604051808303815f875af11580156136e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613707919061503d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061376a612849565b90505f61377a8660400151611eb8565b90505f60038251600581111561379257613792614d5f565b14806137b057506004825160058111156137ae576137ae614d5f565b145b156137c0575060c08101516137fd565b6002825160058111156137d5576137d5614d5f565b036137e15750426137fd565b815160405163170cc93360e21b81526108bc9190600401614ef1565b86608001516001600160401b0316816001600160401b031611613825575f9350505050611aeb565b600483015460608801515f916001600160a01b031690634f22429f9061384a906114f1565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138ef919061503d565b90506001600160a01b03871661390757876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613956614ac8565b5f8281525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff1660058111156139a3576139a3614d5f565b60058111156139b4576139b4614d5f565b81526020016001820180546139c890614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546139f490614ebf565b8015613a3f5780601f10613a1657610100808354040283529160200191613a3f565b820191905f5260205f20905b815481529060010190602001808311613a2257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613aad57613aad614d5f565b14613ae0575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b2557613b25614d5f565b021790555060208201516001820190613b3e9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bdc8582613589565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c7f575f80fd5b505af115801561134d573d5f803e3d5ffd5b80471015613cb45760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cfd576040519150601f19603f3d011682016040523d82523d5f602084013e613d02565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d2f612849565b5f86815260088201602052604081208054908290559192509081908015613dc3575f87815260068501602052604090205461271090613d7990600160a01b900461ffff168361556c565b613d8391906154fe565b91508184600a015f8981526020019081526020015f205f828254613da79190615712565b90915550613db79050828261575e565b9250613dc38984613c33565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613e1557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615ad683398151915242613e346060860160408701614ca4565b6001600160401b0316111580613e6e5750613e526202a30042615712565b613e626060860160408701614ca4565b6001600160401b031610155b15613ea857613e836060850160408601614ca4565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613ecb90600160401b90048216858316615712565b1115613ef557604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613f0a613f056060860186615771565b614830565b613f1a613f056080860186615771565b6030613f296020860186615785565b905014613f5b57613f3d6020850185615785565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f658480615785565b90505f03613f9257613f778480615785565b604051633e08a12560e11b81526004016108bc9291906157c7565b5f60068201613fa18680615785565b604051613faf929190615630565b90815260200160405180910390205414613fe857613fcd8480615785565b60405163a41f772f60e01b81526004016108bc9291906157c7565b613ff2835f614551565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce51906020810161402f8a80615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614077908b018b615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c060608b0160408c01614ca4565b6001600160401b031681526020016140db60608b018b615771565b6140e4906157da565b81526020016140f660808b018b615771565b6140ff906157da565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161412d9190615907565b5f60405180830381865af4158015614147573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261416e91908101906159be565b5f8281526004860160205260409020919350915061418c8282615203565b50816006840161419c8880615785565b6040516141aa929190615630565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141e690859060040161502b565b6020604051808303815f875af1158015614202573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614226919061503d565b5f8481526005860160205260409020805460ff19166001179055905061424c8780615785565b5f85815260058701602052604090206001019161426a919083615a01565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142c98880615785565b6040516142d7929190615630565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906143159190614ca4565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61434b6134c4565b614353614999565b61121a816149a1565b6143646134c4565b61350d614a89565b6143746134c4565b5f61437d612849565b905061ffff86161580614395575061271061ffff8716115b156143b957604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143dd5760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f05750600a60ff8616115b156144135760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561447a576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f0361449a5760405163a733007160e01b815260040160405180910390fd5b816144bb57604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615ad68339815191525f6001600160401b0380841690851611156145855761457e838561563f565b9050614592565b61458f848461563f565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145ff5750600184015481516145fb916001600160401b031690615712565b8210155b15614627576001600160401b0380841660608301528282526040820151166020820152614646565b828160600181815161463991906152d2565b6001600160401b03169052505b6060810151614656906064615314565b602082015160018601546001600160401b0392909216916146819190600160401b900460ff16615314565b6001600160401b031610156146ba57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516146cc91906152d2565b6001600160401b03169052506040810180518691906146ec90839061563f565b6001600160401b03169052506001840154604082015160649161471a91600160401b90910460ff1690615314565b6001600160401b03161015614753576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615af68339815191526020526040812060020180545f80516020615ad6833981519152919060089061480590600160401b90046001600160401b0316615aba565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61483d6020820182614c77565b63ffffffff1615801561485d5750614858602082018261506f565b151590505b156148a45761486f6020820182614c77565b61487c602083018361506f565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148b1602082018261506f565b90506148c06020830183614c77565b63ffffffff1611156148d95761486f6020820182614c77565b60015b6148e9602083018361506f565b9050811015611773576148ff602083018361506f565b61490a60018461575e565b818110614919576149196150b4565b905060200201602081019061492e9190615054565b6001600160a01b0316614944602084018461506f565b83818110614954576149546150b4565b90506020020160208101906149699190615054565b6001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b6001016148dc565b61350d6134c4565b6149a96134c4565b80355f80516020615ad683398151915290815560146149ce606084016040850161573e565b60ff1611806149ed57506149e8606083016040840161573e565b60ff16155b15614a2157614a02606083016040840161573e565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a31606083016040840161573e565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a626040830160208401614ca4565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ed66134c4565b508054614a9d90614ebf565b5f825580601f10614aac575050565b601f0160209004905f5260205f209081019061121a9190614b05565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b19575f8155600101614b06565b5090565b801515811461121a575f80fd5b803563ffffffff81168114611eb3575f80fd5b5f805f60608486031215614b4f575f80fd5b833592506020840135614b6181614b1d565b9150614b6f60408501614b2a565b90509250925092565b5f60208284031215614b88575f80fd5b5035919050565b5f6101608284031215614ba0575f80fd5b50919050565b5f8060408385031215614bb7575f80fd5b82356001600160401b03811115614bcc575f80fd5b830160808186031215614bdd575f80fd5b9150614beb60208401614b2a565b90509250929050565b5f8060408385031215614c05575f80fd5b82359150614beb60208401614b2a565b6001600160a01b038116811461121a575f80fd5b5f805f8060808587031215614c3c575f80fd5b843593506020850135614c4e81614b1d565b9250614c5c60408601614b2a565b91506060850135614c6c81614c15565b939692955090935050565b5f60208284031215614c87575f80fd5b611aeb82614b2a565b6001600160401b038116811461121a575f80fd5b5f60208284031215614cb4575f80fd5b8135611aeb81614c90565b5f8060408385031215614cd0575f80fd5b823591506020830135614ce281614c15565b809150509250929050565b803561ffff81168114611eb3575f80fd5b5f805f60608486031215614d10575f80fd5b83356001600160401b03811115614d25575f80fd5b840160a08187031215614d36575f80fd5b9250614d4460208501614ced565b91506040840135614d5481614c90565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8357614d83614d5f565b9052565b5f5b83811015614da1578181015183820152602001614d89565b50505f910152565b5f8151808452614dc0816020860160208601614d87565b601f01601f19169290920160200192915050565b60208152614de6602082018351614d73565b5f602083015160e06040840152614e01610100840182614da9565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e65575f80fd5b82356001600160401b0380821115614e7b575f80fd5b818501915085601f830112614e8e575f80fd5b813581811115614e9c575f80fd5b866020828501011115614ead575f80fd5b60209290920196919550909350505050565b600181811c90821680614ed357607f821691505b602082108103614ba057634e487b7160e01b5f52602260045260245ffd5b602081016111268284614d73565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f3557614f35614eff565b60405290565b604080519081016001600160401b0381118282101715614f3557614f35614eff565b604051601f8201601f191681016001600160401b0381118282101715614f8557614f85614eff565b604052919050565b5f6001600160401b03821115614fa557614fa5614eff565b50601f01601f191660200190565b5f82601f830112614fc2575f80fd5b8151614fd5614fd082614f8d565b614f5d565b818152846020838601011115614fe9575f80fd5b612463826020830160208701614d87565b5f6020828403121561500a575f80fd5b81516001600160401b0381111561501f575f80fd5b61246384828501614fb3565b602081525f611aeb6020830184614da9565b5f6020828403121561504d575f80fd5b5051919050565b5f60208284031215615064575f80fd5b8135611aeb81614c15565b5f808335601e19843603018112615084575f80fd5b8301803591506001600160401b0382111561509d575f80fd5b6020019150600581901b3603821315613759575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126150dc575f80fd5b9190910192915050565b5f82601f8301126150f5575f80fd5b8135615103614fd082614f8d565b818152846020838601011115615117575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615143575f80fd5b61514b614f13565b82356001600160401b0380821115615161575f80fd5b61516d368387016150e6565b83526020850135915080821115615182575f80fd5b5061518f368286016150e6565b60208301525060408301356151a381614c90565b604082015292915050565b5f82516150dc818460208701614d87565b601f82111561073057805f5260205f20601f840160051c810160208510156151e45750805b601f840160051c820191505b81811015611138575f81556001016151f0565b81516001600160401b0381111561521c5761521c614eff565b6152308161522a8454614ebf565b846151bf565b602080601f831160018114615263575f841561524c5750858301515b5f19600386901b1c1916600185901b17855561134d565b5f85815260208120601f198616915b8281101561529157888601518255948401946001909101908401615272565b50858210156152ae57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561257a5761257a6152be565b5f63ffffffff80831681810361530a5761530a6152be565b6001019392505050565b6001600160401b03818116838216028082169190828114615337576153376152be565b505092915050565b5f808335601e19843603018112615354575f80fd5b83016020810192503590506001600160401b03811115615372575f80fd5b803603821315613759575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561545d57848303601f19018952813536889003605e190181126153e4575f80fd5b870160606153f2828061533f565b8287526154028388018284615380565b925050506154128683018361533f565b86830388880152615424838284615380565b92505050604080830135925061543983614c90565b6001600160401b0392909216949091019390935297830197908301906001016153bf565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561548e81614c15565b6001600160a01b031660608381019190915283013536849003601e190181126154b5575f80fd5b83016020810190356001600160401b038111156154d0575f80fd5b8060051b36038213156154e1575f80fd5b6080808501526154f560a0850182846153a8565b95945050505050565b5f8261551857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061553157615531614d5f565b91905290565b5f805f60608486031215615549575f80fd5b83519250602084015161555b81614c90565b6040850151909250614d5481614c90565b8082028115828204841417611126576111266152be565b5f8060408385031215615594575f80fd5b825191506020830151614ce281614b1d565b5f60208083525f84546155b881614ebf565b806020870152604060018084165f81146155d957600181146155f557615622565b60ff19851660408a0152604084151560051b8a01019550615622565b895f5260205f205f5b858110156156195781548b82018601529083019088016155fe565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561257a5761257a6152be565b5f8060408385031215615670575f80fd5b82516001600160401b0380821115615686575f80fd5b9084019060608287031215615699575f80fd5b6156a1614f13565b8251815260208301516156b381614c15565b60208201526040830151828111156156c9575f80fd5b6156d588828601614fb3565b6040830152508094505050506020830151614ce281614b1d565b5f8060408385031215615700575f80fd5b825191506020830151614ce281614c90565b80820180821115611126576111266152be565b5f60208284031215615735575f80fd5b611aeb82614ced565b5f6020828403121561574e575f80fd5b813560ff81168114611aeb575f80fd5b81810381811115611126576111266152be565b5f8235603e198336030181126150dc575f80fd5b5f808335601e1984360301811261579a575f80fd5b8301803591506001600160401b038211156157b3575f80fd5b602001915036819003821315613759575f80fd5b602081525f612463602083018486615380565b5f604082360312156157ea575f80fd5b6157f2614f3b565b6157fb83614b2a565b81526020808401356001600160401b0380821115615817575f80fd5b9085019036601f830112615829575f80fd5b81358181111561583b5761583b614eff565b8060051b915061584c848301614f5d565b8181529183018401918481019036841115615865575f80fd5b938501935b8385101561588f578435925061587f83614c15565b828252938501939085019061586a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158fc5784516001600160a01b031682529383019360019290920191908301906158d3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261592d610100840182614da9565b90506040840151601f198085840301606086015261594b8383614da9565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261597b83836158a1565b925060a08601519150808584030160c08601525061599982826158a1565b91505060c08401516159b660e08501826001600160401b03169052565b509392505050565b5f80604083850312156159cf575f80fd5b8251915060208301516001600160401b038111156159eb575f80fd5b6159f785828601614fb3565b9150509250929050565b6001600160401b03831115615a1857615a18614eff565b615a2c83615a268354614ebf565b836151bf565b5f601f841160018114615a5d575f8515615a465750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615a8c5786850135825560209485019460019092019101615a6c565b5086821015615aa8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361530a5761530a6152be56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212204546a476846b62358380f26791343e01c97c71842d2d2a93f5c5dc1ddd9bb14b64736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b50604051615cb8380380615cb883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b6b8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b3d565b610724565b005b348015610263575f80fd5b50610256610272366004614b78565b610735565b348015610282575f80fd5b50610256610291366004614b8f565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b3d565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614ba6565b610aae565b34801561030a575f80fd5b50610256610319366004614bf4565b611064565b348015610329575f80fd5b5061033d610338366004614b78565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c29565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b3d565b61113f565b3480156103f8575f80fd5b50610256610407366004614c77565b61114b565b348015610417575f80fd5b50610256610426366004614c29565b61121d565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bf4565b611229565b34801561047e575f80fd5b5061049261048d366004614ca4565b6114f1565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b78565b611511565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b3d565b611525565b3480156104fc575f80fd5b5061025661050b366004614c29565b611531565b34801561051b575f80fd5b5061025661052a366004614bf4565b61153d565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614cbf565b611777565b34801561056d575f80fd5b5061025661057c366004614b78565b611828565b34801561058c575f80fd5b5061025661059b366004614c29565b6118bc565b3480156105ab575f80fd5b506102566105ba366004614c77565b6118c8565b6104926105cd366004614cfe565b611abe565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b78565b611af2565b348015610649575f80fd5b506104925f80516020615ad683398151915281565b348015610669575f80fd5b50610256610678366004614b78565b611d4b565b61049261068b366004614b78565b611e87565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b78565b611eb8565b6040516102b89190614dd4565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614cbf565b612007565b348015610710575f80fd5b5061049261071f366004614e54565b61209e565b6107308383835f6120f9565b505050565b5f8181525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff16600581111561078257610782614d5f565b600581111561079357610793614d5f565b81526020016001820180546107a790614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614ebf565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d5f565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614ffa565b6040518263ffffffff1660e01b815260040161097f919061502b565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf919061503d565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612125565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f612136565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615ad68339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b67919061503d565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615054565b6001600160a01b031614610be457610bbf6060840160408501615054565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561506f565b905090505f805b828163ffffffff161015610e5a575f610c15606088018861506f565b8363ffffffff16818110610c2b57610c2b6150b4565b9050602002810190610c3d91906150c8565b610c4690615133565b80516040519192505f916006880191610c5e916151ae565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc919060040161502b565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd7916151ae565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d15919061503d565b90508086600601835f0151604051610d2d91906151ae565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d9082615203565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded90856152d2565b8251604051919550610dfe916151ae565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e53906152f2565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff1683615314565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef48761246b565b604001516040518263ffffffff1660e01b8152600401610f14919061502b565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f53919061503d565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d919061546a565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190614ffa565b90505f600282604051610fe191906151ae565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f919061503d565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d82612581565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611eb8565b51905060028160058111156110ae576110ae614d5f565b146110ce578060405163170cc93360e21b81526004016108bc9190614ef1565b6109bf83836125aa565b5f806110e2612849565b600301546110f090846154fe565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b61113884848484612136565b5050505050565b6109bf8383835f61286d565b611153612aaa565b5f61115c612849565b90505f8061116984612ae1565b9150915061117682612581565b61118257505050611204565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806111c45750805b6004835160058111156111d9576111d9614d5f565b036111e8576111e88185612e99565b6111fe826111f985604001516114f1565b612ec3565b50505050505b61121a60015f80516020615b1683398151915255565b50565b6109bf84848484612ee9565b5f611232612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126b5761126b614d5f565b600381111561127c5761127c614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112f282611eb8565b905060018351600381111561130957611309614d5f565b1461132a578251604051633b0d540d60e21b81526108bc919060040161551d565b60048151600581111561133f5761133f614d5f565b036113555761134d86612f15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61137a8961246b565b604001516040518263ffffffff1660e01b815260040161139a919061502b565b606060405180830381865af41580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d99190615537565b509150915081841461140657846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b0316108061143f5750806001600160401b03168560a001516001600160401b0316115b1561146857604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114fa612849565b60030154611126906001600160401b03841661556c565b5f61151b82611eb8565b6080015192915050565b6107308383835f612ee9565b6111388484848461286d565b611545612aaa565b5f61154e612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561158757611587614d5f565b600381111561159857611598614d5f565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561161157611611614d5f565b14611632578051604051633b0d540d60e21b81526108bc919060040161551d565b60046116418260400151611eb8565b51600581111561165357611653614d5f565b14611752575f6116628461246b565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116a1919061502b565b606060405180830381865af41580156116bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e09190615537565b50915091508184604001511461170c5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561174e57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61175b84612f15565b505061177360015f80516020615b1683398151915255565b5050565b5f611780612849565b90506001600160a01b0382166117b45760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117fa57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f611831612849565b90505f61183d83611eb8565b519050600481600581111561185457611854614d5f565b14611874578060405163170cc93360e21b81526004016108bc9190614ef1565b5f8381526006830160205260409020546001600160a01b0316331461189957336117d5565b5f838152600683016020526040902054610730906001600160a01b031684612e99565b6109bf848484846120f9565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118fb8661246b565b604001516040518263ffffffff1660e01b815260040161191b919061502b565b6040805180830381865af4158015611935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119599190615583565b915091508061197f57604051632d07135360e01b815281151560048201526024016108bc565b5f8281526004840160205260409020805461199990614ebf565b90505f036119bd5760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff16908111156119e4576119e4614d5f565b14611a17575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004840160205260408120611a2f91614a91565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611ac7612aaa565b611ad38484843461310f565b9050611aeb60015f80516020615b1683398151915255565b9392505050565b5f611afb612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b3457611b34614d5f565b6003811115611b4557611b45614d5f565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bbe57611bbe614d5f565b14158015611bdf5750600381516003811115611bdc57611bdc614d5f565b14155b15611c00578051604051633b0d540d60e21b81526108bc919060040161551d565b5f611c0e8260400151611eb8565b905080606001516001600160401b03165f03611c40576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cae93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cef9190810190614ffa565b6040518263ffffffff1660e01b8152600401611d0b919061502b565b6020604051808303815f875af1158015611d27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611138919061503d565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615ad68339815191529190611d9290614ebf565b90505f03611db65760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611ddd57611ddd614d5f565b14611e10575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e4792016155a6565b6020604051808303815f875af1158015611e63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610730919061503d565b5f611e90612aaa565b611e9b823334613284565b9050611eb360015f80516020615b1683398151915255565b919050565b611ec0614ac8565b5f8281525f80516020615af6833981519152602052604090819020815160e0810190925280545f80516020615ad6833981519152929190829060ff166005811115611f0d57611f0d614d5f565b6005811115611f1e57611f1e614d5f565b8152602001600182018054611f3290614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5e90614ebf565b8015611fa95780601f10611f8057610100808354040283529160200191611fa9565b820191905f5260205f20905b815481529060010190602001808311611f8c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120395760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f612042612849565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461207057336117d5565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615ad6833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906120e19086908690615630565b90815260200160405180910390205491505092915050565b61210584848484612136565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61212d6134c4565b61121a8161350f565b5f80612140612849565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561217957612179614d5f565b600381111561218a5761218a614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61220082611eb8565b905060028351600381111561221757612217614d5f565b14612238578251604051633b0d540d60e21b81526108bc919060040161551d565b60208301516001600160a01b031633146122d4575f8281526006850160205260409020546001600160a01b0316331461227157336117d5565b5f82815260068501602052604090205460a08201516122a091600160b01b90046001600160401b0316906152d2565b6001600160401b03164210156122d45760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b6002815160058111156122e9576122e9614d5f565b0361240b576002840154608084015161230b916001600160401b0316906152d2565b6001600160401b031642101561233f5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123515761234f82886125aa565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161238a918491612385919061563f565b613589565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123cd84888c613760565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124639350505050565b60048151600581111561242057612420614d5f565b036124475761243083878b613760565b5061243a89612f15565b6001945050505050612463565b805160405163170cc93360e21b81526108bc9190600401614ef1565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156124cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124f6919081019061565f565b915091508061251857604051636b2f19e960e01b815260040160405180910390fd5b81511561253e578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561257a576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061258b612849565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125f5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261261c919081019061565f565b915091508061263e57604051636b2f19e960e01b815260040160405180910390fd5b5f612647612849565b6005810154845191925014612675578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126b1576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156126ed576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161272a919061502b565b6040805180830381865af4158015612744573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276891906156ef565b9150915081881461278f5760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612820575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261283e565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612877612849565b90505f6128838761394e565b905061288e87612581565b61289d57600192505050612463565b5f8781526006830160205260409020546001600160a01b031633146128c257336117d5565b5f87815260068301602052604090205460a08201516128f191600160b01b90046001600160401b0316906152d2565b6001600160401b03168160c001516001600160401b031610156129385760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129505761294988876125aa565b905061296e565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612993906114f1565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156129fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a20919061503d565b90506001600160a01b038616612a4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a6b908490615712565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615b16833981519152805460011901612adb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612aea614ac8565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b1d8861246b565b604001516040518263ffffffff1660e01b8152600401612b3d919061502b565b6040805180830381865af4158015612b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7b9190615583565b915091508015612ba257604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612bd957612bd9614d5f565b6005811115612bea57612bea614d5f565b8152602001600182018054612bfe90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2a90614ebf565b8015612c755780601f10612c4c57610100808354040283529160200191612c75565b820191905f5260205f20905b815481529060010190602001808311612c5857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612ce057612ce0614d5f565b14158015612d015750600181516005811115612cfe57612cfe614d5f565b14155b15612d2257805160405163170cc93360e21b81526108bc9190600401614ef1565b600381516005811115612d3757612d37614d5f565b03612d455760048152612d4a565b600581525b836006018160200151604051612d6091906151ae565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612da357612da3614d5f565b021790555060208201516001820190612dbc9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e6257612e62614d5f565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ea2612849565b5f838152600a82016020526040812080549190559091506109bf8482613c33565b6117736001600160a01b03831682613c91565b60015f80516020615b1683398151915255565b612ef58484848461286d565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f1e612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f5757612f57614d5f565b6003811115612f6857612f68614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130057fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161301491906152d2565b6001600160401b03164210156130485760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b0316806130a3575060208201515b5f806130b0838886613d24565b915091506130c985602001516111f987606001516114f1565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613119612849565b600281015490915061ffff600160401b90910481169086161080613142575061271061ffff8616115b1561316657604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131a2576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131b45750806001015483115b156131d55760405163222d164360e21b8152600481018490526024016108bc565b825f6131e0826110d8565b90505f6131ed8983613dd1565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061328e612849565b90505f61329a846110d8565b90505f6132a687611eb8565b90506132b187612581565b6132d1576040516330efa98b60e01b8152600481018890526024016108bc565b6002815160058111156132e6576132e6614d5f565b1461330757805160405163170cc93360e21b81526108bc9190600401614ef1565b5f82826080015161331891906152d2565b905083600201600a9054906101000a90046001600160401b031682604001516133419190615314565b6001600160401b0316816001600160401b0316111561337e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f8061338a8a84613589565b915091505f8a836040516020016133b892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661350d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135176134c4565b61352081614343565b61352861435c565b61121a6060820135608083013561354560c0850160a08601614ca4565b61355560e0860160c08701615725565b613566610100870160e0880161573e565b61010087013561357e61014089016101208a01615054565b88610140013561436c565b5f8281525f80516020615af6833981519152602052604081206002015481905f80516020615ad683398151915290600160801b90046001600160401b03166135d18582614551565b5f6135db876147bb565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613684573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136ab9190810190614ffa565b6040518263ffffffff1660e01b81526004016136c7919061502b565b6020604051808303815f875af11580156136e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613707919061503d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061376a612849565b90505f61377a8660400151611eb8565b90505f60038251600581111561379257613792614d5f565b14806137b057506004825160058111156137ae576137ae614d5f565b145b156137c0575060c08101516137fd565b6002825160058111156137d5576137d5614d5f565b036137e15750426137fd565b815160405163170cc93360e21b81526108bc9190600401614ef1565b86608001516001600160401b0316816001600160401b031611613825575f9350505050611aeb565b600483015460608801515f916001600160a01b031690634f22429f9061384a906114f1565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138ef919061503d565b90506001600160a01b03871661390757876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613956614ac8565b5f8281525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff1660058111156139a3576139a3614d5f565b60058111156139b4576139b4614d5f565b81526020016001820180546139c890614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546139f490614ebf565b8015613a3f5780601f10613a1657610100808354040283529160200191613a3f565b820191905f5260205f20905b815481529060010190602001808311613a2257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613aad57613aad614d5f565b14613ae0575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b2557613b25614d5f565b021790555060208201516001820190613b3e9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bdc8582613589565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c7f575f80fd5b505af115801561134d573d5f803e3d5ffd5b80471015613cb45760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cfd576040519150601f19603f3d011682016040523d82523d5f602084013e613d02565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d2f612849565b5f86815260088201602052604081208054908290559192509081908015613dc3575f87815260068501602052604090205461271090613d7990600160a01b900461ffff168361556c565b613d8391906154fe565b91508184600a015f8981526020019081526020015f205f828254613da79190615712565b90915550613db79050828261575e565b9250613dc38984613c33565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613e1557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615ad683398151915242613e346060860160408701614ca4565b6001600160401b0316111580613e6e5750613e526202a30042615712565b613e626060860160408701614ca4565b6001600160401b031610155b15613ea857613e836060850160408601614ca4565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613ecb90600160401b90048216858316615712565b1115613ef557604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613f0a613f056060860186615771565b614830565b613f1a613f056080860186615771565b6030613f296020860186615785565b905014613f5b57613f3d6020850185615785565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f658480615785565b90505f03613f9257613f778480615785565b604051633e08a12560e11b81526004016108bc9291906157c7565b5f60068201613fa18680615785565b604051613faf929190615630565b90815260200160405180910390205414613fe857613fcd8480615785565b60405163a41f772f60e01b81526004016108bc9291906157c7565b613ff2835f614551565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce51906020810161402f8a80615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614077908b018b615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c060608b0160408c01614ca4565b6001600160401b031681526020016140db60608b018b615771565b6140e4906157da565b81526020016140f660808b018b615771565b6140ff906157da565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161412d9190615907565b5f60405180830381865af4158015614147573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261416e91908101906159be565b5f8281526004860160205260409020919350915061418c8282615203565b50816006840161419c8880615785565b6040516141aa929190615630565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141e690859060040161502b565b6020604051808303815f875af1158015614202573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614226919061503d565b5f8481526005860160205260409020805460ff19166001179055905061424c8780615785565b5f85815260058701602052604090206001019161426a919083615a01565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142c98880615785565b6040516142d7929190615630565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906143159190614ca4565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61434b6134c4565b614353614999565b61121a816149a1565b6143646134c4565b61350d614a89565b6143746134c4565b5f61437d612849565b905061ffff86161580614395575061271061ffff8716115b156143b957604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143dd5760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f05750600a60ff8616115b156144135760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561447a576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f0361449a5760405163a733007160e01b815260040160405180910390fd5b816144bb57604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615ad68339815191525f6001600160401b0380841690851611156145855761457e838561563f565b9050614592565b61458f848461563f565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145ff5750600184015481516145fb916001600160401b031690615712565b8210155b15614627576001600160401b0380841660608301528282526040820151166020820152614646565b828160600181815161463991906152d2565b6001600160401b03169052505b6060810151614656906064615314565b602082015160018601546001600160401b0392909216916146819190600160401b900460ff16615314565b6001600160401b031610156146ba57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516146cc91906152d2565b6001600160401b03169052506040810180518691906146ec90839061563f565b6001600160401b03169052506001840154604082015160649161471a91600160401b90910460ff1690615314565b6001600160401b03161015614753576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615af68339815191526020526040812060020180545f80516020615ad6833981519152919060089061480590600160401b90046001600160401b0316615aba565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61483d6020820182614c77565b63ffffffff1615801561485d5750614858602082018261506f565b151590505b156148a45761486f6020820182614c77565b61487c602083018361506f565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148b1602082018261506f565b90506148c06020830183614c77565b63ffffffff1611156148d95761486f6020820182614c77565b60015b6148e9602083018361506f565b9050811015611773576148ff602083018361506f565b61490a60018461575e565b818110614919576149196150b4565b905060200201602081019061492e9190615054565b6001600160a01b0316614944602084018461506f565b83818110614954576149546150b4565b90506020020160208101906149699190615054565b6001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b6001016148dc565b61350d6134c4565b6149a96134c4565b80355f80516020615ad683398151915290815560146149ce606084016040850161573e565b60ff1611806149ed57506149e8606083016040840161573e565b60ff16155b15614a2157614a02606083016040840161573e565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a31606083016040840161573e565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a626040830160208401614ca4565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ed66134c4565b508054614a9d90614ebf565b5f825580601f10614aac575050565b601f0160209004905f5260205f209081019061121a9190614b05565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b19575f8155600101614b06565b5090565b801515811461121a575f80fd5b803563ffffffff81168114611eb3575f80fd5b5f805f60608486031215614b4f575f80fd5b833592506020840135614b6181614b1d565b9150614b6f60408501614b2a565b90509250925092565b5f60208284031215614b88575f80fd5b5035919050565b5f6101608284031215614ba0575f80fd5b50919050565b5f8060408385031215614bb7575f80fd5b82356001600160401b03811115614bcc575f80fd5b830160808186031215614bdd575f80fd5b9150614beb60208401614b2a565b90509250929050565b5f8060408385031215614c05575f80fd5b82359150614beb60208401614b2a565b6001600160a01b038116811461121a575f80fd5b5f805f8060808587031215614c3c575f80fd5b843593506020850135614c4e81614b1d565b9250614c5c60408601614b2a565b91506060850135614c6c81614c15565b939692955090935050565b5f60208284031215614c87575f80fd5b611aeb82614b2a565b6001600160401b038116811461121a575f80fd5b5f60208284031215614cb4575f80fd5b8135611aeb81614c90565b5f8060408385031215614cd0575f80fd5b823591506020830135614ce281614c15565b809150509250929050565b803561ffff81168114611eb3575f80fd5b5f805f60608486031215614d10575f80fd5b83356001600160401b03811115614d25575f80fd5b840160a08187031215614d36575f80fd5b9250614d4460208501614ced565b91506040840135614d5481614c90565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8357614d83614d5f565b9052565b5f5b83811015614da1578181015183820152602001614d89565b50505f910152565b5f8151808452614dc0816020860160208601614d87565b601f01601f19169290920160200192915050565b60208152614de6602082018351614d73565b5f602083015160e06040840152614e01610100840182614da9565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e65575f80fd5b82356001600160401b0380821115614e7b575f80fd5b818501915085601f830112614e8e575f80fd5b813581811115614e9c575f80fd5b866020828501011115614ead575f80fd5b60209290920196919550909350505050565b600181811c90821680614ed357607f821691505b602082108103614ba057634e487b7160e01b5f52602260045260245ffd5b602081016111268284614d73565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f3557614f35614eff565b60405290565b604080519081016001600160401b0381118282101715614f3557614f35614eff565b604051601f8201601f191681016001600160401b0381118282101715614f8557614f85614eff565b604052919050565b5f6001600160401b03821115614fa557614fa5614eff565b50601f01601f191660200190565b5f82601f830112614fc2575f80fd5b8151614fd5614fd082614f8d565b614f5d565b818152846020838601011115614fe9575f80fd5b612463826020830160208701614d87565b5f6020828403121561500a575f80fd5b81516001600160401b0381111561501f575f80fd5b61246384828501614fb3565b602081525f611aeb6020830184614da9565b5f6020828403121561504d575f80fd5b5051919050565b5f60208284031215615064575f80fd5b8135611aeb81614c15565b5f808335601e19843603018112615084575f80fd5b8301803591506001600160401b0382111561509d575f80fd5b6020019150600581901b3603821315613759575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126150dc575f80fd5b9190910192915050565b5f82601f8301126150f5575f80fd5b8135615103614fd082614f8d565b818152846020838601011115615117575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615143575f80fd5b61514b614f13565b82356001600160401b0380821115615161575f80fd5b61516d368387016150e6565b83526020850135915080821115615182575f80fd5b5061518f368286016150e6565b60208301525060408301356151a381614c90565b604082015292915050565b5f82516150dc818460208701614d87565b601f82111561073057805f5260205f20601f840160051c810160208510156151e45750805b601f840160051c820191505b81811015611138575f81556001016151f0565b81516001600160401b0381111561521c5761521c614eff565b6152308161522a8454614ebf565b846151bf565b602080601f831160018114615263575f841561524c5750858301515b5f19600386901b1c1916600185901b17855561134d565b5f85815260208120601f198616915b8281101561529157888601518255948401946001909101908401615272565b50858210156152ae57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561257a5761257a6152be565b5f63ffffffff80831681810361530a5761530a6152be565b6001019392505050565b6001600160401b03818116838216028082169190828114615337576153376152be565b505092915050565b5f808335601e19843603018112615354575f80fd5b83016020810192503590506001600160401b03811115615372575f80fd5b803603821315613759575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561545d57848303601f19018952813536889003605e190181126153e4575f80fd5b870160606153f2828061533f565b8287526154028388018284615380565b925050506154128683018361533f565b86830388880152615424838284615380565b92505050604080830135925061543983614c90565b6001600160401b0392909216949091019390935297830197908301906001016153bf565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561548e81614c15565b6001600160a01b031660608381019190915283013536849003601e190181126154b5575f80fd5b83016020810190356001600160401b038111156154d0575f80fd5b8060051b36038213156154e1575f80fd5b6080808501526154f560a0850182846153a8565b95945050505050565b5f8261551857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061553157615531614d5f565b91905290565b5f805f60608486031215615549575f80fd5b83519250602084015161555b81614c90565b6040850151909250614d5481614c90565b8082028115828204841417611126576111266152be565b5f8060408385031215615594575f80fd5b825191506020830151614ce281614b1d565b5f60208083525f84546155b881614ebf565b806020870152604060018084165f81146155d957600181146155f557615622565b60ff19851660408a0152604084151560051b8a01019550615622565b895f5260205f205f5b858110156156195781548b82018601529083019088016155fe565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561257a5761257a6152be565b5f8060408385031215615670575f80fd5b82516001600160401b0380821115615686575f80fd5b9084019060608287031215615699575f80fd5b6156a1614f13565b8251815260208301516156b381614c15565b60208201526040830151828111156156c9575f80fd5b6156d588828601614fb3565b6040830152508094505050506020830151614ce281614b1d565b5f8060408385031215615700575f80fd5b825191506020830151614ce281614c90565b80820180821115611126576111266152be565b5f60208284031215615735575f80fd5b611aeb82614ced565b5f6020828403121561574e575f80fd5b813560ff81168114611aeb575f80fd5b81810381811115611126576111266152be565b5f8235603e198336030181126150dc575f80fd5b5f808335601e1984360301811261579a575f80fd5b8301803591506001600160401b038211156157b3575f80fd5b602001915036819003821315613759575f80fd5b602081525f612463602083018486615380565b5f604082360312156157ea575f80fd5b6157f2614f3b565b6157fb83614b2a565b81526020808401356001600160401b0380821115615817575f80fd5b9085019036601f830112615829575f80fd5b81358181111561583b5761583b614eff565b8060051b915061584c848301614f5d565b8181529183018401918481019036841115615865575f80fd5b938501935b8385101561588f578435925061587f83614c15565b828252938501939085019061586a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158fc5784516001600160a01b031682529383019360019290920191908301906158d3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261592d610100840182614da9565b90506040840151601f198085840301606086015261594b8383614da9565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261597b83836158a1565b925060a08601519150808584030160c08601525061599982826158a1565b91505060c08401516159b660e08501826001600160401b03169052565b509392505050565b5f80604083850312156159cf575f80fd5b8251915060208301516001600160401b038111156159eb575f80fd5b6159f785828601614fb3565b9150509250929050565b6001600160401b03831115615a1857615a18614eff565b615a2c83615a268354614ebf565b836151bf565b5f601f841160018114615a5d575f8515615a465750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615a8c5786850135825560209485019460019092019101615a6c565b5086821015615aa8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361530a5761530a6152be56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122035b4347cef28c7a93a9f674de39546f4d8d7caf83bf8aecd7abac717f65f5e6664736f6c63430008190033",
}
// NativeTokenStakingManagerABI is the input ABI used to generate the binding from.
@@ -3124,7 +3124,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValida
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212204be60cc6edf9cbf66de0cf61ac7b9875c2e34000fdb727695f40b759d3220af564736f6c63430008190033",
+ Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122021bc83cb762d019261a415f663497547f82a60b24f9f9026058db0ae0972d18e64736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
index e63a04225..b92b9b491 100644
--- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
+++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go
@@ -91,7 +91,7 @@ type ValidatorRegistrationInput struct {
// PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract.
var PoAValidatorManagerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f80fd5b5060405161380838038061380883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136bb8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b61014961014436600461280a565b610312565b005b610149610159366004612839565b6105a2565b61014961016c366004612887565b610b5d565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a136600461280a565b610b6b565b6040516001600160401b03909116815260200161018a565b610149610b7f565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61014961024736600461280a565b610b92565b6101cd61025a3660046128b6565b610ba7565b61014961026d366004612887565b610bc3565b6102216005600160991b0181565b6101cd5f8051602061364683398151915281565b6101496102a236600461280a565b610db9565b6101e3601481565b6101496102bd36600461290f565b610ef5565b6102d56102d036600461280a565b611003565b60405161018a91906129cc565b6101a66202a30081565b6101496102fa366004612a4c565b611152565b6101cd61030d366004612a6e565b61118f565b5f8181525f805160206136668339815191526020526040808220815160e0810190925280545f8051602061364683398151915293929190829060ff16600581111561035f5761035f61294b565b60058111156103705761037061294b565b815260200160018201805461038490612ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612ad9565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156104665761046661294b565b146104a2575f8381526005830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610519573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105409190810190612c22565b6040518263ffffffff1660e01b815260040161055c9190612c53565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190612c65565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206136468339815191529060ff16156105f457604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610637573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065b9190612c65565b836020013514610684576040516372b0a7e760e11b815260208401356004820152602401610499565b306106956060850160408601612a4c565b6001600160a01b0316146106d8576106b36060840160408501612a4c565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f6106e66060850185612c7c565b905090505f805b828163ffffffff16101561094e575f6107096060880188612c7c565b8363ffffffff1681811061071f5761071f612cc1565b90506020028101906107319190612cd5565b61073a90612d40565b80516040519192505f91600688019161075291612db9565b9081526020016040518091039020541461078257805160405163a41f772f60e01b81526104999190600401612c53565b5f6002885f0135846040516020016107b192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107cb91612db9565b602060405180830381855afa1580156107e6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108099190612c65565b90508086600601835f01516040516108219190612db9565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108619082612e15565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff191690556108e19085612ee8565b82516040519195506108f291612db9565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a350508061094790612f08565b90506106ed565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610996910460ff1683612f2a565b6001600160401b031610156109c957604051633e1a785160e01b81526001600160401b0382166004820152602401610499565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109ed876111ea565b604001516040518263ffffffff1660e01b8152600401610a0d9190612c53565b602060405180830381865af4158015610a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4c9190612c65565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a869190613078565b5f60405180830381865af4158015610aa0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ac79190810190612c22565b90505f600282604051610ada9190612db9565b602060405180830381855afa158015610af5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b189190612c65565b9050828114610b445760405163baaea89d60e01b81526004810182905260248101849052604401610499565b5050506007909201805460ff1916600117905550505050565b610b6681611300565b505050565b5f610b7582611003565b6080015192915050565b610b876116b8565b610b905f611713565b565b610b9a6116b8565b610ba381611783565b5050565b5f610bb06116b8565b610bba8383611a68565b90505b92915050565b5f805160206136468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bf6866111ea565b604001516040518263ffffffff1660e01b8152600401610c169190612c53565b6040805180830381865af4158015610c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c54919061311b565b9150915080610c7a57604051632d07135360e01b81528115156004820152602401610499565b5f82815260048401602052604090208054610c9490612ad9565b90505f03610cb85760405163089938b360e11b815260048101839052602401610499565b60015f838152600580860160205260409091205460ff1690811115610cdf57610cdf61294b565b14610d12575f8281526005840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b5f8281526004840160205260408120610d2a9161277e565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206136468339815191529190610e0090612ad9565b90505f03610e245760405163089938b360e11b815260048101839052602401610499565b60015f838152600580840160205260409091205460ff1690811115610e4b57610e4b61294b565b14610e7e575f8281526005820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610eb5920161313c565b6020604051808303815f875af1158015610ed1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b669190612c65565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f395750825b90505f826001600160401b03166001148015610f545750303b155b905081158015610f62575080155b15610f805760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610faa57845460ff60401b1916600160401b1785555b610fb48787611fda565b8315610ffa57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61100b6127b5565b5f8281525f80516020613666833981519152602052604090819020815160e0810190925280545f80516020613646833981519152929190829060ff1660058111156110585761105861294b565b60058111156110695761106961294b565b815260200160018201805461107d90612ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546110a990612ad9565b80156110f45780601f106110cb576101008083540402835291602001916110f4565b820191905f5260205f20905b8154815290600101906020018083116110d757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61115a6116b8565b6001600160a01b03811661118357604051631e4fbdf760e01b81525f6004820152602401610499565b61118c81611713565b50565b6040515f905f80516020613646833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906111d290869086906131c6565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561124e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261127591908101906131d5565b915091508061129757604051636b2f19e960e01b815260040160405180910390fd5b8151156112bd578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156112f9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f6113096127b5565b5f805160206136468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61133c886111ea565b604001516040518263ffffffff1660e01b815260040161135c9190612c53565b6040805180830381865af4158015611376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139a919061311b565b9150915080156113c157604051632d07135360e01b81528115156004820152602401610499565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff909116908111156113f8576113f861294b565b60058111156114095761140961294b565b815260200160018201805461141d90612ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461144990612ad9565b80156114945780601f1061146b57610100808354040283529160200191611494565b820191905f5260205f20905b81548152906001019060200180831161147757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114ff576114ff61294b565b14158015611520575060018151600581111561151d5761151d61294b565b14155b1561154157805160405163170cc93360e21b81526104999190600401612b11565b6003815160058111156115565761155661294b565b036115645760048152611569565b600581525b83600601816020015160405161157f9190612db9565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156115c2576115c261294b565b0217905550602082015160018201906115db9082612e15565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156116815761168161294b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b905760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61178b6127b5565b5f8281525f805160206136668339815191526020526040808220815160e0810190925280545f8051602061364683398151915293929190829060ff1660058111156117d8576117d861294b565b60058111156117e9576117e961294b565b81526020016001820180546117fd90612ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461182990612ad9565b80156118745780601f1061184b57610100808354040283529160200191611874565b820191905f5260205f20905b81548152906001019060200180831161185757829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118e2576118e261294b565b14611915575f8481526005830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff191690600190849081111561195a5761195a61294b565b0217905550602082015160018201906119739082612e15565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f611a118582611ff4565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611aac57604051637fab81e560e01b815260040160405180910390fd5b5f8051602061364683398151915242611acb6060860160408701613262565b6001600160401b0316111580611b055750611ae96202a3004261327b565b611af96060860160408701613262565b6001600160401b031610155b15611b3f57611b1a6060850160408601613262565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b60038101546001600160401b0390611b6290600160401b9004821685831661327b565b1115611b8c57604051633e1a785160e01b81526001600160401b0384166004820152602401610499565b611ba1611b9c606086018661328e565b6121cb565b611bb1611b9c608086018661328e565b6030611bc060208601866132a2565b905014611bf257611bd460208501856132a2565b6040516326475b2f60e11b8152610499925060040190815260200190565b611bfc84806132a2565b90505f03611c2957611c0e84806132a2565b604051633e08a12560e11b81526004016104999291906132e4565b5f60068201611c3886806132a2565b604051611c469291906131c6565b90815260200160405180910390205414611c7f57611c6484806132a2565b60405163a41f772f60e01b81526004016104999291906132e4565b611c89835f612334565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611cc68a806132a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611d0e908b018b6132a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611d5760608b0160408c01613262565b6001600160401b03168152602001611d7260608b018b61328e565b611d7b906132f7565b8152602001611d8d60808b018b61328e565b611d96906132f7565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611dc49190613424565b5f60405180830381865af4158015611dde573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e0591908101906134db565b5f82815260048601602052604090209193509150611e238282612e15565b508160068401611e3388806132a2565b604051611e419291906131c6565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611e7d908590600401612c53565b6020604051808303815f875af1158015611e99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebd9190612c65565b5f8481526005860160205260409020805460ff191660011790559050611ee387806132a2565b5f858152600587016020526040902060010191611f0191908361351e565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611f6088806132a2565b604051611f6e9291906131c6565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b6040016020810190611fac9190613262565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611fe261259e565b611feb826125e7565b610ba381612600565b5f8281525f80516020613666833981519152602052604081206002015481905f8051602061364683398151915290600160801b90046001600160401b031661203c8582612334565b5f61204687612611565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156120ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121169190810190612c22565b6040518263ffffffff1660e01b81526004016121329190612c53565b6020604051808303815f875af115801561214e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121729190612c65565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b6121d86020820182612887565b63ffffffff161580156121f857506121f36020820182612c7c565b151590505b1561223f5761220a6020820182612887565b6122176020830183612c7c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b61224c6020820182612c7c565b905061225b6020830183612887565b63ffffffff1611156122745761220a6020820182612887565b60015b6122846020830183612c7c565b9050811015610ba35761229a6020830183612c7c565b6122a56001846135d7565b8181106122b4576122b4612cc1565b90506020020160208101906122c99190612a4c565b6001600160a01b03166122df6020840184612c7c565b838181106122ef576122ef612cc1565b90506020020160208101906123049190612a4c565b6001600160a01b0316101561232c57604051630dbc8d5f60e31b815260040160405180910390fd5b600101612277565b5f805160206136468339815191525f6001600160401b0380841690851611156123685761236183856135ea565b9050612375565b61237284846135ea565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806123e25750600184015481516123de916001600160401b03169061327b565b8210155b1561240a576001600160401b0380841660608301528282526040820151166020820152612429565b828160600181815161241c9190612ee8565b6001600160401b03169052505b6060810151612439906064612f2a565b602082015160018601546001600160401b0392909216916124649190600160401b900460ff16612f2a565b6001600160401b0316101561249d57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b85816040018181516124af9190612ee8565b6001600160401b03169052506040810180518691906124cf9083906135ea565b6001600160401b0316905250600184015460408201516064916124fd91600160401b90910460ff1690612f2a565b6001600160401b03161015612536576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610499565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b9057604051631afcd79f60e31b815260040160405180910390fd5b6125ef61259e565b6125f7612686565b61118c8161268e565b61260861259e565b61118c81612776565b5f8181525f805160206136668339815191526020526040812060020180545f80516020613646833981519152919060089061265b90600160401b90046001600160401b031661360a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b9061259e565b61269661259e565b80355f8051602061364683398151915290815560146126bb6060840160408501613625565b60ff1611806126da57506126d56060830160408401613625565b60ff16155b1561270e576126ef6060830160408401613625565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b61271e6060830160408401613625565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561274f6040830160208401613262565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61115a61259e565b50805461278a90612ad9565b5f825580601f10612799575050565b601f0160209004905f5260205f209081019061118c91906127f2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612806575f81556001016127f3565b5090565b5f6020828403121561281a575f80fd5b5035919050565b803563ffffffff81168114612834575f80fd5b919050565b5f806040838503121561284a575f80fd5b82356001600160401b0381111561285f575f80fd5b830160808186031215612870575f80fd5b915061287e60208401612821565b90509250929050565b5f60208284031215612897575f80fd5b610bba82612821565b80356001600160401b0381168114612834575f80fd5b5f80604083850312156128c7575f80fd5b82356001600160401b038111156128dc575f80fd5b830160a081860312156128ed575f80fd5b915061287e602084016128a0565b6001600160a01b038116811461118c575f80fd5b5f808284036080811215612921575f80fd5b606081121561292e575f80fd5b508291506060830135612940816128fb565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6006811061297b57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612999578181015183820152602001612981565b50505f910152565b5f81518084526129b881602086016020860161297f565b601f01601f19169290920160200192915050565b602081526129de60208201835161295f565b5f602083015160e060408401526129f96101008401826129a1565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f60208284031215612a5c575f80fd5b8135612a67816128fb565b9392505050565b5f8060208385031215612a7f575f80fd5b82356001600160401b0380821115612a95575f80fd5b818501915085601f830112612aa8575f80fd5b813581811115612ab6575f80fd5b866020828501011115612ac7575f80fd5b60209290920196919550909350505050565b600181811c90821680612aed57607f821691505b602082108103612b0b57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610bbd828461295f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612b5557612b55612b1f565b60405290565b604080519081016001600160401b0381118282101715612b5557612b55612b1f565b604051601f8201601f191681016001600160401b0381118282101715612ba557612ba5612b1f565b604052919050565b5f6001600160401b03821115612bc557612bc5612b1f565b50601f01601f191660200190565b5f82601f830112612be2575f80fd5b8151612bf5612bf082612bad565b612b7d565b818152846020838601011115612c09575f80fd5b612c1a82602083016020870161297f565b949350505050565b5f60208284031215612c32575f80fd5b81516001600160401b03811115612c47575f80fd5b612c1a84828501612bd3565b602081525f610bba60208301846129a1565b5f60208284031215612c75575f80fd5b5051919050565b5f808335601e19843603018112612c91575f80fd5b8301803591506001600160401b03821115612caa575f80fd5b6020019150600581901b36038213156121c4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612ce9575f80fd5b9190910192915050565b5f82601f830112612d02575f80fd5b8135612d10612bf082612bad565b818152846020838601011115612d24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612d50575f80fd5b612d58612b33565b82356001600160401b0380821115612d6e575f80fd5b612d7a36838701612cf3565b83526020850135915080821115612d8f575f80fd5b50612d9c36828601612cf3565b602083015250612dae604084016128a0565b604082015292915050565b5f8251612ce981846020870161297f565b601f821115610b6657805f5260205f20601f840160051c81016020851015612def5750805b601f840160051c820191505b81811015612e0e575f8155600101612dfb565b5050505050565b81516001600160401b03811115612e2e57612e2e612b1f565b612e4281612e3c8454612ad9565b84612dca565b602080601f831160018114612e75575f8415612e5e5750858301515b5f19600386901b1c1916600185901b178555612ecc565b5f85815260208120601f198616915b82811015612ea357888601518255948401946001909101908401612e84565b5085821015612ec057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156112f9576112f9612ed4565b5f63ffffffff808316818103612f2057612f20612ed4565b6001019392505050565b6001600160401b03818116838216028082169190828114612f4d57612f4d612ed4565b505092915050565b5f808335601e19843603018112612f6a575f80fd5b83016020810192503590506001600160401b03811115612f88575f80fd5b8036038213156121c4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561306b57848303601f19018952813536889003605e19018112612ffa575f80fd5b870160606130088280612f55565b8287526130188388018284612f96565b9250505061302886830183612f55565b8683038888015261303a838284612f96565b9250505060406001600160401b036130538285016128a0565b16950194909452509783019790830190600101612fd5565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561309c816128fb565b6001600160a01b031660608381019190915283013536849003601e190181126130c3575f80fd5b83016020810190356001600160401b038111156130de575f80fd5b8060051b36038213156130ef575f80fd5b60808085015261310360a085018284612fbe565b95945050505050565b80518015158114612834575f80fd5b5f806040838503121561312c575f80fd5b8251915061287e6020840161310c565b5f60208083525f845461314e81612ad9565b806020870152604060018084165f811461316f576001811461318b576131b8565b60ff19851660408a0152604084151560051b8a010195506131b8565b895f5260205f205f5b858110156131af5781548b8201860152908301908801613194565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156131e6575f80fd5b82516001600160401b03808211156131fc575f80fd5b908401906060828703121561320f575f80fd5b613217612b33565b825181526020830151613229816128fb565b602082015260408301518281111561323f575f80fd5b61324b88828601612bd3565b604083015250935061287e9150506020840161310c565b5f60208284031215613272575f80fd5b610bba826128a0565b80820180821115610bbd57610bbd612ed4565b5f8235603e19833603018112612ce9575f80fd5b5f808335601e198436030181126132b7575f80fd5b8301803591506001600160401b038211156132d0575f80fd5b6020019150368190038213156121c4575f80fd5b602081525f612c1a602083018486612f96565b5f60408236031215613307575f80fd5b61330f612b5b565b61331883612821565b81526020808401356001600160401b0380821115613334575f80fd5b9085019036601f830112613346575f80fd5b81358181111561335857613358612b1f565b8060051b9150613369848301612b7d565b8181529183018401918481019036841115613382575f80fd5b938501935b838510156133ac578435925061339c836128fb565b8282529385019390850190613387565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156134195784516001600160a01b031682529383019360019290920191908301906133f0565b509695505050505050565b60208152815160208201525f602083015160e0604084015261344a6101008401826129a1565b90506040840151601f198085840301606086015261346883836129a1565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261349883836133be565b925060a08601519150808584030160c0860152506134b682826133be565b91505060c08401516134d360e08501826001600160401b03169052565b509392505050565b5f80604083850312156134ec575f80fd5b8251915060208301516001600160401b03811115613508575f80fd5b61351485828601612bd3565b9150509250929050565b6001600160401b0383111561353557613535612b1f565b613549836135438354612ad9565b83612dca565b5f601f84116001811461357a575f85156135635750838201355b5f19600387901b1c1916600186901b178355612e0e565b5f83815260208120601f198716915b828110156135a95786850135825560209485019460019092019101613589565b50868210156135c5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610bbd57610bbd612ed4565b6001600160401b038281168282160390808211156112f9576112f9612ed4565b5f6001600160401b03808316818103612f2057612f20612ed4565b5f60208284031215613635575f80fd5b813560ff81168114612a67575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220f165cf2c5e4c6cb16a4bc18a3f6898f7f7d19f36b47cdc62240b6f55f3c4da3e64736f6c63430008190033",
+ Bin: "0x608060405234801561000f575f80fd5b5060405161380838038061380883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136bb8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b61014961014436600461280a565b610312565b005b610149610159366004612839565b6105a2565b61014961016c366004612887565b610b5d565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a136600461280a565b610b6b565b6040516001600160401b03909116815260200161018a565b610149610b7f565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61014961024736600461280a565b610b92565b6101cd61025a3660046128b6565b610ba7565b61014961026d366004612887565b610bc3565b6102216005600160991b0181565b6101cd5f8051602061364683398151915281565b6101496102a236600461280a565b610db9565b6101e3601481565b6101496102bd36600461290f565b610ef5565b6102d56102d036600461280a565b611003565b60405161018a91906129cc565b6101a66202a30081565b6101496102fa366004612a4c565b611152565b6101cd61030d366004612a6e565b61118f565b5f8181525f805160206136668339815191526020526040808220815160e0810190925280545f8051602061364683398151915293929190829060ff16600581111561035f5761035f61294b565b60058111156103705761037061294b565b815260200160018201805461038490612ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612ad9565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156104665761046661294b565b146104a2575f8381526005830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610519573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105409190810190612c22565b6040518263ffffffff1660e01b815260040161055c9190612c53565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190612c65565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206136468339815191529060ff16156105f457604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610637573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065b9190612c65565b836020013514610684576040516372b0a7e760e11b815260208401356004820152602401610499565b306106956060850160408601612a4c565b6001600160a01b0316146106d8576106b36060840160408501612a4c565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f6106e66060850185612c7c565b905090505f805b828163ffffffff16101561094e575f6107096060880188612c7c565b8363ffffffff1681811061071f5761071f612cc1565b90506020028101906107319190612cd5565b61073a90612d40565b80516040519192505f91600688019161075291612db9565b9081526020016040518091039020541461078257805160405163a41f772f60e01b81526104999190600401612c53565b5f6002885f0135846040516020016107b192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107cb91612db9565b602060405180830381855afa1580156107e6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108099190612c65565b90508086600601835f01516040516108219190612db9565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108619082612e15565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff191690556108e19085612ee8565b82516040519195506108f291612db9565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a350508061094790612f08565b90506106ed565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610996910460ff1683612f2a565b6001600160401b031610156109c957604051633e1a785160e01b81526001600160401b0382166004820152602401610499565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109ed876111ea565b604001516040518263ffffffff1660e01b8152600401610a0d9190612c53565b602060405180830381865af4158015610a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4c9190612c65565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a869190613078565b5f60405180830381865af4158015610aa0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ac79190810190612c22565b90505f600282604051610ada9190612db9565b602060405180830381855afa158015610af5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b189190612c65565b9050828114610b445760405163baaea89d60e01b81526004810182905260248101849052604401610499565b5050506007909201805460ff1916600117905550505050565b610b6681611300565b505050565b5f610b7582611003565b6080015192915050565b610b876116b8565b610b905f611713565b565b610b9a6116b8565b610ba381611783565b5050565b5f610bb06116b8565b610bba8383611a68565b90505b92915050565b5f805160206136468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bf6866111ea565b604001516040518263ffffffff1660e01b8152600401610c169190612c53565b6040805180830381865af4158015610c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c54919061311b565b9150915080610c7a57604051632d07135360e01b81528115156004820152602401610499565b5f82815260048401602052604090208054610c9490612ad9565b90505f03610cb85760405163089938b360e11b815260048101839052602401610499565b60015f838152600580860160205260409091205460ff1690811115610cdf57610cdf61294b565b14610d12575f8281526005840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b5f8281526004840160205260408120610d2a9161277e565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206136468339815191529190610e0090612ad9565b90505f03610e245760405163089938b360e11b815260048101839052602401610499565b60015f838152600580840160205260409091205460ff1690811115610e4b57610e4b61294b565b14610e7e575f8281526005820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610eb5920161313c565b6020604051808303815f875af1158015610ed1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b669190612c65565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f395750825b90505f826001600160401b03166001148015610f545750303b155b905081158015610f62575080155b15610f805760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610faa57845460ff60401b1916600160401b1785555b610fb48787611fda565b8315610ffa57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61100b6127b5565b5f8281525f80516020613666833981519152602052604090819020815160e0810190925280545f80516020613646833981519152929190829060ff1660058111156110585761105861294b565b60058111156110695761106961294b565b815260200160018201805461107d90612ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546110a990612ad9565b80156110f45780601f106110cb576101008083540402835291602001916110f4565b820191905f5260205f20905b8154815290600101906020018083116110d757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61115a6116b8565b6001600160a01b03811661118357604051631e4fbdf760e01b81525f6004820152602401610499565b61118c81611713565b50565b6040515f905f80516020613646833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906111d290869086906131c6565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561124e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261127591908101906131d5565b915091508061129757604051636b2f19e960e01b815260040160405180910390fd5b8151156112bd578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156112f9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f6113096127b5565b5f805160206136468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61133c886111ea565b604001516040518263ffffffff1660e01b815260040161135c9190612c53565b6040805180830381865af4158015611376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139a919061311b565b9150915080156113c157604051632d07135360e01b81528115156004820152602401610499565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff909116908111156113f8576113f861294b565b60058111156114095761140961294b565b815260200160018201805461141d90612ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461144990612ad9565b80156114945780601f1061146b57610100808354040283529160200191611494565b820191905f5260205f20905b81548152906001019060200180831161147757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114ff576114ff61294b565b14158015611520575060018151600581111561151d5761151d61294b565b14155b1561154157805160405163170cc93360e21b81526104999190600401612b11565b6003815160058111156115565761155661294b565b036115645760048152611569565b600581525b83600601816020015160405161157f9190612db9565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156115c2576115c261294b565b0217905550602082015160018201906115db9082612e15565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156116815761168161294b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b905760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61178b6127b5565b5f8281525f805160206136668339815191526020526040808220815160e0810190925280545f8051602061364683398151915293929190829060ff1660058111156117d8576117d861294b565b60058111156117e9576117e961294b565b81526020016001820180546117fd90612ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461182990612ad9565b80156118745780601f1061184b57610100808354040283529160200191611874565b820191905f5260205f20905b81548152906001019060200180831161185757829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118e2576118e261294b565b14611915575f8481526005830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612b11565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff191690600190849081111561195a5761195a61294b565b0217905550602082015160018201906119739082612e15565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f611a118582611ff4565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611aac57604051637fab81e560e01b815260040160405180910390fd5b5f8051602061364683398151915242611acb6060860160408701613262565b6001600160401b0316111580611b055750611ae96202a3004261327b565b611af96060860160408701613262565b6001600160401b031610155b15611b3f57611b1a6060850160408601613262565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b60038101546001600160401b0390611b6290600160401b9004821685831661327b565b1115611b8c57604051633e1a785160e01b81526001600160401b0384166004820152602401610499565b611ba1611b9c606086018661328e565b6121cb565b611bb1611b9c608086018661328e565b6030611bc060208601866132a2565b905014611bf257611bd460208501856132a2565b6040516326475b2f60e11b8152610499925060040190815260200190565b611bfc84806132a2565b90505f03611c2957611c0e84806132a2565b604051633e08a12560e11b81526004016104999291906132e4565b5f60068201611c3886806132a2565b604051611c469291906131c6565b90815260200160405180910390205414611c7f57611c6484806132a2565b60405163a41f772f60e01b81526004016104999291906132e4565b611c89835f612334565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611cc68a806132a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611d0e908b018b6132a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611d5760608b0160408c01613262565b6001600160401b03168152602001611d7260608b018b61328e565b611d7b906132f7565b8152602001611d8d60808b018b61328e565b611d96906132f7565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611dc49190613424565b5f60405180830381865af4158015611dde573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e0591908101906134db565b5f82815260048601602052604090209193509150611e238282612e15565b508160068401611e3388806132a2565b604051611e419291906131c6565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611e7d908590600401612c53565b6020604051808303815f875af1158015611e99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebd9190612c65565b5f8481526005860160205260409020805460ff191660011790559050611ee387806132a2565b5f858152600587016020526040902060010191611f0191908361351e565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611f6088806132a2565b604051611f6e9291906131c6565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b6040016020810190611fac9190613262565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611fe261259e565b611feb826125e7565b610ba381612600565b5f8281525f80516020613666833981519152602052604081206002015481905f8051602061364683398151915290600160801b90046001600160401b031661203c8582612334565b5f61204687612611565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156120ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121169190810190612c22565b6040518263ffffffff1660e01b81526004016121329190612c53565b6020604051808303815f875af115801561214e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121729190612c65565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b6121d86020820182612887565b63ffffffff161580156121f857506121f36020820182612c7c565b151590505b1561223f5761220a6020820182612887565b6122176020830183612c7c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b61224c6020820182612c7c565b905061225b6020830183612887565b63ffffffff1611156122745761220a6020820182612887565b60015b6122846020830183612c7c565b9050811015610ba35761229a6020830183612c7c565b6122a56001846135d7565b8181106122b4576122b4612cc1565b90506020020160208101906122c99190612a4c565b6001600160a01b03166122df6020840184612c7c565b838181106122ef576122ef612cc1565b90506020020160208101906123049190612a4c565b6001600160a01b0316101561232c57604051630dbc8d5f60e31b815260040160405180910390fd5b600101612277565b5f805160206136468339815191525f6001600160401b0380841690851611156123685761236183856135ea565b9050612375565b61237284846135ea565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806123e25750600184015481516123de916001600160401b03169061327b565b8210155b1561240a576001600160401b0380841660608301528282526040820151166020820152612429565b828160600181815161241c9190612ee8565b6001600160401b03169052505b6060810151612439906064612f2a565b602082015160018601546001600160401b0392909216916124649190600160401b900460ff16612f2a565b6001600160401b0316101561249d57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b85816040018181516124af9190612ee8565b6001600160401b03169052506040810180518691906124cf9083906135ea565b6001600160401b0316905250600184015460408201516064916124fd91600160401b90910460ff1690612f2a565b6001600160401b03161015612536576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610499565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b9057604051631afcd79f60e31b815260040160405180910390fd5b6125ef61259e565b6125f7612686565b61118c8161268e565b61260861259e565b61118c81612776565b5f8181525f805160206136668339815191526020526040812060020180545f80516020613646833981519152919060089061265b90600160401b90046001600160401b031661360a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b9061259e565b61269661259e565b80355f8051602061364683398151915290815560146126bb6060840160408501613625565b60ff1611806126da57506126d56060830160408401613625565b60ff16155b1561270e576126ef6060830160408401613625565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b61271e6060830160408401613625565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561274f6040830160208401613262565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61115a61259e565b50805461278a90612ad9565b5f825580601f10612799575050565b601f0160209004905f5260205f209081019061118c91906127f2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612806575f81556001016127f3565b5090565b5f6020828403121561281a575f80fd5b5035919050565b803563ffffffff81168114612834575f80fd5b919050565b5f806040838503121561284a575f80fd5b82356001600160401b0381111561285f575f80fd5b830160808186031215612870575f80fd5b915061287e60208401612821565b90509250929050565b5f60208284031215612897575f80fd5b610bba82612821565b80356001600160401b0381168114612834575f80fd5b5f80604083850312156128c7575f80fd5b82356001600160401b038111156128dc575f80fd5b830160a081860312156128ed575f80fd5b915061287e602084016128a0565b6001600160a01b038116811461118c575f80fd5b5f808284036080811215612921575f80fd5b606081121561292e575f80fd5b508291506060830135612940816128fb565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6006811061297b57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612999578181015183820152602001612981565b50505f910152565b5f81518084526129b881602086016020860161297f565b601f01601f19169290920160200192915050565b602081526129de60208201835161295f565b5f602083015160e060408401526129f96101008401826129a1565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f60208284031215612a5c575f80fd5b8135612a67816128fb565b9392505050565b5f8060208385031215612a7f575f80fd5b82356001600160401b0380821115612a95575f80fd5b818501915085601f830112612aa8575f80fd5b813581811115612ab6575f80fd5b866020828501011115612ac7575f80fd5b60209290920196919550909350505050565b600181811c90821680612aed57607f821691505b602082108103612b0b57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610bbd828461295f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612b5557612b55612b1f565b60405290565b604080519081016001600160401b0381118282101715612b5557612b55612b1f565b604051601f8201601f191681016001600160401b0381118282101715612ba557612ba5612b1f565b604052919050565b5f6001600160401b03821115612bc557612bc5612b1f565b50601f01601f191660200190565b5f82601f830112612be2575f80fd5b8151612bf5612bf082612bad565b612b7d565b818152846020838601011115612c09575f80fd5b612c1a82602083016020870161297f565b949350505050565b5f60208284031215612c32575f80fd5b81516001600160401b03811115612c47575f80fd5b612c1a84828501612bd3565b602081525f610bba60208301846129a1565b5f60208284031215612c75575f80fd5b5051919050565b5f808335601e19843603018112612c91575f80fd5b8301803591506001600160401b03821115612caa575f80fd5b6020019150600581901b36038213156121c4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612ce9575f80fd5b9190910192915050565b5f82601f830112612d02575f80fd5b8135612d10612bf082612bad565b818152846020838601011115612d24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612d50575f80fd5b612d58612b33565b82356001600160401b0380821115612d6e575f80fd5b612d7a36838701612cf3565b83526020850135915080821115612d8f575f80fd5b50612d9c36828601612cf3565b602083015250612dae604084016128a0565b604082015292915050565b5f8251612ce981846020870161297f565b601f821115610b6657805f5260205f20601f840160051c81016020851015612def5750805b601f840160051c820191505b81811015612e0e575f8155600101612dfb565b5050505050565b81516001600160401b03811115612e2e57612e2e612b1f565b612e4281612e3c8454612ad9565b84612dca565b602080601f831160018114612e75575f8415612e5e5750858301515b5f19600386901b1c1916600185901b178555612ecc565b5f85815260208120601f198616915b82811015612ea357888601518255948401946001909101908401612e84565b5085821015612ec057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156112f9576112f9612ed4565b5f63ffffffff808316818103612f2057612f20612ed4565b6001019392505050565b6001600160401b03818116838216028082169190828114612f4d57612f4d612ed4565b505092915050565b5f808335601e19843603018112612f6a575f80fd5b83016020810192503590506001600160401b03811115612f88575f80fd5b8036038213156121c4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561306b57848303601f19018952813536889003605e19018112612ffa575f80fd5b870160606130088280612f55565b8287526130188388018284612f96565b9250505061302886830183612f55565b8683038888015261303a838284612f96565b9250505060406001600160401b036130538285016128a0565b16950194909452509783019790830190600101612fd5565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561309c816128fb565b6001600160a01b031660608381019190915283013536849003601e190181126130c3575f80fd5b83016020810190356001600160401b038111156130de575f80fd5b8060051b36038213156130ef575f80fd5b60808085015261310360a085018284612fbe565b95945050505050565b80518015158114612834575f80fd5b5f806040838503121561312c575f80fd5b8251915061287e6020840161310c565b5f60208083525f845461314e81612ad9565b806020870152604060018084165f811461316f576001811461318b576131b8565b60ff19851660408a0152604084151560051b8a010195506131b8565b895f5260205f205f5b858110156131af5781548b8201860152908301908801613194565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156131e6575f80fd5b82516001600160401b03808211156131fc575f80fd5b908401906060828703121561320f575f80fd5b613217612b33565b825181526020830151613229816128fb565b602082015260408301518281111561323f575f80fd5b61324b88828601612bd3565b604083015250935061287e9150506020840161310c565b5f60208284031215613272575f80fd5b610bba826128a0565b80820180821115610bbd57610bbd612ed4565b5f8235603e19833603018112612ce9575f80fd5b5f808335601e198436030181126132b7575f80fd5b8301803591506001600160401b038211156132d0575f80fd5b6020019150368190038213156121c4575f80fd5b602081525f612c1a602083018486612f96565b5f60408236031215613307575f80fd5b61330f612b5b565b61331883612821565b81526020808401356001600160401b0380821115613334575f80fd5b9085019036601f830112613346575f80fd5b81358181111561335857613358612b1f565b8060051b9150613369848301612b7d565b8181529183018401918481019036841115613382575f80fd5b938501935b838510156133ac578435925061339c836128fb565b8282529385019390850190613387565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156134195784516001600160a01b031682529383019360019290920191908301906133f0565b509695505050505050565b60208152815160208201525f602083015160e0604084015261344a6101008401826129a1565b90506040840151601f198085840301606086015261346883836129a1565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261349883836133be565b925060a08601519150808584030160c0860152506134b682826133be565b91505060c08401516134d360e08501826001600160401b03169052565b509392505050565b5f80604083850312156134ec575f80fd5b8251915060208301516001600160401b03811115613508575f80fd5b61351485828601612bd3565b9150509250929050565b6001600160401b0383111561353557613535612b1f565b613549836135438354612ad9565b83612dca565b5f601f84116001811461357a575f85156135635750838201355b5f19600387901b1c1916600186901b178355612e0e565b5f83815260208120601f198716915b828110156135a95786850135825560209485019460019092019101613589565b50868210156135c5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610bbd57610bbd612ed4565b6001600160401b038281168282160390808211156112f9576112f9612ed4565b5f6001600160401b03808316818103612f2057612f20612ed4565b5f60208284031215613635575f80fd5b813560ff81168114612a67575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220bd40bd3a3645054e0aa35174b4873577bd78e93a770721d39f9489d684fac01c64736f6c63430008190033",
}
// PoAValidatorManagerABI is the input ABI used to generate the binding from.
@@ -2032,7 +2032,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorWeightUpd
// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract.
var ValidatorMessagesMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1ID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212204be60cc6edf9cbf66de0cf61ac7b9875c2e34000fdb727695f40b759d3220af564736f6c63430008190033",
+ Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122021bc83cb762d019261a415f663497547f82a60b24f9f9026058db0ae0972d18e64736f6c63430008190033",
}
// ValidatorMessagesABI is the input ABI used to generate the binding from.
diff --git a/contracts/teleporter/tests/ReceiveCrossChainMessageTests.t.sol b/contracts/teleporter/tests/ReceiveCrossChainMessageTests.t.sol
index 5b8084b16..049cc750f 100644
--- a/contracts/teleporter/tests/ReceiveCrossChainMessageTests.t.sol
+++ b/contracts/teleporter/tests/ReceiveCrossChainMessageTests.t.sol
@@ -29,7 +29,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest {
function testSuccess() public {
// This test contract must be an allowed relayer since it is what
- // will call receiveCrossSubnetMessage.
+ // will call receiveCrossChainMessage.
address[] memory allowedRelayers = new address[](2);
allowedRelayers[0] = address(this);
allowedRelayers[1] = DEFAULT_RELAYER_REWARD_ADDRESS;
diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol
index 2ed3ceecd..6df7be3a2 100644
--- a/contracts/validator-manager/ValidatorManager.sol
+++ b/contracts/validator-manager/ValidatorManager.sol
@@ -269,7 +269,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
// Check that adding this validator would not exceed the maximum churn rate.
_checkAndUpdateChurnTracker(weight, 0);
- (bytes32 validationID, bytes memory registerSubnetValidatorMessage) = ValidatorMessages
+ (bytes32 validationID, bytes memory registerL1ValidatorMessage) = ValidatorMessages
.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
l1ID: $._l1ID,
@@ -281,11 +281,11 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida
weight: weight
})
);
- $._pendingRegisterValidationMessages[validationID] = registerSubnetValidatorMessage;
+ $._pendingRegisterValidationMessages[validationID] = registerL1ValidatorMessage;
$._registeredValidators[input.nodeID] = validationID;
// Submit the message to the Warp precompile.
- bytes32 messageID = WARP_MESSENGER.sendWarpMessage(registerSubnetValidatorMessage);
+ bytes32 messageID = WARP_MESSENGER.sendWarpMessage(registerL1ValidatorMessage);
$._validationPeriods[validationID].status = ValidatorStatus.PendingAdded;
$._validationPeriods[validationID].nodeID = input.nodeID;
$._validationPeriods[validationID].startingWeight = weight;
diff --git a/contracts/validator-manager/ValidatorMessages.sol b/contracts/validator-manager/ValidatorMessages.sol
index ef06f022d..9f481c601 100644
--- a/contracts/validator-manager/ValidatorMessages.sol
+++ b/contracts/validator-manager/ValidatorMessages.sol
@@ -544,7 +544,7 @@ library ValidatorMessages {
}
/**
- * @notice Unpacks a byte array as a SubnetValidatorWeightMessage.
+ * @notice Unpacks a byte array as an L1ValidatorWeightMessage.
* The message format specification is the same as the one used in above for packing.
*
* @param input The byte array to unpack.
diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol
index ebfc3eba7..e0c2280de 100644
--- a/contracts/validator-manager/interfaces/IValidatorManager.sol
+++ b/contracts/validator-manager/interfaces/IValidatorManager.sol
@@ -51,7 +51,7 @@ struct ValidatorChurnPeriod {
/**
* @notice Validator Manager settings, used to initialize the Validator Manager
- * @notice The l1ID is the ID of the subnet that the Validator Manager is managing
+ * @notice The l1ID is the ID of the L1 that the Validator Manager is managing
* @notice The churnPeriodSeconds is the duration of the churn period in seconds
* @notice The maximumChurnPercentage is the maximum percentage of the total weight that can be added or removed in a single churn period
*/
diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
index 3bd61b966..b338f38d5 100644
--- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol
@@ -1629,9 +1629,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
uint256 balanceBefore = _getStakeAssetBalance(address(this));
- bytes memory subnetValidatorRegistrationMessage =
+ bytes memory l1ValidatorRegistrationMessage =
ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false);
- _mockGetPChainWarpMessage(subnetValidatorRegistrationMessage, true);
+ _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true);
posValidatorManager.completeEndValidation(0);
@@ -2301,7 +2301,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
uint64 validatorWeight,
address rewardRecipient
) internal {
- bytes memory subnetValidatorRegistrationMessage =
+ bytes memory l1ValidatorRegistrationMessage =
ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false);
vm.expectEmit(true, true, true, true, address(posValidatorManager));
@@ -2312,7 +2312,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
_expectStakeUnlock(validatorOwner, _weightToValue(validatorWeight));
_expectRewardIssuance(rewardRecipient, expectedReward);
- _completeEndValidation(subnetValidatorRegistrationMessage);
+ _completeEndValidation(l1ValidatorRegistrationMessage);
if (rewardRecipient == validatorOwner) {
assertEq(
@@ -2332,8 +2332,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest {
}
}
- function _completeEndValidation(bytes memory subnetValidatorRegistrationMessage) internal {
- _mockGetPChainWarpMessage(subnetValidatorRegistrationMessage, true);
+ function _completeEndValidation(bytes memory l1ValidatorRegistrationMessage) internal {
+ _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true);
posValidatorManager.completeEndValidation(0);
}
diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol
index 409e2a74f..bcff390f6 100644
--- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol
+++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol
@@ -190,7 +190,7 @@ abstract contract ValidatorManagerTest is Test {
bytes32 validationID = _setUpInitializeValidatorRegistration(
DEFAULT_NODE_ID, DEFAULT_L1_ID, DEFAULT_WEIGHT, DEFAULT_EXPIRY, DEFAULT_BLS_PUBLIC_KEY
);
- (, bytes memory registerSubnetValidatorMessage) = ValidatorMessages
+ (, bytes memory registerL1ValidatorMessage) = ValidatorMessages
.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
l1ID: DEFAULT_L1_ID,
@@ -202,7 +202,7 @@ abstract contract ValidatorManagerTest is Test {
weight: DEFAULT_WEIGHT
})
);
- _mockSendWarpMessage(registerSubnetValidatorMessage, bytes32(0));
+ _mockSendWarpMessage(registerL1ValidatorMessage, bytes32(0));
validatorManager.resendRegisterValidatorMessage(validationID);
}
@@ -259,10 +259,10 @@ abstract contract ValidatorManagerTest is Test {
force: false
});
- bytes memory subnetValidatorRegistrationMessage =
+ bytes memory l1ValidatorRegistrationMessage =
ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false);
- _mockGetPChainWarpMessage(subnetValidatorRegistrationMessage, true);
+ _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true);
vm.expectEmit(true, true, true, true, address(validatorManager));
emit ValidationPeriodEnded(validationID, ValidatorStatus.Completed);
@@ -274,10 +274,10 @@ abstract contract ValidatorManagerTest is Test {
bytes32 validationID = _setUpInitializeValidatorRegistration(
DEFAULT_NODE_ID, DEFAULT_L1_ID, DEFAULT_WEIGHT, DEFAULT_EXPIRY, DEFAULT_BLS_PUBLIC_KEY
);
- bytes memory subnetValidatorRegistrationMessage =
+ bytes memory l1ValidatorRegistrationMessage =
ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false);
- _mockGetPChainWarpMessage(subnetValidatorRegistrationMessage, true);
+ _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true);
vm.expectEmit(true, true, true, true, address(validatorManager));
emit ValidationPeriodEnded(validationID, ValidatorStatus.Invalidated);
@@ -417,7 +417,7 @@ abstract contract ValidatorManagerTest is Test {
weight: weight
})
);
- (, bytes memory registerSubnetValidatorMessage) = ValidatorMessages
+ (, bytes memory registerL1ValidatorMessage) = ValidatorMessages
.packRegisterL1ValidatorMessage(
ValidatorMessages.ValidationPeriod({
l1ID: l1ID,
@@ -430,7 +430,7 @@ abstract contract ValidatorManagerTest is Test {
})
);
vm.warp(registrationExpiry - 1);
- _mockSendWarpMessage(registerSubnetValidatorMessage, bytes32(0));
+ _mockSendWarpMessage(registerL1ValidatorMessage, bytes32(0));
_beforeSend(_weightToValue(weight), address(this));
vm.expectEmit(true, true, true, true, address(validatorManager));
@@ -459,10 +459,10 @@ abstract contract ValidatorManagerTest is Test {
validationID = _setUpInitializeValidatorRegistration(
nodeID, l1ID, weight, registrationExpiry, blsPublicKey
);
- bytes memory subnetValidatorRegistrationMessage =
+ bytes memory l1ValidatorRegistrationMessage =
ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, true);
- _mockGetPChainWarpMessage(subnetValidatorRegistrationMessage, true);
+ _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true);
vm.warp(registrationTimestamp);
vm.expectEmit(true, true, true, true, address(validatorManager));
diff --git a/tests/flows/teleporter/add_fee_amount.go b/tests/flows/teleporter/add_fee_amount.go
index 0a3156eb9..f15c69cc8 100644
--- a/tests/flows/teleporter/add_fee_amount.go
+++ b/tests/flows/teleporter/add_fee_amount.go
@@ -114,7 +114,7 @@ func AddFeeAmount(network *localnetwork.LocalNetwork, teleporter utils.Teleporte
fundedKey,
)
- // Relay message containing the specific receipt from Subnet B to Subnet A
+ // Relay message containing the specific receipt from L1 B to L1 A
teleporter.RelayTeleporterMessage(
ctx,
sendSpecificReceiptsReceipt,
diff --git a/tests/flows/teleporter/insufficient_gas.go b/tests/flows/teleporter/insufficient_gas.go
index 3cdac7cf4..f595e6914 100644
--- a/tests/flows/teleporter/insufficient_gas.go
+++ b/tests/flows/teleporter/insufficient_gas.go
@@ -36,7 +36,9 @@ func InsufficientGas(network *localnetwork.LocalNetwork, teleporter utils.Telepo
// Send message from L1A to L1B with 0 execution gas, which should fail to execute
message := "Hello, world!"
optsA, err := bind.NewKeyedTransactorWithChainID(
- fundedKey, l1AInfo.EVMChainID)
+ fundedKey,
+ l1AInfo.EVMChainID,
+ )
Expect(err).Should(BeNil())
tx, err := l1ATestMessenger.SendMessage(
optsA, l1BInfo.BlockchainID, testMessengerContractB, fundedAddress, big.NewInt(0), big.NewInt(0), message,
@@ -58,7 +60,7 @@ func InsufficientGas(network *localnetwork.LocalNetwork, teleporter utils.Telepo
aggregator := network.GetSignatureAggregator()
defer aggregator.Shutdown()
- // Relay message from SubnetA to SubnetB
+ // Relay message from L1 A to L1 B
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
diff --git a/tests/flows/teleporter/registry/pause_teleporter.go b/tests/flows/teleporter/registry/pause_teleporter.go
index 22679303e..470fc2fcd 100644
--- a/tests/flows/teleporter/registry/pause_teleporter.go
+++ b/tests/flows/teleporter/registry/pause_teleporter.go
@@ -55,7 +55,7 @@ func PauseTeleporter(network *localnetwork.LocalNetwork, teleporter utils.Telepo
aggregator := network.GetSignatureAggregator()
defer aggregator.Shutdown()
- // Send a message from subnet A to subnet B, which should fail
+ // Send a message from L1 A to L1 B, which should fail
teleporter.SendExampleCrossChainMessageAndVerify(
ctx,
l1AInfo,
@@ -82,7 +82,7 @@ func PauseTeleporter(network *localnetwork.LocalNetwork, teleporter utils.Telepo
Expect(err).Should(BeNil())
Expect(isPaused).Should(BeFalse())
- // Send a message from subnet A to subnet B again, which should now succeed
+ // Send a message from L1 A to L1 B again, which should now succeed
teleporter.SendExampleCrossChainMessageAndVerify(
ctx,
l1AInfo,
diff --git a/tests/flows/teleporter/registry/teleporter_registry.go b/tests/flows/teleporter/registry/teleporter_registry.go
index bd9cb4b2d..c4b815db0 100644
--- a/tests/flows/teleporter/registry/teleporter_registry.go
+++ b/tests/flows/teleporter/registry/teleporter_registry.go
@@ -90,7 +90,7 @@ func TeleporterRegistry(network *localnetwork.LocalNetwork, teleporter utils.Tel
aggregator := network.GetSignatureAggregator()
defer aggregator.Shutdown()
- // Call addProtocolVersion on subnetB to register the new Teleporter version
+ // Call addProtocolVersion on L1 B to register the new Teleporter version
teleporter.AddProtocolVersionAndWaitForAcceptance(
ctx,
l1BInfo,
diff --git a/tests/flows/teleporter/send_specific_receipts.go b/tests/flows/teleporter/send_specific_receipts.go
index f9b0b5085..a56688aea 100644
--- a/tests/flows/teleporter/send_specific_receipts.go
+++ b/tests/flows/teleporter/send_specific_receipts.go
@@ -30,7 +30,7 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
aggregator := network.GetSignatureAggregator()
defer aggregator.Shutdown()
- // Clear the receipt queue from Subnet B -> Subnet A to have a clean slate for the test flow.
+ // Clear the receipt queue from L1 B -> L1 A to have a clean slate for the test flow.
teleporter.ClearReceiptQueue(ctx, fundedKey, l1BInfo, l1AInfo, aggregator)
// Use mock token as the fee token
@@ -120,7 +120,7 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
Expect(delivered).Should(BeTrue())
// Call send specific receipts to get reward of relaying two messages
- goLog.Println("Sending specific receipts from Subnet B to Subnet A")
+ goLog.Println("Sending specific receipts from L1 B to L1 A")
receipt, messageID := utils.SendSpecifiedReceiptsAndWaitForAcceptance(
ctx,
l1BTeleporterMessenger,
@@ -135,8 +135,8 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
fundedKey,
)
- // Relay message from Subnet B to Subnet A
- goLog.Println("Relaying the specific receipts from Subnet B to Subnet A")
+ // Relay message from L1 B to L1 A
+ goLog.Println("Relaying the specific receipts from L1 B to L1 A")
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
@@ -184,13 +184,13 @@ func SendSpecificReceipts(network *localnetwork.LocalNetwork, teleporter utils.T
Message: []byte{1, 2, 3, 4},
}
- goLog.Println("Sending a message from Subnet B to Subnet A to trigger receipts")
+ goLog.Println("Sending a message from L1 B to L1 A to trigger receipts")
// This message will also have the same receipts as the previous message
receipt, messageID = utils.SendCrossChainMessageAndWaitForAcceptance(
ctx, l1BTeleporterMessenger, l1BInfo, l1AInfo, sendCrossChainMessageInput, fundedKey)
goLog.Println("Relaying the message from L1 B to L1 A")
- // Relay message from Subnet B to Subnet A
+ // Relay message from L1 B to L1 A
receipt = teleporter.RelayTeleporterMessage(
ctx,
receipt,
diff --git a/tests/interfaces/subnet_test_info.go b/tests/interfaces/subnet_test_info.go
index 184637a13..cac949ccc 100644
--- a/tests/interfaces/subnet_test_info.go
+++ b/tests/interfaces/subnet_test_info.go
@@ -7,7 +7,7 @@ import (
"github.com/ava-labs/subnet-evm/ethclient"
)
-// Tracks information about a test subnet used for executing tests against.
+// Tracks information about a test L1 used for executing tests against.
type L1TestInfo struct {
L1ID ids.ID
BlockchainID ids.ID
diff --git a/tests/suites/teleporter/teleporter_suite_test.go b/tests/suites/teleporter/teleporter_suite_test.go
index 35fd31b47..c0ac711ca 100644
--- a/tests/suites/teleporter/teleporter_suite_test.go
+++ b/tests/suites/teleporter/teleporter_suite_test.go
@@ -114,7 +114,8 @@ var _ = ginkgo.BeforeSuite(func() {
utils.PoAValidatorManager,
[]uint64{units.Schmeckle, units.Schmeckle, units.Schmeckle, units.Schmeckle, units.Schmeckle},
fundedKey,
- false)
+ false,
+ )
}
log.Info("Set up ginkgo before suite")
diff --git a/tests/utils/teleporter.go b/tests/utils/teleporter.go
index 5ca244a9c..071be6365 100644
--- a/tests/utils/teleporter.go
+++ b/tests/utils/teleporter.go
@@ -210,7 +210,7 @@ func (t TeleporterTestInfo) SendExampleCrossChainMessageAndVerify(
signatureAggregator *aggregator.SignatureAggregator,
expectSuccess bool,
) {
- // Call the example messenger contract on Subnet A
+ // Call the example messenger contract on L1 A
optsA, err := bind.NewKeyedTransactorWithChainID(senderKey, source.EVMChainID)
Expect(err).Should(BeNil())
tx, err := sourceExampleMessenger.SendMessage(
@@ -337,9 +337,9 @@ func (t TeleporterTestInfo) ClearReceiptQueue(
)
for outstandReceiptCount.Cmp(big.NewInt(0)) != 0 {
log.Info("Emptying receipt queue", "remainingReceipts", outstandReceiptCount.String())
- // Send message from Subnet B to Subnet A to trigger the "regular" method of delivering receipts.
+ // Send message from L1 B to L1 A to trigger the "regular" method of delivering receipts.
// The next message from B->A will contain the same receipts that were manually sent in the above steps,
- // but they should not be processed again on Subnet A.
+ // but they should not be processed again on L1 A.
sendCrossChainMessageInput := teleportermessenger.TeleporterMessageInput{
DestinationBlockchainID: destination.BlockchainID,
DestinationAddress: common.HexToAddress("0x1111111111111111111111111111111111111111"),